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