В данной статье выведем Master-Detail отчет с помощью FastReport.
За основу базы данных возьмем следующую модель
Довольно простой пример. Отделы и сотрудники – связь один ко многим. Попробуем аккуратно отобразить данные в нашем отчете FastReport.
Не сгруппированные данные
Для начала попробуем обойтись вот таким набором компонент.Без группировки. Вопрос подключения к БД оставляю за рамками статьи. Можете посмотреть в разделе FireDAC.
в FDQuery1.SQL пропишем
1 |
select*from departments; |
в FDQuery2.SQL пропишем
1 |
select*from employee; |
В frxDBDataset1.DataSet выберем FDQuery1
В frxDBDataset2.DataSet выберем FDQuery2
Теперь перейдем в дизайнер отчетов и заполним его следующим образом
Казалось бы всё логично… А что на самом деле? Нажмём на Ctrl+P и посмотрим…
Ерунду заказывали? Ерунду и получаем)))
В каждом отделе у нас сотрудники из всех отделов, а ведь это совсем не то, что нам нужно !!!
Группировка данных в MasterDetail
Как это исправить? Читаем руководство пользователя и делаем по аналогии. Очень просто, добавим на форму FDQuery3 и напишем простейший SQL запрос в свойстве FDQuery3.SQL
1 2 3 |
select*from departments,employee where departments.Primary_key=employee.Department_key order by departments.Primary_key; |
Если смотреть в workbench, то он выдаст нам следующее множество
Но что с ним делать? С таким множеством? Давайте посмотрим…
Итак, добавим на форму следующие компоненты
В FDQuery3.SQL допишем тот запрос, который мы указали выше.
В frxDBDataset2.DataSet выберем FDQuery3 и свойство UserName назовём Group
Зайдем в дизайнер отчетов и добавим Заголовок группы или GroupHeader из списка “бэндов”. В результате у нас всплывет такое окно. Заполним его следующим образом.
Сам отчет оформим таким образом
Тут стоит отметить, что поскольку в разных таблицах, которые мы объединяли в группу были разные имена, то у нас получились, например Name и Name1, здесь, просто внимательней при выборе полей для отображения!!!
Общая картина у нас получается такая. В принципе можно было бы создать новый проект и не перемешивать старое отображение с новым, но такое перемешивание позволит в одном отчете увидеть сгруппированные и не сгруппированные данные.
Нажмём на просмотр и увидим то, что нам нужно – сотрудники сгруппированы по отдела
Все вместе будет выглядеть так…