Документы и Печать · 12 мин
Как создать макет в 1С с помощью конструктора «Печать»
Пошаговая инструкция по созданию макета печатной формы в 1С с помощью конструктора «Печать»: область, параметры, код вывода, типичные ошибки и проверка результата.
Конструктор «Печать» в конфигураторе 1С — это встроенный мастер, который автоматически создаёт макет табличного документа и процедуру формирования печатной формы для документа или справочника. Он избавляет разработчика от рутинной работы: не нужно вручную рисовать шапку, шапку табличной части и строки, а также писать обход выборки из запроса с нуля.
Конструктор доступен в любой типовой и самописной конфигурации на обычных формах и в управляемом приложении. Он вызывается из палитры свойств объекта либо из меню «Конструкторы» и за несколько шагов генерирует готовый макет с областями «Шапка», «Строка» (или «ШапкаТаблицы») и «Подвал», а также модуль менеджера объекта или команду печати с кодом вывода.
Ниже разобран полный цикл работы: от подготовки объекта и запуска конструктора до доработки сгенерированного кода, подключения печатной формы к кнопке «Печать» и проверки результата. Отдельно описаны типичные ошибки и ограничения, о которых нужно знать заранее.
Что делает конструктор «Печать» и когда его применять
Конструктор печати выполняет три задачи одновременно. Во-первых, он создаёт макет типа «Табличный документ» с именованными областями. Во-вторых, формирует запрос по выбранным реквизитам объекта. В-третьих, генерирует процедуру Печать() или экспортную функцию печати, которая получает данные, обходит выборку и выводит области макета в табличный документ.
Инструмент оправдан, когда нужна простая печатная форма: акт, накладная, справка, карточка справочника. Если форма сложная — с группировками, итогами по нескольким уровням, внешними данными из других документов — конструктор используют как заготовку, а запрос и код затем переписывают вручную.
Важно понимать разницу между макетом и печатной формой. Макет — только шаблон. Печатная форма — это результат: табличный документ, заполненный данными конкретного объекта. Конструктор создаёт и то, и другое: шаблон плюс код, который его заполняет.
Подготовка: что проверить перед запуском конструктора
Конструктор печати работает с объектами, у которых есть реквизиты: документами, справочниками, обработками. Перед запуском убедитесь, что объект содержит нужные реквизиты шапки и, если требуется, табличную часть — конструктор предложит выбрать поля именно из них.
Если конфигурация типовая и находится на поддержке, любые изменения объекта потребуют снятия с полной поддержки или включения возможности изменения. Для доработок печатных форм в типовых решениях часто правильнее использовать механизм внешних печатных форм (БСП) — тогда основная конфигурация не трогается, а макет и код размещаются во внешней обработке.
Также заранее решите, где будет жить код печати: в модуле менеджера объекта (типовой подход для управляемых приложений), в модуле объекта или в модуле формы. От этого зависит выбор на последнем шаге конструктора.
Пошаговое создание макета через конструктор «Печать»
Рассмотрим процесс на примере документа с табличной частью. Последовательность одинакова для большинства версий платформы 8.3.
- 1Откройте конфигуратор, найдите нужный документ в дереве конфигурации и откройте палитру свойств объекта.
- 2Нажмите кнопку «Конструкторы» и выберите «Конструктор печати» (либо пункт меню «Конструкторы → Печать»).
- 3На первом шаге выберите реквизиты шапки документа, которые должны попасть в макет, и перенесите их в правый список.
- 4На втором шаге выберите табличную часть и её реквизиты — они сформируют шапку таблицы и строку.
- 5На третьем шаге укажите реквизиты подвала (итоги, подписи, ответственные лица).
- 6Выберите, куда поместить процедуру: в модуль менеджера (рекомендуется) или в новую команду печати.
- 7Нажмите «ОК» — конструктор создаст макет «МакетПечати» и сгенерирует код.
- 8Сохраните конфигурацию (F7) и проверьте результат в режиме предприятия.
После нажатия «ОК» в дереве объекта появится макет с областями «Шапка», «ШапкаТаблицы», «Строка» и «Подвал». В модуле менеджера появится процедура ДобавитьКомандуПечати и функция формирования печатной формы либо процедура Печать — в зависимости от выбранного варианта.
Если конструктор запускается повторно для объекта, у которого уже есть созданный им макет, платформа предложит переформировать существующий макет или создать новый. Переформирование удалит ручные правки макета — об этом стоит помнить.
Структура созданного макета: области и параметры
Сгенерированный макет — это табличный документ, разбитый на именованные области. Область «Шапка» выводится один раз в начале, «ШапкаТаблицы» — один раз перед строками, «Строка» — для каждой строки табличной части, «Подвал» — в конце. В ячейках областей размещены параметры в угловых скобках вида <Номер>, которые при выводе заменяются значениями.
Тип заполнения ячейки задаётся в её свойствах: «Текст» — фиксированная надпись, «Параметр» — подставляется значение параметра, «Шаблон» — смесь текста и параметров, например Договор № [НомерДоговора] от [ДатаДоговора]. Шаблон удобен для составных строк, чтобы не выводить несколько параметров в соседние ячейки.
Для аккуратного вида формы настройте в макете границы ячеек, шрифты, выравнивание и свойство «Автоотступ». Для строк табличной части включите у области свойство «Разрывать» только при необходимости — иначе длинная строка может некорректно переноситься на следующую страницу.
Доработка сгенерированного кода печати
Код, созданный конструктором, — рабочий, но минимальный. Типовая схема: запрос по ссылке на объект, получение области из макета методом ПолучитьОбласть(), заполнение параметров через Область.Параметры.Заполнить(Выборка) и вывод в табличный документ методом ТабДок.Вывести().
Макет = ПолучитьМакет("МакетПечати");
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьШапка.Параметры.Заполнить(ВыборкаШапка);
ТабДок.Вывести(ОбластьШапка);
ВыборкаСтроки = ВыборкаШапка.Товары.Выбрать();
Пока ВыборкаСтроки.Следующий() Цикл
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
ОбластьСтрока.Параметры.Заполнить(ВыборкаСтроки);
ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;
Частые доработки: добавление в запрос соединений с другими таблицами (например, для вывода наименования контрагента из справочника), вычисляемые поля (сумма с НДС, количество прописью), форматирование дат и чисел через функцию Формат(), нумерация строк в цикле через отдельный счётчик.
Если нужна нумерация строк в печатной форме, добавьте в макет параметр «НомерСтроки» и присваивайте его в цикле: ОбластьСтрока.Параметры.НомерСтроки = НомерСтроки. Значение из выборки для этого не подходит — порядок строк в запросе может не совпадать с порядком в документе без явной сортировки.
Для управляемого приложения функция печати размещается в модуле менеджера объекта и возвращает табличный документ, а команда печати подключается через процедуру ДобавитьКомандуПечати. В конфигурациях на БСП вместо этого используется стандартный интерфейс печати: процедуры ДобавитьКомандыПечати и Печать в модуле менеджера.
Подключение печатной формы к кнопке «Печать»
В обычном приложении конструктор может создать кнопку на форме документа автоматически. В управляемом приложении печатная форма появится в подменю «Печать» формы объекта, если правильно оформлена команда печати в модуле менеджера и в конфигурации есть подсистема печати.
Если кнопка не появляется, проверьте: создана ли команда печати у объекта, указан ли в её свойствах обработчик, включён ли объект в состав подсистемы печати (для БСП — в определяемый тип или в настройки подсистемы «Печать»). В самописной конфигурации без БСП проще всего добавить свою команду формы с вызовом серверной функции формирования табличного документа.
Проверка результата и контрольные точки
После сохранения конфигурации откройте базу в режиме предприятия, найдите тестовый документ с заполненной табличной частью и вызовите печатную форму. Проверяйте не только факт появления документа, но и содержимое каждой области.
Как проверить результат
Все реквизиты заполнены значениями документа, даты и номера отформатированы
Пустые ячейки или вывод вида «<Номер>» — параметр не заполнен или имя не совпадает
Выведены все строки документа в правильном порядке, суммы корректны
Одна строка вместо нескольких, дубли или неверный порядок — ошибка в цикле или сортировке запроса
Итоговые суммы сходятся с данными документа
Итоги пустые или нулевые — поля итогов не добавлены в запрос
Шапка таблицы повторяется на каждой странице, строки не обрезаны
Таблица разрывается без шапки — не настроено свойство «Повторять при печати» для строк макета
Для печати на бумаге дополнительно проверьте ориентацию страницы, поля и масштаб в свойствах макета (вкладка «Макет» палитры свойств табличного документа). Если форма должна выводиться в строгом бланке, сверьте расположение полей с оригиналом документа.
Ограничения конструктора и альтернативные способы
Конструктор печати не умеет строить сложные формы: с вложенными табличными частями, группировками по произвольным полям, данными из нескольких объектов, диаграммами. В этих случаях макет создают вручную или используют другие инструменты.
Сравнение вариантов
Подходит для простых форм документа с одной табличной частью. Быстро, но код и макет требуют ручной доработки для нестандартных требований.
Полный контроль над областями, параметрами и запросом. Требует написания всего кода вывода самостоятельно, дольше в разработке.
Макет и код во внешней обработке, типовая конфигурация не изменяется. Ограничение: требует подсистемы дополнительных отчетов и обработок.
Гибкая настройка группировок и итогов без кода обхода. Избыточен для простых документов, сложнее в освоении.
Для типовых конфигураций на БСП предпочтителен вариант внешней печатной формы: обновление конфигурации не затронет доработку, а подключение выполняется через справочник дополнительных отчетов и обработок без изменения кода основной базы.
Что важно запомнить
Конструктор «Печать» создаёт макет с областями и код вывода за несколько шагов: выбор реквизитов шапки, табличной части и подвала. Главные правила: имена параметров макета должны совпадать с полями запроса, код для управляемого приложения размещается в модуле менеджера, а ручные правки макета теряются при повторном запуске конструктора.
Частые вопросы
Можно ли изменить макет, созданный конструктором, вручную?
Да, макет открывается в конфигураторе как обычный табличный документ: можно менять тексты, шрифты, границы, добавлять параметры и области. Главное — не запускать после этого конструктор печати повторно с переформированием, иначе правки будут потеряны. Новые параметры нужно дополнительно заполнять в коде печати.
Почему печатная форма выводится с пустыми полями?
Наиболее частая причина — несовпадение имени параметра в макете с именем поля в запросе или ключом структуры заполнения. Платформа не выдаёт ошибку в этом случае, просто оставляет ячейку пустой. Проверьте написание имён посимвольно и убедитесь, что поле реально выбирается запросом.
Где должен находиться код печати в управляемом приложении?
В модуле менеджера объекта. Именно там доступен метод ПолучитьМакет() без указания объекта и корректно работает серверный вызов из команды печати. Размещение кода в модуле объекта или формы приведёт к ошибкам контекста.
Как вывести сумму прописью в печатной форме?
Используйте функцию ЧислоПрописью() с параметрами форматной строки и предмета исчисления, например для рублей и копеек. Результат присвойте отдельному параметру макета. В типовых конфигурациях на БСП есть готовые функции работы со строками сумм, которые учитывают валюту документа.
Можно ли создать макет печати без изменения типовой конфигурации?
Да, через механизм внешних печатных форм: создаётся внешняя обработка с макетом и экспортными функциями по правилам БСП, которая регистрируется в справочнике дополнительных отчетов и обработок. Конфигурация при этом остаётся на полной поддержке.
Что делать, если табличная часть не помещается на одну страницу?
Настройте в макете повторение шапки таблицы на каждой странице: выделите строки шапки таблицы и установите свойство «Повторять при печати». Также проверьте, что у области строки не отключено автоматическое разбиение, и при необходимости используйте метод ПроверитьВывод() перед выводом подвала, чтобы итоги не отрывались от таблицы.