Почему при вводе счета на оплату возникает ошибка статуса заказа клиента и как ее исправить?

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

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

«Документ Заказ клиента находится в статусе "". Ввод на основании разрешен только в статусе "На согласовании"».

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

Причины возникновения проблемы

Проанализируем архитектуру подсистемы продаж в 1С:ERP. Появление статуса в виде пустой строки "" и блокировка сопутствующих элементов управления связаны со следующими моментами:

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

Способ 1. Исправление кода программного создания заказа

Если заказы загружаются из внешних источников (интернет-магазина, CRM-систем, Excel-файлов или по API), разработчику необходимо обеспечить корректную инициализацию объекта в коде.

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


НовыйЗаказ = Документы.ЗаказКлиента.СоздатьДокумент();

// Вызываем типовой метод заполнения значений по умолчанию
НовыйЗаказ.Заполнить(Неопределено);

// Явно устанавливаем необходимый статус заказа
НовыйЗаказ.Статус = Перечисления.СтатусыЗаказовКлиентов.НаСогласовании;

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

НовыйЗаказ.Записать(РежимЗаписиДокумента.Запись);

Обратите внимание: если в компании согласование не используется, но требуется дальнейшая работа с обеспечением и отгрузкой, документу можно сразу присвоить статус Перечисления.СтатусыЗаказовКлиентов.КВыполнению (в зависимости от настроенных правил).

Способ 2. Исправление ранее созданных документов в базе

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

  1. Перейдем в раздел НСИ и администрирование → Обслуживание → Корректировка данных.
  2. Откроем обработку Групповое изменение реквизитов.
  3. В поле выбора элементов укажем документ Заказ клиента.
  4. С помощью кнопки Добавить условие отбора установим фильтр: Статус Не заполнено.
  5. В таблице реквизитов найдем строку Статус, установим флаг изменения и выберем требуемое значение, например, На согласовании или К выполнению.
  6. Нажмем кнопку Изменить реквизиты.

Способ 3. Проверка и включение функциональных опций системы

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

Выполним следующие шаги настройки:

  1. Активация бизнес-процессов: перейдем в раздел НСИ и администрирование → Администрирование → Органайзер. Установим флаг Бизнес-процессы и задачи. Без этого чекбокс согласования в продажах останется заблокированным серым цветом.
  2. Включение статусов заказов: перейдем в раздел НСИ и администрирование → Настройка НСИ и разделов → Продажи → Оптовые продажи. В группе Использование заказов переключим вариант с упрощенного режима «Заказ как счет» на расширенный — Заказ только со склада или Заказ со склада и под заказ. Это автоматически установит константу ИспользоватьРасширенныеВозможностиЗаказаКлиента в значение Истина, и поле Статус появится в шапке документа.
  3. Включение согласования: в этой же форме настроек продаж станет доступен флаг Согласование заказов клиентов, который теперь можно активировать.

Альтернативный вариант работы без отдельного документа счета

Проанализируем еще одну возможность типового решения. Если на предприятии не требуется формировать отдельный документ Счет на оплату клиенту как самостоятельный объект базы данных с отдельным проведением, создавать его не обязательно.

В конфигурации 1С:ERP при использовании варианта «Заказ как счет» печатная форма счета на оплату формируется непосредственно из самого документа Заказ клиента по кнопке Печать → Счет на оплату. Это упрощает документооборот, исключает дублирование сущностей в информационной базе и предотвращает ошибки, связанные с контролем промежуточных статусов.

← На главную