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