При разработке отчетов в Системе компоновки данных (СКД) программисты часто сталкиваются с неприятным поведением системы: при выводе сложных вычисляемых показателей (например, «Сумма продаж», «ЛФЛ %» или различных аналитических коэффициентов) под строкой итогов или на уровне группировок образуются лишние пустые строки. Визуально это портит отчет и путает пользователей.
В этой статье мы подробно разберем природу возникновения этой проблемы, проанализируем структуру компоновки данных и рассмотрим несколько надежных способов ее решения — от правильной настройки ресурсов до создания индивидуальных макетов группировок.
Прежде чем приступать к исправлению, давайте разберем логику работы СКД. Система компоновки данных строго разграничивает понятия детальных записей и ресурсов (итогов). Если вы добавили вычисляемое поле в список выбранных полей отчета, но не определили его как ресурс, СКД будет пытаться вывести это поле для каждой детальной записи.
Когда вычисляемое поле по своей сути является агрегированным показателем (то есть рассчитывается только для групп или отчета в целом), на уровне детальных записей у него просто нет данных. В результате система честно выводит строку детальной записи, но оставляет ячейку вычисляемого поля пустой. Таким образом, под красивой строкой общих итогов появляется шлейф из пустых или полупустых строк, привязанных к детальным записям или нижестоящим группировкам.
Самый простой, быстрый и методологически верный способ убрать пустые строки — это объявить ваши вычисляемые поля ресурсами СКД. Когда поле становится ресурсом, СКД перестает выводить его в секциях детальных записей по умолчанию, если это не настроено явно, и рассчитывает его значение строго по формулам агрегации на уровнях группировок и итогов.
Рассмотрим по шагам, как это сделать:
ЛФЛ_Процент) корректно описано.Посмотрим на пример правильного расчета процента «ЛФЛ» (Like-for-Like) в ресурсах. Нельзя просто написать Сумма(ЛФЛ_Процент), так как сложение процентов по строкам даст неверный математический результат. Мы должны разделить агрегированную сумму продаж текущего периода на агрегированную сумму продаж прошлого периода:
Выбор
Когда Сумма(ПродажиПрошлогоГода) = 0
Тогда 0
Иначе (Сумма(ПродажиТекущегоГода) / Сумма(ПродажиПрошлогоГода) - 1) * 100
Конец
После того как вы определили поле как ресурс, СКД автоматически поднимет его расчет на уровень группировок и общих итогов, избавив отчет от пустых строк детальных записей.
Бывают ситуации, когда вычисляемый показатель имеет смысл рассчитывать только для общего итога по всему отчету, а на уровнях промежуточных группировок (например, по контрагентам или номенклатурным группам) он не нужен и выводит пустые или некорректные данные.
В СКД предусмотрен удобный механизм ограничения расчета ресурсов. Разберем, как его настроить:
Этот простой шаг гарантирует, что на промежуточных уровнях группировок система не будет пытаться рассчитать показатель и выводить пустые ячейки.
Если стандартными настройками ресурсов и структуры не удается добиться желаемого визуального отображения (например, вам требуется вывести показатели в определенные ячейки, изменить структуру заголовков или жестко задать макет строки итогов), на помощь приходят макеты СКД. Этот способ более трудоемкий, но он дает стопроцентный контроль над выводом.
Многие разработчики опасаются использовать макеты, думая, что им придется перерисовывать весь отчет вручную. Это не так. Мы можем создать макет только для одной конкретной группировки или только для строки итогов.
Рассмотрим по шагам процесс создания и привязки макета:
МакетДетальныеЗаписи.МакетДетальныеЗаписи), и тип макета (например, Макет заголовка группировки или Макет группировки).СуммаПродаж).Важный нюанс: Часто возникает вопрос, как указывать область макета, если количество колонок в отчете динамически меняется (например, зависит от выбранного пользователем периода). СКД решает эту проблему автоматически. Вы задаете шаблон одной строки или одной колонки, а СКД при генерации отчета масштабирует и размножает эту область согласно настройкам колонок таблицы, подставляя параметры по именам.
Иногда пустые строки появляются из-за избыточной вложенности групп в настройках выбранных полей. Проанализируем структуру выбранных полей отчета. Если у вас создана сложная иерархия папок и групп в окне «Выбранные поля» (например, папка в папке ради красивого заголовка), СКД может генерировать под них дополнительные служебные строки-контейнеры.
Для устранения этой проблемы попробуйте сделать следующее:
Если пустые строки все равно продолжают выводиться, а структура отчета слишком запутанная, рекомендуем применить классический метод пошаговой отладки компоновки данных. Этот аналитический подход позволяет быстро локализовать источник проблемы:
Шаг 1. Полностью отключите в настройках отчета (снятием флажков видимости) все группировки и выбранные поля, кроме одного ключевого поля и одной базовой группировки.
Шаг 2. Сформируйте отчет. Убедитесь, что пустые строки отсутствуют, а структура выглядит плоской и аккуратной.
Шаг 3. Поочередно добавляйте по одному полю вне групп. На каждом шаге переформировывайте отчет и следите, после добавления какого именно поля или ресурса начинает ломаться верстка и появляются пустые строки.
Шаг 4. Как только проблемное поле найдено, проанализируйте его свойства: задано ли оно как ресурс, рассчитывается ли оно по группировкам и не участвует ли оно в детальных записях без агрегатных функций.
Использование этого системного алгоритма убережет вас от хаотичных правок настроек и позволит быстро привести структуру СКД к идеальному виду.