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