Почему в «1С:УПП» при вводе «Заказа на производство» на основании не учитывается резервирование полуфабрикатов и как это решить?

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

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

Выясним причину такого поведения системы и разберем практические способы решения этой проблемы.

Причина поведения алгоритма в 1С:УПП 1.3

Проанализируем, как работает типовой механизм ввода на основании в конфигурации. В УПП 1.3 стандартный обработчик заполнения документа ЗаказНаПроизводство считывает данные напрямую из табличной части Материалы документа-основания (по позициям, имеющим вид воспроизводства «Производство»).

Важно понимать следующие особенности архитектуры:

По этой причине резервирование и размещение в 1С:УПП рассматриваются алгоритмом как намерение обеспеченности, а не как фактическое уменьшение нормативной потребности в полуфабрикатах.

Практические варианты решения задачи

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

Способ 1. Использование отчета «Анализ заказа на производство» и ручная корректировка

Если объем номенклатуры небольшой, можно применить стандартный отчетный механизм для определения реального дефицита:

  1. Перед формированием подзаказа формируем отчет Анализ заказа на производство по исходному заказу.
  2. Отчет показывает общую потребность в полуфабрикатах, зарезервированные объемы и итоговый дефицит.
  3. Создаем документ Заказ на производство на основании исходного заказа.
  4. В созданном документе вручную скорректируем количество полуфабрикатов в табличной части до величины реального дефицита.

Способ 2. Использование обработки «Помощник планирования»

Для многопередельного производства прямое создание цепочки заказов «ввод на основании» не всегда оптимально. Рекомендуется использовать специальный инструмент управления потребностями:

  1. Откроем обработку Помощник планирования.
  2. Настроим стратегию расчета потребностей так, чтобы она учитывала текущие свободные остатки на складах, ранее сформированные заказы и зарезервированные ТМЦ.
  3. Сформируем заказы на производство через помощник — в этом случае документы создадутся исключительно на чистый дефицит.

Способ 3. Оптимизация процесса передачи в цех без лишнего резервирования

Проанализируем процесс управления запасами. Если полуфабрикаты уже есть на складе в свободном остатке и готовы к сборке/обработке, их резервирование под заказ на складе может создавать лишние документальные задержки:

Способ 4. Программная доработка обработчика заполнения

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

Рассмотрим примерную логику доработки запроса при заполнении документа ЗаказНаПроизводство по основанию:


// В обработчике ЗаполнитьПоЗаказуНаПроизводство(ДокументОснование)
// К исходному запросу по ТЧ "Материалы" добавляем левое соединение 
// с остатками по регистру "ТоварыВРезервеНаСкладах"

Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	ЗаказМатериалы.Номенклатура КАК Номенклатура,
    |	ЗаказМатериалы.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
    |	ЗаказМатериалы.Количество - ЕСТЬНУЛЛ(Резервы.КоличествоОстаток, 0) КАК КоличествоКЗаказу
    |ИЗ
    |	Документ.ЗаказНаПроизводство.Материалы КАК ЗаказМатериалы
    |	ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(
    |		&Период,
    |		ДокументРезерва = &ДокументОснование) КАК Резервы
    |	ПО ЗаказМатериалы.Номенклатура = Резервы.Номенклатура
    |	И ЗаказМатериалы.ХарактеристикаНоменклатуры = Резервы.ХарактеристикаНоменклатуры
    |ГДЕ
    |	ЗаказМатериалы.Ссылка = &ДокументОснование
    |	И ЗаказМатериалы.ВидВоспроизводства = ЗНАЧЕНИЕ(Перечисление.ВидыВоспроизводстваНоменклатуры.Производство)";

Запрос.УстановитьПараметр("ДокументОснование", Основание);
Запрос.УстановитьПараметр("Период", Новый Граница(МоментВремени(), ВидГраницы.Включая));

РезультатЗапроса = Запрос.Выполнить().Выгрузить();

// Заполняем ТЧ создаваемого документа только позициями с КоличествоКЗаказу > 0
Для Каждого Стр Из РезультатЗапроса Цикл
    Если Стр.КоличествоКЗаказу > 0 Тогда
        // Заполнение строки документа
    КонецЕсли;
КонецЦикла;

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

← На главную