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

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

Как работать с макетом в 1С

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

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

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

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

Какие бывают макеты и где они хранятся

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

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

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

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

Разметка начинается с того, что вы рисуете внешний вид будущей формы прямо в редакторе: вводите статичный текст («Счёт на оплату №», «Покупатель:»), объединяете ячейки, задаёте границы и шрифты. Затем те места, куда должны подставляться данные, оформляются как параметры.

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

Области создаются через выделение строк: выделите нужные строки, затем меню «Таблица → Имена → Назначить имя» (или Ctrl+Shift+N) и введите имя области — «Шапка», «Строка», «Подвал». Имена должны быть уникальны в пределах макета. Именно по этим именам код будет получать области методом ПолучитьОбласть.

Разметка простого макета
  1. 1
    Создайте макет типа «Табличный документ» в макетах документа
  2. 2
    Нарисуйте шапку: статичный текст и ячейки-параметры для номера, даты, контрагента
  3. 3
    Выделите строки шапки и назначьте имя области «Шапка»
  4. 4
    Нарисуйте образец строки табличной части с параметрами [Номенклатура], [Количество], [Цена], назначьте область «Строка»
  5. 5
    Нарисуйте подвал с итогами и подписями, назначьте область «Подвал»
  6. 6
    Сохраните конфигурацию и проверьте, что макет открывается без ошибок

Как вывести данные в макет кодом

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

bsl
Макет = Документы.СчетНаОплату.ПолучитьМакет("МакетСчета");
ТабДок = Новый ТабличныйДокумент;

ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьШапка.Параметры.НомерДокумента = Шапка.Номер;
ОбластьШапка.Параметры.Покупатель = Шапка.Контрагент;
ТабДок.Вывести(ОбластьШапка);

Для Каждого СтрокаТовары Из Товары Цикл
    ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
    ОбластьСтрока.Параметры.Заполнить(СтрокаТовары);
    ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;

ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
ОбластьПодвал.Параметры.ИтогоСумма = Товары.Итог("Сумма");
ТабДок.Вывести(ОбластьПодвал);

Обратите внимание на метод Параметры.Заполнить(СтрокаТовары): он автоматически подставляет в параметры области одноимённые поля из строки таблицы значений или выборки. Это работает, только если имена параметров в макете в точности совпадают с именами колонок источника — удобный способ сократить код, но требующий дисциплины в именовании.

Данные для заполнения обычно получают запросом: по ссылке на документ выбирают шапку и табличную часть, обходят результат выборкой и выводят области. Если в форме несколько документов (пакетная печать), внешний цикл идёт по массиву ссылок, а между документами вставляется разрыв страницы методом ВывестиГоризонтальныйРазделительСтраниц.

Группировки, итоги и повторяющиеся элементы

Когда печатная форма содержит группы — например, товары по складам или услуги по этапам договора — макет дополняется областями «ГруппаШапка» и «ГруппаПодвал». Кодом это реализуется через запрос с итогами: обход выборки по группировкам (ОбходРезультатаЗапроса.ПоГруппировкам), где на каждом уровне выводится своя область.

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

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

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

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

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

Маршрут решения

Как выбрать способ изменения

Нужно только поправить текст или добавить логотип в типовой формеПопробуйте редактирование макета в режиме предприятия или расширение конфигурации
Нужна полностью своя печатная форма рядом с типовойСоздайте внешнюю печатную форму и подключите через «Дополнительные отчеты и обработки»
Конфигурация самописная или уже на частичной поддержкеПравьте макет и процедуру печати напрямую в конфигураторе
Форму строит отчёт на СКДМеняйте схему компоновки или настройки отчёта, табличный макет не поможет

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

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

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

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

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

Все данные из документа видны в форме

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

Пустые квадратные скобки [ИмяПараметра] или пустые ячейки — имя параметра в макете не совпадает с кодом

Целостность страниц
Норма

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

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

Подвал уехал на отдельный лист — нужна проверка ПроверитьВывод

Итоги
Норма

Сумма итогов равна итогу табличной части документа

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

Расхождения — ошибка в запросе с итогами или двойной вывод строк

Форматирование
Норма

Рамки, шрифты и объединения как в макете

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

Съехавшие колонки — часто из-за разной ширины областей в макете

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

Частые вопросы о работе с макетами

Чем макет табличного документа отличается от схемы компоновки данных?

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

Как вывести картинку (логотип, печать) в макет?

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

Почему параметр остаётся пустым, хотя код его заполняет?

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

Можно ли редактировать макет без конфигуратора?

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

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

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

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

Если макет правили напрямую в типовой конфигурации, обновление могло заменить его типовой версией. Восстановите свою версию из копии и перенесите форму в расширение или во внешнюю печатную форму — тогда последующие обновления её не затронут.

Итог

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

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