К статье
Практический материал

Документы и Печать · 11 мин

Коллекция печатных форм в 1С 8.3: чем заполнить и как это работает

Чем заполнить коллекцию печатных форм в 1С 8.3: структура КоллекцияПечатныхФорм, макеты, параметры, внешние печатные формы, типовые ошибки и проверка результата.

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

Коллекция печатных форм — это, как правило, таблица значений с фиксированным набором колонок: имя макета (идентификатор), синоним (представление для пользователя), табличный документ, картинка, полный путь к макету и имя файла. Заполнение сводится к тому, чтобы на каждую формируемую печатную форму добавить строку в эту таблицу и корректно заполнить её поля.

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

Из чего состоит коллекция печатных форм

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

Основные колонки коллекции:

  • ИмяМакета — идентификатор печатной формы, по которому подсистема печати сопоставляет строку с командой печати;
  • ИмяВРЕГ — то же имя в верхнем регистре, используется для внутреннего поиска;
  • СинонимМакета — название, которое увидит пользователь в форме печати;
  • ТабличныйДокумент — собственно сформированный табличный документ;
  • Картинка — значок формы (обычно не заполняется, используется редко);
  • ПолныйПутьКМакету — путь вида «Документ.РеализацияТоваровУслуг.ПФ_MXL_ТОРГ12», нужен для редактирования макета пользователем;
  • ИмяФайлаПечатнойФормы — имя файла при сохранении или отправке по почте.

Обязательный минимум для рабочей строки — идентификатор макета, синоним и заполненный табличный документ. Остальные поля влияют на удобство: без полного пути к макету пользователь не сможет открыть макет на редактирование из формы печати, а без имени файла документы при выгрузке получат автоматические названия.

Где именно заполняется коллекция

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

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

Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм,

ОбъектыПечати, ПараметрыВывода) Экспорт

Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "СчетНаОплату") Тогда

УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(

КоллекцияПечатныхФорм,

"СчетНаОплату",

НСтр("ru = 'Счет на оплату'"),

СформироватьСчетНаОплату(МассивОбъектов, ОбъектыПечати),

,

"Документ.ЗаказКлиента.ПФ_MXL_СчетНаОплату");

КонецЕсли;

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

Ключевая проверка НужноПечататьМакет гарантирует, что ресурсоёмкое формирование выполняется только для запрошенных форм. Если её опустить и формировать все макеты подряд, печать одного документа будет каждый раз строить все формы объекта — на больших выборках это заметно замедляет работу.

Чем заполнить табличный документ внутри коллекции

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

Данные для параметров берутся из запроса по массиву объектов. Рекомендуемый подход — один пакетный запрос по всем документам массива с итогами по ссылке, а не запрос в цикле по каждому документу. Это снижает число обращений к базе и ускоряет групповую печать.

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

Отдельный нюанс — заполнение параметра ОбъектыПечати. После вывода каждого документа нужно вызвать УправлениеПечатью.ЗадатьОбластьПечатиДокумента, иначе в форме печати не будет работать переход к объекту и корректный подсчёт экземпляров.

Порядок заполнения коллекции
  1. 1
    Добавьте команду печати в процедуре ДобавитьКомандыПечати с уникальным идентификатором
  2. 2
    В процедуре Печать проверьте НужноПечататьМакет для этого идентификатора
  3. 3
    Выполните запрос по массиву объектов и получите данные шапки и табличных частей
  4. 4
    Сформируйте табличный документ: выводите области макета, заполняя параметры
  5. 5
    Вызовите УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию с идентификатором, синонимом и документом
  6. 6
    Откройте документ, нажмите «Печать» и проверьте результат в форме печати

Внешние печатные формы: чем заполняется коллекция там

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

Расхождение идентификатора команды и имени макета в коллекции — самая частая причина ситуации, когда внешняя форма подключена, кнопка есть, а при печати выводится пустая форма или сообщение о том, что макет не найден. Идентификаторы сравниваются по строке, поэтому важны точное написание и регистр.

Внешняя форма может использовать собственный макет, встроенный в обработку, — тогда полный путь к макету указывает на макет обработки, а не конфигурации. Это удобно для доработок без изменения конфигурации, но требует помнить: при обновлении типовой печатной формы внешняя копия автоматически не обновится.

