При проведении документа «Возврат товаров от покупателя» в типовой конфигурации «1С:Бухгалтерия предприятия 3.0» (а также в решениях на её базе, например, с установленным модулем «БИТ.Финанс») пользователи и администраторы иногда сталкиваются с критической ошибкой выполнения кода:
ОбщийМодуль.УчетТоваров.Модуль(1722)}: Значение не является значением объектного типа (Метаданные)
МетаданныеСделки = Реквизиты.Сделка.Метаданные();
При этом вновь создаваемые документы проведения выполняются штатно, тогда как в ранее загруженных или исторических документах проводки отсутствуют, и документ отказывается проводиться. Проанализируем техническую причину сбоя и разберем по шагам доступные варианты решения задачи.
Проанализируем механику работы платформы 1С:Предприятие при обращении к объекту метаданных. Метод .Метаданные() можно вызывать только для объектовых типов и ссылок (например, конкретная ссылка на документ или пустая ссылка определенного типа). Если же значением переменной или реквизита является Неопределено или Null, платформа выдает фатальное исключение «Значение не является значением объектного типа».
В документе «Возврат товаров от покупателя» реквизит Сделка (в интерфейсе может наноситься как «Документ отгрузки») отвечает за связь возврата с исходной реализацией. Данная ошибка возникает в следующих случаях:
Сделка получило тип Неопределено вместо типизированной пустой ссылки ДокументСсылка.РеализацияТоваровУслуг.Разберем наиболее корректный с точки зрения бухгалтерского и партионного учета способ. Если реальный документ продажи присутствует в информационной базе 1С, его необходимо явно привязать к возврату.
Реализация товаров и услуг, по которому производилась отгрузка возвращаемой продукции.Важное примечание: Заполнение реальной сделки крайне важно для правильного списания себестоимости, восстановления партий и корректного формирования записей по НДС в книге покупок или книге продаж.
Рассмотрим ситуацию, когда реализация происходила в прошлых годах, данные по реализации отсутствуют в текущей базе или остатки были введены документом «Ввод начальных остатков». В таком случае привязать реальный документ реализации невозможно.
В обычной конфигурации 1С:Бухгалтерия проведение возврата без основания разрешено, но код проверки метаданных требует, чтобы реквизит Сделка имел тип пустой ссылки, а не Неопределено. От пустой ссылки метод .Метаданные() срабатывает корректно и возвращает метаданные объекта Документ.РеализацияТоваровИУслуг.
Для массовой исправления исторических документов выполним специальный алгоритм с помощью внешней обработки или консоли кода:
ВыборкаДокументов = Документы.ВозвратТоваровОтПокупателя.Выбрать();
Пока ВыборкаДокументов.Следующий() Цикл
// Проверяем, незаполнен ли реквизит Сделка или имеет тип Неопределено
Если НЕ ЗначениеЗаполнено(ВыборкаДокументов.Сделка) Тогда
ДокументОбъект = ВыборкаДокументов.ПолучитьОбъект();
// Принудительно присваиваем типизированную пустую ссылку
ДокументОбъект.Сделка = Документы.РеализацияТоваровИУслуг.ПустаяСсылка();
Попытка
ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
Сообщить("Успешно обработан документ: " + Строка(ДокументОбъект));
Исключение
Сообщить("Ошибка записи документа " + Строка(ДокументОбъект) + ": " + ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
КонецЦикла;
После выполнения данного скрипта реквизиту Сделка во всех непроводящихся документах будет присвоено значение Документы.РеализацияТоваровИУслуг.ПустаяСсылка(). После этого документы проведутся без ошибок.
Чтобы избежать повторного возникновения этой проблемы при регулярных загрузках из внешних систем (например, Далион), проанализируем правила конвертации данных (ПКД).
Возврат товаров от покупателя.Сделка перейдем в обработчик ПослеЗагрузки или ПриВыгрузке.Неопределено.
Если Значение = Неопределено Или Не ЗначениеЗаполнено(Значение) Тогда
Значение = Документы.РеализацияТоваровИУслуг.ПустаяСсылка();
КонецЕсли;
Ошибка вызова метода .Метаданные() возникает исключительно из-за некорректного типа данных в реквизите Сделка. Подстановка реального документа продажи либо замена значения Неопределено на Документы.РеализацияТоваровИУслуг.ПустаяСсылка() полностью устраняет проблему и позволяет штатно провести документы возврата в 1С:Бухгалтерии 3.0.