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