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