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