Конструирование отчетов в VeralTest. Часть II

Продолжаем знакомство с генератором отчетов FastReport. В этой статье я хочу познакомить вас с функцией группировки данных, без которой не обходится ни один более-менее серьезный отчет. Дело в том, что подавляющее большинство отчетов основываются на данных, полученных сразу из нескольких таблиц базы данных, иерархически связанных между собой. Например, группы-пользователи, пользователи-тесты-результаты, и т.п. При этом в сам отчет данные поступают в виде одной обобщенной таблицы, которая содержит комбинацию полей из главной и подчиненной таблицы. Если, например, данные поступают из таблиц «пользователи» и «группы», то обобщенная таблица будет иметь следующий вид:

Группа 1

Пользователь 1

Группа 1

Пользователь 2

Группа 1

Пользователь 3

Группа 2

Пользователь 4

Группа 2

Пользователь 5

Группа 2

Пользователь 6

Группа 3

Пользователь 7

Группа 3

Пользователь 8

Функция группировки фактически позволят нам восстановить иерархическую структуру и построить многоуровневый отчет, объединяя данные по повторяющемуся значению одного из полей. Например, так:

Группа 1  
  Пользователь 1
  Пользователь 2
  Пользователь 3
Группа 2  
  Пользователь 4
  Пользователь 5
  Пользователь 6
Группа 3  
  Пользователь 7
  Пользователь 8

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

Напомню, что все действия по управлению отчетами сосредоточены в окне «Настройка отчетов», которое вызывается одноименной командой из меню «Отчеты».

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

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

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

Теперь мы закончили с настройками и можем приступить к созданию шаблона отчета, нажав кнопку «Редактор шаблона».

Для начала поместим в бэнд заголовка текстовый объект, содержащий заголовок отчета, а в дата-бэнд – текстовый объект, связанный с полем «ФИО» (см. предыдущую статью).

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

Для того, чтобы включить группировку в отчете, необходимо добавить в отчет бэнд «Заголовок группы»

При вставке бэнда в шаблон отчета будет выведено диалоговое окно, в котором необходимо указать: по какому полю необходимо производить группировку. Мы указываем поле «Группа».

Расположим бэнд заголовка группы над дата-бэндом и поместим в него текстовый объект, связанный с полем «Группа».

Теперь группировка работает.

Чтобы придать отчету большую наглядность, выделим текст заголовка группы, для этого у текстового объекта можно сделать шрифт жирным и изменить фон.

Займемся теперь подсчетом количества пользователей в группах. Для этого в шаблон отчета необходимо добавить еще один бэнд, который называется «Подвал группы» и разместить его под дата-бэндом.

Поместим в бэнд подвала группы текстовый объект и открывшемся окне редактора текста нажмем кнопку «Вставить агрегатную функцию».

В качестве функции выберем «COUNT» и укажем дата-бэнд, к которому применяется функция – MasterData1.

После вставки текстового объекта, шаблон отчета будет выглядеть следующим образом:

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

Отчет готов. Запустим предварительный просмотр и убедимся в правильности его работы.

Более подробную информацию о составлении отчетов с группами и применении агрегатных функций можно получить в руководстве по FastReport, которое входит в состав справочной системы VeralTest Professional