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