Рассмотрим теперь вторую часть руководства по созданию группирующего отчета, т.е. отчета с использованием группировки.

Группирующими называются отчеты, в которых вся информация разделяется на группы данных, объединенных каким-то общим признаком. Например, описания (характеристики), относящиеся к определенному цветку, или на другом примере – список товаров, поставленных конкретным поставщиком.

 

Спецификой группирующего отчета является то, что полосы с данными, относящимися какой-то группе, должны указывать на объект отображения данных в свойстве GroupView и на поле группировки в свойстве GroupKey (см. пункт 25). Поле группировки – это поле, изменение значения которого означает конец предыдущей группы и начало следующей. Обычно такое поле указывается первым в предложении ORDER BY или GROUP BY SQL-запроса.

 

Пусть, например, необходимо получить список всех описаний цветков с группировкой по полю p1 «Название цветка».

 

 

 

Для этого:

 

15. Размещаем в приложении на Модуле данных компонент GROUP (класса TADOQuery), подключенный к БД, со следующим текстом запроса:

 

SELECT * FROM t1, t2, t3

WHERE t1.i1=t2.i1 AND t3.i3=t2.i3

ORDER BY p1

 

 

 

16. С закладки Rave размещаем на Модуле данных компонент ConnectToGroup (класс TRvDataSetConnection), являющийся посредником для взаимодействия отчета с набором данных GROUP, и, заполнив свойство DataSet, связываем его с набором данных

 

 

17. В утилите Rave Reports Designer в уже разработанном проекте отчетов Reports.rav создаем новый отчет (главное меню File -> New Report), и переименовываем его в MyGroupReport

 

18. С помощью команды меню File -> New Data Object создаем в проекте отчетов объект отображения данных типа Direct Data View, ссылающийся на связной компонент ConnectToGroup (класс TRvDataSetConnection) в Delphi-приложении

 

 

19. На пустую страницу можно поместить надписи, графические изображения и другие элементы оформления с вкладок Drawing, Bar Code и Standard среды Rave Designer.

 

20. Далее, на страницу отчета помещаем область отображения данных Region
(с закладки Report) и устанавливаем нужные размеры этой области

 

 

21. В область отображения данных помещаем полосу заголовка отчета (это компонент Band с закладки Report). На нее размещаем компонент Text с закладки Standard, т.е. сам текст заголовка, который указывается в свойстве Text.

 

 

Обращаю внимание на то, что все компоненты, размещенные в проекте отчетов, отображаются справа в дереве конструирования! Отмечу, что те компоненты, у которых на иконке есть красная отметка (например, DataBand, DataText и др.) будут непосредственно связаны с данными, с полями набора данных!

22. Далее, ниже располагаем три полосы:

§ для отображения заголовка данных (полоса Band2);

§ для вывода собственно сгруппированных данных (полоса DataBand1);

§ для итога отображения (полоса Band3).

 

 

23. На заголовочной (Band2) и итоговой (Band3) полосах, а также полосе с детальными данными (DataBand1) располагаем необходимые компоненты DataText для отображения данных из отдельных полей НД, компоненты Bitmap, компоненты Text с названиями полей и, возможно, оформительские компоненты, например, расчерчивающие линии и т.д.

 

 

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

 

 

 

25. Каждая из трех полос (Band2, DataBand1 и Band3) должна иметь ссылку на объект отображения данных в свойстве GroupDataView и группирующее поле в свойстве GroupKey! В нашем примере это поле p1 «Название цветка»

 

 

26. Кроме того, полоса с детальными данными DataBand1 должна быть связана с объектом отображения данных еще через свойство DataView !

 

 

27. В редакторе свойства BandStyle полосы Band2, используемой для отображения заголовка данных, устанавливаем флажок Group Header; у полосы Band3, используемой для итога отображения, – флажок Group Footer. В редакторе свойства BandStyle полосы DataBand1, используемой для отображения сгруппированных данных, флажки в группе Print Location можно не устанавливать

 

28. Заголовочная (Band2) и итоговая (Band3) полосы должны ссылаться на полосу с группой данных (DataBand1) в своем свойстве ControllerBand. Чтобы это стало возможным, средняя полоса с данными должна быть именно компонентом DataBand

 

 

На этом формирование проекта отчетов завершено. Теперь данный проект содержит два отчета: простой (отчет MySimpleReport) и группирующий (MyGroupReport)

 

29. Сохраняем проект под именем Reports.rav

 

 

30. Далее, напоминаю о том, что в Delphi-приложении должен быть размещен на модуле данных компонент MyProject (класс TrvProject) с указанием ссылки на созданный проект отчетов Reports.rav в свойстве ProjectFile, а также, компоненты класса TRvRenderXXXX для обеспечения возможности экспортировать содержимое отчетов в файл при выборе команды File -> Save As

 

 

31. Создаем для предусмотренного ранее подпункта главного меню N7 «Группирующий отчет (Цветы с описаниями)» процедуру-обработчик события OnClick, в которую записываем программный код по открытию группирующего НД, запуску проекта отчетов и формированию разработанного отчета MyGroupReport, и закрытию НД:

 

DM.GROUP.Open;

DM.MyProject.ExecuteReport('MyGroupReport');

DM.GROUP.Close;

 

 

J