Как исправить ошибку «Значение не является значением объектного типа (Имя)» при сохранении макета в 1С

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

При разработке или модификации внешних печатных форм в современных конфигурациях на базе Библиотеки стандартных подсистем (БСП), таких как 1С:Зарплата и Управление Персоналом, 1С:ERP Управление предприятием или 1С:Комплексная автоматизация, разработчики часто сталкиваются со скрытой ошибкой. На этапе формирования печатной формы и вывода ее на экран все работает корректно, однако при попытке пользователя сохранить готовый документ (нажатием на кнопку с дискетой в форме просмотра) система аварийно завершает работу с ошибкой: «Значение не является значением объектного типа (Имя)».

В рамках этой статьи мы подробно разберем причины возникновения этой проблемы, изучим внутренние механизмы подсистемы печати БСП и рассмотрим практические варианты ее решения с примерами кода.

Механизм работы сохранения печатных форм в БСП

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

Чтобы реализовать этот функционал, БСП анализирует коллекцию ОбъектыПечати. На основе переданных ссылок система пытается:

  1. Определить тип объекта метаданных для автоматической генерации имени сохраняемого файла (по умолчанию имя формируется по шаблону: [СинонимОбъекта] + [Номер] + [Дата]).
  2. Проверить, поддерживает ли данный объект хранение присоединенных файлов (проверяется наличие связанного справочника присоединенных файлов и его вхождение в определяемый тип ВладелецПрисоединенныхФайлов).

Если на одном из этих этапов БСП сталкивается с некорректными данными, происходит сбой, приводящий к ошибке обращения к свойству Имя у неопределенного объекта.

Причина 1: Некорректный тип данных в параметре «Ссылка»

Наиболее распространенная техническая причина кроется в вызове процедуры разметки областей печати:


УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, ПараметрыМакета.Ссылка);

Если в качестве четвертого параметра (в нашем примере это ПараметрыМакета.Ссылка) передается невалидная ссылка на объект базы данных, а, например:

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

Решение проблемы с некорректной ссылкой

Перед вызовом процедуры разметки области печати обязательно убедимся, что передаваемый параметр действительно является ссылкой на существующий объект информационной базы. Разберем правильный шаблон вызова:


// Проверяем, что ссылка заполнена и имеет корректный ссылочный тип
Если ЗначениеЗаполнено(ПараметрыМакета.Ссылка) 
   И Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(ПараметрыМакета.Ссылка)) Тогда
   
    УправлениеПечатью.ЗадатьОбластьПечатиДокумента(
        ТабличныйДокумент, 
        НомерСтрокиНачало, 
        ОбъектыПечати, 
        ПараметрыМакета.Ссылка
    );
    
КонецЕсли;

Если мы формируем «холостую» печатную форму (например, пустой шаблон без привязки к конкретному сотруднику или документу), вызов процедуры ЗадатьОбластьПечатиДокумента следует пропустить. При этом печатная форма сохранит возможность записи на локальный диск компьютера, но автосохранение в присоединенные файлы базы данных для нее будет отключено.

Причина 2: Пустой табличный документ

Вторая частая причина кроется непосредственно внутри общего модуля подсистемы печати, в строке кода:


ТабличныйДокумент.Область(НомерСтрокиНачало, , НомерСтрокиОкончание, ).Имя = ИмяОбласти;

Если в процессе заполнения макета данные не были выведены (например, запрос к базе данных вернул пустую выборку), то высота результирующего табличного документа останется равной нулю. При попытке программного обращения к области Область(1, , 0, ) (где начало — это первая строка, а конец равен нулю) платформа 1С возвращает пустое значение Неопределено вместо реального объекта области ячеек табличного документа. Попытка задать имя для несуществующей области закономерно приводит к падению системы.

Решение проблемы с пустым документом

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


// Проверяем, что в табличный документ действительно были выведены строки
Если ТабличныйДокумент.ВысотаТаблицы > 0 Тогда

    УправлениеПечатью.ЗадатьОбластьПечатиДокумента(
        ТабличныйДокумент, 
        НомерСтрокиНачало, 
        ОбъектыПечати, 
        ПараметрыМакета.Ссылка
    );

КонецЕсли;

Причина 3: Особенности работы со справочником присоединенных файлов

Рассмотрим ситуацию, когда печатная форма разрабатывается для справочника, который изначально не поддерживает механизм прикрепления файлов (например, у него отсутствует связанный подчиненный справочник присоединенных файлов типа ИмяСправочникаПрисоединенныеФайлы).

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

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

Пошаговая методика отладки ошибки

Если ошибка продолжает воспроизводиться, проанализируем ситуацию в режиме отладчика:

  1. Откроем конфигуратор и установим точку останова в общем модуле УправлениеПечатью внутри процедуры ЗадатьОбластьПечатиДокумента.
  2. Запустим сеанс «1С:Предприятие» в режиме отладки и вызовем печать тестируемой формы.
  3. В момент остановки выполнения проверим значения переменных НомерСтрокиНачало, ОбъектыПечати и тип значения ПараметрыМакета.Ссылка через табло вычисления выражений (клавиши Shift+F9).
  4. Особое внимание обратим на тип переменной ссылки. Если там находится строка, структура или системное значение Неопределено — мы нашли место возникновения ошибки. Исправим заполнение параметров макета в модуле менеджера нашей внешней обработки.

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

← На главную