Как реализовать вложенность наборов номенклатуры в 1С:ERP

Бизнес-аналитик 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием Управленческий учет Торговля и дистрибуция
← На главную

В процессе работы с торговым и складским функционалом 1С:ERP Управление предприятием (а также в 1С:УТ 11 и КА 2) пользователи часто сталкиваются с необходимостью создания сложных структур товаров. Типичный пример: вы хотите создать один маркетинговый набор, который в свою очередь должен содержать другой, уже существующий набор. Однако при попытке добавить Номенклатуру с типом Набор в состав другого набора, список выбора оказывается пустым. Рассмотрим, почему так происходит, и разберем способы решения этой задачи.

Анализируем причину ограничения

Для начала выясним причину, по которой система блокирует вложенность наборов. В архитектуре 1С тип номенклатуры Набор — это «виртуальный» объект. Он не хранится на складе как отдельная единица и не требует документа сборки. В момент подбора в «Заказ клиента» или «Реализацию товаров и услуг», Набор динамически «рассыпается» на составляющие его комплектующие.

Проанализируем технические сложности, которые возникли бы при разрешении вложенности:

  1. Расчет цен и скидок: Система должна была бы рекурсивно вычислять стоимость каждого вложенного уровня, распределять общую скидку на набор между всеми деталями всех уровней. Это критически усложняет алгоритмы и снижает производительность.
  2. Контроль остатков: Проверка доступности набора верхнего уровня требовала бы каскадной проверки всех вложенных элементов, что могло бы привести к блокировкам таблиц при массовых продажах.
  3. Печатные формы: Формирование первичных документов (ТОРГ-12, УПД) требует вывода конкретных товаров. Многоуровневая структура наборов сделала бы логику вывода номенклатуры непредсказуемой для стандартных алгоритмов.

Именно поэтому в форме выбора состава набора установлен жесткий фильтр: система отображает только номенклатуру с типом Товар, Работа или Услуга.

Различие между Набором и Комплектом

Прежде чем переходить к решениям, давайте четко разделим два понятия, которые часто путают начинающие пользователи и аналитики. Понимание этой разницы — ключ к правильной настройке системы.

Набор (динамический состав): - Не имеет остатка на складе. - Состав определяется в карточке номенклатуры. - В документах продажи может отображаться как одной строкой, так и списком комплектующих (зависит от настройки Вариант вывода в печатные формы). - Цена может устанавливаться на весь набор или суммироваться из цен комплектующих.

Комплект (результат сборки/производства): - Имеет собственный остаток на складе. - Требует оформления документа Сборка (разборка) товаров или выпуска через производство. - В иерархии комплектов вложенность разрешена без ограничений. Вы можете выпустить «Комплект А», в состав которого входит «Комплект Б», который уже лежит на складе.

Способ 1: Линейное развертывание (Декомпозиция)

Если ваша задача — исключительно маркетинговая (продать группу товаров под одним наименованием), и вы не планируете предварительно собирать их на складе, используйте метод линейного развертывания. Это стандартный и наиболее безопасный путь в 1С:ERP.

Разберем этот процесс по шагам:

  1. Откройте карточку основного набора (верхнего уровня).
  2. Перейдите к настройке состава набора.
  3. Вместо попытки добавить вложенный набор, добавьте в список все конечные товары, которые входят во вложенный набор.
  4. Если вам важно визуально выделить, что эти товары относятся к определенной подгруппе, используйте поле Содержание или добавьте текстовые пояснения в наименование комплектующих.

Пример: Вместо структуры «Подарочный набор -> Набор чая -> Чай черный», создайте плоскую структуру «Подарочный набор -> Чай черный, Чай зеленый, Кружка».

Способ 2: Использование спецификаций и производства

Если структура «набор в наборе» принципиально важна для отражения производственного или складского процесса, необходимо сменить тип номенклатуры с Набор на Товар и использовать механизмы обеспечения.

Рассмотрим, как настроить иерархию через спецификации:

  1. Для каждой единицы (и для верхнего уровня, и для вложенных) создайте карточку номенклатуры с типом Товар.
  2. Для каждого такого товара создайте Ресурсную спецификацию (в блоке Производство) или Вариант комплектации (в блоке Склад).
  3. В спецификации изделия верхнего уровня укажите в качестве комплектующего изделие нижнего уровня.
  4. Установите способ обеспечения «Производство» или «Сборка/Разборка».

В этом случае система позволит вам построить дерево любой глубины. При оформлении заказа система увидит потребность в конечном изделии и предложит «развернуть» цепочку до самых базовых материалов или полуфабрикатов.

Способ 3: Программная доработка (для программистов)

Если бизнес-процесс категорически требует именно механизм наборов (например, для сложного динамического ценообразования в рознице), можно прибегнуть к расширению конфигурации. Рассмотрим основные точки внимания при такой разработке.

Во-первых, необходимо снять ограничение в форме выбора. За это отвечает процедура, устанавливающая параметры выбора для поля Номенклатура в табличной части состава набора. Вам потребуется найти место, где накладывается фильтр по типу номенклатуры:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // Пример логики снятия фильтра в расширении
    ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТипНоменклатуры");
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
    СписокЗначенийТипов = Новый СписокЗначений;
    СписокЗначенийТипов.Добавить(ПредопределенноеЗначение("Перечисление.ТипыНоменклатуры.Товар"));
    СписокЗначенийТипов.Добавить(ПредопределенноеЗначение("Перечисление.ТипыНоменклатуры.Набор"));
    ЭлементОтбора.ПравоеЗначение = СписокЗначенийТипов;
КонецПроцедуры

Важно: Просто снять фильтр недостаточно. После этого вам придется переписать логику обработки табличных частей во всех документах продажи. Проанализируем, что нужно изменить: необходимо внедрить рекурсивную функцию, которая при добавлении набора будет проверять, нет ли внутри него других наборов, и «раскрывать» их до тех пор, пока в списке не останутся только реальные товары. Без этой доработки документы будут выдавать ошибки при проведении и расчете себестоимости.

Рекомендации по ценообразованию

При использовании наборов (даже линейных) важно правильно выбрать способ распределения цены. Рассмотрим доступные варианты в 1С:ERP:

Выясним, почему вложенность усложняет этот процесс: если бы у вас был «Набор 1» ценой 1000 рублей, содержащий «Набор 2», цена которого тоже должна как-то распределяться, возникла бы математическая неопределенность при попытке применить скидку только к одному компоненту «Набора 2». Используя линейную структуру, вы избегаете этих коллизий, так как все доли распределяются в рамках одного уровня.

Подведем итоги

Мы выяснили, что штатный функционал 1С:ERP не поддерживает вложенные наборы для сохранения стабильности расчетов. Если вам необходимо реализовать подобную логику, выберите один из проверенных путей:

  1. Для маркетинга: используйте линейный список всех товаров в одном наборе.
  2. Для складского учета: используйте Варианты комплектации или Спецификации с типом номенклатуры Товар.
  3. Для автоматизации: внедрите расширение, которое будет рекурсивно разворачивать структуру при заполнении документов.

Помните, что архитектурные решения 1С часто направлены на предотвращение ошибок учета, поэтому использование стандартного механизма линейных наборов — это наиболее надежный способ ведения базы данных.

← На главную