Как в 1С:ERP 2 получить список заказов, которые не отгружены или отгружены частично

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

При работе в 1С:ERP Управление предприятием 2 часто возникает необходимость оперативного контроля выполнения заказов клиентов. Одной из типовых задач является получение списка документов, по которым отгрузка либо еще не начиналась, либо выполнена не в полном объеме. В этой статье мы подробно разберем, где именно в системе хранятся данные о дефиците отгрузки и как правильно составить запрос для получения этой информации.

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

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

Рассмотрим структуру этого регистра. В нем есть несколько ключевых ресурсов, которые нам помогут:

  1. Заказано — общее количество номенклатуры, указанное в заказе.
  2. К оформлению — количество, на которое еще не оформлены финансовые документы (накладные «Реализация товаров и услуг»).
  3. К отгрузке — количество, которое еще не ушло со склада физически (актуально для складов с ордерной схемой).

Выясним причину, почему важно различать эти ресурсы. Если ваша задача — найти заказы, по которым не выписаны накладные, мы анализируем КОформлению. Если же нужно понять, что не уехало со склада (хотя накладные могут быть уже выписаны), то следует смотреть остатки по ресурсу КОтгрузке или обращаться к специализированному регистру ТоварыКОтгрузке.

Метод 1: Использование запроса к остаткам регистра «Заказы клиентов»

Рассмотрим самый надежный способ получения данных — обращение к виртуальной таблице остатков. Проанализируем ситуацию: если остаток по ресурсу КОформлению больше нуля, значит, заказ еще не закрыт финансовыми документами полностью.

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


ВЫБРАТЬ
    ЗаказыКлиентовОстатки.ЗаказКлиента КАК Заказ,
    ЗаказыКлиентовОстатки.Номенклатура КАК Номенклатура,
    ЗаказыКлиентовОстатки.Характеристика КАК Характеристика,
    ЗаказыКлиентовОстатки.ЗаказаноОстаток КАК ОсталосьОтгрузить
ИЗ
    РегистрНакопления.ЗаказыКлиентов.Остатки(&Период, ) КАК ЗаказыКлиентовОстатки
ГДЕ
    ЗаказыКлиентовОстатки.КОформлениюОстаток > 0

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

Метод 2: Фильтрация по состояниям заказов

В системе ERP реализован механизм кэширования состояний документов. Выясним, как это работает. За это отвечает регистр сведений СостоянияЗаказовКлиентов. Система сама рассчитывает статус (например, «В процессе отгрузки» или «Готов к отгрузке») и записывает его в этот регистр.

Разберем, как можно быстро получить список заказов, не погружаясь в расчеты количественных остатков. Мы можем выбрать все заказы, состояние которых не равно «Закрыт» или «Готов к закрытию».


ВЫБРАТЬ
    СостоянияЗаказовКлиентов.Заказ КАК ЗаказКлиента,
    СостоянияЗаказовКлиентов.Состояние КАК ТекущееСостояние
ИЗ
    РегистрСведений.СостоянияЗаказовКлиентов КАК СостоянияЗаказовКлиентов
ГДЕ
    НЕ СостоянияЗаказовКлиентов.Состояние В (ЗНАЧЕНИЕ(Перечисление.СостоянияЗаказовКлиентов.Закрыт), 
                                           ЗНАЧЕНИЕ(Перечисление.СостоянияЗаказовКлиентов.ГотовКЗакрытию))

Этот способ работает быстрее всего, однако он менее точен, если вам нужны конкретные цифры недопоставки по каждой позиции номенклатуры.

Метод 3: Учет ордерной схемы (регистр «Товары к отгрузке»)

Проанализируем ситуацию, когда в компании используется ордерный склад. В этом случае документ «Реализация товаров и услуг» может быть уже проведен (финансово товар списан), но кладовщик еще не выписал «Расходный ордер на товары» (физически товар на складе). В такой ситуации регистр ЗаказыКлиентов покажет, что все отгружено, хотя фактически это не так. Для оперативного контроля физической отгрузки подойдёт рабочее место кладовщика для ордерного склада.

В этом случае нам поможет регистр ТоварыКОтгрузке. Посмотрим на пример логики:


ВЫБРАТЬ
    ТоварыКОтгрузкеОстатки.ДокументОтгрузки КАК Заказ,
    ТоварыКОтгрузкеОстатки.Номенклатура КАК Номенклатура,
    ТоварыКОтгрузкеОстатки.КОтгрузкеОстаток КАК ФизическийОстатокНаСкладе
ИЗ
    РегистрНакопления.ТоварыКОтгрузке.Остатки КАК ТоварыКОтгрузкеОстатки
ГДЕ
    ТоварыКОтгрузкеОстатки.КОтгрузкеОстаток > 0

Тонкости и подводные камни: Закрытые заказы и единицы измерения

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

  1. Отмененные строки: Если в заказе по некоторым строкам была отменена поставка (установлен флаг «Отменено»), то в регистрах остатков по этим строкам не будет. Однако с точки зрения бизнеса — это тоже «неотгруженный» товар. Чтобы найти такие случаи, нужно анализировать табличную часть Товары самого документа ЗаказКлиента.
  2. Микро-остатки: Из-за особенностей ведения учета в мерных единицах измерения (кг, литры, метры кубические) в базе могут зависать остатки типа 0.000001. Чтобы они не попадали в отчет, всегда добавляйте условие минимального порога, например: ГДЕ КОформлениюОстаток > 0.001.
  3. Регистр «Распределение запасов»: В современных версиях ERP (2.5 и выше) для более глубокого анализа обеспечения лучше использовать регистр Распределение запасов. Он позволяет увидеть не только то, что не отгружено, но и причину: товар в резерве, ожидается к поступлению или вовсе не обеспечен.

Итоговый алгоритм решения задачи

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

1. Соединяем виртуальную таблицу ЗаказыКлиентов.Остатки с основной таблицей документа ЗаказКлиента.

2. Устанавливаем фильтр по статусу заказа (исключаем «Закрыт» и «Формируется»).

3. Если важна работа склада — добавляем левое соединение с остатками регистра ТоварыКОтгрузке.

4. В итоговой выборке сравниваем ресурс Заказано из документа с остатком в регистре, чтобы вычислить процент выполнения заказа.

Такой комплексный подход позволит вам не просто вывести список «зависших» заказов, но и предоставить пользователю детальную расшифровку: на каком этапе произошла задержка — на этапе оформления документов или на этапе физической отгрузки со склада. В качестве готового решения можно использовать отчет для анализа выполнения и отгрузки заказов клиентов.

← На главную