Внутренняя и внешняя печатная форма

Внутренняя (в конфигурации)

Заполняется в менеджере объекта, обновляется вместе с конфигурацией. Требует доработки конфигурации и режима поддержки.

Внешняя (.epf)

Заполняется в модуле обработки, подключается без изменения конфигурации. Нужно следить за совпадением идентификаторов и актуальностью макета.

Пользовательский макет

Редактируется через «Администрирование — Печатные формы, отчеты и обработки». Подходит для правки текста и реквизитов без программирования.

Типовые ошибки при заполнении коллекции

Первая группа ошибок — несовпадение идентификаторов. Имя макета в ДобавитьКомандыПечати, в проверке НужноПечататьМакет и в вызове ВывестиТабличныйДокументВКоллекцию должно быть одинаковым во всех трёх местах. Опечатка в любом из них приводит к тому, что команда есть, а форма не формируется.

Вторая группа — ошибки в данных. Если запрос не возвращает строк (например, из-за отбора по пустому массиву объектов), табличный документ останется пустым, и пользователь увидит чистый лист без сообщения об ошибке. Стоит явно проверять результат запроса и выдавать понятное сообщение.

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

Типичные ошибки
01
Разные идентификаторы макета в команде печати и в процедуре Печать — форма не формируется без видимой ошибки
02
Формирование всех макетов без проверки НужноПечататьМакет — медленная групповая печать
03
Запрос в цикле по каждому документу вместо пакетного запроса — лишняя нагрузка на базу
04
Забытый вызов ЗадатьОбластьПечатиДокумента — не работает переход к объекту из формы печати
05
Незаполненное ПолноеПутьКМакету — пользователь не может открыть макет на редактирование

Как проверить результат

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

Дополнительно проверяют сохранение в файл и отправку по почте — здесь проявляется заполнение имени файла печатной формы. Если конфигурация работает в тонком или веб-клиенте, полезно убедиться, что печать не использует серверные вызовы, недоступные в этих режимах.

Контрольные точки

Как проверить результат

Закладка в форме печати
Норма

Появилась закладка с заданным синонимом и заполненным документом

Тревожный признак

Закладки нет или лист пустой — проверяйте идентификаторы и результат запроса

Групповая печать
Норма

Каждый документ начинается с новой страницы, итоги посчитаны по каждому

Тревожный признак

Документы слипаются или итоги общие — нет разделителя страниц или неверные итоги запроса

Сохранение в файл
Норма

Файл получает осмысленное имя из ИмяФайлаПечатнойФормы

Тревожный признак

Имя файла автоматическое и неинформативное

Если печать внедрена в конфигурацию без БСП (самописный механизм), принцип тот же: коллекция — это структура или таблица, которую заполняет код печати, а форма-обработчик отображает. Отличия только в именах процедур; логика «идентификатор + синоним + табличный документ» сохраняется.

Итог

Что важно запомнить

Коллекция печатных форм заполняется строками: идентификатор макета, синоним для пользователя, сформированный табличный документ и при необходимости путь к макету и имя файла. Идентификаторы должны совпадать во всех точках, формирование выполняется только для запрошенных макетов, а результат проверяется одиночной и групповой печатью.

Частые вопросы

Чем заполнить коллекцию, если нужно вывести две разные формы одной командой?

Добавьте в коллекцию две строки с разными идентификаторами макетов и отдельными табличными документами. В форме печати появятся две закладки. Каждую форму формируйте своей функцией, чтобы код не перемешивался.

Почему при печати выводится пустой лист без ошибки?

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

Обязательно ли заполнять ПолныйПутьКМакету?

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

Как добавить печатную форму, не меняя конфигурацию?

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

Что делать, если внешняя форма подключена, но кнопка печати не появляется?

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

Можно ли заполнить коллекцию данными из другого документа?

Да, источник данных ничем не ограничен: в функции формирования можно запросить данные основания, связанных документов или регистров. Главное — чтобы запрос отбирал данные по переданному массиву объектов и корректно обрабатывал документы без связанных записей.