Как подтянуть комплектующие набора в Заказ на производство в 1С:УПП 1.3

Программист 1С v8.3 (Обычные формы) Управленческий учет Промышленность, строительство и АПК
← На главную

В типовой конфигурации 1С:УПП 1.3 (Управление производственным предприятием) пользователи часто сталкиваются с логическим тупиком: при продаже используется номенклатура с видом Набор-комплект, но когда дело доходит до производства, система «отказывается» видеть состав этого набора. В этой статье мы подробно разберем, почему так происходит, и проанализируем все возможные способы решения данной задачи — от штатных настроек до технических доработок кода.

Разбор проблемы: Наборы vs Спецификации

Для начала выясним причину, по которой стандартный Заказ на производство не заполняет вкладку «Материалы» при выборе изделия, являющегося набором. В 1С:УПП реализовано строгое разделение логики:

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

Таким образом, прямой связи между «составом набора» и «потребностью производства» в типовом коде нет. Рассмотрим подробнее, как мы можем обойти это ограничение.

Вариант 1. Использование документа «Комплектация номенклатуры»

Проанализируем ситуацию: если ваша производственная деятельность сводится к простой сборке (скрутили несколько деталей вместе), возможно, вам вообще не нужен Заказ на производство.

В УПП существует документ Комплектация номенклатуры. Рассмотрим его преимущества:

Минус этого подхода: Комплектация не участвует в полноценном производственном планировании. Вы не сможете рассчитать по ней трудозатраты, зарплату сотрудников или распределить косвенные расходы через Расчет себестоимости выпуска.

Вариант 2. Создание дублирующих спецификаций (Без программирования)

Самый надежный способ заставить Заказ на производство работать штатно — это создать для каждой номенклатуры-набора соответствующую Спецификацию.

Разберем по шагам, как упростить этот процесс:

  1. Если позиций немного, проще один раз вручную перенести состав из набора в спецификацию.
  2. Если позиций сотни, можно воспользоваться типовой обработкой «Конструктор спецификаций» или написать простой скрипт, который переберет справочник Номенклатура, найдет наборы и программно создаст для них спецификации.

После создания спецификации Заказ на производство начнет «подтягивать» материалы автоматически при выборе основной спецификации в строке заказа.

Вариант 3. Техническая доработка (Создание внешней обработки заполнения)

Если спецификации создавать нельзя (например, состав набора постоянно меняется менеджерами в заказе), необходимо «пилить нетленку». Самый безопасный и современный способ — создание внешней обработки заполнения табличных частей для документа Заказ на производство.

Выясним логику работы такой обработки. Она должна:

  1. Прочитать ссылку на Заказ покупателя из шапки или строк Заказа на производство.
  2. Найти в заказе покупателя номенклатуру.
  3. Обратиться к регистру сведений СоставНаборовНоменклатуры.
  4. Очистить или дополнить вкладку «Материалы» в производственном заказе.

Рассмотрим пример кода, который может быть использован в такой обработке для получения состава набора:


// Пример получения состава набора программно
Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	СоставНаборов.Комплектующая КАК Номенклатура,
    |	СоставНаборов.Количество КАК Количество
    |ИЗ
    |	РегистрСведений.СоставНаборовНоменклатуры КАК СоставНаборов
    |ГДЕ
    |	СоставНаборов.Номенклатура = &НоменклатураНабор";

Запрос.УстановитьПараметр("НоменклатураНабор", СтрокаПроизводства.Номенклатура);
РезультатЗапроса = Запрос.Выполнить().Выбрать();

Пока РезультатЗапроса.Следующий() Цикл
    НоваяСтрока = ДокументОбъект.Материалы.Добавить();
    НоваяСтрока.Номенклатура = РезультатЗапроса.Номенклатура;
    НоваяСтрока.Количество = РезультатЗапроса.Количество * СтрокаПроизводства.Количество;
    // Не забываем про единицы измерения и спецификации комплектующих
КонецЦикла;

Вариант 4. Модификация процедуры «ОбработкаЗаполнения»

Если вы готовы к изменению конфигурации (снятию с поддержки), проанализируем самый «чистый» с точки зрения пользователя путь — внедрение логики в сам документ Заказ на производство.

В модуле объекта документа найдем процедуру ОбработкаЗаполнения. Нам нужно добавить условие: если при вводе на основании Заказа покупателя в строке оказывается номенклатура-набор, мы не игнорируем её (как делает типовой код), а разворачиваем её состав в таблицу «Материалы».

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

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

Подведем итог нашему анализу:

Помните, что 1С:УПП — система со строгой методологией. Любое нарушение цепочки «Продукция -> Спецификация -> Материалы» может привести к трудностям при расчете себестоимости, поэтому даже при программной доработке старайтесь сохранять логическую целостность данных.

← На главную