При оформлении оптовых продаж в 1С:ERP Управление предприятием пользователи и разработчики нередко сталкиваются с ситуацией, когда при попытке ввести документ Счет на оплату клиенту на основании документа Заказ клиента система выдает ошибку:
«Документ Заказ клиента находится в статусе "". Ввод на основании разрешен только в статусе "На согласовании"».
При этом на форме самого заказа реквизит статуса может полностью отсутствовать, а опция согласования в настройках программы оказывается заблокированной. Разберем по шагам, почему возникает данная коллизия в типовой конфигурации и какими способами ее решить.
Проанализируем архитектуру подсистемы продаж в 1С:ERP. Появление статуса в виде пустой строки "" и блокировка сопутствующих элементов управления связаны со следующими моментами:
Заказ клиента создается через встроенный язык с помощью вызова Документы.ЗаказКлиента.СоздатьДокумент(), логика формы не срабатывает. Реквизит Статус остается равным пустой ссылке перечисления (Перечисления.СтатусыЗаказовКлиентов.ПустаяСсылка()). При попытке ввода на основании типовой алгоритм проверяет соответствие статуса разрешенным значениям и формирует отказ.ИспользоватьРасширенныеВозможностиЗаказаКлиента автоматически принимает значение Ложь. В этом сценарии статусы заказов не используются, а поле Статус скрывается с формы.Если заказы загружаются из внешних источников (интернет-магазина, CRM-систем, Excel-файлов или по API), разработчику необходимо обеспечить корректную инициализацию объекта в коде.
Рассмотрим правильный пример инициализации и заполнения статуса при создании нового заказа клиента:
НовыйЗаказ = Документы.ЗаказКлиента.СоздатьДокумент();
// Вызываем типовой метод заполнения значений по умолчанию
НовыйЗаказ.Заполнить(Неопределено);
// Явно устанавливаем необходимый статус заказа
НовыйЗаказ.Статус = Перечисления.СтатусыЗаказовКлиентов.НаСогласовании;
// Заполняем обязательные реквизиты
НовыйЗаказ.Дата = ТекущаяДатаСеанса();
НовыйЗаказ.Организация = Справочники.Организации.НайтиПоРеквизиту("ИНН", "7701234567");
НовыйЗаказ.Партнер = ВыбранныйПартнер;
НовыйЗаказ.Контрагент = ВыбранныйКонтрагент;
НовыйЗаказ.Соглашение = ВыбранноеСоглашение;
НовыйЗаказ.Склад = ВыбранныйСклад;
НовыйЗаказ.Записать(РежимЗаписиДокумента.Запись);
Обратите внимание: если в компании согласование не используется, но требуется дальнейшая работа с обеспечением и отгрузкой, документу можно сразу присвоить статус Перечисления.СтатусыЗаказовКлиентов.КВыполнению (в зависимости от настроенных правил).
Для документов, которые уже были записаны в базу с пустым статусом, интерактивный ввод на основании работать не будет. Чтобы не открывать каждый документ вручную, применим групповую обработку:
Статус Не заполнено.Разберем, как сделать поле Статус видимым на форме документа и включить возможность согласования заказов через интерфейс программы.
Выполним следующие шаги настройки:
ИспользоватьРасширенныеВозможностиЗаказаКлиента в значение Истина, и поле Статус появится в шапке документа.Проанализируем еще одну возможность типового решения. Если на предприятии не требуется формировать отдельный документ Счет на оплату клиенту как самостоятельный объект базы данных с отдельным проведением, создавать его не обязательно.
В конфигурации 1С:ERP при использовании варианта «Заказ как счет» печатная форма счета на оплату формируется непосредственно из самого документа Заказ клиента по кнопке Печать → Счет на оплату. Это упрощает документооборот, исключает дублирование сущностей в информационной базе и предотвращает ошибки, связанные с контролем промежуточных статусов.