Разработка и Конфигурация · 8 мин
Как получить область макета в 1С
Как получить область макета в 1С через ПолучитьОбласть: работа с табличным документом, параметрами, именованными областями, вывод и типичные ошибки.
Область макета в 1С — это именованный фрагмент табличного документа, который разработчик получает программно и выводит в результирующий отчёт или печатную форму. Типовой сценарий выглядит так: создаётся макет (обычно типа «Табличный документ»), в нём выделяются области (шапка, строка, подвал), а в коде методом ПолучитьОбласть() эти области извлекаются, заполняются параметрами и выводятся в итоговый табличный документ.
Получение области — ключевой шаг механизма построения печатных форм и отчётов «вручную», без СКД. Понимание того, как правильно обратиться к макету, заполнить параметры и вывести область, избавляет от большинства ошибок вроде пустых печатных форм или сообщения «Область не найдена».
Что такое макет и область макета в 1С
Макет — это объект конфигурации, хранящий заготовку табличного документа, схемы компоновки, HTML или другого формата. Для печатных форм чаще всего используется макет типа «Табличный документ»: в нём рисуются строки, колонки, шрифты и задаются параметры в ячейках.
Область — это поименованная часть макета. Чтобы создать область в конфигураторе, нужно выделить строки или диапазон ячеек, затем через меню «Таблица — Имена — Назначить имя» задать имя, например «Шапка» или «СтрокаТовары». Именно по этому имени область будет получена в коде.
Базовый способ: ПолучитьМакет и ПолучитьОбласть
Стандартная последовательность состоит из трёх шагов: получить макет, получить из него область, вывести область в результирующий табличный документ. Макет получается методом ПолучитьМакет("ИмяМакета") у менеджера объекта (например, Документы.РеализацияТоваровУслуг.ПолучитьМакет("Акт")) или через ПолучитьОбщийМакет("ИмяМакета"), если макет находится в ветке «Общие макеты».
Далее вызывается Макет.ПолучитьОбласть("Шапка") — возвращается табличный документ, содержащий только эту область. Его параметры заполняются через коллекцию Параметры, а вывод выполняется методом ТабДок.Вывести(ОбластьШапка).
Макет = Документы.РеализацияТоваровУслуг.ПолучитьМакет("Акт");
ТабДок = Новый ТабличныйДокумент;
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьШапка.Параметры.НомерДокумента = Ссылка.Номер;
ОбластьШапка.Параметры.Контрагент = Ссылка.Контрагент;
ТабДок.Вывести(ОбластьШапка);
ОбластьСтрока = Макет.ПолучитьОбласть("СтрокаТовары");
Для Каждого СтрокаТовары Из Ссылка.Товары Цикл
ОбластьСтрока.Параметры.Номенклатура = СтрокаТовары.Номенклатура;
ОбластьСтрока.Параметры.Количество = СтрокаТовары.Количество;
ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;Как заполнить параметры области
Параметры задаются в макете: в свойстве ячейки «Заполнение» выбирается «Параметр», а в тексте ячейки указывается имя параметра, например [НомерДокумента]. В коде обращение идёт через Область.Параметры.НомерДокумента = Значение. Если параметр в макете не объявлен, присвоение вызовет ошибку — имена должны совпадать символ в символ.
Кроме одиночных параметров есть шаблоны: если в ячейке выбрано заполнение «Шаблон», можно вставлять параметры внутрь произвольного текста, например «Акт № [НомерДокумента] от [ДатаДокумента]». Это удобно для составных строк, где части текста статичны.
Получение области по координатам и вложенные области
Метод ПолучитьОбласть() без параметров возвращает весь макет целиком. Также можно получить область по координатам: Макет.ПолучитьОбласть("R1C1:R5C10") — диапазон ячеек с первой по пятую строку. Это полезно, когда макет не содержит именованных областей, например при разборе чужого или внешнего макета.
Если области пересекаются или вложены друг в друга, помните: именованная область — это просто диапазон. Горизонтальные области (по строкам) выводятся методом Вывести(), вертикальные (по колонкам) присоединяются методом Присоединить() — так строятся таблицы с динамическим числом колонок.
Сравнение вариантов
Основной способ для печатных форм: читаемый код, легко менять макет. Требует заранее созданных именованных областей.
Подходит для макетов без имён или разовой обработки. Хрупко: при изменении макета координаты съезжают.
Возвращает весь макет целиком. Удобно для простых форм из одной области, не подходит для циклического вывода строк.
Вывод области и проверка помещаемости
Перед выводом очередной области на печатную форму принято проверять, поместится ли она на текущей странице: ТабДок.ПроверитьВывод(МассивОбластей). Если метод возвращает Ложь, выводят горизонтальный разделитель страниц через ТабДок.ВывестиГоризонтальныйРазделительСтраниц() и повторяют шапку таблицы. Это стандартный приём для многостраничных документов.
Для проверки передаётся массив областей: например, строка таблицы плюс подвал, чтобы подвал не остался на странице отдельно от последней строки. После формирования табличный документ показывают методом ТабДок.Показать() или отправляют на печать.
Что важно запомнить
Область макета получают методом ПолучитьОбласть() у макета, загруженного через ПолучитьМакет(). Имена областей и параметров должны точно совпадать с макетом, параметры заполняются на каждой итерации цикла, а для многостраничных форм используется ПроверитьВывод().
Частые вопросы
Как получить область из общего макета?
Вызовите функцию ПолучитьОбщийМакет("ИмяМакета") — она возвращает табличный документ макета из ветки «Общие — Макеты». Дальше работа идёт стандартно: ПолучитьОбласть("ИмяОбласти"), заполнение параметров и вывод.
Можно ли получить область макета внешней обработки?
Да. У объекта внешней обработки доступен метод ПолучитьМакет("ИмяМакета"), если макет добавлен в саму обработку. Во внешних печатных формах макет обычно хранят именно внутри файла обработки.
Чем ПолучитьОбласть отличается от НайтиТекст?
ПолучитьОбласть возвращает заранее именованный фрагмент макета как табличный документ. НайтиТекст ищет ячейку по содержимому в уже готовом табличном документе и используется для разбора, а не для построения печатных форм.
Как вывести область по горизонтали (новую колонку)?
Получите вертикальную область (диапазон колонок) и выведите её методом ТабДок.Присоединить(Область), а не Вывести(). Так строятся таблицы с динамическим числом колонок, например по периодам.
Почему параметры области не заполняются, хотя код без ошибок?
Чаще всего в ячейке макета выбрано заполнение «Текст» вместо «Параметр» или «Шаблон» — тогда значение в ячейке фиксировано и игнорирует присвоение. Откройте свойства ячейки в конфигураторе и проверьте поле «Заполнение».