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