назад | содержание | вперед

Проектирование простого отчета

Создадим отчет Список клиентов, используя данные из таблицы customer (Клиенты) базы данных sales.

Для создания отчета необходимо добавить в проект приложения объект DataReport. Выполните это следующим образом:

1. В меню Project (Проект) выберите команду Add Data Report (Добавить отчет). После выполнения этой команды появляется окно объекта DataReport. При помощи окна свойств назовите этот объект SaleReport и, используя свойство caption, присвойте ему заголовок Отчет.

2. После того как объект DataReport добавлен, назначьте для этого отчета источник данных. Для этого в окне DataEnvironmemtMyReport выберите соединение ConnectionMyReport и нажмите кнопку Add Command (Добавить команду) на панели инструментов окна или нажмите правую кнопку мыши и выберите команду Add Command контекстного меню.

3. После того как источник данных. (объект coirmiandl) появился в окне окружения, откройте окно свойств данного объекта, выбрав команду Properties (Свойства) контекстного меню.

4. Присвойте источнику данных имя MyReportCommand.

5. Установите значения полей этого окна как на рис. 18.9, то есть укажите имя таблицы, для которой создается отчет.

Рис. 18.9. Окно настройки источника данных отчета

6. После создания источника можно установить связь отчета с источником данных С ПОМОЩЬЮ СВОЙСТВ отчета DataSource И DataMember. В свойстве DataSource выберите значение DataEnvironmentMy Report, в свойстве DataMember — значение MyReportCommand.

Теперь можно приступить к проектированию формы отчета. Начнем с заголовка отчета, то есть будем работать с разделом Report Header. В отчет будут выведены следующие поля таблицы Customer: код клиента, предприятие, фамилия представителя клиента, страна, город. В заголовке отчета необходимо расположить заголовок самого отчета и заголовки столбцов отчета.

7. Чтобы создать заголовок отчета, выполните следующие действия:

8. Добавьте в следующую строку этого раздела еще пять объектов RptLabel для заголовков столбцов отчета. Назовите их в соответствии с полями таблицы, добавляя префикс rpt и окончание Header: rpticdcustomerHeader, rptCcompanyHeader, rptClastnameHeader, rptCcountryHeader, rptCcityHeader.

В свойство Caption введите соответствующие тексты заголовков: Код клиента. Предприятие, Представитель, Страна, Город. Шрифт установите полужирный, размера 10. Заголовок отчета готов.

9. Вставьте в первую строку раздела Detail объект RptTextBox. В поле установлено значение Unbound, означающее, что объект пока не связан с источником данных. Это будет поле для вывода кода клиента. Назовите этот объект rpticdcustomer. В свойстве DataMember выберите источник данных MyReportCommand, затем в свойстве DataField выберите поле icdcustomer базы данных, соответствующее этому полю отчета. Аналогично добавьте текстовые поля для остальных полей базы данных.

10. Откройте форму приложения и в свойство caption кнопки введите текст Список клиентов.

11. Добавьте в событие click кнопки cbStartReport код, указанный ниже:

Private Sub cbStartReport_Click()

SaleReport.Show

End Sub

12. Запустите приложение на выполнение и нажмите кнопку Список клиентов. Отчет будет выведен в окно просмотра (рис. 18.10).

В окне просмотра отчета можно выполнить следующие действия:

Рис. 18.10. Окно просмотра отчета

Изображения в отчете

Для размещения изображении в отчете используется объект Rptimage (см. табл. 18.2). Добавьте в созданный вами отчет saieReport приложения MyReport изображение с помощью следующих действий:

1. Сместите заголовок отчета Список клиентов вправо для того, чтобы освободить место для изображения.

Рис. 18.11. Отчет с изображением в режиме проектирования

1. Разместите в левом верхнем углу отчета объект Rptimage и назовите его rptImageMyFirm.

2. В свойство picture этого объекта загрузите изображение, воспользовавшись кнопкой с тремя точками. Показанное на рис. 18.11 изображение земного шара (файл с именем Earth) можно найти в папке \Common\Graphics \Icons\Elements. Полученный отчет в режиме проектирования показан на рис. 18.12.

3. Запустите приложение на выполнение. Нажав кнопку Список клиентов, получите отчет, показанный на рис. 18.12.

Рис. 18.12. Окно просмотра отчета с графическим изображением

С помощью объекта DataReport можно создавать достаточно сложные отчеты с использованием большого числа связанных таблиц. Рассмотрим, как это делается.

Группировка данных в отчете

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

Для создания групп в отчете служит команда Insert Group Header/Footer (Вставить заголовок/нижний колонтитул группы), которая появляется в контекстном меню при установке курсора на серую полосу, содержащую заголовок раздела отчета. Удаляются группы командой контекстного меню Delete Group Header/Footer (Удалить заголовок/нижний колонтитул группы).

Замечание

При удалении группы удаляются все размещенные в ней объекты.

