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

Разработка и Конфигурация · 13 мин

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

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

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

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

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

Что такое макет и какие типы заполнения ячеек существуют

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

Ключевое понятие — тип заполнения ячейки. В свойствах ячейки (правый клик → «Свойства») поле «Заполнение» принимает три значения, от которых зависит поведение макета при выводе:

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

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

Создание макета и разметка областей

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

Далее макет разбивается на области. Стандартный набор для печатной формы документа:

  1. Шапка — номер, дата, организация, контрагент. Выделяются первые строки, назначается имя «Шапка».
  2. ШапкаТаблицы — заголовки колонок табличной части («Номенклатура», «Количество», «Цена», «Сумма»).
  3. Строка — одна строка с параметрами для каждой позиции товара; эта область выводится в цикле.
  4. Подвал — итоговая сумма, сумма прописью, подписи ответственных лиц.
Разметка области в макете
  1. 1
    Выделите нужные строки макета, кликнув по заголовкам строк слева
  2. 2
    Выберите в меню «Таблица — Имена — Назначить имя» или нажмите Ctrl+Shift+N
  3. 3
    Введите имя области латиницей без пробелов, например ШапкаТаблицы
  4. 4
    Повторите для всех областей: шапка, строка, подвал
  5. 5
    Сохраните макет и проверьте, что области видны в списке именованных областей

Имена областей давайте осмысленные и без кириллических ошибок: код будет обращаться к ним по строковому имени, и опечатка вызовет ошибку «Область не найдена» только в момент выполнения, а не при проверке модуля. Удобно придерживаться соглашения: Шапка, ШапкаТаблицы, Строка, Подвал, ДополнительнаяСтрока.

Настройка параметров и шаблонов в ячейках

После разметки областей определите, какие ячейки будут заполняться данными. Для каждой такой ячейки откройте свойства и установите «Заполнение» = «Параметр», а в поле «Параметр» впишите имя, например НаименованиеТовара. В тексте самой ячейки при этом обычно указывают то же имя — оно служит подсказкой в редакторе и заменяется значением при выводе.

Шаблон удобен, когда в одной ячейке нужно склеить несколько значений. Например, для представления единицы измерения с количеством: [Количество] [ЕдиницаИзмерения]. При заполнении «Шаблоном» не забудьте установить тип заполнения именно «Шаблон» — если оставить «Текст», квадратные скобки выведутся в печатную форму как есть, что является одной из самых заметных ошибок.

Дополнительные полезные свойства ячеек: «Формат» (например, формат даты или числа с двумя знаками), «Автоотступ», «Размещение текста» с переносом для длинных наименований, «Высота строки» с признаком автоподбора. Для строк табличной части с длинными названиями товаров включите перенос текста, иначе содержимое обрежется или разорвёт вёрстку.

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

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

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

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

// Шапка

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

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

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

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

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

// Табличная часть

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

Для Каждого СтрокаТовары Из Товары Цикл

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

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

КонецЦикла;

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

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

Получайте область строки (Макет.ПолучитьОбласть("Строка")) один раз до цикла, а не внутри него. Повторное получение области на каждой итерации замедляет формирование печатной формы на документах с сотнями позиций.
ПЗ
Практическое замечание

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

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

Типичные ошибки
01
Квадратные скобки [Параметр] выводятся в печатную форму как текст — у ячейки не переключён тип заполнения на «Шаблон»
02
Ошибка «Область не найдена» — опечатка в имени области в коде или область не назначена в макете
03
Пустые ячейки после Параметры.Заполнить() — имена параметров в макете не совпадают с именами полей источника данных
04
Текст обрезается в ячейках — не включён перенос текста и не задан автоподбор высоты строки
05
Итоги считаются в коде вручную и расходятся с документом — надёжнее брать суммы из самого документа или запроса
06
Изменения в макете не видны в режиме предприятия — конфигурация не обновлена или печатная форма переопределена внешней обработкой

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

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

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

Все параметры заполнены
Норма

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

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

Пустые поля или имена параметров вместо значений

Переносы страниц
Норма

Табличная часть корректно переходит на следующую страницу, шапка таблицы повторяется

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

Строки обрезаются, заголовки таблицы теряются

Итоговые суммы
Норма

Итоги в подвале совпадают с суммами документа

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

Расхождения в копейках или отсутствие итогов

Формат дат и чисел
Норма

Даты и суммы отображаются в привычном виде

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

Даты со временем, лишние знаки после запятой

Альтернативные способы: заполнение без кода и внешние печатные формы

Не всегда нужно писать код. Если задача — просто изменить надписи, логотип или расположение полей в типовой печатной форме, во многих конфигурациях доступен механизм пользовательских макетов: «Администрирование → Печатные формы, отчёты и обработки → Пользовательские макеты печати». Там можно открыть копию типового макета, поправить её в редакторе табличного документа прямо в режиме предприятия и сохранить — подстановка параметров продолжит работать, поскольку имена параметров не менялись.

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

Способы изменения печатной формы

Пользовательский макет

Подходит для правки надписей и вёрстки без кода; не позволяет менять логику и состав выводимых данных

Доработка макета в конфигураторе

Полный контроль над макетом и кодом; требует снятия конфигурации с полной поддержки и усложняет обновления

Внешняя печатная форма

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

Границы безопасной самостоятельной работы

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

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

Итог

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

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

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

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

У ячейки установлен тип заполнения «Текст», а в тексте написано [ИмяПараметра]. Платформа воспринимает это как обычную строку. Откройте свойства ячейки и смените заполнение на «Шаблон» — тогда вставки в скобках будут заменяться значениями параметров.

Как вывести в макет данные, которых нет в документе, например телефон организации?

Получите значение отдельно в коде — запросом к справочнику организаций или через функции работы с контактной информацией — и присвойте его параметру области вручную: ОбластьШапка.Параметры.ТелефонОрганизации = Телефон. Метод Параметры.Заполнить() такие поля сам не подтянет.

Можно ли заполнить макет без программирования?

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

Что делать, если изменения макета не видны в режиме предприятия?

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

Как повторить шапку таблицы на каждой странице при печати?

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

Чем отличается макет от схемы компоновки данных (СКД)?

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