Отчеты.

Для проектирования и управления отчетами в Visual Basic 6 используется объектно-ориентированный подход: в распоряжении пользователя имеются специальный объект DataReport и инструментальное средство Data Report Designer (Конструктор отчетов).
Прежде чем приступить к созданию отчета, следует проверить подключение к проекту приложения конструкторов Data Environment (Окружение данных) и Data Report (Отчет данных). Для этого выберите команду Components (Компоненты) меню Project (Проект), в открывшемся диалоговом окне Components перейдите на вкладку Designers (Конструкторы) и проверьте, установлены ли флажки Data Environment и Data Report. Обычно они установлены по умолчанию.
Конструктор отчетов DataReport
Для проектирования отчетов в Visual Basic 6 предназначен объект DataReport, показанный на  1. Этот объект добавляется к проекту с помощью команды Add Data Report (Добавить отчет) меню Project (Проект).
С точки зрения визуального проектирования объект DataReport состоит из нескольких разделов, отображающих функциональные части отчета. Их назначение описано в табл. 18.1.
Таблица 18.1. Разделы отчета


Раздел

Назначение

Report Header (Заголовок отчета)

Отображает заголовок отчета, который выводится однократно перед отчетом

Page Header (Заголовок страницы)

Отображает заголовок страницы, который выводится каждый раз на новой странице отчета

Detail (Детали)

Отображает содержание отчета, каждая строка которого соответствует одной записи в базе данных

Page Footer (Нижний колонтитул страницы)

Отображает текст, выводимый в нижнем колонтитуле страницы каждый раз для новой страницы

Report Footer (Нижний колонтитул отчета)

Отображает текст нижнего колонтитула отчета, выводимый один раз в конце отчета




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

  • Group Header (Заголовок группы) — отображает заголовок группы раздела Detail;
  • Group Footer (Нижний колонтитул группы) — отображает нижний колонтитул группы раздела Detail.

Элементы управления объекта DataReport
В состав объекта DataReport входит набор элементов управления, которые можно использовать при проектировании отчета.
При добавлении объекта к проекту приложения эти элементы управления становятся доступными на панели инструментов ( 2), когда объект DataReport находится в фокусе.

Рис. 18.2. Панель инструментов для объекта DataReport
Назначение элементов управления объекта DataReport приведено в табл. 18.2.
Таблица 18.2. Элементы управления объекта DataReport


Кнопка

Название

Описание

RptLabel

Текстовая строка. Аналог элемента управления Label для форм

RptTextBox

Текстовое поле. Отображает поле базы данных

RptImage

Поле графического изображения

RptLine

Линия. Предоставляет возможность рисовать линии в отчете

RptShape

Фигура. Позволяет рисовать рамки, круги и другие геометрические фигуры в отчете

RptFunction

Дает возможность выполнять вычисления над столбцами отчета. Возможные функции этого элемента управления перечислены в табл. 18.3



 
Таблица 18.3. Функции элемента управления RptFunction


Функция

Описание

Sum

Сумма. Выполняет суммирование столбца для всех строк

Min

Минимум. Находит минимальное значение столбца

Мах

Максимум. Находит максимальное значение столбца

Average

Среднее. Вычисляет среднее арифметическое для столбца среди всех строк

Standard Deviation

Стандартное отклонение. Находит стандартное отклонение для столбца среди всех строк

Standard Error

Стандартная ошибка

Value Count

Счетчик значений (количество строк, в которых содержится значение). Подсчитывает количество строк, содержащих значение

Row Count

Счетчик строк. Подсчитывает количество строк



Свойства объекта DataReport
Как и всякий объект в Visual Basic 6, объект DataReport характеризуется свойствами, основные из которых приведены в табл. 18.4.
Таблица 18.4. Свойства объекта DataReport


Свойство

Назначение

BottomMargin и TopMargin

Размер верхнего и нижнего полей отчета

DataMember

Задает объект Command, используемый для доступа к данным

DataSource

Источник данных

ExportFormats

Набор форматов для экспорта содержимого отчета в файл (табл. 18.5)

Font

Шрифт печати отчета

GridX И GridY

Размер сетки по горизонтали и вертикали

LeftMargin и RightMargin

