Разработка и Конфигурация · 11 мин
Объект Макет в 1С: назначение, типы и практика использования
Для чего предназначен объект Макет в 1С: типы макетов, создание печатных форм, табличные документы, области, параметры и типичные ошибки разработчика.
Объект конфигурации «Макет» в 1С — это хранилище шаблонов, которые используются при построении отчётов, печати документов, выводе табличных документов и обмене данными. Макет описывает, как будет выглядеть результат: структуру строк и колонок, оформление, места подстановки данных из базы. Без макета невозможно сформировать печатную форму накладной, счёта или акта — именно макет определяет, где в документе будет шапка, где табличная часть, а где подписи.
Макеты бывают общими — они располагаются в ветке «Общие» дерева конфигурации и доступны из любого места кода. Кроме того, макет может принадлежать конкретному объекту: справочнику, документу, отчёту, обработке. Такой макет логично использовать, когда шаблон нужен только этому объекту, например печатная форма конкретного документа.
Понимание назначения макета критично для разработчика и внедренца: именно через макет реализуется большинство задач печати и вывода данных пользователю. Ниже разберём, какие типы макетов существуют, как устроен табличный макет, как вывести печатную форму и каких ошибок стоит избегать.
Типы макетов и когда какой применять
При создании макета конфигуратор предлагает выбрать его тип. От выбора зависит, как макет будет редактироваться и как с ним работать из кода. Ошибка на этом этапе приводит к тому, что шаблон приходится переделывать заново.
- Табличный документ — самый распространённый тип. Используется для печатных форм: счетов, накладных, актов, прайсов. Редактируется как таблица с ячейками, поддерживает области, параметры и шаблоны ячеек.
- Схема компоновки данных — основа отчётов на СКД. Описывает источники данных, связи, настройки группировок и отборов.
- Текстовый документ — шаблоны текстов, запросов, писем, скриптов обмена.
- HTML-документ — веб-страницы для вывода в поле HTML-документа.
- Географическая схема — карты для отображения данных по регионам.
- Графическая схема — блок-схемы, карты маршрутов бизнес-процессов.
- Двоичные данные — произвольные файлы: картинки, внешние компоненты, файлы Excel с оформлением.
- Макет оформления компоновки данных — переопределение внешнего вида элементов отчёта на СКД.
- ActiveDocument — шаблоны документов Word/Excel для заполнения через COM-технологию.
Устройство табличного макета: области, параметры, шаблоны
Табличный макет состоит из ячеек, объединённых в именованные области. Область — это прямоугольный фрагмент макета, который можно получить из кода и вывести в результирующий документ. Области бывают строковыми (несколько строк целиком) и произвольными (выделенный диапазон ячеек). Типичный макет печатной формы содержит области «Шапка», «Строка» (или «Товары»), «Подвал».
Внутри ячеек используются три вида заполнения. Текст — статичное содержимое, например надпись «Поставщик:». Параметр — именованное место подстановки, например [ПредставлениеПоставщика], значение которого задаётся из кода. Шаблон — комбинация текста и параметров в квадратных скобках, например «Покупатель: [НаименованиеПокупателя], ИНН [ИНН]». Вид заполнения настраивается в свойствах ячейки.
Ключевой приём: область «Строка» выводится в цикле — один раз для каждой строки табличной части документа. Перед выводом параметры области заполняются данными текущей строки. Так из одной области-шаблона формируется вся таблица товаров произвольной длины.
Как создать макет и вывести печатную форму
Стандартный сценарий работы с макетом состоит из пяти шагов: создание макета, получение его в коде, заполнение параметров областей, последовательный вывод областей в табличный документ, отображение результата пользователю. Ниже типовой порядок действий для печатной формы документа.
- 1В конфигураторе откройте объект документа, перейдите на вкладку «Макеты» и добавьте макет типа «Табличный документ»
- 2Нарисуйте структуру: выделите строки шапки и назначьте имя области через меню «Таблица — Имена — Назначить имя»
- 3В ячейках задайте параметры: свойство «Заполнение» = Параметр, имя параметра без скобок
- 4В модуле менеджера или формы документа напишите функцию печати: получите макет методом ПолучитьМакет(«ИмяМакета»)
- 5В цикле получайте области методом ПолучитьОбласть(), заполняйте Параметры и выводите через Вывести() в табличный документ
- 6Вызовите Показать() у результирующего табличного документа или передайте его в коллекцию печатных форм БСП
Минимальный фрагмент кода выглядит так:
ТабДок = Новый ТабличныйДокумент;
Макет = Документы.РеализацияТоваровУслуг.ПолучитьМакет("Печать");
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьШапка.Параметры.НомерДокумента = Ссылка.Номер;
ТабДок.Вывести(ОбластьШапка);
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
Для Каждого ТекСтрока Из Ссылка.Товары Цикл
ОбластьСтрока.Параметры.Заполнить(ТекСтрока);
ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;
ТабДок.Показать();
Обратите внимание на метод Параметры.Заполнить() — он автоматически переносит в параметры области одноимённые поля структуры или строки табличной части. Это избавляет от ручного перечисления каждого параметра, но требует, чтобы имена колонок и параметров совпадали.
Общие макеты и макеты объектов: что выбрать
Макет, созданный внутри объекта (документа, отчёта, обработки), доступен через менеджер этого объекта — например, Документы.Заказ.ПолучитьМакет(). Общий макет из ветки «Общие — Макеты» вызывается через ПолучитьОбщийМакет(). Функционально они равнозначны, различие — в организации кода.
Сравнение вариантов
Подходит, когда шаблон используется только этим объектом: печатная форма конкретного документа, схема конкретного отчёта. Упрощает сопровождение — макет лежит рядом с логикой объекта.
Подходит для шаблонов, которые нужны нескольким объектам: типовой колонтитул, общий стиль печатных форм, общая схема компоновки. Изменение в одном месте действует на всех потребителей.
Подходит для сложных форм, согласованных с заказчиком в Word/Excel. Ограничение: заполнение требует COM-технологий и работает только под Windows.
Практическое правило: если сомневаетесь, создавайте макет у объекта. Перенести его в общие позже несложно, а вот разбираться, какие пять документов используют один общий макет и не сломается ли что-то при правке, — труднее.
Проверка результата и типичные проблемы
После формирования печатной формы проверьте не только визуальную корректность, но и поведение документа при печати: разрывы страниц, повторение шапки таблицы, ширину колонок. В табличном документе для этого есть свойства ПовторятьПриПечатиСтроки, АвтоМасштаб, ОриентацияСтраницы.
Как проверить результат
Все параметры заполнены, значения соответствуют документу
Пустые ячейки там, где должны быть данные — проверьте имена параметров
Каждая строка табличной части выведена отдельной областью
Выводится только первая или последняя строка — цикл построен неверно
Таблица переносится с повтором шапки, итоги на последней странице
Строка разрезается пополам или подвал «уезжает» на отдельный лист
В ячейках-шаблонах текст и значения объединены корректно
Видны квадратные скобки с именами параметров — заполнение не отработало
Макеты в отчётах и при обмене данными
Помимо печатных форм, макет типа «Схема компоновки данных» — обязательная часть отчёта на СКД. Он создаётся автоматически при добавлении отчёта и содержит запрос, описание полей, ресурсов и настроек. Редактируется такой макет визальным конструктором, а не вручную: прямая правка XML схемы — редкий приём для специальных задач.
Текстовые и HTML-макеты применяются в интеграциях: шаблоны JSON/XML для обмена с внешними системами, тела писем, SQL-подобные заготовки. Макет с двоичными данными удобен для хранения файлов, которые должны обновляться вместе с конфигурацией, — например, внешней печатной формы в формате офисного документа.
FAQ
Чем макет отличается от табличного документа?
Макет — это шаблон, хранящийся в конфигурации и не меняющийся при работе пользователя. Табличный документ — рабочий объект, который создаётся в памяти, заполняется по макету и показывается пользователю. Один макет может порождать неограниченное число табличных документов с разными данными.
Можно ли изменить макет без конфигуратора?
Макет встроенной конфигурации — нет, он изменяется только в конфигураторе. Если нужно давать пользователям возможность править формы, используйте внешние печатные формы (макеты в виде файлов) или механизмы пользовательских макетов, предусмотренные в библиотеке стандартных подсистем.
Почему в печатной форме видны квадратные скобки с именами параметров?
Это значит, что ячейка имеет заполнение «Шаблон» или «Параметр», но соответствующий параметр не был заполнен из кода. Проверьте точное совпадение имени параметра в макете и в коде, включая регистр букв, и убедитесь, что заполнение выполняется до вызова Вывести().
Как вывести печатную форму в несколько экземпляров или для списка документов?
Цикл строится на уровне документов: для каждой ссылки формируется свой набор областей в общий табличный документ, между документами выводится разрыв страницы методом ВывестиГоризонтальныйРазделительСтраниц(). В типовых конфигурациях эту логику берёт на себя менеджер печати.
Какой тип макета выбрать для сложной формы, согласованной в Word?
Используйте макет типа ActiveDocument или двоичные данные с файлом офисного формата и заполняйте его через закладки/поля. Учтите ограничение: такое заполнение работает только на клиенте под Windows с установленным офисным пакетом, на сервере Linux этот вариант недоступен.
Нужен ли отдельный макет для каждого языка?
В конфигураторе макет можно редактировать для каждого языка конфигурации отдельно — статичные тексты переводятся прямо в макете. Параметры и области остаются общими, поэтому код печати дублировать не требуется.
Что важно запомнить
Макет в 1С — это шаблон вывода: чаще всего табличный документ с областями и параметрами для печатных форм, реже схема компоновки, текст или файл. Работа строится по схеме: получить макет, получить область, заполнить параметры, вывести в табличный документ. Правьте макеты только в конфигураторе, типовые формы изменяйте через внешние печатные формы или расширения, чтобы не потерять правки при обновлении.