Как убрать лишние строки в отчете СКД при использовании макетов заголовка группировки

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

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

Понимаем разницу между макетом заголовка и макетом группировки

Прежде всего, проанализируем, как СКД воспринимает структуру отчета. В системе существует два принципиально разных типа макетов для группировок.

  1. Макет заголовка группировки: Этот макет отвечает исключительно за «шапку» над данными. Он выводится один раз перед началом вывода строк самой группировки.
  2. Макет группировки: Этот макет определяет, как будет выглядеть сама строка с данными (или строка итогов по группировке).

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

Решение 1: Управление расположением итогов

Выясним причину появления строки через настройки итогов. Часто «лишняя строка» — это не что иное, как стандартная строка группировки, которая выводится по умолчанию. Рассмотрим, как ее подавить:

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

Важный нюанс: Если вы установите «Нет» для итогов, то значения ресурсов (сумм) в этой строке могут исчезнуть. Учтите, что иногда стандартными средствами добиться нужного поведения сложно, и может потребоваться программное изменение заголовка группировки отчета СКД. Если вам нужно выводить и красивый заголовок, и данные в одной строке, использование макета заголовка — не лучший путь. В этом случае лучше использовать Макет группировки с типом «Заголовок».

Решение 2: Проверка именованных областей в табличном документе

Иногда причина кроется в технической ошибке при создании самого макета в Табличном Документе. Разберем по шагам, на что обратить внимание:

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

Посмотрим на свойства ячеек в макете. Убедитесь, что у ячеек не установлена настройка «Автовысота строки» при наличии невидимых символов или пробелов. При сложном визуальном оформлении, например, если вам нужно произвести склейку нескольких картинок в одну ячейку на СКД, следите за тем, чтобы высота области макета точно соответствовала контенту.

Решение 3: Отключение автополя

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

Сделаем следующее:

  1. В настройках нужной группировки перейдем на вкладку «Выбранные поля».
  2. Снимем флаг «Использовать стандартные настройки».
  3. Уберем элемент «Авто».
  4. Вручную добавим только те поля, которые действительно должны быть отображены.

Решение 4: Программная обработка результата

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

Рассмотрим пример реализации:


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

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

Резюме и рекомендации

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

Также всегда проверяйте настройки «Выводить заголовок» и «Выводить параметры» в общих настройках отчета. Иногда «лишние строки» — это просто пустые области, зарезервированные под вывод отборов или заголовка самого отчета, которые визуально сливаются с вашей группировкой.

← На главную