Другой способ построения группы заключается в автоматическом создании групп отчета в соответствии с иерархией источника данных. Для этого служит команда Retrieve Structure (Извлечь структуру) контекстного меню, при этом создаются сразу все группы в соответствии с иерархией, заданной в источнике данных. Обратная операция — удаление всех групп — выполняется командой Clear Structure (Очистить структуру) контекстного меню, при этом из отчета удаляются все объекты.

Проектирование отчета с группировкой данных

Создадим более сложный отчет с использованием источника данных со связанными таблицами. Это будет отчет Список заказов, данные для которого находятся в таблицах Customer (Клиенты), OrdSalem (Заказы), OrdSaled (Содержимое заказов) и Goods (Товары) базы данных sales.

Добавьте новый отчет в приложение MyReport командой Add Data Report (Добавить отчет) меню Project (Проект) и назовите его customerOrderReport.

Создание источника данных отчета

Перед проектированием отчета необходимо создать источник данных следующим образом:

1. Добавьте в окно проектирования окружения данных отчета новый источник данных. Для этого установите курсор на объект connectionMyReport и выберите команду Add Command контекстного меню. Переименуйте новый объект в CustomerCommand с помощью команды Rename (Переименовать) контекстного меню.

2. Создайте дочерний объект для customerconimand, выбрав команду Add Child Command контекстного меню.

3. Откройте окно свойств созданного объекта (рис. 18.13).

4. На вкладке General (Основные) этого окна в поле Command Name (Наименование) введите имя объекта OrderCommand, установите опцию Database Object (Объект базы данных), выберите из расположенного рядом списка тип объекта Table (Таблица), после чего из списка Object Name (Наименование объекта) выберите таблицу базы данных OrdSalem.

5. Для настройки связи этой таблицы с родительской перейдите на вкладку Relation (Связь) (рис. 18.14). Информация во всех полях задана по умолчанию. Нажмите кнопку Add (Добавить) для создания связи между родительской и дочерней таблицами, которая появится в списке связей группы Relation Definition (Описание связи).

Рис. 18.13. Окно настройки дочерней таблицы источника данных

Рис. 18.14. Окно настройки связи между родительской и дочерней таблицами

6. Закройте диалоговое окно Свойства, нажав кнопку ОК.

7. Создайте подчиненный объект для OrderCommand, выбрав из контекстного меню команду Add Child Command. Назовите его OrderDetailconmand. В диалоговом окне Свойства настройте параметры подчиненного объекта аналогично настройке для таблицы ordsalem, только выберите в качестве исходной таблицу OrdSaled.

8. Создайте подчиненный объект для orderDetailcommand, выбрав из контекстного меню команду Add Child Command. Назовите его orderGoodsCommand. В диалоговом окне Свойства настройте параметры подчиненного объекта, выбрав в качестве исходной таблицу Goods.

Источник данных настроен и готов для создания отчета и выборки данных в него.

Проектирование отчета

Теперь, после создания источников данных, можно приступать к проектированию отчета CustomerOrderReport:

1. Уменьшите размер сетки области проектирования отчета с помощью свойств Gridx и GridY, установив в них значение 2.

2. Для подключения источника данных в свойстве DataSource выберите значение DataEnvironmentMyReport, в свойстве DataMember — значение CustomerCommand.

3. Для запуска отчета на выполнение добавьте в форму frmMyReportForm еще одну кнопку типа CommandButton и назовите ее cbStartOrderReport. В свойство caption кнопки введите текст Заказы. Вид приложения показан на рис. 18.15.

Рис.18.15. Приложение для проверки работы отчетов

4. В событие click созданной кнопки введите код, с помощью которого отчет CustomerOrderReport будет запускаться для просмотра данных:

Private Sub cb3tartOrderReport_Click()

CustomerOrderReport.Show

End Sub

Продолжим проектирование отчета.

5. Выберите объект CustomerOrderReport.

6. Установите курсор на любую из полос, разделяющих разделы, нажмите правую кнопку мыши и выберите команду Retrieve Structure (Извлечь структуру) контекстного меню. В отчете появятся группы в соответствии с иерархией его источника данных.

7. Начнем проектирование с заголовка отчета (раздел Report Header). Разместите в заголовке объект RptLabel. Откройте окно Properties и в свойстве Name задайте наименование rptHeader. В свойство caption введите текст Список заказов, в свойстве Alignment задайте значение 2-rptJustifyCenter. Установите для этого объекта полужирный шрифт размером 12.

8. Перейдите к первому заголовку группы с наименованием Group Header (CustomerCommand_Header). Разместите в этой группе объект RptTextBox и присвойте ему наименование rptccompany. Для свойства DataMember установите значение источника данных CustomerCommand, из списка свойства DataField выберите поле таблицы cCompany. Установите для объекта шрифт и размер.

