При работе в современных конфигурациях на базе БСП 3.0 и выше (таких как УТ 11.5, ERP 2.5 или КА 2.5) программисты часто сталкиваются с тем, что привычные печатные формы внезапно перестают работать после обновления. Ошибка обычно проявляется в общем модуле УправлениеПечатьюКлиент, а отладчик показывает, что переменная СтруктураРезультата возвращает Неопределено. Разберем детально, почему это происходит и как восстановить работоспособность печати.
Проанализируем ситуацию: начиная с последних версий БСП, механизм формирования печатных форм был переведен на длительные операции. Теперь, когда пользователь нажимает кнопку «Печать», система не формирует документ в основном потоке, а запускает фоновое задание на сервере. Это сделано для того, чтобы интерфейс программы не «зависал» при подготовке тяжелых отчетов.
Ошибка Значение не является значением объектного типа (ОбъектыПечати) возникает в процедуре ВыполнитьКомандуПечатиПослеФормированияПечатныхФорм. Суть проблемы заключается в том, что функция ПолучитьИзВременногоХранилища(РезультатФоновойОперации.АдресРезультата) возвращает Неопределено вместо ожидаемой структуры. Это происходит потому, что фоновое задание, которое должно было сформировать печатную форму и положить результат в хранилище, завершилось аварийно или не выполнило запись данных.
Выясним причину, по которой фоновое задание «упало». Поскольку ошибка происходит на сервере в отдельном сеансе, клиентское приложение получает лишь уведомление о неудаче, не видя подробностей стека вызова. Первым делом нам необходимо обратиться к Журналу регистрации.
Длительные операции или Печать.Часто там обнаруживается, что в коде печатной формы произошло обращение к реквизиту, который был удален или переименован в новом релизе конфигурации. Например, вместо Ссылка.СуммаДокумента теперь нужно использовать другой путь к данным.
Если журнал регистрации не дал четкого ответа, нам придется отладить фоновое задание вручную. По умолчанию отладчик «проскакивает» код, выполняемый в фоне. Чтобы поймать ошибку, выполним следующие действия:
Печать.Теперь при запуске печати система остановится в серверном контексте, и мы сможем пошагово пройти весь процесс формирования табличного документа. Если структура КоллекцияПечатныхФорм не будет заполнена должным образом, клиентская часть не получит данные, что и приведет к Неопределено в хранилище.
Разберем типичную ошибку в коде внешних печатных форм. В УТ 11.5 изменились требования к экспортным процедурам. Рассмотрим пример правильного заголовка процедуры в модуле менеджера или внешней обработки:
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
// Важно: ПараметрыВывода и ОбъектыПечати должны быть инициализированы БСП,
// но ваш код должен корректно заполнять КоллекцияПечатныхФорм.
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
"МакетПФ",
"Наименование формы",
СформироватьТабличныйДокумент(МассивОбъектов)
);
КонецПроцедуры
Если в вашей форме используется старый формат вызова или не передаются параметры ОбъектыПечати и ПараметрыВывода, механизм БСП не сможет корректно упаковать результат для возврата на клиент.
Посмотрим на ситуацию, описанную в сообщении 8 форума: часто проблема кроется в расширениях конфигурации. Если вы обновляли УТ 11.5, а в расширении остались заимствованные процедуры управления печатью (например, ПечатьЗавершить или модифицированные серверные вызовы), они могут конфликтовать с новым кодом типовой конфигурации.
Рекомендуется:
УправлениеПечатью или УправлениеПечатьюПереопределяемый.Проанализируем еще один важный момент: Безопасный режим для внешних обработок. Если ваша печатная форма пытается выполнить действия, запрещенные в безопасном режиме (например, запись файла на диск или запуск внешней компоненты), фоновое задание будет немедленно прервано системой безопасности платформы 1С. При этом в хранилище данных ничего не попадет.
Попробуйте временно снять флажок «Безопасный режим» в карточке дополнительной отчетности или обработки (раздел «Дополнительные отчеты и обработки») и проверить работоспособность печати. Если форма заработала — значит, необходимо либо доработать код под требования безопасности, либо использовать профили безопасности в кластере серверов.
Подводя итог, если вы видите ошибку Значение не является значением объектного типа (ОбъектыПечати), выполните следующий алгоритм:
КоллекцияПечатныхФорм в процедуре Печать.Печать соответствует актуальной версии БСП.Использование данных методов позволит быстро выявить конкретное место сбоя и адаптировать вашу печатную форму под новые требования УТ 11.5.