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

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

Как создать макет в 1С с помощью конструктора «Печать»

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

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

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

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

Что делает конструктор «Печать» и когда его применять

Конструктор печати выполняет три задачи одновременно. Во-первых, он создаёт макет типа «Табличный документ» с именованными областями. Во-вторых, формирует запрос по выбранным реквизитам объекта. В-третьих, генерирует процедуру Печать() или экспортную функцию печати, которая получает данные, обходит выборку и выводит области макета в табличный документ.

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

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

Подготовка: что проверить перед запуском конструктора

Конструктор печати работает с объектами, у которых есть реквизиты: документами, справочниками, обработками. Перед запуском убедитесь, что объект содержит нужные реквизиты шапки и, если требуется, табличную часть — конструктор предложит выбрать поля именно из них.

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

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

Пошаговое создание макета через конструктор «Печать»

Рассмотрим процесс на примере документа с табличной частью. Последовательность одинакова для большинства версий платформы 8.3.

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

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

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

Структура созданного макета: области и параметры

Сгенерированный макет — это табличный документ, разбитый на именованные области. Область «Шапка» выводится один раз в начале, «ШапкаТаблицы» — один раз перед строками, «Строка» — для каждой строки табличной части, «Подвал» — в конце. В ячейках областей размещены параметры в угловых скобках вида <Номер>, которые при выводе заменяются значениями.

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

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

Доработка сгенерированного кода печати

Код, созданный конструктором, — рабочий, но минимальный. Типовая схема: запрос по ссылке на объект, получение области из макета методом ПолучитьОбласть(), заполнение параметров через Область.Параметры.Заполнить(Выборка) и вывод в табличный документ методом ТабДок.Вывести().

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

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

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

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

ВыборкаСтроки = ВыборкаШапка.Товары.Выбрать();

Пока ВыборкаСтроки.Следующий() Цикл

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

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

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

КонецЦикла;

Частые доработки: добавление в запрос соединений с другими таблицами (например, для вывода наименования контрагента из справочника), вычисляемые поля (сумма с НДС, количество прописью), форматирование дат и чисел через функцию Формат(), нумерация строк в цикле через отдельный счётчик.

Если нужна нумерация строк в печатной форме, добавьте в макет параметр «НомерСтроки» и присваивайте его в цикле: ОбластьСтрока.Параметры.НомерСтроки = НомерСтроки. Значение из выборки для этого не подходит — порядок строк в запросе может не совпадать с порядком в документе без явной сортировки.
ПЗ
Практическое замечание

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

Подключение печатной формы к кнопке «Печать»

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

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

Типичные ошибки
01
Переформирование макета конструктором после ручных правок — все изменения шаблона теряются без предупреждения.
02
Несовпадение имён параметров макета и полей запроса — ячейки выводятся пустыми, ошибки при этом не возникает.
03
Размещение кода печати в модуле объекта при управляемом приложении — метод ПолучитьМакет там недоступен в нужном контексте, правильное место — модуль менеджера.
04
Вывод области «Строка» вне цикла обхода выборки — в форму попадает только одна строка или строки дублируются.
05
Забытое сохранение конфигурации базы данных (F7) — в режиме предприятия изменения не видны, хотя конфигуратор сохранён.

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

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

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

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

Шапка формы
Норма

Все реквизиты заполнены значениями документа, даты и номера отформатированы

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

Пустые ячейки или вывод вида «&lt;Номер&gt;» — параметр не заполнен или имя не совпадает

Строки табличной части
Норма

Выведены все строки документа в правильном порядке, суммы корректны

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

Одна строка вместо нескольких, дубли или неверный порядок — ошибка в цикле или сортировке запроса

Подвал и итоги
Норма

Итоговые суммы сходятся с данными документа

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

Итоги пустые или нулевые — поля итогов не добавлены в запрос

Разбиение на страницы
Норма

Шапка таблицы повторяется на каждой странице, строки не обрезаны

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

Таблица разрывается без шапки — не настроено свойство «Повторять при печати» для строк макета

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

Ограничения конструктора и альтернативные способы

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

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

Конструктор «Печать»

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

Ручное создание макета

Полный контроль над областями, параметрами и запросом. Требует написания всего кода вывода самостоятельно, дольше в разработке.

Внешняя печатная форма (БСП)

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

СКД-макет

Гибкая настройка группировок и итогов без кода обхода. Избыточен для простых документов, сложнее в освоении.

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

Итог

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

Конструктор «Печать» создаёт макет с областями и код вывода за несколько шагов: выбор реквизитов шапки, табличной части и подвала. Главные правила: имена параметров макета должны совпадать с полями запроса, код для управляемого приложения размещается в модуле менеджера, а ручные правки макета теряются при повторном запуске конструктора.

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

Можно ли изменить макет, созданный конструктором, вручную?

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

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

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

Где должен находиться код печати в управляемом приложении?

В модуле менеджера объекта. Именно там доступен метод ПолучитьМакет() без указания объекта и корректно работает серверный вызов из команды печати. Размещение кода в модуле объекта или формы приведёт к ошибкам контекста.

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

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

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

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

Что делать, если табличная часть не помещается на одну страницу?

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