Почему не работает печатная форма в УТ 11.5 и как исправить ошибку «Значение не является значением объектного типа (ОбъектыПечати)»?

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

При работе в современных конфигурациях на базе БСП 3.0 и выше (таких как УТ 11.5, ERP 2.5 или КА 2.5) программисты часто сталкиваются с тем, что привычные печатные формы внезапно перестают работать после обновления. Ошибка обычно проявляется в общем модуле УправлениеПечатьюКлиент, а отладчик показывает, что переменная СтруктураРезультата возвращает Неопределено. Разберем детально, почему это происходит и как восстановить работоспособность печати.

Анализируем причину возникновения ошибки

Проанализируем ситуацию: начиная с последних версий БСП, механизм формирования печатных форм был переведен на длительные операции. Теперь, когда пользователь нажимает кнопку «Печать», система не формирует документ в основном потоке, а запускает фоновое задание на сервере. Это сделано для того, чтобы интерфейс программы не «зависал» при подготовке тяжелых отчетов.

Ошибка Значение не является значением объектного типа (ОбъектыПечати) возникает в процедуре ВыполнитьКомандуПечатиПослеФормированияПечатныхФорм. Суть проблемы заключается в том, что функция ПолучитьИзВременногоХранилища(РезультатФоновойОперации.АдресРезультата) возвращает Неопределено вместо ожидаемой структуры. Это происходит потому, что фоновое задание, которое должно было сформировать печатную форму и положить результат в хранилище, завершилось аварийно или не выполнило запись данных.

Шаг 1. Поиск реальной ошибки в Журнале регистрации

Выясним причину, по которой фоновое задание «упало». Поскольку ошибка происходит на сервере в отдельном сеансе, клиентское приложение получает лишь уведомление о неудаче, не видя подробностей стека вызова. Первым делом нам необходимо обратиться к Журналу регистрации.

  1. Откроем «Администрирование» — «Обслуживание» — «Журнал регистрации».
  2. Установим фильтр по критичности «Ошибка».
  3. Найдем записи, относящиеся к моменту нажатия кнопки печати.
  4. Особое внимание уделим событиям с именами Длительные операции или Печать.

Часто там обнаруживается, что в коде печатной формы произошло обращение к реквизиту, который был удален или переименован в новом релизе конфигурации. Например, вместо Ссылка.СуммаДокумента теперь нужно использовать другой путь к данным.

Шаг 2. Отладка фонового задания

Если журнал регистрации не дал четкого ответа, нам придется отладить фоновое задание вручную. По умолчанию отладчик «проскакивает» код, выполняемый в фоне. Чтобы поймать ошибку, выполним следующие действия:

  1. В конфигураторе зайдем в меню «Отладка» — «Подключение».
  2. Нажмем кнопку «Автоматическое подключение» и установим флажок «Фоновые задания».
  3. Найдем в модуле менеджера объекта (или модуле внешней обработки) процедуру Печать.
  4. Поставим точку останова в самом начале этой процедуры.

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

Шаг 3. Проверка сигнатуры процедуры Печать

Разберем типичную ошибку в коде внешних печатных форм. В УТ 11.5 изменились требования к экспортным процедурам. Рассмотрим пример правильного заголовка процедуры в модуле менеджера или внешней обработки:


Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
    
    // Важно: ПараметрыВывода и ОбъектыПечати должны быть инициализированы БСП, 
    // но ваш код должен корректно заполнять КоллекцияПечатныхФорм.
    
    УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
        КоллекцияПечатныхФорм, 
        "МакетПФ", 
        "Наименование формы", 
        СформироватьТабличныйДокумент(МассивОбъектов)
    );

КонецПроцедуры

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

Шаг 4. Анализ расширений и заимствованных процедур

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

Рекомендуется:

  1. Отключить поочередно расширения, влияющие на подсистему печати.
  2. Проверить, не перекрывает ли расширение общий модуль УправлениеПечатью или УправлениеПечатьюПереопределяемый.
  3. Если проблема в расширении — обновить захваченные объекты, удалив их и добавив заново из новой версии типовой конфигурации, после чего повторно внести свои изменения.

Шаг 5. Отключение безопасного режима

Проанализируем еще один важный момент: Безопасный режим для внешних обработок. Если ваша печатная форма пытается выполнить действия, запрещенные в безопасном режиме (например, запись файла на диск или запуск внешней компоненты), фоновое задание будет немедленно прервано системой безопасности платформы 1С. При этом в хранилище данных ничего не попадет.

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

Резюме решения

Подводя итог, если вы видите ошибку Значение не является значением объектного типа (ОбъектыПечати), выполните следующий алгоритм:

Использование данных методов позволит быстро выявить конкретное место сбоя и адаптировать вашу печатную форму под новые требования УТ 11.5.

← На главную