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