Как автоматизировать изменение статусов заказов и их закрытие в 1С:Управление торговлей 11 и 1С:ERP

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

Автоматизация жизненного цикла заказа клиента — одна из приоритетных задач для снижения нагрузки на менеджеров по продажам. В типовых конфигурациях, таких как 1С:Управление торговлей (ред. 11) и 1С:ERP, заложена мощная логика управления статусами, однако её автоматическое срабатывание часто вызывает вопросы у пользователей и разработчиков. В этой статье мы подробно разберем, как настроить систему так, чтобы заказы переходили в статус «К выполнению» и «Закрыт» без лишних кликов мышкой.

Различие между «Статусом» и «Состоянием» заказа

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

  1. Статус — это физический реквизит документа. Он записывается в базу данных и напрямую влияет на движения по регистрам накопления (резервирование товара, планирование поступлений). Примеры: Не согласован, Согласован, К выполнению, Закрыт.
  2. Состояние — это расчетная величина. Она не хранится в документе, а вычисляется системой «на лету» в момент открытия списка заказов или формы документа — есть готовый инструмент анализа состояния обеспечения заказов в УТ 11.5/ERP. Состояние анализирует остатки по регистрам и оплаты. Примеры: Готов к отгрузке, Ожидается оплата, В процессе отгрузки.

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

Типовой механизм: Регламентное задание «Закрытие заказов»

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

Выясним, как это активировать:

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

Это задание анализирует все заказы, по которым фактическая отгрузка и оплата соответствуют 100%. Если условия соблюдены, робот сам проставит статус Закрыт и снимет неиспользованные резервы. Разберем по шагам, почему это может не сработать: если в настройках системы стоят флаги «Не закрывать частично отгруженные заказы» или «Не закрывать частично оплаченные заказы», система будет строго проверять полное соответствие копейка в копейку и единица в единицу.

Автоматический перевод в статус «К выполнению» при оплате

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

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

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


Процедура ПриПроведенииПосле(Источник, Отказ, РежимПроведения)
    // Получаем список заказов из табличной части "Расшифровка платежа"
    Для Каждого СтрокаТЧ Из Источник.РасшифровкаПлатежа Цикл
        Если ТипЗнч(СтрокаТЧ.Заказ) = Тип("ДокументСсылка.ЗаказКлиента") Тогда
            ЗаказОбъект = СтрокаТЧ.Заказ.ПолучитьОбъект();
            // Проверяем текущий статус и условия оплаты
            Если ЗаказОбъект.Статус = Перечисления.СтатусыЗаказовКлиентов.Согласован Тогда
                // Вызываем типовую процедуру расчета состояния оплаты
                ДанныеОплаты = ПродажиСервис.ДанныеОбОплатеЗаказа(ЗаказОбъект.Ссылка);
                Если ДанныеОплаты.ПроцентОплаты >= 100 Тогда
                    ЗаказОбъект.Статус = Перечисления.СтатусыЗаказовКлиентов.КВыполнению;
                    ЗаказОбъект.Записать(РежимЗаписиДокумента.Запись);
                КонецЕсли;
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

Важный нюанс: при автоматическом изменении статуса программным кодом, нужно учитывать объектные блокировки. Если менеджер в этот момент открыл заказ и редактирует его, ваш код может вызвать ошибку «Объект заблокирован». Рекомендуется использовать конструкцию Попытка...Исключение или проверять блокировку методом Заблокирован().

Влияние ордерного склада на статусы

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

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

Особенности контроля оплаты по графикам

Если в вашей системе настроена детализация расчетов «По договорам», автоматизация статуса конкретного заказа становится на порядок сложнее. Выясним причину: при такой настройке платеж «падает» на общий баланс договора, и система распределяет его по заказам по принципу ФИФО только при закрытии месяца или выполнении фонового задания распределения расчетов. Для корректной работы автоматики рекомендуется использовать детализацию «По заказам».

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

Использование «Помощника закрытия заказов»

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

Подведем итог: для полноценной автоматизации мы рекомендуем комбинировать типовое регламентное задание для закрытия и небольшое расширение для перевода в статус «К выполнению» по факту оплаты. Это обеспечит оперативность данных и чистоту в учете без избыточной нагрузки на систему.

← На главную