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

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

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

Анализ причин появления лишних разделителей

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

  1. Автоматический вывод итогов: Даже если макет переопределен, СКД может резервировать место под итоги группировки (как в начале, так и в конце). Если область итогов не описана в макете, выводится пустая стандартная строка.
  2. Заголовки полей: Система может пытаться вывести заголовки для дочерней группировки внутри родительской.
  3. Тип расположения группировок: В настройках компоновки параметр РасположениеГруппировок часто стоит в значении Авто, что заставляет систему вставлять дополнительные служебные строки для иерархического разделения.
  4. Ошибки в именованных областях: При создании макета в табличном документе разработчик может случайно включить в область лишнюю пустую строку снизу.

Способ 1: Настройка «Других настроек» компоновки

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

Выполним следующие действия:

Способ 2: Корректировка макета и областей

Теперь рассмотрим ситуацию, связанную непосредственно с макетом. Часто разрыв возникает из-за того, что в макет группировки попадает лишнее пространство. Проанализируем структуру макета на соответствующей вкладке СКД.

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

Если нам необходимо программно или через настройки гарантировать отсутствие разрыва, мы можем прибегнуть к «хитрости» с нулевой высотой:

  1. Создадим в макете отдельную область (одну строку), которая будет служить макетом заголовка или итога.
  2. В свойствах этой строки в табличном документе установим параметр ВысотаСтроки в значение 0.
  3. Назначим эту область в качестве соответствующего макета в СКД. Система выведет ее, но визуально она не будет занимать места, тем самым «схлопнув» нежелательный разрыв.

Способ 3: Управление иерархией и вертикальным расположением

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

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

Работа с Инструментами разработчика

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

С помощью консоли компоновки данных можно увидеть промежуточный результат — дерево компоновки. Если в дереве между узлами группировок присутствуют пустые узлы Header или Footer, значит, СКД честно пытается вывести то, что задано в схеме по умолчанию. Это сигнал к тому, что нужно явно отключить заголовки или итоги в настройках схемы.

Пример настройки программного вывода

Если вы используете программный вывод отчета в табличный документ, мы можем проконтролировать процесс вывода каждой области. Рассмотрим пример кода, который позволяет пропустить вывод пустых областей, если они не содержат данных:


// Пример управления выводом в табличный документ
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);

ПроцессорВывода.НачатьВывод();
Пока Истина Цикл
    ЭлементРезультата = ПроцессорКомпоновки.Следующий();
    Если ЭлементРезультата = Неопределено Тогда
        Прервать;
    КонецЕсли;
    
    // Проанализируем тип элемента
    Если ЭлементРезультата.ЗначенияПараметров.Количество() = 0 
        И ЭлементРезультата.ТипЭлемента = ТипЭлементаРезультатаКомпоновкиДанных.НачалоИерархии Тогда
        // Здесь можно реализовать логику пропуска пустых заголовков
        Продолжить;
    КонецЕсли;
    
    ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);
КонецЦикла;
ПроцессорВывода.ЗакончитьВывод();

Однако помните, что при использовании собственных макетов лучше всего решать проблему на уровне настроек самой схемы (DataCompositionSchema), так как это сохраняет возможность использования отчета в типовых механизмах (например, в БСП).

Резюме

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

← На главную