Как исправить ошибку «Значение не является значением объектного типа (ВысотаТаблицы)» при печати 2-НДФЛ в 1С:ЗУП?

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

Рассмотрим ситуацию, с которой часто сталкиваются разработчики и системные администраторы при работе с конфигурацией 1С:Зарплата и Управление Персоналом (ЗУП) версии 3.1. При программной загрузке справок 2-НДФЛ в базу документы успешно создаются и внешне выглядят корректно. Однако, если мы попытаемся распечатать такой документ, система выдает критическую ошибку: Значение не является значением объектного типа (ВысотаТаблицы) в модуле УправлениеПечатью.

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

Суть проблемы и причины возникновения ошибки

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

Почему это происходит только с загруженными документами? Посмотрим на разницу между ручным и программным вводом:

  1. Интерактивный (ручной) ввод: Когда бухгалтер создает справку руками, отрабатывают все стандартные клиентские и серверные обработчики формы. Они гарантированно инициализируют пустой ТабличныйДокумент, даже если в справке не хватает данных.
  2. Программная загрузка: При загрузке через внешние обработки визуальные алгоритмы формы игнорируются. Из-за недоработки в конкретном релизе ЗУП (например, 3.1.9.106) алгоритм печати для программно созданных документов не инициализирует макет и возвращает пустоту.

Решение 1. Обновление конфигурации (Рекомендуемое)

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

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

Решение 2. Программный обход ошибки через расширение

Если прямо сейчас обновить базу невозможно, мы вместе решим задачу программным путем. Создадим расширение конфигурации для общего модуля УправлениеПечатью. Наша цель — добавить проверку типа значения перед тем, как система попытается обратиться к свойству ВысотаТаблицы.

Рассмотрим пример кода, который нужно поместить в расширение (перед проблемной строкой):


// В расширении перехватываем процедуру печати
Если ТабличныйДокумент = Неопределено Тогда
    Продолжить; // Пропускаем пустой документ, избегая падения платформы
КонецЕсли;

Если ТабличныйДокумент.ВысотаТаблицы = 0 Или ОбъектыПечати.Количество() = 0 Тогда
    // Стандартный код 1С
КонецЕсли;

Такой подход заставит систему проигнорировать «битый» макет и не прерывать работу пользователя аварийным сообщением.

Решение 3. Доработка обработки-загрузчика

Проанализируем еще один вариант: исправление на стороне вашего скрипта загрузки. В обработке, которая программно загружает справки 2-НДФЛ, можно добавить принудительную инициализацию печатных форм.

Посмотрим на пример того, как можно обезопасить алгоритм формирования коллекции печатных форм:


// В вашей обработке перед передачей коллекции на печать
Для Каждого СтрокаПечати Из КоллекцияПечатныхФорм Цикл
    Если СтрокаПечати.ТабличныйДокумент = Неопределено Тогда
        СтрокаПечати.ТабличныйДокумент = Новый ТабличныйДокумент;
    КонецЕсли;
КонецЦикла;

Используя команду Новый ТабличныйДокумент, мы искусственно подсовываем системе пустой, но корректный объект объектного типа. После этого проверка свойства ВысотаТаблицы пройдет успешно, и алгоритмы БСП отработают без ошибок.

← На главную