Как выводить итоги группировки бэнда в FastReport VCL

10.01.2018

Одна из новых возможностей, которая появилась в FastReport VCL 6 – возможность выводить итоги группировки в заголовочных бэндах. Ранее вы могли выводить итоги только после группировки. Если группа достаточно большая, приходится прокручивать ее вниз, чтобы узнать итог. Гораздо удобнее выводить итог в заголовке группы.

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

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

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

  • Заголовочный бэнд должен иметь парный подвальный бэнд. Это нужно чтобы определять структуру отчета. А вернее, чтобы определять события, которые мы рассмотрим ниже;
  • Парный, подвальный бэнд должен иметь поле, формирующее итог. Такое же поле будет добавлено в заголовочный бэнд. Если вам не нужен итог в подвале группы - просто сделайте его невидимым.

Рассмотрим новое свойство объекта «Текст». Свойство Processing позволяет определить событие, по которому будет выведено значение в этом объекте. На самом деле Processing включает в себя 2 свойства – GroupLevel и ProcessAt. GroupLevel дает возможность установить уровень вложенности групп. Это сделано на случай, если вы используете несколько вложенных группировок. Таким образом вы можете в каждой группе выводить свои итоги в заголовке.

ProcessAt содержит список событий, по которым можно начать обработку поля. Вот возможные значения:

  • paColumnFinished – по окончанию отображения колонки;
  • paCustom – произвольное событие, создаваемое пользователем в скрипте отчета;
  • paDataFinished – после отображения всех данных;
  • paDefault – значение по умолчанию;
  • paGroupFinished – по окончании отображения группы;
  • paPageFinished – по окончании отображения страницы;
  • paReportFinished – по окончании отображения отчета;
  • paReportPageFinished – по окончании отображения страницы шаблона отчета.

Например, вы выбрали формирование итога по завершении группы. Чтобы узнать, что группа закрылась, FR требуется подвал группы. Если выбрали событие завершения страницы, то необходим бэнд подвала страницы.

Теперь рассмотрим все вышеописанное на практике. Нам нужно создать отчет с двумя группами. Одна вложена в другую. Возьмем таблицу Sales из демонстрационной базы данных.

 

Как видно из шаблона, мы создали группу с именем компании. Затем добавили группу с номером заказа. И, наконец, в бэнде «Данные» вывели информацию из заказа. Каждая группа имеет подвал с итогом: [SUM(<Sales."Qty">*<Sales."List Price">, MasterData1)]. В подвале отчета также выводится итог, общий по всем группам.

Наша задача вывести итоги в заголовочных бэндах. Давайте начнем с первой группы. Добавим справа текстовое поле: Total group sum: [SUM(<Sales."Qty">*<Sales."List Price">, MasterData1)]$. В свойствах этого текстового поля находим Processing и задаем значение paGroupFinished:

 

Запустим отчет:

 

А теперь добавим два текстовых поля во вторую группу. Разместим их друг за другом справа. Для первого значение - [SUM(<Sales."Qty">*<Sales."List Price">, MasterData1)]$. Для второго - from [SUM(<Sales."Qty">*<Sales."List Price">, MasterData1)]$

Теперь для первого задаем свойства: GroupLevel – 0, ProcessAt – paGroupFinished.

Для второго задаем те же свойства: GroupLevel – 1, ProcessAt – paGroupFinished.

Тем самым вы выведем сначала итог для текущей группы, а затем для группы выше уровнем. Давайте посмотрим, как это выглядит:

 

Осталось вывести общий итог по всему отчету. Добавляем текстовое поле в заголовок отчета: Total sum: [SUM(<Sales."Qty">*<Sales."List Price">, MasterData1)]$. Для него устанавливаем свойства: GroupLevel – 0, ProcessAt – paReportPageFinished. Запустим отчет:

 

В каждом случае мы выводим поле с одинаковым агрегатным выражением, но получаем разные значения, для групп, заголовка отчета. Все дело во времени формирования итога. В определенный момент времени агрегатная функция имеет разные значения. Именно поэтому важно правильно задавать значение параметра ProcessAt.

20 ноября 2024

Локализация и смена языков в FastReport VCL

FastReport VCL поддерживает 40 языков для локализации интерфейса и позволяет изменять язык на лету через меню или код, без перекомпиляции.
1 ноября 2024

Новые возможности редактора отчетов FastReport VCL

Рассматриваем новые возможности редактора отчетов: выносные линии, подсветка пересекающихся объектов, обновлённые деревья отчетов и данных.
30 октября 2024

Использование стилей при создании отчетов в FastReport VCL

В статье подробно рассматривается одна из новых возможностей FastReport VCL – применение стилей и страниц стилей.