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

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

Как сделать макет печати в 1С: пошаговое руководство

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

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

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

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

Что такое макет и какие виды макетов существуют

Макет в 1С — это объект, который хранит заготовку печатной формы или представления данных. Для печати чаще всего используется тип «Табличный документ»: он похож на лист Excel, где можно задавать шрифты, границы, объединения ячеек и размеры колонок. Также существуют типы «Текстовый документ», «HTML-документ», «Схема компоновки данных» и другие, но для стандартных печатных форм документов почти всегда выбирают табличный документ.

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

Создание макета в конфигураторе

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

Заполните ячейки статичным текстом: название документа, подписи колонок, реквизиты организации. Ячейки, в которые будут подставляться данные, оформите как параметры: откройте свойства ячейки (правый клик → «Свойства») и в поле «Заполнение» выберите «Параметр», а в поле «Параметр» укажите имя, например НомерДокумента. Альтернативный вариант — «Шаблон»: тогда в тексте ячейки можно смешивать статику и параметры в квадратных скобках, например Счёт № [НомерДокумента] от [ДатаДокумента].

Настройте внешний вид: ширину колонок, границы таблицы, шрифты, выравнивание. Учтите, что слишком широкий макет не поместится на лист А4 при печати — ориентируйтесь на суммарную ширину колонок около 190 мм для книжной ориентации или используйте масштабирование при выводе.

Разметка областей макета

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

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

Порядок создания макета
  1. 1
    Создайте макет типа «Табличный документ» в ветке объекта или в общих макетах
  2. 2
    Заполните статичный текст и оформите ячейки с данными как параметры или шаблоны
  3. 3
    Выделите строки и назначьте именованные области: Шапка, Строка, Подвал
  4. 4
    Напишите код формирования печатной формы в модуле менеджера объекта
  5. 5
    Проверьте вывод на тестовом документе с разным количеством строк

Программное заполнение макета данными

Заполнение выполняется в модуле менеджера документа (процедура печати) или в общем модуле. Логика стандартная: создать табличный документ, получить макет, последовательно выводить области, подставляя параметры.

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

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

Макет = Документы.РеализацияТоваровУслуг.ПолучитьМакет("МакетСчет");

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

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

ОбластьШапка.Параметры.ДатаДокумента = Формат(СсылкаНаДокумент.Дата, "ДЛФ=D");

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

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

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

Для Каждого СтрокаТовары Из СсылкаНаДокумент.Товары Цикл

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

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

КонецЦикла;

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

ОбластьПодвал.Параметры.ИтогоСумма = СсылкаНаДокумент.Товары.Итог("Сумма");

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

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

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

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

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

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

Внешняя печатная форма как альтернатива

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

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

Сравнение вариантов

Макет внутри конфигурации

Подходит для собственных и доработанных конфигураций. Требует доступа к конфигуратору и усложняет обновление типовых решений.

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

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

Редактирование макета пользователем

Некоторые типовые формы позволяют менять макет прямо в режиме предприятия (кнопка «Изменить макет»). Подходит для простых правок текста и логотипа.

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

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

Типичные ошибки
01
Имя параметра в макете не совпадает с именем в коде — ячейка остаётся пустой или возникает ошибка обращения к параметру
02
Область «Строка» содержит несколько строк, а код рассчитан на одну — табличная часть выводится с разрывами и дублированием
03
Редактирование макета типовой конфигурации на поддержке — форма теряется при обновлении
04
Не задано свойство «Заполнение: Параметр» у ячейки — значение из кода не подставляется, хотя код выполняется без ошибок
05
Макет шире страницы А4 — при печати часть колонок уходит на второй лист

Ещё одна частая проблема — форматирование чисел и дат. Параметр получает значение «как есть», поэтому дату лучше передавать через Формат(Дата, "ДЛФ=D"), а суммы — через Формат(Сумма, "ЧДЦ=2"), иначе в форме могут появиться лишние знаки после запятой или секунды в дате.

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

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

Заполненность полей
Норма

Все параметры содержат значения из документа

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

Пустые ячейки или текст [ИмяПараметра] в готовой форме

Табличная часть
Норма

Каждая строка документа выведена один раз, нумерация сквозная

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

Дубли строк, пропуски, сбитая нумерация

Предпросмотр печати
Норма

Форма целиком помещается на лист выбранного формата

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

Колонки обрезаны или переносятся на следующий лист

Ограничения и меры предосторожности

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

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

Часто задаваемые вопросы

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

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

Чем параметр ячейки отличается от шаблона?

Параметр заменяет всё содержимое ячейки одним значением из кода. Шаблон позволяет вписать несколько параметров внутрь текста ячейки в квадратных скобках, например «Счёт № [Номер] от [Дата]», и подставить их все одним обращением.

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

Чаще всего имя параметра в макете не совпадает с именем в коде (учитывайте регистр и русские/английские буквы) либо у ячейки не установлено свойство «Заполнение: Параметр» или «Шаблон». Проверьте свойства ячейки и точное написание имени в обоих местах.

Как вывести сумму прописью в печатной форме?

Используйте встроенные возможности платформы: функцию формирования суммы прописью из типовых общих модулей (в БСП это РаботаСКурсамиВалют.СформироватьСуммуПрописью) и передайте результат в параметр подвала макета.

Пропадёт ли мой макет при обновлении конфигурации?

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

Как сделать, чтобы строки таблицы не разрывались между страницами?

Настройте свойства области «Строка»: в свойствах строк макета установите запрет разрыва страницы, а в коде используйте метод ПроверитьВывод перед выводом очередной строки, чтобы при необходимости вставить разрыв страницы или повторить шапку таблицы.

Итог

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

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