Задача прослеживаемости (traceability) является одной из самых сложных и востребованных в автоматизации производства. Нам необходимо знать не просто общее количество списанного сырья, а четко понимать генеалогию продукта: из какой конкретно партии сырья был сделан полуфабрикат, и в какую партию готовой продукции этот полуфабрикат в итоге попал. Это критически важно для контроля качества, работы с рекламациями и соблюдения требований законодательства (ХАССП, Честный ЗНАК, Меркурий).
Рассмотрим подробнее основные алгоритмы и методики реализации этой задачи в среде 1С, проанализируем сильные и слабые стороны каждого подхода и разберем сопутствующие технические нюансы.
В типовых конфигурациях (УПП, ERP, КА) основным инструментом прослеживаемости являются Серии. Разберем, как это работает на практике. Серия — это не просто номер, это дополнительное измерение учета. Для каждого вида номенклатуры (сырье, полуфабрикат, продукция) настраивается политика учета серий.
Алгоритм работы:
ПриходнаяНакладная (или ПриобретениеТоваровУслуг) регистрируется новая серия. В нее можно записать номер сертификата, дату производства и срок годности.ТребованиеНакладная кладовщик обязан указать конкретную серию, которая физически выдается со склада.ОтчетПроизводстваЗаСмену) для выпускаемого полуфабриката также генерируется новая серия. В этом же документе указывается связь: на выпуск Серии ПФ-001 пошло сырье Серии С-100.Проанализируем ситуацию: серия выступает в роли «контейнера», который связывает движения на каждом переделе. Главный плюс этого метода — наличие готовых отчетов типа «Дерево серий» или «Структура серии» в типовых решениях. Однако, как отмечают участники обсуждения, это требует жесткой дисциплины от персонала: нельзя просто списать остаток, нужно выбрать именно ту серию, которую взял рабочий.
Интересный и эффективный метод, предложенный в сообщении 26, — использование сквозного разреза через все документы. Если производство работает под конкретные заказы клиентов, то документ ЗаявкаПокупателя (или ЗаказНаПроизводство) становится тем самым «шампуром», на который нанизываются все операции.
Реализация по шагам:
Заказ.Заказ 1.Заказ 1.Выясним причину популярности этого метода: он позволяет видеть всю цепочку в типовом отчете «Структура подчиненности» или через простой фильтр в регистрах. Но у него есть существенное ограничение: он плохо работает в поточном производстве, где из одного замеса (одной партии сырья) делается продукция для десяти разных заказчиков.
Если в вашей конфигурации (как у автора темы) нет механизма серий, можно реализовать собственный регистр накопления или добавить измерение Партия в существующие регистры. Под партией в данном случае понимается ссылка на документ поступления или специально созданный элемент справочника Партии.
Разберем пример реализации связи при переделах:
При выпуске продукции нам необходимо зафиксировать связь «Вход-Выход». Технически это можно сделать через создание вспомогательного регистра сведений СвязиПартийПроизводства.
// Пример логики при проведении выпуска
Запись = РегистрыСведений.СвязиПартийПроизводства.СоздатьМенеджерЗаписи();
Запись.Период = ДатаДокумента;
Запись.ПартияВыход = НоваяПартияПФ; // Ссылка на созданную партию полуфабриката
Запись.ПартияВход = ПартияСырья; // Серия/партия списанного сырья
Запись.Количество = КоличествоСписанногоСырья;
Запись.Записать();
Посмотрим на результат: имея такую таблицу связей, мы можем построить рекурсивный отчет, который «размотает» дерево продукции до самого первого прихода от поставщика.
Любой самый совершенный алгоритм в 1С разобьется о «человеческий фактор», если склад и цех будут работать по бумажкам. Проанализируем решение проблемы достоверности данных. Единственный надежный способ — это штрихкодирование каждой единицы (или паллеты/замеса) сырья и полуфабриката.
Это исключает ситуацию, когда в программе списана «Партия №1», а физически в чан засыпали «Партию №2».
Рассмотрим сложную ситуацию, упомянутую в сообщении 48: производство из многих ингредиентов или смешивание партий. Например, когда в один бункер досыпают зерно из разных поставок. В этом случае строгая цепочка «один к одному» рвется.
Как это решается в автоматизации:
Для построения отчета «Готовая продукция –> Сырье» (сверху вниз) или «Сырье –> Готовая продукция» (снизу вверх) лучше всего использовать рекурсивный обход графа. Если данных очень много, расчет «на лету» по регистрам бухгалтерии или себестоимости будет медленным. Рекомендуем создать отдельный «теневой» регистр, где связи между партиями будут фиксироваться в момент проведения документов выпуска. Это позволит мгновенно получать ответ на вопрос: «В какие коробки попало зараженное молоко из партии А?».
Важный совет: Не пытайтесь внедрить все и сразу. Начните с организационного этапа — заставьте людей маркировать сырье на входе. Без этого любая программная реализация в 1С останется лишь красивой, но бесполезной теорией.