Документы и Печать · 12 мин
Как создать макет печатной формы в 1С
Как создать макет печатной формы в 1С: табличный документ, области, параметры, заполнение из кода, типичные ошибки и проверка результата.
Макет печатной формы в 1С — это шаблон, по которому программа строит итоговый документ для печати: счёт, акт, накладную или любой другой бланк. Чаще всего для этого используется макет типа «Табличный документ», где разработчик заранее размечает области, задаёт параметры и оформление, а код подставляет в них данные конкретного объекта.
Задача решается в конфигураторе и состоит из трёх этапов: создание макета, разметка областей с параметрами и написание процедуры, которая заполняет макет данными и выводит результат. Ниже разобран каждый этап с конкретными действиями, а также частые ошибки, из-за которых печатная форма выводится пустой или «разваливается» при печати.
Где создаётся макет и какой тип выбрать
Макет привязывается к конкретному объекту конфигурации. Откройте конфигуратор, найдите нужный документ (например, «РеализацияТоваровУслуг»), раскройте его ветку, нажмите правой кнопкой на пункт «Макеты» и выберите «Добавить». Запустится конструктор, который предложит имя макета, например «МакетСчета» или «ПФ_MXL_СчетНаОплату».
Конструктор предложит несколько типов макета. Для подавляющего большинства печатных форм выбирают «Табличный документ» — он даёт привычную сетку ячеек, как в Excel, с гибким оформлением. Тип «Схема компоновки данных» нужен для отчётов, «HTML-документ» — для веб-форм, «Географическая схема» и «Диаграмма» — для специальных задач.
Сравнение типов макетов
Стандарт для печатных форм: счета, акты, накладные, доверенности. Полный контроль над оформлением ячеек.
Подходит для отчётов и форм с группировками, где структуру строит сама СКД, а не код.
Используется редко, когда форму нужно показывать в браузере или отправлять письмом в HTML-виде.
Если макет нужен не для конкретного объекта, а как общий шаблон (например, единый бланк с логотипом для нескольких документов), его создают в ветке «Общие» → «Общие макеты». Обращение к такому макету из кода идёт через ПолучитьОбщийМакет("ИмяМакета").
Разметка областей макета
После создания макета откроется редактор табличного документа. Он выглядит как электронная таблица: можно объединять ячейки, задавать шрифты, границы, цвета и ширину колонок. Здесь рисуется внешний вид будущей формы — шапка с реквизитами, табличная часть с товарами, подвал с итогами и подписями.
Ключевой шаг — разбить макет на именованные области. Код выводит форму не целиком, а по областям: сначала шапку, потом в цикле строки табличной части, затем подвал. Чтобы создать область, выделите нужные строки, затем в меню выберите «Таблица» → «Именованные области» → «Назначить имя» (или нажмите Ctrl+Shift+N) и введите имя, например «Шапка», «СтрокаТовары», «Подвал».
- 1Нарисуйте в макете шапку, строку табличной части и подвал с нужным оформлением
- 2Выделите строки шапки и назначьте имя области через Таблица → Именованные области → Назначить имя
- 3Повторите для области строки товаров и для подвала
- 4В ячейках, куда подставляются данные, укажите параметры в квадратных скобках
- 5Сохраните макет и обновите конфигурацию базы данных
Типичный набор областей для формы с табличной частью: «Шапка» (номер, дата, контрагент), «Строка» или «Товары» (одна строка, которая будет выводиться в цикле), «Итого» (суммы) и «Подвал» (подписи, расшифровки). Для многострочных форм важно, чтобы область строки занимала ровно столько строк макета, сколько должна занимать одна позиция в печатной форме.
Параметры и шаблоны в ячейках
Чтобы программа могла подставить данные в ячейку, в её тексте указывается параметр в квадратных скобках, например [НомерДокумента] или [Контрагент]. Затем в свойствах ячейки (правый клик → «Свойства») параметр «Заполнение» нужно установить в значение «Параметр». Если этого не сделать, текст в квадратных скобках выведется как обычная надпись.
Есть и второй режим заполнения — «Шаблон». В этом случае ячейка содержит смешанный текст, например: Счёт № [Номер] от [Дата], а в свойствах указывается «Шаблон». Тогда параметры подставляются внутрь произвольной строки. Это удобно для сложных надписей, где параметры перемежаются с фиксированным текстом.
Для ячеек с суммами и датами задавайте формат прямо в свойствах ячейки (свойство «Формат»), например форматную строку ЧДЦ=2 для суммы. Тогда в коде можно передавать число как есть, а представление возьмёт на себя макет.
Код заполнения: процедура печати
Заполнение макета выполняется встроенным языком. В типовых конфигурациях процедуры печати размещают в модуле менеджера объекта (правый клик по объекту → «Открыть модуль менеджера») в области «ПрограммныйИнтерфейс» или «СлужебныеПроцедурыИФункции», в зависимости от стандартов конфигурации.
Базовый алгоритм одинаков: получить макет, получить из него область, заполнить параметры области данными, вывести область в результирующий табличный документ. Для табличной части область строки выводится в цикле по строкам документа.
Функция ПечатьСчета(СсылкаНаДокумент)
ТабДок = Новый ТабличныйДокумент;
Макет = Документы.РеализацияТоваровУслуг.ПолучитьМакет("МакетСчета");
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьШапка.Параметры.Номер = СсылкаНаДокумент.Номер;
ОбластьШапка.Параметры.Дата = Формат(СсылкаНаДокумент.Дата, "ДЛФ=D");
ОбластьШапка.Параметры.Контрагент = СсылкаНаДокумент.Контрагент;
ТабДок.Вывести(ОбластьШапка);
ОбластьСтрока = Макет.ПолучитьОбласть("СтрокаТовары");
Для Каждого СтрокаТовары Из СсылкаНаДокумент.Товары Цикл
ОбластьСтрока.Параметры.Номенклатура = СтрокаТовары.Номенклатура;
ОбластьСтрока.Параметры.Количество = СтрокаТовары.Количество;
ОбластьСтрока.Параметры.Сумма = СтрокаТовары.Сумма;
ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;
Возврат ТабДок;
КонецФункцииОбратите внимание: присваивание параметров идёт через коллекцию Параметры области, а вывод — методом Вывести() результирующего табличного документа. Один и тот же объект области строки используется многократно в цикле: каждый раз параметры перезаписываются, и область выводится заново.
Для документов с большой табличной частью эффективнее брать данные запросом, а не обращаться к реквизитам через точку: запрос к табличной части с отбором по ссылке выполняется быстрее и не вызывает повторных обращений к базе на каждой итерации.
Подключение формы к команде печати
В управляемых формах типовых конфигураций печать обычно организована через подсистему «Печать» библиотеки стандартных подсистем. В модуле менеджера объекта добавляется процедура ДобавитьКомандыПечати, где регистрируется команда с идентификатором макета, а процедура Печать формирует табличный документ по этому идентификатору. После этого кнопка появляется в меню «Печать» формы документа автоматически.
Если дорабатывать типовую конфигурацию нельзя, используйте механизм внешних печатных форм: создаётся внешняя обработка (файл .epf), в её модуле объекта размещаются функции СведенияОВнешнейОбработке() и процедура Печать() по установленному шаблону. Обработка подключается через «Администрирование» → «Печатные формы, отчеты и обработки» → «Дополнительные отчеты и обработки», и её макет хранится внутри самой обработки.
Как выбрать способ реализации
Проверка результата и отладка
После обновления конфигурации откройте документ в режиме предприятия и выполните печать. Проверяйте не только факт появления формы, но и содержимое: все ли параметры заполнены, нет ли пустых ячеек там, где должны быть данные, корректно ли выведены суммы и даты, не съехало ли оформление при большом количестве строк.
Отдельно проверьте разбиение на страницы: в режиме предварительного просмотра посмотрите, не разрывается ли строка табличной части между страницами и не «уезжают» ли итоги. Для контроля разрывов используются методы ПроверитьВывод() и ВывестиГоризонтальныйРазделительСтраниц() табличного документа, а также свойство области «ПовторятьПриПечати» для заголовков таблиц.
Контрольные точки готовой формы
В ячейках видны номер, дата, контрагент, суммы
Видны квадратные скобки с именами параметров или пустые ячейки
Каждая позиция документа выведена отдельной строкой без пропусков
Строки дублируются, пропущены или между ними пустые строки
Строки не разрываются, заголовок таблицы повторяется на каждой странице
Половина строки на одной странице, половина на другой
Суммы совпадают с документом, подписи на месте
Итоги не сходятся или подвал выводится до табличной части
Если форма выводится пустой, первым делом проверьте в отладчике, что макет получен (имя макета указано верно), что область находится по имени и что источник данных содержит записи. Ошибка «Поле объекта не обнаружено» при обращении к параметру почти всегда означает опечатку в имени параметра или отсутствие параметра в ячейке макета.
Частые вопросы
Можно ли создать макет печатной формы без программирования?
Частично. В некоторых типовых конфигурациях есть механизм пользовательских макетов: готовый табличный документ можно открыть на редактирование и изменить оформление, надписи, логотип. Но добавить новый параметр или изменить логику заполнения без кода нельзя — для этого всё равно потребуется доработка в конфигураторе или внешняя печатная форма.
Чем макет «Табличный документ» отличается от макета «ActiveDocument»?
Табличный документ — универсальный редактор на сетке ячеек, результат выводится средствами платформы. Макет типа ActiveDocument (Word, Excel) использует внешний файл-шаблон с полями вставки; такие формы удобны, когда бланк сложный и его должен править пользователь в офисном редакторе, но требуют установленного приложения на компьютере и работают медленнее.
Почему параметр в макете есть, а на печати ячейка пустая?
Чаще всего причины три: в свойствах ячейки заполнение не переключено на «Параметр» или «Шаблон», имя параметра в коде не совпадает с именем в макете, либо в источнике данных значение действительно пустое. Проверьте все три пункта в отладчике, начав со свойств ячейки.
Как вывести в печатную форму штрихкод или QR-код?
В макет добавляется ячейка-рисунок, а в коде используется программная генерация изображения штрихкода (в типовых конфигурациях есть соответствующие функции подсистемы печати) с последующей подстановкой картинки в область. Без готовой библиотеки генерации потребуется компонента формирования штрихкодов.
Как сделать, чтобы заголовок таблицы повторялся на каждой странице?
Выделите строки заголовка табличной части в макете отдельной областью и выводите её через специальный механизм повторения: у результирующего табличного документа используется свойство, задающее повторяемые при печати строки, либо область выводится повторно после каждого разрыва страницы с помощью ПроверитьВывод().
Можно ли использовать один макет для нескольких видов документов?
Да. Создайте макет в ветке «Общие» → «Общие макеты» и получайте его в коде через ПолучитьОбщийМакет(). Процедуру печати при этом придётся писать в каждом объекте отдельно либо вынести в общий модуль, передавая в неё ссылку на документ и имя макета.
Что важно запомнить
Макет печатной формы — это табличный документ с именованными областями и параметрами в квадратных скобках. Код получает области, заполняет параметры и выводит их в результирующий документ по порядку: шапка, строки в цикле, подвал. Для типовых конфигураций на поддержке используйте внешние печатные формы, а результат всегда проверяйте на реальных данных, включая разбиение на страницы.