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