Как в 1С передается и выводится табличный документ внешней печатной формы в общую форму печати?

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

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

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

1. Точка входа: Формирование коллекции печатных форм

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

Рассмотрим пример кода, который инициализирует процесс:


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

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

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

2. Передача данных через Временное хранилище

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

Механизм БСП работает следующим образом:

  1. После завершения работы вашей процедуры Печать, управление возвращается в служебные модули БСП (например, УправлениеПечатьюСлужебный).
  2. Система обходит КоллекциюПечатныхФорм и для каждой строки выполняет сериализацию табличного документа.
  3. Сформированные данные помещаются во Временное хранилище (через метод ПоместитьВоВременноеХранилище).
  4. Вместо тяжелого объекта в структуру параметров открытия формы записывается строковый Адрес этого хранилища.

Именно поэтому, заглянув в параметры в момент открытия формы ПечатьДокументов, мы видим ссылки и идентификаторы, но не сам документ.

3. Работа общей формы «ПечатьДокументов»

Теперь разберем, что происходит «на той стороне» — внутри общей формы ПечатьДокументов. Когда форма открывается, срабатывает стандартный обработчик ПриСозданииНаСервере.

Проанализируем логику работы формы:

Важно отметить, что БСП поддерживает так называемую «ленивую загрузку». Если пользователь распечатывает сразу 10 разных форм, система может подгружать их содержимое из хранилища только в момент переключения на соответствующую вкладку, что значительно ускоряет первоначальное появление окна печати.

4. Роль объекта «ОбъектыПечати»

Помимо самого документа, важную роль играет параметр ОбъектыПечати. Это соответствие, которое связывает области табличного документа с конкретными ссылками на документы в базе данных.

Это необходимо для обеспечения следующих функций в форме просмотра:

  1. Расшифровка: чтобы при двойном клике на ячейку открывался документ-основание.
  2. Выборочная печать: если вы печатаете сразу для нескольких контрагентов, форма должна знать, какие страницы относятся к какому объекту, чтобы вы могли распечатать только часть документов из пачки.

5. Фоновое выполнение (Длительные операции)

Рассмотрим ситуацию, когда формирование печатной формы занимает длительное время. В современных версиях 1С (платформа 8.3) БСП часто запускает печать в фоновом задании. В этом случае цепочка вызовов усложняется:

  1. Клиентская команда печати обращается к серверу.
  2. Сервер запускает фоновое задание, которое выполняет процедуру Печать вашей ВПФ.
  3. Фоновое задание сохраняет результат во временное хранилище и завершается.
  4. Клиент, дождавшись завершения задания, получает Адрес и передает его в форму печати.

Такой подход позволяет пользователю не «зависать» во время формирования тяжелых отчетов и видеть индикатор прогресса.

Резюме

Подведем итог нашему анализу. Вывод ВПФ — это многоэтапный процесс, в котором КоллекцияПечатныхФорм служит лишь временным контейнером на сервере. Главный секрет «невидимости» документа заключается в использовании адресации через временное хранилище, что является стандартом разработки высокопроизводительных систем на платформе 1С:Предприятие 8.3.

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

← На главную