9. Перейдите к следующему заголовку группы — Group Header (OrderCommand_Header). Этот заголовок состоит из трех строк. В первой строке разместите два объекта типа RptLabel и назовите их rptCndocHeader И rptDdocHeader. В свойство Caption первого введите заказа, в это же свойство второго — Дата заказа. Свойство Alignment этих объектов установите в значение 2-rptJustifyCenter.

10. Во вторую строку заголовка Group Header введите два объекта типа RptTextBox и назовите их rptCndoc и rptDdoc. Для первого объекта в свойстве DataMember выберите значение OrderCommand, а в свойстве DataField — поле cnDoc. Для объекта rptDdoc В свойстве DataMember выберите значение OrderCommand, в свойстве DataField — поле таблицы dDoc. Свойство Alignment этих объектов установите в значение 2-rptJustifyCenter.

11. В третьей строке заголовка расположите три объекта типа RptLabel и введите для них в свойство caption значения Товар, Количество, Цена.

Замечание

Периодически в процессе создания отчета вы можете запускать приложение на выполнение и, нажимая кнопку Заказы, проверять реальный вид отчета на любой стадии проектирования. Попробуйте сделать это сейчас.

12. Перейдите к проектированию раздела отчета Detail (OrderGoodsCommand_ Detail). Добавьте в этот раздел три объекта типа RptTextBox и назовите ИХ rptCnmgoods, rptNquant И rptNunitprice. Для объекта rptCnmgoods установите свойство DataMember в значение OrderGoodsCommand, а в свойстве DataField выберите поле таблицы cnmGoods. Для объекта rptNquant установите свойство DataMember в значение OrderDetailCommand, выберите в свойстве DataField поле nQuant. Для объекта rptNunitprice уста-новите свойство DataMember в значение OrderDetailCommand, в свойстве DataField выберите поле nUnitprice, а для свойства DataFormat установи-те значение Currency.

13. Запустите приложение на выполнение и нажатием кнопки Заказы вызовите окно просмотра отчета.

В отчете не хватает, по крайней мере, двух очевидных полей: суммы за товар и итоговой информации по заказу. Однако этих полей нет и в базе данных — их необходимо вычислить. Рассмотрим, как это делается.

Вычисляемые поля в отчете

К сожалению, невозможно добавить вычисляемые поля в отчет простым составлением выражении из имеющихся полей. Об их создании необходимо позаботиться еще на стадии построения окружения данных отчета и иметь хотя бы общее представление о выражениях языка SQL для выборки данных из таблиц базы данных.

Чтобы работать с вычисляемыми полями, необходимо создать их в окружении данных отчета. Покажем это на конкретном примере. Добавим в созданный нами отчет CustomerOrderReport поле, вычисляющее стоимость заказа по следующей формуле: Сумма = количвство*Цена.

1. Откройте окно проектирования окружения данных отчета.

2. Установите курсор на источник данных OrderDetailcommand, нажмите правую кнопку мыши и выберите команду Properties (Свойства) контекстного меню. Откроется окно настройки источника данных.

3. Поскольку в таблице OrdSaled отсутствует необходимое нам вычисляемое поле, его нужно создать с помощью выборки данных из этой таблицы. В окне настройки источника данных установите опцию SQL Statement (Выражение SQL) и введите в поле текста выражение для выборки полей таблицы OrdSaled и вычисляемого поля:

Select icdorder, icdgoods, nquant, nunitprice, (nquant * nunitprice) As RowSummary from OrdSaled

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

5. Перейдите на вкладку Relation (Связь) и кнопкой Add (Добавить) восстановите связь с родительским объектом.

6. Выйдите из окна настройки, нажав кнопку ОК.

7. Для восстановления связи с дочерним объектом выберите объект orderGoods Command и откройте окно Properties для настройки. На вкладке Relation восстановите связь и нажмите кнопку ОК.

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

Запустите приложение и выведите отчет в окно просмотра, нажав кнопку Заказы.

Осталось добавить в отчет итоговую сумму по заказу. Это можно сделать с помощью функционального поля отчета.

Функциональные поля в отчете

Функциональные поля в отчете — это поля, в которых вычисляются некоторые функции (см. табл. 18.3) над полями базы данных. Для добавления таких полей в отчет используется специальный объект — RptFunction.

Нам необходимо добавить в отчет итоговую сумму по вычисляемому полю отчета Сумма. Рассмотрим, как это сделать.

1. Добавьте в раздел Group Footer (OrderCommand_Footer) объект RptLabel и введите в свойство Caption текст Итого по заказу.

2. Добавьте в эту секцию объект RptFunction и назовите его rptRowSummary. Значение 0-rptFuncSum свойства FunctionType оставьте без изменений. Установите для свойства DataMember значение OrderDetailCommand и в свойстве DataField выберите поле RowSummary. Для свойства DataFormat установите значение Currency.

3. Запустите приложение на выполнение и просмотрите отчет.

назад | содержание | вперед

Hosting uCoz