Размер левого и правого полей отчета

ReportWidth

Ширина отчета

Sections

Раздел отчета

Title

Текст заголовка отчета



 
Для записи данных в файл необходимо с помощью свойства ExportFormats указать один из четырех форматов экспорта, перечисленных в табл. 18.5.
Таблица 18.5. Форматы экспорта данных отчета


Член коллекции

Расширение файла

Описание

ExportFormats (1)

htm, html

Формат HTML

ExportFormats (2)

htm, html

Формат HTML в универсальной кодировке

ExportFormats (3)

txt

Текстовый формат

ExportFormats (4)

txt

Текстовый формат в универсальной кодировке



Методы объекта DataReport
Для управления объектом DataReport используются методы, представленные в табл. 18.6.
Таблица 18.6. Методы объекта DataReport


Метод

Описание

ExportReport

Обеспечивает вывод данных отчета в файл

PrintReport

Выводит данные отчета на печать

Refresh

Обновляет данные отчета

Show

Выводит данные отчета в окно предварительного просмотра перед печатью или сохранением в файле

Метод ExportReport
Метод ExportReport имеет следующий синтаксис:
DataReport.ExportReport ExpFormat, FileName, Owerwrite, ShowDialog, Range, PageFrom, PageTo
где:

  • ExpFormat — формат экспорта (табл. 18.5);
  • FileName — имя файла, в котором сохраняется отчет;
  • Owerwrite — задает признак перезаписи файла, принимает значение True (Истина) или False (Ложь);
  • ShowDialog — задает признак вызова диалогового окна Export (Экспорт) для выбора файла;
  • Range — задает признак экспорта части отчета, принимает значение True (Истина) или False (Ложь);
  • PageFrom — задает начальную страницу при экспорте части отчета;
  • PаgеTо — задает последнюю страницу при экспорте части отчета.

Формат для вывода файла выбирается из коллекции ExportFormats, значения которой указаны в табл. 18.5. Для назначения формата можно использовать служебные константы и ключи (табл. 18.7).
Таблица 18.7. Константы и ключи для форматов экспорта данных отчета


Член коллекции

Ключ

Константа

ExportFormats (1)

keydefHTML

rptKeyHTML

ExportFormats (2)

keydefUnicodeHTMLUTF8

rptKeyUnicodeHTMLUTF8

ExportFormats (3)

keydefText

rptKeyText

ExportFormats (4)

keydefUnicodeText

rptKeyUnicodeText



 
Замечание
Все параметры метода ExportReport являются необязательными. При использовании этого метода необходимо помнить, что он не поддерживает экспорт изображений и графических элементов отчета.
Метод PrintReport
Метод PrintReport имеет следующий синтаксис:
DataReport.PrintReport ShowDialog, Range, PageFrom, PageTo
где:

  • ShowDialog — задает признак вызова диалогового окна Print (Печать) для настройки параметров печати;
  • Range — задает признак экспорта части отчета, принимает значение True (Истина) или False (Ложь);
  • PageFrom — задает начальную страницу при экспорте части отчета;
  • PageTo — задает последнюю страницу при экспорте части отчета.

Замечание
Параметры метода PrintReport являются необязательными.
Методы Showw Refresh
Метод show имеет синтаксис, представленный ниже:
DataReport.Show
При просмотре отчета его можно пролистать и, при необходимости, распечатать из окна просмотра.
Синтаксис метода Refresh тоже очень прост:
DataReport.Refresh
События объекта DataReport
Объект DataReport взаимодействует с другими объектами с помощью следующих событии, перечисленных в табл. 18.8.
Таблица 18.8. События объекта DataReport отчета


Событие

Описание

Error

Возникает при ошибках вывода данных отчета

ProcessingTimeout

Предоставляет пользователю возможность приостановки асинхронных операций (просмотр, печать, вывод в файл) отчета

QueryClose

Возникает перед закрытием отчета. Предшествует событию Terminate

Activate

Возникает при появлении отчета в активном окне просмотра отчета

Deactivate

Возникает, когда отчет перестает находиться в активном окне

Resize

Возникает, когда окно отчета изменяет размеры

Initialize

Возникает при создании объекта

Terminate

