Как исправить ошибку «поле вариант приемки товаров не заполнено» при проведении перемещения в 1С:УТ 11?

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

При работе в конфигурации «1С:Управление торговлей» редакции 11 (а также в «1С:Комплексная автоматизация» и «1С:ERP») пользователи и разработчики могут столкнуться с ситуацией, когда документ ПеремещениеТоваров отказывается проводиться. Программа выдает ошибку проверки заполнения: «Поле "Вариант приемки товаров" не заполнено». При этом визуально на форме документа все видимые реквизиты и табличные части заполнены корректно.

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

Почему возникает ошибка проверки заполнения

Проанализируем структуру метаданных документа ПеремещениеТоваров в конфигураторе. В составе реквизитов шапки присутствует служебный реквизит ВариантПриемкиТоваров, имеющий тип ссылки на перечисление ВариантыПриемкиТоваров (например, со значениями РазделенаТолькоПоНакладным, РазделенаПоНакладнымИРаспоряжениям и др.). Для этого реквизита на уровне объекта установлено свойство проверки заполнения «Выдавать ошибку».

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

  1. Перенос данных из предыдущих версий: при миграции документов (например, из «1С:Управление торговлей 10.3» в УТ 11 через механизмы КД 2.0 / КД 3.0) реквизиты загружаются напрямую в объект без вызова процедур формы. Если в правилах обмена не было предусмотрено заполнение поля ВариантПриемкиТоваров, оно остается пустым.
  2. Программное создание документов: при формировании документов через сторонние обработки, интеграции по API или внешние сервисы без явного указания значения служебных реквизитов.
  3. Сбои или незавершенные процедуры обновления: если переход между релизами конфигурации был выполнен некорректно и фоновые обработчики обновления данных не успели инициализировать новые поля в существующих документах.

Способ 1. Массовое исправление существующих документов в режиме «1С:Предприятие»

Если документы уже загружены в базу и их требуется оперативно провести без изменения программного кода, воспользуемся типовой обработкой группового изменения данных. Разберем по шагам порядок действий:

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

Способ 2. Корректировка правил конвертации данных (КД 2.0 / КД 3.0)

Рассмотрим, как устранить причину ошибки на этапе переноса данных, чтобы вновь загружаемые документы не требовали ручной корректировки. В конфигурации «Конвертация данных» в правиле конвертации объекта (ПКО) ПеремещениеТоваров необходимо настроить инициализацию поля ВариантПриемкиТоваров.

Для этого в обработчик события ПослеЗагрузки или ПередЗаписью добавим проверку заполнения реквизита:


Если Не ЗначениеЗаполнено(Объект.ВариантПриемкиТоваров) Тогда
    Объект.ВариантПриемкиТоваров = Перечисления.ВариантыПриемкиТоваров.РазделенаТолькоПоНакладным;
КонецЕсли;

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

Способ 3. Корректное заполнение при программном создании документа

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


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

// Обязательное заполнение служебного реквизита приемки
НовыйДокумент.ВариантПриемкиТоваров = Перечисления.ВариантыПриемкиТоваров.РазделенаТолькоПоНакладным;

// Заполнение табличной части и последующая запись
НовыйДокумент.Записать(РежимЗаписиДокумента.Проведение);

Способ 4. Проверка результатов обновления информационной базы

Если ошибка возникает в базе, которая недавно обновлялась с более ранних релизов УТ 11, проверим состояние фоновых обработчиков обновления. Перейдем в раздел НСИ и администрирование → Обслуживание → Результаты обновления программы и убедимся, что все дополнительные процедуры обработки данных завершены успешно и нет зависших или аварийно завершенных заданий.

← На главную