При разработке отчетов на базе Системы компоновки данных (СКД) программисты часто сталкиваются с тем, что стандартное оформление заголовков не всегда соответствует требованиям эстетики или корпоративным стандартам. Одной из наиболее частых задач является центрирование текста в заголовках групп. В этой статье мы подробно разберем, как решить эту задачу несколькими способами: от простого условного оформления до использования макетов и программной обработки.
Это самый быстрый и гибкий способ, который не требует рисования сложных макетов. Мы будем использовать механизм Условного оформления, который позволяет точечно воздействовать на элементы отчета. Рассмотрим этот процесс по шагам.
Перейдем на вкладку «Настройки» в схеме компоновки данных, а затем на вкладку «Условное оформление». Нам необходимо добавить новый элемент оформления:
Центр.Проанализируем ситуацию, когда нам нужно применить это оформление не ко всему отчету, а только к конкретной группировке. В этом случае мы переходим в настройки именно этой группировки (в нижней части конструктора) и выполняем те же действия. Это позволит избежать влияния на другие части отчета.
Иногда задача усложняется: нужно центрировать заголовки только определенного уровня вложенности. Например, только заголовки верхнего уровня, оставляя детальные записи выровненными по левому краю. Выясним, как это сделать с помощью системных данных.
В настройках условного оформления на вкладке «Условие» мы можем использовать системное поле. Разберем пример настройки:
СистемныеПоля.Уровень.Таким образом, оформление применится только к тем элементам, которые находятся на указанном уровне иерархии. Это мощный инструмент для работы со сложными, многоуровневыми шапками отчетов.
Часто в СКД мы создаем логические группы на вкладке «Выбранные поля» (создаем папку и помещаем туда несколько колонок). Заголовок такой папки в результирующей таблице объединяет ячейки под собой. Чтобы центрировать именно этот объединенный заголовок, выполним следующие действия:
Рассмотрим подробнее: если мы просто укажем центрирование для всех полей внутри папки, СКД может центрировать текст в каждой ячейке по отдельности, но заголовок самой группы может остаться смещенным. Правильный подход здесь — настроить условное оформление именно для тех полей, которые входят в группу, и убедиться, что в «Области использования» стоит только В заголовке полей.
Если стандартный механизм не справляется (например, при сложной вложенности групп), мы можем прибегнуть к настройке «Другие настройки» — «Расположение группировок». Изменение этого параметра на Отдельно или Вместе иногда помогает системе корректно интерпретировать иерархию заголовков для оформления.
Если отчет должен выглядеть идеально, а стандартные средства компоновки не дают нужного результата (особенно это актуально для вывода в Excel), мы рекомендуем использовать вкладку Макеты. Это «тяжелая артиллерия», которая дает полный контроль над визуализацией.
Разберем алгоритм создания макета заголовка группировки:
Центр.[ИмяПоля]).Важно помнить, что использование макета фиксирует оформление. Если вы позже добавите новые поля в группировку через настройки, макет придется перерисовывать. Поэтому данный метод стоит применять на финальных стадиях разработки.
В некоторых случаях условия настолько динамичны, что настроить их в конструкторе невозможно. Тогда мы используем процедуру ПриКомпоновкеРезультата в модуле объекта отчета. Посмотрим на пример логики, которую можно реализовать:
Процедура ПриКомпоновкеРезультата(ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
// Инициализируем схему и настройки
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.ПолучитьНастройки(), ДанныеРасшифровки);
// Создаем процессор компоновки
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);
// Выводим результат в табличный документ
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(Результат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
// После вывода можем программно найти нужные области и центрировать их
// Например, через поиск текста заголовка в ячейках
// Но лучше воздействовать на настройки оформления до компоновки макета
КонецПроцедуры
Проанализируем программный подход: вместо того чтобы править уже выведенный документ, мы можем программно добавить элемент УсловноеОформление в КомпоновщикНастроек непосредственно перед формированием макета. Это сохранит высокую производительность отчета и позволит динамически управлять центрированием заголовков в зависимости от параметров, выбранных пользователем.
Подведем итог: для большинства задач центрирования достаточно Условного оформления с правильно настроенной областью использования (только заголовки). Если же требуется специфическое оформление для печати или экспорта со сложной структурой — используйте Макеты на соответствующей вкладке СКД.