Возникает при уничтожении объекта и удалении его из памяти



Создание отчетов
Теперь, после рассмотрения основных характеристик объекта DataReport, перейдем к практическому проектированию отчетов. Сначала создадим приложение для работы с отчетами:
1. Откройте новый проект типа Standard EXE.
2. В меню Project (Проект) выберите команду Projecti Properties (Свойства проекта) и в поле Project Name (Наименование проекта) открывшегося диалогового окна введите наименование MyReport.
3. Форме присвойте имя frmMyReportForm и, используя свойство caption, задайте заголовок формы Управление отчетами.
4. Для проверки работы отчета разместите в форме кнопку управления типа CommandButton и назовите ее cbStartReport. Полученное приложение показано на  3.
5. Сохраните проект и форму.
Окружение данных отчета
Любой отчет создается для вывода конкретной информации. При проектировании отчета необходимо создать и сохранить окружение данных. Для этого выполните следующие действия:
1. В меню Project (Проект) выберите команду More ActiveX Designers (Другие конструкторы ActiveX), а затем значение Data Environment (Окружение данных). Открывается окно DataEnvironmentI, содержащее соединение Connectioni.
2. С помощью команды Properties Window (Окно свойств) меню View (Вид) откройте окно свойств и измените DataEnvironmentI на DataEnvironmentMyReport, а также наименование соединения на ConnectionMyReport ( 4).
3. Установите курсор на соединение ConnectionMyReport, нажмите правую кнопку мыши и выберите команду Properties (Свойства) контекстного меню. Открывается диалоговое окно Data Link Properties (Свойства связи сданными) ( 5).
4. На вкладке Provider (Поставщик услуг) выберите поставщика услуг.
5. Перейдите на вкладку Connection (Подключение) и укажите имя базы данных, для которой будет создаваться отчет ( 6).
6. Чтобы проверить правильность соединения, нажмите кнопку Test Connection (Проверить подключение). Диалоговое окно с сообщением о проверке соединения показано на  7.
7. Для подтверждения выполненных действий закройте окно Data Link Properties, нажав кнопку ОК.
8. Выполнив все действия по созданию среды окружения данных, необходимо проверить наличие таблиц и данных в выбранной для проектирования отчета базе данных. Для этого откройте окно Data View (Просмотр данных) доступа к базе данных ( 8), выбрав команду Data View Window (Окно просмотра данных) меню View (Вид) или нажав кнопку Data View Window на панели инструментов.
Проектирование простого отчета
Создадим отчет Список клиентов, используя данные из таблицы 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. Установите значения полей этого окна как на  9, то есть укажите имя таблицы, для которой создается отчет.
6. После создания источника можно установить связь отчета с источником данных С ПОМОЩЬЮ СВОЙСТВ отчета DataSource И DataMember. В свойстве DataSource выберите значение DataEnvironmentMy Report, в свойстве DataMember — значение MyReportCommand.
Теперь можно приступить к проектированию формы отчета. Начнем с заголовка отчета, то есть будем работать с разделом Report Header. В отчет будут выведены следующие поля таблицы Customer: код клиента, предприятие, фамилия представителя клиента, страна, город. В заголовке отчета необходимо расположить заголовок самого отчета и заголовки столбцов отчета.
7. Чтобы создать заголовок отчета, выполните следующие действия:

  • щелкните мышью кнопку RptLabel на панели элементов управления, установите курсор в первую строку раздела Report Header и нарисуй те рамку большого размера;
  • при помощи окна свойств установите имя объекта rptRepTitle;
  • в свойство caption введите текст заголовка Список клиентов;,
  • для свойства Alignment установите значение 2-rptJustifyCenter;
  • с помощью свойства Font установите начертание шрифта Полужир ный и размер 12.

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. Запустите приложение на выполнение и нажмите кнопку Список клиентов. Отчет будет выведен в окно просмотра ( 10).
В окне просмотра отчета можно выполнить следующие действия:

  • вывести отчет на печать с помощью кнопки Print (Печать);
  • экспортировать отчет в файл кнопкой Export (Экспорт);
  • задать масштаб просмотра отчета с помощью списка Zoom (Масштабирование);
  • перелистать страницы отчета, используя элемент управления выбора страниц Pages (Страницы), расположенного в нижней части окна просмотра.

