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

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

Как создать печать документа в 1С

Как создать печатную форму документа в 1С: макет, внешняя печатная форма, код на встроенном языке. Пошаговая инструкция, типичные ошибки и FAQ.

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

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

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

Определяем, какой способ создания печати подходит

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

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

Сравнение способов

Конструктор печати в конфигураторе

Быстро создаёт макет и код, но требует изменения конфигурации и прав на конфигуратор

Внешняя печатная форма (.epf)

Не меняет конфигурацию, подключается в пользовательском режиме; ограничение — нужна поддержка БСП в конфигурации

Программное формирование

Максимальная гибкость для нестандартных макетов, но требует навыков разработки на встроенном языке

Создаём макет табличного документа

Макет — это шаблон, по которому 1С заполняет печатную форму. В конфигураторе откройте объект документа, перейдите на вкладку «Макеты» и нажмите «Добавить» → «Табличный документ». Для внешней печатной формы макет создаётся аналогично внутри файла обработки.

В макете выделяют три типа областей: статичный текст (шапка, подписи), параметры (ячейки, куда подставляются данные, — в свойствах ячейки установите «Заполнение: Параметр») и шаблоны (строки с выражениями в квадратных скобках, например [Номенклатура]). Области именуются через «Таблица → Имена → Назначить имя» — типичный набор: Шапка, СтрокаТовары, Подвал.

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

Пишем код формирования печатной формы

Логика печати строится по одному шаблону: получить макет, получить данные документа, последовательно вывести области в табличный документ. Минимальный пример процедуры:

Функция ПечатьДокумента(СсылкаНаДокумент) Экспорт

ТабДок = Новый ТабличныйДокумент;

Макет = ПолучитьМакет("МакетПечати");

ОбластьШапка = Макет.ПолучитьОбласть("Шапка");

ОбластьШапка.Параметры.НомерДокумента = СсылкаНаДокумент.Номер;

ТабДок.Вывести(ОбластьШапка);

Выборка = СсылкаНаДокумент.Товары.Выгрузить();

ОбластьСтрока = Макет.ПолучитьОбласть("СтрокаТовары");

Для Каждого СтрокаТовара Из Выборка Цикл

ОбластьСтрока.Параметры.Заполнить(СтрокаТовара);

ТабДок.Вывести(ОбластьСтрока);

КонецЦикла;

Возврат ТабДок;

КонецФункции

Для внешней печатной формы по стандарту БСП в модуле объекта обработки должна быть функция СведенияОВнешнейОбработке(), которая регистрирует команду печати, и экспортная процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода). Идентификатор команды в сведениях должен совпадать с именем макета, иначе подсистема печати не найдёт форму.

bsl
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
    УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "МакетПечати", "Моя печатная форма", СформироватьТабДок(МассивОбъектов[0]));
КонецПроцедуры

Подключаем внешнюю печатную форму в пользовательском режиме

Это безопасный способ для типовых конфигураций: конфигурация не изменяется, обновления проходят штатно. Порядок действий одинаков для большинства конфигураций на БСП (УТ, ERP, Бухгалтерия, ЗУП).

Порядок подключения
  1. 1
    Включите в разделе «Администрирование → Печатные формы, отчеты и обработки» флажок «Дополнительные отчеты и обработки»
  2. 2
    Откройте список «Дополнительные отчеты и обработки» и нажмите «Добавить из файла»
  3. 3
    Выберите файл .epf с внешней печатной формой и подтвердите добавление
  4. 4
    В карточке обработки укажите «Размещение» — для каких видов документов доступна форма
  5. 5
    Откройте документ, нажмите «Печать» и проверьте, что новая форма появилась в списке

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

Настраиваем вывод: параметры страницы и сохранение

Перед выводом на печать задайте параметры табличного документа: ориентацию (ТабДок.ОриентацияСтраницы), поля, масштаб, автомасштаб. Для широких таблиц полезно свойство ТабДок.АвтоМасштаб = Истина — иначе часть колонок обрежется при печати на листе A4.

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

Готовый табличный документ можно сохранить без принтера: ТабДок.Записать("C:\Печать.pdf", ТипФайлаТабличногоДокумента.PDF). Это удобно для отправки документов контрагентам и для проверки вёрстки без расхода бумаги.

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

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

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

Форма появилась в меню «Печать» документа
Норма

Новый пункт виден у пользователей с нужными правами

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

Формы нет — проверьте размещение обработки и идентификатор команды

Данные в напечатанном документе
Норма

Номер, дата, контрагент и строки таблицы соответствуют документу

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

Пустые ячейки — имена параметров не совпадают с полями данных

Вёрстка на листе
Норма

Все колонки помещаются, шапка таблицы повторяется на новых страницах

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

Таблица обрезана — включите автомасштаб или альбомную ориентацию

Типичные ошибки
01
Изменение типовой печатной формы внутри конфигурации на поддержке — при обновлении доработка затирается, используйте внешнюю форму
02
Обращение к реквизитам документа напрямую без проверки заполненности — на незаполненных реквизитах печать падает с ошибкой
03
Несовпадение идентификатора печатной формы в СведенияОВнешнейОбработке с именем макета — форма регистрируется, но не печатается
04
Формирование табличного документа на клиенте с обращением к данным — переносите получение данных в серверную процедуру

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

Ответы на частые вопросы

Можно ли создать печатную форму без конфигуратора?

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

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

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

Почему внешняя печатная форма не появляется в меню «Печать»?

Чаще всего не заполнено «Размещение» в карточке дополнительной обработки — укажите нужный вид документа. Также проверьте, что вид назначения в СведенияОВнешнейОбработке («ПечатнаяФорма») указан правильно и у пользователя есть право на использование дополнительных обработок.

Как вывести печатную форму сразу для нескольких документов?

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

Чем печатная форма отличается от отчёта по документу?

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

Итог

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

Для типовой конфигурации создавайте печать внешней формой (.epf), не трогая конфигурацию; для доработанной — макетом и кодом внутри объекта. Сверяйте имена областей и параметров макета с кодом, проверяйте вёрстку через PDF и никогда не запускайте непроверенные внешние обработки.