Как связать заказ клиента с выпущенной продукцией и получить серии в 1С:ERP?

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

Разберем ситуацию, с которой часто сталкиваются разработчики при работе с конфигурацией 1С:ERP (на примере версий 2.4 и старше). Допустим, у нас есть заказ клиента, на основании которого мы создаем заказ на производство, затем оформляем этапы производства и передачу выпущенной продукции. Наша задача — имея только ссылку на заказ клиента, правильно получить произведенную продукцию и ее конкретные серии.

Анализ классической, но неоптимальной схемы

Часто программисты пытаются решить эту задачу путем связывания цепочки документов через реквизит ДокументОснование или Распоряжение. Проанализируем пример такого запроса, который выглядит громоздко и ненадежно:


ВЫБРАТЬ
    ЗаказНаПроизводство2_2.Ссылка КАК Заказ,
    ЭтапПроизводства2_2.Ссылка КАК Этап,
    ДвижениеПродукцииИМатериалов.Ссылка КАК Выпуск
ИЗ
    Документ.ЗаказНаПроизводство2_2 КАК ЗаказНаПроизводство2_2
ЛЕВОЕ СОЕДИНЕНИЕ 
    Документ.ЭтапПроизводства2_2 КАК ЭтапПроизводства2_2
    ПО (ЭтапПроизводства2_2.Распоряжение = ЗаказНаПроизводство2_2.Ссылка)
    И (ЭтапПроизводства2_2.Проведен)
ЛЕВОЕ СОЕДИНЕНИЕ 
    Документ.ДвижениеПродукцииИМатериалов КАК ДвижениеПродукцииИМатериалов
    ПО (ДвижениеПродукцииИМатериалов.Распоряжение = ЭтапПроизводства2_2.Ссылка)
    И (ДвижениеПродукцииИМатериалов.ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ПередачаПродукцииИзПроизводства))
    И (ДвижениеПродукцииИМатериалов.Проведен)

Посмотрим на этот запрос внимательнее. Такая схема считается «кривой», потому что документы могут перепроводиться, цепочки могут рваться, а распоряжения в табличных частях могут быть не заполнены. Более того, выборка данных по регистрам документов работает медленно и не отражает реальных складских остатков и зарезервированных серий.

Правильный подход: механизм обособленного обеспечения и назначений

Чтобы уйти от соединения таблиц документов, рассмотрим использование стандартного механизма 1С:ERP — обособленного обеспечения. В документах производственного и складского учета существует реквизит Назначение. Если он заполнен, система автоматически резервирует выпущенную продукцию (и её серии) под конкретный заказ клиента.

Разберем по шагам, как заставить систему заполнять это поле:

  1. Перейдем в раздел НСИ и администрирование, выберем Склад и доставка. Убедимся, что включена опция Обособленное обеспечение заказов.
  2. В документе ЗаказКлиента для тех строк товаров, которые планируется произвести, в колонке Действие установим статус Обеспечивать обособленно (или К обеспечению - обособленно).
  3. При создании документа ЗаказНаПроизводство на основании такого заказа клиента, 1С автоматически сгенерирует элемент справочника Назначения. Объектом этого назначения будет выступать наш ЗаказКлиента.
  4. Далее во всех документах производственной цепочки (Этапы производства, Передача продукции) колонка Назначение будет заполняться автоматически.

Получение серий произведенной продукции из регистров

Выясним, как теперь получить нужные данные простым и быстрым запросом. Поскольку производство прошло по назначению, выпущенная продукция вместе с её серией попадает не в свободный остаток, а в жесткий резерв. Мы можем обратиться напрямую к складским регистрам накопления, например, ТоварыНаСкладах (или ТоварыВЯчейках при адресном хранении).

Рассмотрим логику запроса:


ВЫБРАТЬ
    ТоварыНаСкладахОстатки.Номенклатура,
    ТоварыНаСкладахОстатки.Серия,
    ТоварыНаСкладахОстатки.ВНаличииОстаток КАК Количество
ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки(
        &Период,
        Назначение.Заказ = &ЗаказКлиента
    ) КАК ТоварыНаСкладахОстатки

Этот подход работает мгновенно и гарантированно возвращает именно те серии, которые были произведены под указанный ЗаказКлиента. Главное условие — в Политике учета серий для склада и вида номенклатуры должно быть включено управление остатками серий, чтобы система делала движения по регистрам в их разрезе.

Что делать, если продукция уже выпущена без назначения?

Проанализируем ситуацию, когда документы производства уже закрыты, а колонка Назначение осталась пустой. Это означает, что продукция произведена в «свободный остаток». Если мы все равно хотим привязать эти серии к заказу клиента, нам поможет складской документ КорректировкаНазначенияТоваров.

Этот документ позволяет:

  1. Взять конкретные произведенные серии товара из свободного остатка.
  2. Резервировать их под обособленное назначение (наш заказ клиента).

После проведения документа корректировки, движения в регистре ТоварыНаСкладах обновятся, и серии надежно свяжутся с заказом, позволяя нашему оптимизированному запросу корректно отработать.

← На главную