Изображения в отчете
Для размещения изображении в отчете используется объект Rptimage (см. табл. 18.2). Добавьте в созданный вами отчет saieReport приложения MyReport изображение с помощью следующих действий:
1. Сместите заголовок отчета Список клиентов вправо для того, чтобы освободить место для изображения.
1. Разместите в левом верхнем углу отчета объект Rptimage и назовите его rptImageMyFirm.
2. В свойство picture этого объекта загрузите изображение, воспользовавшись кнопкой с тремя точками. Показанное на  11 изображение земного шара (файл с именем Earth) можно найти в папке \Common\Graphics \Icons\Elements. Полученный отчет в режиме проектирования показан на  12.
3. Запустите приложение на выполнение. Нажав кнопку Список клиентов, получите отчет, показанный на  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. Откройте окно свойств созданного объекта ( 13).
4. На вкладке General (Основные) этого окна в поле Command Name (Наименование) введите имя объекта OrderCommand, установите опцию Database Object (Объект базы данных), выберите из расположенного рядом списка тип объекта Table (Таблица), после чего из списка Object Name (Наименование объекта) выберите таблицу базы данных OrdSalem.
5. Для настройки связи этой таблицы с родительской перейдите на вкладку Relation (Связь) ( 14). Информация во всех полях задана по умолчанию. Нажмите кнопку Add (Добавить) для создания связи между родительской и дочерней таблицами, которая появится в списке связей группы Relation Definition (Описание связи).
6. Закройте диалоговое окно Свойства, нажав кнопку ОК.
7. Создайте подчиненный объект для OrderCommand, выбрав из контекстного меню команду Add Child Command. Назовите его OrderDetailconmand. В диалоговом окне Свойства настройте параметры подчиненного объекта аналогично настройке для таблицы ordsalem, только выберите в качестве исходной таблицу OrdSaled.
8. Создайте подчиненный объект для orderDetailcommand, выбрав из контекстного меню команду Add Child Command. Назовите его orderGoodsCommand. В диалоговом окне Свойства настройте параметры подчиненного объекта, выбрав в качестве исходной таблицу Goods.
Источник данных настроен и готов для создания отчета и выборки данных в него.
Вычисляемые поля в отчете
К сожалению, невозможно добавить вычисляемые поля в отчет простым составлением выражении из имеющихся полей. Об их создании необходимо позаботиться еще на стадии построения окружения данных отчета и иметь хотя бы общее представление о выражениях языка 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.

  • Добавьте в раздел заголовка второй группы Group Header (OrderConimand_Header) объект RptLabel и введите в свойство caption этого объекта Сумма.
  • В раздел Detail добавьте объект RptTextBox и назовите его rptRowSummary. Установите для свойства DataMember значение OrderDetailCommand и в свойстве DataFieid выберите поле Rowsunimary. Для свойства DataFormat установите значение Currency.

Запустите приложение и выведите отчет в окно просмотра, нажав кнопку Заказы.
Осталось добавить в отчет итоговую сумму по заказу. Это можно сделать с помощью функционального поля отчета.
Функциональные поля в отчете
Функциональные поля в отчете — это поля, в которых вычисляются некоторые функции (см. табл. 18.3) над полями базы данных. Для добавления таких полей в отчет используется специальный объект — RptFunction.
Нам необходимо добавить в отчет итоговую сумму по вычисляемому полю отчета Сумма. Рассмотрим, как это сделать.
1. Добавьте в раздел Group Footer (OrderCommand_Footer) объект RptLabel и введите в свойство Caption текст Итого по заказу.
2. Добавьте в эту секцию объект RptFunction и назовите его rptRowSummary. Значение 0-rptFuncSum свойства FunctionType оставьте без изменений. Установите для свойства DataMember значение OrderDetailCommand и в свойстве DataField выберите поле RowSummary. Для свойства DataFormat установите значение Currency.
3. Запустите приложение на выполнение и просмотрите отчет.

 

 
На главную | Содержание | < Назад....Вперёд >
С вопросами и предложениями можно обращаться по nicivas@bk.ru. 2013 г. Яндекс.Метрика