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