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

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

Как программно заполнить макет в 1С

Разбираем, как программно заполнить макет в 1С: табличный документ, области, параметры, методы ПолучитьОбласть и Вывести. Примеры кода и типичные ошибки.

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

В основе механизма лежат три объекта: макет (объект метаданных или макет в общих макетах), табличный документ как результат и области макета, которые выводятся в нужном порядке. Параметры внутри областей обозначаются квадратными скобками, например [НомерДокумента], и заполняются через свойство Параметры области.

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

Как устроен макет и какие типы макетов бывают

Макет в 1С — это объект, который хранит структуру будущего документа: ячейки, форматирование, области и параметры. Чаще всего используется тип «Табличный документ»: он подходит для печатных форм, отчетов и любых выводов, где важна точная верстка. Также встречаются макеты типа «Текстовый документ» (для выгрузок в форматы вроде CSV или XML-шаблонов), «HTML-документ», «Схема компоновки данных» и другие, но классический сценарий программного заполнения — именно табличный документ.

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

Как подготовить макет: области и параметры

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

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

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

Присоединение областей по горизонтали и сложные структуры

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

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

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

Шаблоны и текстовые макеты

Когда параметр нужно подставить внутрь произвольного текста («Договор № [Номер] от [Дата]»), ячейке назначается заполнение «Шаблон». Заполнение из кода не меняется: параметры присваиваются так же, но в результате сохраняется весь текст ячейки с подставленными значениями. Это удобно для юридических формулировок, где текст фиксирован, а меняются только реквизиты.

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

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

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

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

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

Параметры в документе
Норма

Все значения подставлены, квадратных скобок нет

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

Видны фрагменты вида [ИмяПараметра]

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

Каждая строка содержит свои данные, количество строк совпадает с источником

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

Дублирование значений или пропущенные строки

Итоги
Норма

Суммы в подвале равны итогам по данным документа

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

Итоги расходятся или пусты

Многостраничная печать
Норма

Заголовок повторяется, строка не отрывается от подвала

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

Подвал на отдельной странице, обрезанные строки

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

FAQ: частые вопросы о заполнении макетов

Чем заполнение макета отличается от построения отчета на СКД?

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

Можно ли заполнить один параметр несколькими значениями?

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

Как вывести в макет картинку или логотип?

Картинку можно разместить прямо в макете как рисунок табличного документа — тогда она выводится вместе с областью без кода. Если изображение должно подставляться динамически (например, фото товара), используется объект «РисунокТабличногоДокумента»: его добавляют в коллекцию рисунков табличного документа и присваивают свойству «Картинка» нужное изображение.

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

Почти всегда причина в свойстве «Заполнение» ячейки: оно должно быть «Параметр» или «Шаблон». Если стоит «Текст», содержимое ячейки выводится как есть. Также проверьте, что обращение идет к параметру той области, которая реально выводится, а не к её копии.

Как заполнить макет данными из запроса без длинного перечисления полей?

Используйте ЗаполнитьЗначенияСвойств(Область.Параметры, Выборка) внутри цикла обхода выборки. Чтобы это сработало, имена полей запроса должны совпадать с именами параметров макета. Для полей, требующих форматирования (даты, суммы), заполнение выполняется отдельно после этой строки.

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

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

Итог

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

Заполнение макета строится по схеме: ПолучитьМакет → ПолучитьОбласть → заполнить Параметры → Вывести. Корректность зависит от точных имен областей и параметров, свойства «Заполнение» ячеек и порядка вывода. Табличные части выводятся циклом, многостраничные формы контролируются через ПроверитьВывод, а тестирование безопасно проводить только на копии базы.