Как скрыть шапку таблицы или группировки в отчете СКД?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке отчетов на платформе 1С с использованием Системы Компоновки Данных (СКД) достаточно часто возникает нетипичная задача — вывести данные в виде таблицы или списка, но при этом полностью скрыть шапку (заголовки колонок). Стандартного флажка «Отключить шапку» в СКД не предусмотрено, однако платформенные механизмы предоставляют нам целый ряд обходных путей. Разберем по шагам несколько надежных способов решения этой проблемы, от самых простых пользовательских настроек до сложной программной постобработки.

Способ 1: Использование служебной группировки «Дополнительная информация»

Проанализируем самый быстрый способ скрыть шапку, который не требует программирования и создания собственных макетов. Суть метода заключается в оборачивании наших данных в техническую группировку, которая не выводит свои заголовки.

  1. Откроем настройки нашего отчета в консоли СКД или конфигураторе.
  2. Добавим новую группировку верхнего уровня, но поле группировки оставим абсолютно пустым.
  3. Перейдем в настройки этой новой пустой группировки и на вкладке «Другие настройки» установим параметр ВариантИспользованияГруппировки в значение ДополнительнаяИнформация.
  4. Вложим нашу основную таблицу или детальные записи внутрь этой служебной группировки.
  5. Для служебной группировки принудительно отключим вывод итогов и заголовков: установим РасположениеИтогов в значение Нет, а РасположениеГруппировок также установим в Нет.

В результате СКД сформирует структуру, где основной блок данных выведется как дополнительная информация без генерации стандартной таблицы с колонками. Шапка над основной таблицей данных будет скрыта.

Способ 2: Вертикальное расположение ресурсов и макета

Посмотрим на еще один вариант работы со структурой отчета, если нам нужно избавиться от привычной горизонтальной шапки.

  1. Выделим нужную группировку или корень отчета на вкладке «Настройки».
  2. Перейдем в «Другие настройки».
  3. Найдем параметр РасположениеРесурсов и зададим ему значение Вертикально.
  4. Если мы работаем с конкретной группировкой, найдем параметр ТипМакета и также установим его в Вертикально.

При отсутствии явно выбранных полей непосредственно на уровне самой группировки, комбинация этих настроек ломает стандартную логику вывода горизонтальных заголовков, и таблица выводится в виде сплошных строк данных без шапки.

Способ 3: Очистка текста через Условное оформление

Если нам необходимо скрыть не всю шапку целиком, а заголовки конкретных колонок (например, колонок ресурсов), применим инструмент условного оформления. Для более сложного динамического управления видимостью элементов отчёта подойдёт инструмент для скрытия колонок при отсутствии данных.

  1. Перейдем на вкладку «Условное оформление» в настройках СКД.
  2. Добавим новый элемент оформления.
  3. В параметрах оформления установим галочку напротив свойства Текст, но само поле значения текста оставим абсолютно пустым.
  4. Перейдем в «Оформляемые поля» и добавим туда те колонки (ресурсы или реквизиты), шапку которых нужно очистить.
  5. Важный шаг: в области использования (настройки элемента условного оформления в самом низу) снимем все флажки и оставим только один — ВЗаголовках.

Этот метод не удаляет строку шапки физически, но делает её визуально пустой. Чтобы строка не занимала место на экране, дополним это оформление настройкой высоты: в том же элементе УО установим свойство МаксимальнаяВысота равным нулю.

Способ 4: Использование собственных пустых макетов

Рассмотрим более продвинутый метод, который часто предлагают на форумах программистов. Если СКД настойчиво генерирует шапку, мы можем переопределить макет вывода этой шапки на свой собственный — пустой. При необходимости можно использовать готовый пример работы с собственными макетами в СКД для детального изучения этого механизма.

  1. Перейдем на вкладку «Макеты» в схеме компоновки данных.
  2. Добавим МакетЗаголовкаГруппировки для нашей проблемной группировки (или таблицы).
  3. В качестве области макета выделим одну пустую ячейку табличного документа ниже.
  4. Не будем добавлять в эту ячейку никаких параметров и текста. При необходимости сузим её высоту до минимума.
  5. Повторим действие, добавив МакетГруппировки для самой структуры.

Когда СКД дойдет до вывода шапки этой группировки, она обратится к нашему кастомному макету. Поскольку макет пуст и имеет минимальную высоту, шапка не отобразится.

Способ 5: Программная постобработка табличного документа

Проанализируем самый гибкий и мощный подход, который выручает в тех случаях, когда настройки схемы не дают нужного результата или ломают сложную структуру кросс-таблицы. Мы можем программно перехватить готовый результат отчета и удалить лишние строки.

Для этого нам понадобится отключить стандартную компоновку и написать свой код в модуле объекта отчета (или в форме) в обработчике ПриКомпоновкеРезультата:


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

КонецПроцедуры

Разберем логику кода. Мы позволили платформе сформировать стандартный табличный документ со всеми шапками и группировками. После того как объект ДокументРезультат был заполнен, мы используем метод НайтиТекст() для поиска ячейки с названием одной из колонок. Определив номер строки с заголовками (свойство Верх), мы обращаемся ко всей строке целиком и скрываем её, устанавливая высоту в ноль или удаляя из документа.

Важное примечание: Выбирайте метод в зависимости от сложности отчета. Для простых списков идеально подойдет трюк со служебной группировкой ДополнительнаяИнформация. Если же у вас сложная кросс-таблица или иерархия, где ломаются итоги — лучше использовать программную постобработку табличного документа, так как она не влияет на расчет математики внутри самой СКД.

← На главную