Почему возникает ошибка «Значение не является значением объектного типа (ВГраница)» при создании ЭСФ?

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

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

Понимание природы ошибки

Системное сообщение указывает на то, что в какой-то момент выполнения кода платформа пытается получить свойство или метод ВГраница у переменной, которая на данный момент равна Неопределено или Null. Это означает, что логическая цепочка вызовов прервалась из-за отсутствия ожидаемых данных в контексте документа.

Шаг 1: Использование отладчика и стека вызовов

Первое, что мы должны сделать — это остановить выполнение программы в момент возникновения ошибки. Поскольку ошибка происходит в процедуре ОбработкаЗаполнения, нам необходимо:

  1. Открыть конфигуратор и установить точку останова в модуле объекта документа ЭСФ, в процедуре ОбработкаЗаполнения.
  2. В настройках отладки включить режим «Остановка по ошибке».
  3. Запустить сеанс отладки и дождаться момента падения. При возникновении исключения платформа откроет окно «Стек вызовов».

Внимательно проанализируем стек: именно там мы увидим, какой именно метод из модуля ЭСФСерверПовтИсп обращается к проблемному объекту. Скорее всего, это будет обращение к методу ДокументЭСФ_ОбработкаЗаполнения.

Шаг 2: Анализ процедуры «ОбработкаЗаполнения»

Давайте посмотрим, как обычно выглядит вызов этой процедуры в модуле объекта ЭСФ:


Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
    ОбработкаОбменЭСФ = ЭСФСерверПовтИсп.ОбработкаОбменЭСФ();
    ОбработкаОбменЭСФ.ДокументЭСФ_ОбработкаЗаполнения(ЭтотОбъект, ДанныеЗаполнения, СтандартнаяОбработка);
КонецПроцедуры

Суть проблемы заключается в том, что переменная ДанныеЗаполнения, передаваемая в эту процедуру, может содержать не совсем то, что ожидает алгоритм обмена. Если мы создаем ЭСФ на основании документа «Возврат», система ожидает корректную ссылку, из которой можно извлечь данные для заполнения. Если ссылка «битая» или не соответствует ожидаемому типу, внутренний механизм пытается вычислить границы для выборки регистров, но терпит неудачу, так как объект не инициализирован.

Шаг 3: Проверка данных основания

Разберем, что именно передается в процедуру СоздатьЭСФ из формы документа. Если присмотреться к коду, мы видим создание структуры параметров:


ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Основание", МассивСчетовФактур[0]);
ОткрытьФорму("Документ.ЭСФ.ФормаОбъекта", ПараметрыФормы);

Если МассивСчетовФактур[0] является пустой ссылкой или ссылкой на документ, для которого не предусмотрено создание ЭСФ, серверная часть будет пытаться обратиться к методам объекта ЭСФ, у которого еще нет даже ссылки (объект не записан). В этот момент любое обращение к «границе» документа приведет к фатальной ошибке.

Практические советы по устранению

Чтобы окончательно решить проблему, рекомендуем предпринять следующие действия:

Запомните: ВГраница — это часто атрибут или функция получения границы периода. Если в процессе заполнения не удается определить дату или период документа-основания, система не может построить запрос к регистрам и выдает ошибку, которую мы разобрали.

← На главную