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