Области макета в 1С: создание, вывод и настройка
Содержание
Область — это именованный прямоугольный участок макета табличного документа: несколько строк, столбцов или ячейка на их пересечении. В коде вы получаете область по имени методом ПолучитьОбласть, заполняете её параметры и выводите в табличный документ методом Вывести. Так собираются печатные формы, акты, отчёты и любой вывод на печать в 1С 8.3.
Создают область в конструкторе макета: выделяете строки или столбцы и назначаете им имя. Дальше остаётся задать параметры в ячейках, настроить границы и шрифт — и обращаться к готовой области из модуля. Ниже — как это сделать руками и из кода, плюс работа с областями в системе компоновки данных.
Что такое область и какие типы бывают
Макет табличного документа — это таблица из ячеек, похожая на лист Excel. Сам по себе макет на экран не выводится: из него по частям собирается готовый документ. Эти части и есть области.
По способу выделения различают три типа:
- 📏 Горизонтальная область — одна или несколько целых строк. Самый частый случай: шапка, строка таблицы, подвал.
- 📐 Вертикальная область — один или несколько целых столбцов. Нужна, когда колонки наращиваются по горизонтали (например, по месяцам).
- ▦ Область-пересечение — прямоугольник на стыке именованных строк и столбцов. Используется в матричных отчётах, где и строки, и колонки заранее неизвестны.
Отдельно стоит именованная область: это любой из трёх вариантов выше, которому вы дали имя. Именно по имени к ней обращается код. Можно работать и без имён — по координатам в формате R1C1:R5C3, — но именованные области читаются понятнее и не ломаются при вставке строк.
Имя области видно на полях конструктора: горизонтальные — слева от строк, вертикальные — сверху над столбцами. Если имени нет, поле пустое.
Чтобы быстро определиться с типом:
Создание именованной области в конструкторе макета
Макет лежит внутри объекта: обработки, отчёта, документа — или в ветке Общие → Общие макеты для форм, которые нужны в разных местах.
Области существуют только у табличного макета. У макета бывают и другие типы — текстовый, HTML-документ, двоичные данные, — но разметка на именованные блоки есть именно в табличном документе. Поэтому при создании макета под печатную форму выбирайте тип Табличный документ.
- Откройте макет двойным щелчком в дереве конфигурации. Если макета ещё нет, добавьте его: тип макета —
Табличный документ. - Наберите в ячейках нужный текст и разметьте таблицу: шапку, строку данных, итоги.
- Выделите мышью целые строки (щёлкнув по номерам слева) или целые столбцы (по буквам сверху), которые войдут в область.
- Вызовите команду назначения имени: правой кнопкой по выделению →
Назначить имя, либо менюТаблица → Имена → Назначить имя. - Введите имя латиницей или кириллицей без пробелов, например
Шапка,Строка,Подвал. НажмитеОК.
После этого имя появится на полях макета. Повторите для каждого блока: обычно это Шапка, Строка, Итого, Подвал.
Имя области и имя параметра — разные вещи. Область — это кусок макета, параметр — переменная внутри ячейки. Не путайте их: ПолучитьОбласть принимает имя области, Параметры.ХХХ обращается к параметру.
Если данные печатной формы берутся из типовой конфигурации, а трогать её на поддержке нежелательно, макет удобно добавить расширением конфигурации: создаёте расширение, добавляете туда свой макет и печатную команду, основная конфигурация остаётся нетронутой.
Параметры, границы и форматирование ячеек
Чтобы в ячейку попадало значение из кода, ячейку делают параметром. Откройте свойства ячейки (двойной щелчок или Alt+Enter) и на закладке со свойством Заполнение выберите один из вариантов:
- Текст — в ячейке печатается ровно то, что набрано. Значение из кода не подставляется.
- Параметр — содержимое ячейки трактуется как имя параметра; реальное значение подставляется из кода.
- Шаблон — смесь текста и параметров: параметры заключаются в квадратные скобки, например
Документ №[Номер] от [Дата].
Для простого вывода значения выбирайте Параметр и впишите имя, например Наименование. К нему потом обратитесь как Область.Параметры.Наименование.
Форматирование настраивается в тех же свойствах ячейки:
| Что настраиваем | Где в свойствах ячейки |
|---|---|
| Границы и их толщину | свойство Границы (можно выбрать стороны отдельно) |
| Шрифт, размер, жирность | свойства шрифта |
| Выравнивание и перенос по словам | горизонтальное/вертикальное положение, Расположение |
| Числовой формат, разделители | ФорматнаяСтрока (например, ЧЦ=15; ЧДЦ=2) |
| Автоподбор высоты строки | свойство АвтоОтступ / высота строки |
Границы можно задать и сразу для диапазона: выделите ячейки и используйте панель форматирования таблицы. Для числовых колонок обязательно задавайте ФорматнаяСтрока, иначе суммы выведутся без разделителей разрядов и с лишними знаками после запятой.
Соседние ячейки часто объединяют в одну — например, под длинное наименование или заголовок на всю ширину таблицы. Выделите ячейки и выберите Объединить в панели таблицы. Объединённая ячейка ведёт себя как одна: у неё своё заполнение, свой параметр и свои границы. Злоупотреблять объединением не стоит — оно замедляет отрисовку и мешает автоподбору ширины колонок.
Отдельно настраивается высота строки с длинным текстом. Чтобы текст не обрезался, включите перенос по словам в расположении ячейки и разрешите автоподбор высоты — тогда строка растянется под содержимое при выводе.
Вывод области из кода
Базовый сценарий печати: создаём табличный документ, получаем макет, достаём из него области и выводим одну за другой.
ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьОбщийМакет("ПечатьАкта");
// Шапка — выводится один раз
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьШапка.Параметры.НомерДокумента = Номер;
ОбластьШапка.Параметры.ДатаДокумента = Дата;
ТабДок.Вывести(ОбластьШапка);
// Строки таблицы — область получаем ОДИН раз, до цикла
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
Для Каждого СтрокаТЧ Из Товары Цикл
ОбластьСтрока.Параметры.Наименование = СтрокаТЧ.Наименование;
ОбластьСтрока.Параметры.Количество = СтрокаТЧ.Количество;
ОбластьСтрока.Параметры.Сумма = СтрокаТЧ.Сумма;
ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;
ТабДок.Показать();
Разберём ключевые методы:
ПолучитьОбщийМакет("Имя")— берёт макет из общих макетов. Для макета внутри объекта используютПолучитьМакет("Имя")у самого объекта (документа, обработки, отчёта).ПолучитьОбласть("Шапка")— возвращает область по имени. Можно и по координатам:ПолучитьОбласть("R1C1:R3C5").Вывести(Область)— добавляет область снизу, под уже выведенным.Присоединить(Область)— добавляет область справа от последнего вывода. Так наращивают колонки.
Горизонтальный вывод (например, колонки по периодам) собирается через Присоединить:
ОбластьКолонка = Макет.ПолучитьОбласть("Колонка");
Для Каждого Период Из Периоды Цикл
ОбластьКолонка.Параметры.Период = Период;
ТабДок.Присоединить(ОбластьКолонка);
КонецЦикла;
Область-пересечение берут, указывая имя строки и имя столбца через вертикальную черту: Макет.ПолучитьОбласть("СтрокаДанные|КолонкаСумма"). Это основа матричных отчётов.
Чтобы шапка повторялась на каждой печатной странице, задайте свойство ПовторятьПриПечатиСтроки табличного документа диапазоном шапки. Для фиксации области на экране при прокрутке есть ФиксацияСверху и ФиксацияСлева.
Группировки (сворачиваемые строки с плюсиком) делаются парой НачатьАвтогруппировкуСтрок() и ЗакончитьАвтогруппировкуСтрок() вокруг вывода, либо передачей уровня в метод Вывести.
Расшифровка строк печатной формы
Часто от печатной формы хотят, чтобы по двойному щелчку на строке открывался исходный объект — товар, документ, контрагент. Это и есть расшифровка. В свойствах ячейки для свойства Расшифровка выберите заполнение параметром и задайте имя, например РасшифровкаСтроки. В коде подставьте ссылку:
ОбластьСтрока.Параметры.Наименование = СтрокаТЧ.Номенклатура.Наименование;
ОбластьСтрока.Параметры.РасшифровкаСтроки = СтрокаТЧ.Номенклатура;
ТабДок.Вывести(ОбластьСтрока);
Теперь двойной щелчок по строке откроет карточку номенклатуры. В отчётах на СКД расшифровка настраивается без кода — компоновщик строит её автоматически по полям группировки.
Области в системе компоновки данных
В отчётах на СКД строки и колонки формируются автоматически, и отдельные области в коде вручную выводить обычно не нужно — компоновщик делает это сам. Но внешний вид групп, полей и ресурсов можно переопределить своими макетами.
Откройте схему компоновки данных и перейдите на закладку Макеты. Здесь добавляются макеты оформления для конкретных элементов. При добавлении выбирается, что именно оформляется:
ПолеилиЗаголовок поля— ячейка значения или шапка колонки.ГруппировкаилиЗаголовок группировки— строки по группировке и их заголовок.Ресурс— итоговые числовые ячейки.
Для выбранного элемента вы рисуете обычный табличный макет с параметрами и назначаете области так же, как описано выше. Компоновщик подставит ваш макет вместо стандартного оформления. Так в отчёт добавляют нестандартные шапки, объединённые ячейки, картинки и фирменный стиль, который типовое оформление не даёт.
Для простого изменения цвета, шрифта или рамок макет не нужен — хватает условного оформления на одноимённой закладке. Макеты в СКД берут тогда, когда нужна именно своя структура ячеек.
Частые ошибки при работе с областями
Большинство проблем с макетами — это несовпадение имён и неверный тип заполнения ячейки.
Ещё одна типичная ситуация: имя области пересекается с именем параметра. 1С это допускает, но запутывает чтение кода. Давайте областям и параметрам разные, говорящие имена.
Ускорение печати больших документов
На сотнях и тысячах строк скорость формирования заметно зависит от того, как написан вывод. Несколько приёмов, которые реально ускоряют печать:
- ♻️ Получайте область до цикла.
ПолучитьОбластьсоздаёт объект заново при каждом вызове. Один вызов до цикла и переиспользование внутри экономят и время, и память. - 🧮 Готовьте данные одним запросом. Собирайте всё, что уйдёт в печать, запросом или выборкой заранее, а в цикле только подставляйте значения. Обращения к базе внутри цикла вывода — главная причина тормозов.
- 🗜️ Не плодите лишние области. Чем меньше разных областей и объединённых ячеек, тем быстрее рендерится документ. Матричные отчёты с тысячами колонок тяжелы по определению.
- 🖨️ Отключайте ненужное оформление. Сетку (
ОтображатьСетку) и заголовки на экране можно убрать — на печать это не влияет, а отрисовку ускоряет. - 📑 Задавайте повтор шапки через
ПовторятьПриПечатиСтроки, а не копируйте шапку в цикле на каждую страницу вручную.
Если документ всё равно собирается долго, выводите его в фоновом задании и не держите пользователя у заблокированного интерфейса.
Частые вопросы
Можно ли обойтись без имён и брать область по координатам?
Макет.ПолучитьОбласть("R1C1:R5C3") вернёт прямоугольник по номерам строк и столбцов. Но при вставке строк в макет координаты сдвинутся, и код сломается. Именованные области надёжнее.Чем отличается «Вывести» от «Присоединить»?
Вывести ставит область снизу, под предыдущей. Присоединить — справа от последней выведенной. Строки таблицы выводят, колонки присоединяют.Как вывести область на стыке строки и колонки?
ПолучитьОбласть("СтрокаДанные|КолонкаСумма"). Так строят матричные отчёты.Где хранить макет, если он нужен в нескольких местах?
Общие → Общие макеты. Доступ из кода — функцией ПолучитьОбщийМакет("Имя"). Макет внутри объекта виден только этому объекту.