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