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