Как в 1С:ERP 2.4 найти все этапы производства, связанные с конкретной строкой заказа?

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

В процессе работы с 1С:ERP Управление предприятием 2.4 (и более новыми версиями) часто возникает задача точной идентификации этапов производства, порожденных конкретной строкой заказа. Типовой сценарий: пользователь отменяет одну позицию в многострочном заказе, и системе необходимо автоматически найти и пометить на удаление (или скорректировать) соответствующие Этапы производства. Сложность заключается в том, что система может объединять («схлопывать») одинаковые позиции в один этап, а прямая ссылка на номер строки в документах часто отсутствует или не является надежной.

В этой статье мы подробно разберем, как реализована связь между распоряжением и исполнением, проанализируем технические нюансы и рассмотрим программные способы получения нужных данных.

Механизм связи через «Назначение» и обособление

Самый надежный способ связать строку заказа и этап — это использование механизма обособления. Разберем, как это работает. Если в заказе на производство для строки продукции включено обособленное обеспечение (например, под направление деятельности или конкретный заказ), система создает уникальный объект в справочнике Назначения.

Проанализируем преимущества этого подхода:

  1. В табличной части Продукция документа Заказ на производство для каждой строки фиксируется свое Назначение.
  2. При формировании этапов это же Назначение транслируется в соответствующий реквизит документа Этап производства.
  3. Даже если у вас есть две одинаковые номенклатурные позиции с одинаковыми спецификациями, но разными назначениями, 1С:ERP не станет объединять их в один этап.

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

Связь через уникальные идентификаторы и ключи связи

Если обособление не используется, нам придется обратиться к более глубоким техническим реквизитам. Рассмотрим структуру табличных частей. В современных версиях ERP для строк используется скрытый реквизит ИдентификаторСтроки (тип УникальныйИдентификатор). Также существует числовой КлючСвязи.

Проанализируем ситуацию, когда нам нужно программно найти связь:

В табличной части Продукция заказа на производство КлючСвязи позволяет сопоставить основную строку с данными в других табличных частях (например, если используются параметрические спецификации). При генерации этапов через Управление очередью заказов система анализирует эти ключи. Чтобы найти связь, мы можем заглянуть в служебные регистры.

Рассмотрим использование регистра накопления График производства. Именно в нем фиксируются потребности, созданные заказом, и их обеспечение конкретными этапами. Запрос к этому регистру по регистратору (Заказу) позволит увидеть, какие этапы были сформированы для закрытия потребности конкретной номенклатуры.

Проблема объединения («слипания») этапов

Важно понимать, что в 1С:ERP по умолчанию включена оптимизация производства. Рассмотрим настройки системы: в разделе НСИ и администрирование — Производство существуют опции, определяющие способ формирования этапов. Если система настроена на объединение одинаковых позиций, то одна строка этапа может обеспечивать сразу несколько строк заказа.

Выясним причину, почему это происходит: это делается для минимизации количества документов и оптимизации работы производственных цехов. Если в заказе есть две строки «Болт» по 50 штук, системе проще выпустить один этап на 100 штук.

В этом случае получить «чистую» связь «одна строка — один этап» невозможно. Нам придется анализировать общее количество:

  1. Находим все этапы, где Распоряжение равно нашему заказу, а Номенклатура и Характеристика совпадают с данными в строке.
  2. Проверяем спецификацию. В документе Этап производства есть реквизит Спецификация, который должен совпадать со спецификацией в строке заказа.
  3. Если найденный этап покрывает несколько строк, то при отмене одной строки заказа мы не можем просто удалить этап — нам нужно уменьшить его количество на значение из отменяемой строки.

Программный поиск этапов через запрос

Посмотрим на пример того, как может выглядеть запрос для получения этапов по конкретной номенклатуре из заказа, учитывая возможные дубли строк. Проанализируем следующий код:


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	ЭтапПроизводства.Ссылка КАК Этап,
    |	ЭтапПроизводства.Количество КАК КоличествоВЭтапе
    |ИЗ
    |	Документ.ЭтапПроизводства КАК ЭтапПроизводства
    |ГДЕ
    |	ЭтапПроизводства.Распоряжение = &Заказ
    |	И ЭтапПроизводства.Номенклатура = &Номенклатура
    |	И ЭтапПроизводства.Характеристика = &Характеристика
    |	И ЭтапПроизводства.Спецификация = &Спецификация
    |	И НЕ ЭтапПроизводства.ПометкаУдаления";

Запрос.УстановитьПараметр("Заказ", СсылкаНаЗаказ);
Запрос.УстановитьПараметр("Номенклатура", СтрокаЗаказа.Номенклатура);
Запрос.УстановитьПараметр("Характеристика", СтрокаЗаказа.Характеристика);
Запрос.УстановитьПараметр("Спецификация", СтрокаЗаказа.Спецификация);

Результат = Запрос.Выполнить();

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

Использование внутреннего API системы

Разберем еще один продвинутый метод. В конфигурации ERP существуют общие модули, отвечающие за расчет графика и визуализацию дерева производства. Например, функции, вызываемые из формы Диспетчирование заказов.

Проанализируем процедуру ЗаполнитьДеревоЭтапов. Внутри она оперирует временными таблицами, в которых сопоставляются идентификаторы строк заказа и конкретные номера этапов. Если ваша задача — создать сложную обработку, мы рекомендуем изучить логику работы модуля УправлениеПроизводствомГрафикПроизводства. Там можно найти механизмы, которые 1С использует для построения иерархии «Заказ — Этап — Субэтап».

Рекомендации по реализации отмены выпуска

Если ваша цель — пометить этапы на удаление при установке признака Отменено в строке заказа, рекомендуем придерживаться следующего алгоритма:

  1. Проверка статуса: Прежде чем удалять этап, убедитесь, что он не находится в статусе Начато или Завершено. Если по этапу уже есть фактические затраты или выпуск, удалять его нельзя — потребуется ручная корректировка.
  2. Анализ вхождений: Если один этап создан под несколько строк (количество в этапе > количества в строке), программно уменьшайте количество в этапе.
  3. Использование транзакций: Все действия по изменению связанных этапов выполняйте в одной транзакции с сохранением заказа, чтобы избежать рассинхронизации данных.
  4. Обновление графика: После программного изменения или удаления этапов обязательно инициируйте пересчет графика производства для данного заказа, чтобы актуализировать данные в регистрах накопления График производства и Обеспечение заказов.

Подводя итог, можно сказать, что прямой и простой связи «индекс строки — ссылка на этап» в типовой поставке 1С:ERP 2.4 без включенного обособления не существует. Однако, используя комбинацию Номенклатура + Характеристика + Спецификация + Назначение, можно с высокой точностью идентифицировать нужные документы и автоматизировать рутинные операции по управлению очередью производства.

← На главную