← На главную
При работе с производственными конфигурациями 1С часто возникает задача получить полный развернутый состав готовой продукции с учетом всех вложенных полуфабрикатов и узлов. Этот процесс в терминах 1С называется разузлованием номенклатуры. Рассмотрим подробно основные способы решения этой задачи, особенности применения алгоритмов и технические нюансы, которые следует учитывать при разработке.
Способ 1. Использование рекурсивной функции
Классическим алгоритмическим решением для обхода дерева спецификаций любой глубины является рекурсия. При рекурсивном подходе функция вызывает сама себя для каждого найденного вложенного узла, имеющего собственную спецификацию.
Разберем базовую логику работы рекурсивного алгоритма:
- Передаем в функцию исходную номенклатуру, ее спецификацию и требуемое количество.
- Считываем состав спецификации (комплектующие, исходные материалы и полуфабрикаты).
- Для каждого элемента состава рассчитываем необходимое количество с учетом коэффициентов и единиц измерения.
- Проверяем, есть ли у текущей комплектующей своя действующая спецификация. Если есть, функция вызывает саму себя для этого полуфабриката. Если спецификации нет, элемент считается конечным материалом и добавляется в итоговый массив или таблицу.
Способ 2. Использование типовых функций и обработок (на примере 1С:УПП)
В типовых решениях (например, в конфигурации «Управление производственным предприятием») уже реализованы готовые сервисные механизмы для полного разузлования составов изделий. Нет необходимости писать алгоритмы с нуля, если можно подсмотреть или переиспользовать существующий код.
Проанализируем доступные средства в 1С:УПП:
- Общий модуль
РазузлованиеНоменклатуры: В этом модуле представлена экспортируемая функция РазузловатьНоменклатуру(). Она позволяет получить полную структурированную потребность в исходных материалах с учетом всех уровней вложенности, дат действия спецификаций и технологических параметров.
- Обработка
Конструктор спецификаций: Данный инструмент предназначен для визуального анализа структуры изделия. Из этой обработки можно не только посмотреть полное дерево вложенности элементов, но и распечатать иерархическую схему спецификации.
Способ 3. Построение дерева спецификаций в СКД (без написания кода)
Если задача заключается исключительно в формировании отчета с иерархическим представлением состава номенклатуры, разузлование можно реализовать средствами Системы компоновки данных (СКД).
Рассмотрим, как настроить отчет в СКД:
- Создаем набор данных (запрос), который выбирает номенклатуру, ее комплектующие и соответствующие спецификации из справочника или регистра.
- На вкладке «Связи наборов данных» настраиваем связь набора данных самого с собой.
- В качестве источника указываем комплектующую, а в качестве приемника — родительскую номенклатуру.
- Платформа 1С автоматически выстроит многоуровневое дерево любой глубины при формировании отчета без применения программных циклов и рекурсивного кода.
Важные риски и особенности разузлования
При реализации собственного алгоритма разузлования спецификаций проанализируем технические ограничения и возможные проблемы, с которыми можно столкнуться:
- Зацикливание (циклические ссылки): Если номенклатура А входит в состав номенклатуры Б, а Б включена в состав А, программный код уйдет в бесконечный цикл. Обязательно добавляйте проверку уже пройденных узлов (например, через массив обработанных спецификаций) или ограничивайте максимальную глубину погружения.
- Превышение предельной глубины рекурсии: При слишком глубокой вложенности вызов рекурсивных функций может привести к критической ошибке платформы «Превышен предел рекурсии».
- Учет дат действия и статусов: Спецификации могут иметь ограниченный период действия и статусы (например, «Утверждена» или «Действует»). При получении состава важно отбирать только актуальные на расчетную дату записи.
- Расчет количества и коэффициентов: На каждом уровне вложенности необходимо перемножать количество входящих узлов на количество родительского изделия, с учетом кратности и коэффициентов пересчета единиц измерения.