Как программно реализовать автоматическое заполнение серий в документе «Этап производства» 1С:ERP

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

Автоматизация заполнения серий в документе Этап производства — это сложная задача, требующая глубокого понимания внутренних механизмов 1С:ERP. Часто возникает ситуация, когда внешняя обработка (например, для взвешивания или сканирования штрихкодов) должна корректно заполнить серии, чтобы пользователь мог перевести этап в статус Завершен. Без правильно указанных серий система заблокирует проведение документа, выдавая ошибки заполнения на вкладках Обеспечение и Расход.

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

Анализ структуры данных и статусов указания серий

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

  1. Справочное указание серий: статусы 1, 2, 21. Здесь серии не влияют на остатки, они фиксируются только для информации.
  2. Учет остатков по факту: статусы 3, 4, 23. Серии указываются в момент фактического движения товара.
  3. Планирование по FEFO: статусы 5, 6, 25. Система сама предлагает серии с ближайшим сроком годности (используется чаще в отгрузках).
  4. Планирование отбора: статусы 7, 8, 27.
  5. Полный учет (остатки + движения): статусы 9, 10, 11.
  6. Учет себестоимости: статусы 13, 14, 15. Самый строгий вариант, где серия напрямую влияет на финансовый результат.

Важное правило: если значение статуса четное (2, 4, 6...), это означает, что серии заполнены корректно и их количество совпадает с количеством товара в строке. Если значение нечетное — требуется внимание пользователя (серии не указаны или указаны не полностью).

Определение необходимости указания серий

Перед тем как пытаться заполнить серию, мы должны выяснить, а нужно ли это для конкретной номенклатуры в данном контексте (склад, подразделение, операция). Разберем, как это сделать программно. Не стоит писать свои запросы к настройкам политики серий, лучше воспользоваться типовым программным интерфейсом.

Рассмотрим использование функции НоменклатураСервер.УказыватьСерии. Она возвращает структуру, которая скажет нам, включен ли серийный учет. Пример логики проверки:


ПараметрыУказания = НоменклатураСервер.ПараметрыУказанияСерий(СтрокаДокумента.Номенклатура, СкладИлиПодразделение);
НужноУказывать = НоменклатураСервер.УказыватьСерии(ПараметрыУказания, СценарийРаботы);

Если НужноУказывать Тогда
    // Переходим к алгоритму подбора серий
КонецЕсли;

В документе Этап производства важно разделять две ситуации: расход материалов (где серии должны быть на складе) и выпуск продукции (где серии могут генерироваться новые).

Алгоритм автоматического подбора серий по остаткам

Для вкладки Обеспечение (когда материалы отгружаются со склада) нам необходимо найти свободные остатки серий. Проанализируем, как использовать типовой механизм 1С:ERP для автоматического распределения.

В системе существует общий модуль ЗаполнениеСерийВызовСервера, методы которого позволяют инициировать подбор. Однако для «тихого» заполнения без открытия форм выбора мы рекомендуем следующий алгоритм:

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

Рассмотрим пример кода, который подготавливает данные для заполнения:


// Пример заполнения связи между ТЧ "Обеспечение" и ТЧ "Серии"
НоваяСерия = Объект.Серии.Добавить();
НоваяСерия.КлючСвязи = СтрокаМатериал.КлючСвязи;
НоваяСерия.Серия = НайденнаяСерияИзОстатков;
НоваяСерия.Количество = СтрокаМатериал.Количество;

Интеграция с обработкой «ПодборСерийВДокументы»

Как заметили участники обсуждения, существует типовая форма ПодборСерийВДокументы. Если ваша задача позволяет показать окно пользователю, то это самый надежный путь, так как форма учитывает все отборы, сроки годности и политики. Вызвать её можно через НоменклатураКлиент.ОткрытьФормуВыбораСерий.

Однако, если мы реализуем полностью автоматический режим (например, при сканировании штрихкода на весах), нам нужно эмулировать работу этой формы. Для этого изучим модуль менеджера документа ЭтапПроизводства2_2. В нем содержатся процедуры проверки статусов. Обратите внимание, что при записи документа система вызывает проверку заполнения серий, основываясь на тех самых числовых статусах.

Особенности заполнения серий при выпуске продукции

Проанализируем ситуацию с выпуском (вкладка Выходные изделия). В отличие от материалов, здесь серии часто создаются впервые. Если политика учета подразумевает справочное указание, мы можем генерировать номер серии программно:


Функция СгенерироватьНовуюСерию(Номенклатура)
    НоваяСерияОбъект = Справочники.СерииНоменклатуры.СоздатьЭлемент();
    НоваяСерияОбъект.Владелец = Номенклатура;
    НоваяСерияОбъект.Номер = ПолучитьСледующийНомерПоШаблону();
    НоваяСерияОбъект.Записать();
    Возврат НоваяСерияОбъект.Ссылка;
КонецФункции

Важно помнить, что если в политике указано Учет себестоимости, то просто создать серию недостаточно — она должна пройти по всей цепочке партионного учета.

Резюме и практические советы

Подведем итог нашего исследования. Для успешной автоматизации заполнения серий в Этапе производства придерживайтесь следующих шагов:

Изучение модулей НоменклатураКлиентСервер и ЗаполнениеСерийВызовСервера позволит вам избежать написания избыточного кода и использовать надежные механизмы, заложенные разработчиками фирмы 1С.

← На главную