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