При разработке отчетов на Системе компоновки данных (СКД) часто возникает задача визуального объединения нескольких колонок под одной общей шапкой. Например, когда нам нужно вывести контактную информацию («Телефон», «Адрес», «Email») под единым заголовком «Контактные данные». При стандартном объединении полей в группу СКД формирует двухстрочную шапку: сверху выводится имя группы, а снизу — индивидуальные подзаголовки колонок. Однако нередко требуется полностью скрыть эти подзаголовки, чтобы сэкономить место и сделать отчет более лаконичным.
В этой статье мы подробно разберем четыре практических метода решения этой задачи: от простых интерактивных настроек в пользовательском режиме до профессиональной разработки индивидуальных макетов и программной постобработки результирующего табличного документа.
Если структура вашего отчета фиксированная и вам нужно быстро скрыть текст подзаголовков колонок без изменения структуры схемы компоновки, мы можем прибегнуть к возможностям условного оформления. Этот способ хорош тем, что выполняется исключительно в конструкторе настроек и не требует написания программного кода.
Давайте разберем этот процесс по шагам:
Важная особенность метода: Хотя текст подзаголовков визуально исчезнет (заменится пробелами), сама строка ячеек под общим заголовком физически останется в табличном документе. Визуально это будет выглядеть как пустая строка под главным названием группы. Если такой вариант визуально не устраивает, перейдем к следующим методам.
Иногда избавиться от лишней строки подзаголовков можно простым изменением свойств отображения группы на вкладке выбранных полей. Давайте проанализируем, как ведут себя различные варианты расположения.
Для изменения поведения выполним следующие действия:
Если нам необходимо, чтобы колонки оставались физически разделенными на разные столбцы, но при этом строка с подзаголовками полностью отсутствовала (не оставляя пустых зазоров), лучшим решением будет создание собственного макета оформления шапки. Это стандартный и наиболее эстетичный визуальный подход.
Рассмотрим, как правильно настроить макет группировки:
При формировании отчета СКД автоматически подменит сгенерированную по умолчанию двухстрочную шапку на наш красивый индивидуальный макет, полностью исключив вывод ненужных строк подзаголовков.
Для сложных динамических отчетов, структура колонок в которых может меняться в зависимости от настроек пользователя, интерактивные методы могут не подойти. В таком случае мы можем применить программную постобработку сформированного табличного документа непосредственно перед его выводом на экран.
Для реализации этого метода нам потребуется открыть модуль объекта отчета и переопределить стандартное событие ПриКомпоновкеРезультата. Давайте разберем детальный шаблон кода для такой операции:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
// Инициализируем схему и настройки
СхемаКомпоновкиДанных = ПолучитьМакет("СхемаКомпоновкиДанных");
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
// Выполняем стандартную компоновку макета
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
// Создаем процессор компоновки и выводим результат в ТабличныйДокумент
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Истина);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
// Начинаем постобработку табличного документа
// Нам нужно найти строку с подзаголовками и объединить ячейки шапки
ВсегоСтрок = ДокументРезультат.ВысотаТаблицы;
Если ВсегоСтрок > 0 Тогда
// Допустим, шапка гарантированно находится в первых двух строках
// Строка 1 - общий заголовок группы, Строка 2 - подзаголовки
// Мы можем физически удалить вторую строку или объединить ячейки по вертикали
Попытка
// Объединяем ячейки первой строки по вертикали со второй строкой для тех колонок, которые не входят в группу
// Или полностью удаляем ненужную область подзаголовков
ОбластьДляУдаления = ДокументРезультат.Область("R2"); // Выбираем вторую строку целиком
ДокументРезультат.УдалитьОбласть(ОбластьДляУдаления, ТипСмещенияТабличногоДокумента.ПоВертикали);
// Производим повторное программное объединение ячеек верхней шапки, если это необходимо
// Например, объединим ячейки с первой по третью колонку в первой строке:
// ДокументРезультат.Область(1, 1, 1, 3).Объединить();
Исключение
ЗаписьЖурналаРегистрации("Ошибка обработки шапки отчета", УровеньЖурналаРегистрации.Предупреждение, , , ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
КонецПроцедуры
Используя этот программный метод, мы получаем абсолютный контроль над формированием выводимого документа. Мы можем динамически анализировать имена ячеек, программно находить области по тексту заголовков с помощью метода НайтиТекст(), объединять нужные колонки методом Объединить() и удалять пустые строки или строки с подзаголовками, обеспечивая пользователю идеальный внешний вид отчета.