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