Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
27 окт 2024, 18:24

Реквизит номенклатуры АВС

Автор c_andrey, 28 сен 2015, 11:50

0 Пользователей и 1 гость просматривают эту тему.

c_andrey

Добрый день.
1С 8.2 УТ обычный интерфейс.
Есть отчет анализ АВС самописный (Номенклатуры).
Он дает результат отчетом напротив каждой номенклатуры-группа (А..В...или С).
Необходимо после отчета который выведен на экране занести соответствующей номенклатуре класс А..В или С.
Делал так.
После нажатия кнопки такой код

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.АВС
|ИЗ
| Справочник.Номенклатура КАК Номенклатура";

Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл

    Для Каждого СтрокаТаблицы из мСписокОбъектов Цикл
Если СтрокаТаблицы.Номенклатура = Неопределено Тогда
Продолжить;
КонецЕсли;
    КонецЦикла;

    Если Выборка.АВС <>СтрокаТаблицы.Класс Тогда
АВС= СтрокаТаблицы.Класс
Иначе

Конецесли;

Попытка
КонтрагентОбъект = Выборка.Ссылка.ПолучитьОбъект();   
КонтрагентОбъект.АВС = СтрокаТаблицы.Класс;
КонтрагентОбъект.Записать();
Исключение

КонецПопытки;

КонецЦикла;


Проблема
1) В том что долго думает при нажатии кнопки.
2) Назначает всей номенклатуре класс "С" который стоит последний в таблице(при сформированном отчете).
3) Если выбрана одна номенклатура в отчете (Отбором). То всей номенклатуре в справочние (номенклатуры) присваивается этот клас "В" например.

Подскажите где ошибка в коде.
Спасибо.

cska-fanat-kz

обычно для заполнения применяют обработку а не отчет.
отчет только отображает какие то данные.
в итоге что нужно:
    а. результат расчета класса номенклатуры вывести не в табдок (читай отчет), а в табличное поле на форму
    б. после чего обойти табличное поле и заполнить соответствующие элементы справочника Номенклатура
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

c_andrey

Спасибо Вам cska-fanat-kz за подсказку.
Как Вы видите Ваш  код. В условии обработки. Напишите пожалуйста.

cska-fanat-kz

зависит еще от того как вы данные получите...
если в виде:
    Номенклатура / Класс

то код по обходу - примитивный
Для каждого СтрокаТЧ Из СписокНоменклатуры Цикл
    НомОбъект = СтрокаТЧ.Номенклатура.ПолучитьОбъект();
    НомОбъект.ABC = СтрокаТЧ.Класс;
    НомОбъект.Записать();
КонецЦикла;
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

c_andrey

Применил Ваш код.

Считает как мой код. Может...не что то делаю..
???
Если можно напишите полностью код как он должен выглядеть..(В отчете или обработке)
Спасибо

cska-fanat-kz

а я откуда знаю, как вы классификацию вычисляете???!!! :trhregerhg:
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

c_andrey

расчет колонка Класс
ВЫБОР
    КОГДА Сумма(КоличествоОборот)/Максимум(Период) < &КлассС ТОГДА "С"
    ИНАЧЕ ВЫБОР
    КОГДА Сумма(КоличествоОборот)/Максимум(Период) < &КлассВ ТОГДА "В"
    ИНАЧЕ "А"
   КОНЕЦ
   КОНЕЦ   
   

cska-fanat-kz

Вот и получите запросом таблицу с 2умя колонками: Номенклатура и Класс.
Выгружайте ее на форму, а далее - см. выше.
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

c_andrey

Ок. Спасибо так и делаю)))

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск