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