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