Разузлование номенклатуры — это одна из ключевых задач в конфигурации "Управление производственным предприятием" (УПП). Этот процесс позволяет получить полный список комплектующих, из которых состоит готовое изделие, основываясь на данных спецификаций. В УПП для этих целей предусмотрен мощный механизм, сосредоточенный в общем модуле РазузлованиеНоменклатуры. Однако при работе с ним разработчики часто сталкиваются с ситуацией, когда функция возвращает пустой результат, даже если спецификации в системе заведены корректно. Разберем пошагово, как правильно подготовить параметры и избежать типичных ошибок.
Для вызова метода РазузлованиеНоменклатуры.РазузловатьНоменклатуру нам необходимо подготовить специальную структуру, которую мы назовем СтруктураИсточник. Эта структура описывает объект, который мы хотим «разложить» на составляющие. Проанализируем состав полей этой структуры:
Неопределено, алгоритм разузлования не сможет рассчитать потребность в материалах и вернет пустой результат.Рассмотрим пример инициализации структуры в коде:
СтруктураИсточник = Новый Структура("Номенклатура, ХарактеристикаНоменклатуры, ЕдиницаИзмерения, Коэффициент, Количество, Спецификация");
СтруктураИсточник.Номенклатура = ВыбраннаяНоменклатура;
СтруктураИсточник.ХарактеристикаНоменклатуры = ВыбраннаяХарактеристика;
СтруктураИсточник.ЕдиницаИзмерения = ВыбраннаяНоменклатура.ЕдиницаХраненияОстатков;
СтруктураИсточник.Коэффициент = 1;
СтруктураИсточник.Количество = 1; // Обязательно должно быть заполнено числом!
СтруктураИсточник.Спецификация = ВыбраннаяСпецификация;
Помимо данных об изделии, нам нужно передать параметры самого процесса разузлования. Самый важный параметр здесь — КоличествоУровнейРазузлования. Рассмотрим, как он влияет на результат:
Также важно подготовить структуру для приема результата. Нам потребуются поля ИсходныеКомплектующие (для получения плоского списка) или ПолноеРазузлование (для иерархии).
Параметры = Новый Структура("КоличествоУровнейРазузлования", 0);
РезультатРазузлования = Новый Структура;
РезультатРазузлования.Вставить("ПолноеРазузлование", Неопределено);
РезультатРазузлования.Вставить("ИсходныеКомплектующие", Неопределено);
После подготовки всех структур мы вызываем функцию общего модуля. Обратите внимание, что результат выполнения функции часто возвращается не в переменную-возврат, а непосредственно в переданную структуру РезультатРазузлования.
РазузлованиеНоменклатуры.РазузловатьНоменклатуру(СтруктураИсточник, РезультатРазузлования, Параметры);
// Данные будут находиться здесь:
ТаблицаРезультата = РезультатРазузлования.ПолноеРазузлование;
Если ТаблицаРезультата <> Неопределено Тогда
Для Каждого СтрокаРезультата Из ТаблицаРезультата Цикл
// Обработка полученных комплектующих
Сообщить("Материал: " + СтрокаРезультата.Номенклатура + " Кол-во: " + СтрокаРезультата.Количество);
КонецЦикла;
КонецЕсли;
Выясним причины, по которым даже при правильном коде массив может оставаться пустым. Если вы убедились, что Количество заполнено, проверьте следующие моменты:
Подводя итог, можно сказать, что механизм разузлования в УПП крайне чувствителен к полноте передаваемых данных. Всегда проверяйте, чтобы в СтруктураИсточник были заполнены все ключевые поля, а спецификации в справочнике имели статус "Утверждена".