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