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