Как в СКД убрать лишнюю строку заголовка ресурса в кросс-таблице?

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

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

Способ 1. Программное удаление строки из итогового документа

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


// В модуле объекта отчета или в процедуре формирования
// Допустим, ДокументРезультат — это итоговый табличный документ
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);

// Удаляем вторую строку, где обычно располагаются заголовки ресурсов
// Параметры: Область(Верх, Лево, Низ, Право)
Если ДокументРезультат.ВысотаТаблицы >= 2 Тогда
    ДокументРезультат.УдалитьОбласть(ДокументРезультат.Область(2, , 2, ), ТипСмещенияТабличногоДокумента.ПоВертикали);
КонецЕсли;

Этот метод эффективен, если структура шапки статична. Однако следует помнить, что жесткое указание индекса строки (в данном случае 2) может привести к ошибкам, если в отчете добавлены дополнительные заголовки, группировки или включен вывод параметров. Используйте этот метод с осторожностью, предварительно проверив реальный индекс удаляемой строки.

Способ 2. Использование пустого заголовка в выбранных полях

Посмотрим на более простой вариант, не требующий написания кода. В настройках СКД на вкладке «Настройки» выберем нашу таблицу. Перейдем на закладку «Выбранные поля» и найдем интересующий нас ресурс. Щелкнем по нему правой кнопкой мыши и выберем пункт «Установить заголовок».

Выясним причину, почему обычный пробел не всегда решает задачу. Если просто поставить пробел, 1С выведет пустую ячейку, но сама строка в шапке останется. Тем не менее, в некоторых версиях платформы и при определенных настройках иерархии, полное удаление текста заголовка (оставить поле ввода пустым) позволяет системе «схлопнуть» ячейку. Проанализируем ситуацию: если ресурс единственный, система может попытаться оптимизировать пространство, но чаще всего этот метод лишь скрывает текст, оставляя пустую полосу.

Способ 3. Создание индивидуального макета для заголовка группировки

Рассмотрим профессиональный подход, который позволяет полностью контролировать визуальную составляющую без удаления строк «по живому». Вместо того чтобы рисовать макет для всего отчета (что трудозатратно), мы создадим макет только для заголовка конкретной группировки. Разберем по шагам:

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

Благодаря объединению ячеек в макете, СКД при выводе «поглотит» место, предназначенное для заголовка ресурса, и визуально в шапке останется только одна строка с названием группировки. Это наиболее «чистый» способ с точки зрения архитектуры СКД.

Способ 4. Настройка «Расположение заголовков ресурсов»

Проанализируем возможности системных настроек. В СКД на уровне всего отчета или конкретной таблицы есть вкладка «Другие настройки». Найдем параметр Расположение заголовков ресурсов.

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

Способ 5. Программная модификация макета компоновки

Если нам нужно гибкое решение, которое не зависит от итогового табличного документа, мы можем вмешаться в процесс генерации макета. Разберем ситуацию: между схемой (СКД) и результатом стоит объект МакетКомпоновкиДанных. Мы можем перехватить его до того, как он попадет в процессор компоновки:


КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиОтчета, ДанныеРасшифровки);

// Здесь можно перебрать элементы МакетКомпоновки.Тела и найти заголовки
// Это сложный путь, требующий понимания внутренней структуры макета,
// но он позволяет менять оформление динамически до вывода данных.

Этот метод позволяет программно изменить высоту строк или объединить области непосредственно в структуре макета, что гораздо надежнее простого удаления строк из готового документа, так как мы работаем с логическими элементами отчета.

Резюме

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

← На главную