Содержание
- Краткий
Обзор
- ReportSmith
- Компонент
TReport
- Добавление
TReport в приложение
- Свойства
TReport
- Методы
TReport
- Передача
переменной в отчет
- Пример
использования Delphi + ReportSmith
- Создание
отчета в ReportSmith
- Краткий
Обзор
- Важной
составной частью приложения
является вывод данных на
печать - получение отчета. В
пакет Delphi входит средство для
генерации и печати отчетов -
ReportSmith. Вы можете объединить
отчет с приложениями Delphi.
Также, библиотека визуальных
компонент Delphi включает
специальный компонент TReport. В
данном уроке показано, как
использовать компоненту TRepor и
рассмотрены основные принципы
проектирования отчетов в
ReportSmith.
- ReportSmith
Borland ReportSmith
является инструментом для
получения отчетов и интегрирован в
среду Delphi. Он может быть вызван
непосредственно из меню Tools. Отчет
может быть добавлен к приложениям
Delphi, для этого есть компонента TReport
на странице Data Access Палитры
Компонентов. Войти в ReportSmith можно,
нажав правую кнопка мыши на
компоненте TReport и выбрав пункт
контекстного меню (popup menu) или
двойным щелчком левой кнопки мыши
на компоненте TReport на форме.
Отчеты могут
быть созданы для SQL БД или локальных
БД и не требуют знания сложных
команд БД. Интерфейс ReportSmith
использует стандартные
инструменты Windows 3.1 типа tool bar, formatting
ribbon, и “drag and drop”. Если пользователь
уже знаком с интерфейсом
стандартных Windows-программ, типа Word
for Windows или Quattro Pro for Windows, ему будет
“знаком” и интерфейс ReportSmith. ReportSmith
предлагает 4 типа отчетов:
Табличный, Кросс-таблица(CrossTab),
Форма(Form) и Наклейка(Label).
ReportSmith
использует концепцию “живых
данных”, т.е. работа происходит с
настоящими данными все время, а не
только тогда, когда запускается
просмотр (preview). Кроме этого, ReportSmith
легко работает с чрезвычайно
большими БД при помощи адаптивной
технологии управления памятью. В
ReportSmith можно управлять тем, где
сохраняется результат выборки
данных из БД: в локальный памяти
клиентской PC, на жестком диске
клиентской PC, или на сервере.
ReportSmith
включает поддержку:
- Встроенных
шаблонов и стилей
- Отчетов
типа перекрестных таблиц
(Cross tab)
- Отчетов
в виде почтовых адресов
- Вычисляемых
полей и полей суммирования
- Многоуровневой
сортировки и группировки
- Многоуровневых
отчетов (master-details)
Отчеты,
созданные с помощью ReportSmith могут
распространяться бесплатно вместе
с ReportSmith runtime-модулем. Конечные
пользователи могут купить полную
версию ReportSmith, для того чтобы
создать свои собственные отчеты.
Информация о ReportSmith доступна в
руководстве ReportSmith for Windows - Creating Reports
из коробки Delphi.
- Компонент
TReport
- Библиотека
визуальных компонент
Delphi включает объект
TReport. TReport обеспечивает
вызов из программы Delphi
программы ReportSmith runtime и
печати отчета. TReport
расположен на
странице Data Access
Палитры Компонент.
- Добавление
TReport в приложение
- Добавить
отчет в приложение Delphi
очень легко. Положите
компонент TReport на
форму. Инспектор
Объектов Delphi
показывает, что
компонент TReport имеет
несколько свойств и ни
одного события.

Рис.1:
Инспектор объектов
для свойств TReport
- Свойства
TReport
- У
TReport есть следующие
свойства:
AutoUnload
определяет,
выгружается ли ReportSmith
Runtime из памяти после
завершения печати
отчета. Если AutoUnload True,
то ReportSmith Runtime
выгружается, как
только закончена
пересылка отчета на
печать. Если AutoUnload False,
то ReportSmith Runtime остается
в памяти. Например,
можно создать
приложение, которое
включает пункт меню,
запускающий отчет.
После того, как отчет
выполнился, можно
пожелать, чтобы ReportSmith
Runtime остался в памяти,
и повторно отчет
напечатается быстрее.
Чтобы выгрузить ReportSmith
Runtime из памяти при
AutoUnload=False, нужно
вызывать метод
CloseApplication.
EndPage
указывает последнюю
страницу отчета,
которая будет
напечатана.
По-умолчанию это 9999
(чтобы напечатать весь
отчет).
InitialValues -
строка переменных
отчета, которые
используются отчетом
при запуске (если
таковые имеются).
Например, в отчет
можно передавать из
программы начальную и
конечную даты для
выборки данных.
Указывая значения
этих переменных, не
требуется
использовать диалоги
для ввода во время
выполнения отчета.
MaxRecords -
количество записей БД,
которые вы хотите
использовать для
создания отчета.
Например, если вы
хотите только
просмотреть примерный
отчет, а ваша БД
содержит 50,000 записей,
вы можете определить в
MaxRecords величину,
которая ограничивает
число записей в отчете
значительно меньшей
величиной, например 100.
Это тот же самое, что и
использование ReportSmith в
draft режиме.
PrintCopies
определяет, сколько
копий отчета будут
напечатаны.
ReportDir -
каталог, где хранятся
файлы отчетов.
Определяя каталог
отчета, не нужно
включать туда имя
файла отчета.
ReportName
содержит имя отчета,
который нужно
выполнить. Здесь можно
указать полное имя
отчета (каталог + имя
файла), если вы не
определили каталог в
свойстве ReportDir или
хотите выполнить
отчет, которое
сохранен в другом
месте. Если св-во ReportDir
определено, то имя
каталога опускается и
просто указывается
имя отчета.
StartPage -
номер страницы, с
которой вы хотите
начать печатать отчет.
По-умолчанию равен 1.
- Методы
TReport
- Методы
TReport включают:
CloseReport прекращает
печать отчета.
CloseApplication
прекращает выполнение
ReportSmith Runtime, если он
запущен.
Connect служит
для установления
соединения с SQL БД.
Print -
функция, проверяет,
идет ли печать в
данный момент.
RecalcReport
пересчитывает и
перепечатывает отчет
с новым значением для
переменной отчета,
предварительно
измененной методом
SetVariable.
Run
запускает ReportSmith Runtime,
выполняет отчет
указанный в свойстве
ReportName, и посылает
отчет на принтер.
RunMacro - вызывает
выполнение в ReportSmith
макроса (программы,
написанной на ReportSmith
Baisc).
SetVariable
изменяет значение
переменной отчета.
Параметр Name
определяет, какая
переменная
изменяется, и параметр
Value определяет новое
значение. После вызова
метода SetVariable, ваше
приложение может
вызывать метод RecalcReport,
который пересчитывает
и перепечатывает
отчет с новым
значением переменой.
-
- Передача
переменной в отчет
- Следующий
код показывает, как
передать переменную в
отчет. В примере
строковой переменной
отчета 'City'
присваивается
значение 'Bombey'.
Подразумевается, что
есть готовый отчет с
данной переменной.
Поместите
компонент TReport на
форму и установите
требуемые свойства
для вызова печати
отчета. Напишите
обработчик OnClick для
кнопки Button1 на форме
(кнопка - для простоты)
:
procedure
TForm1.Button1Click(Sender: TObject);
begin
Report1.InitialValues.Clear;
Report1.InitialValues.Add('@City=<Bombey>');
Report1.Run;
end;
- Пример
использования Delphi +
ReportSmith
- Завершенное
приложение Delphi + ReportSmith
есть в примерах к
данному уроку.
Приложение позволяет
выбрать имя отчета в
диалоге открытия
файлов и выполнить
этот отчет. Код для
кнопки PrintReport
(Печатать отчета)
показан ниже.
procedure
TForm1.PrintReportClick(Sender: TObject);
begin
if
OpenDialog1.Execute then begin
Report1.ReportName
:= OpenDialog1.Filename;
Report1.Run
end
end;
- Создание
отчета
В данной
главе показан пример построения
достаточно простого отчета на
основе данных из таблиц, которые
находятся в каталоге \DELPHI\DEMOS\DATA. В
отчете для каждого заказчика будет
выводиться список его заказов с
сортировкой по имени заказчика. Для
этого потребуется использовать
таблицы ORDERS.DB (заказы) и CUSTOMER.DB
(заказчики).
Запустите
ReportSmith. Он попросит вас открыть
отчет (если отчет уже существует, то
можно выбрать имя отчета). Чтобы
построить новый отчет, нажмите
кнопку Cancel и затем в меню ReportSmith
выберите пункт File|New. ReportSmith
попросит выбрать тип отчета,
который вы хотите построить (см.
рис.2). В нашем примере мы будем
строить табличный отчет (Columnar report).

Рис.2: Диалог выбора
типа отчета
Если данных в
таблицах много, то лучше выбрать
режим Draft прежде, чем нажать OK. В
этом случае ReportSmith спросит, сколько
записей вы хотите использовать при
построении отчета. Когда отчет
запускается на выполнение, то будут
использоваться все записи или то
число, которое вы определяете в
свойстве MaxRecords.
После выбора
типа отчета укажите ReportSmith
таблицу(ы), по которым вы хотите
сделать отчет (см. рис.3).

Рис. 3: Диалог
добавления таблиц в отчет.
Для
добавления таблицы в отчет нажмите
кнопку "Add table...", выберите тип
таблицы Paradox (IDAPI) (см. рис.4), и
выберите таблицу CUSTOMER.DB из каталога
\DEMOS. Точно также добавьте таблицу
ORDERS.DB. Следующим шагом нужно
установить условия, по которым
будет выполняться соединение
таблиц при выполнении отчета. В
данном случае они связаны по полю
CustNo - код заказчика. Установки связи
между таблицами происходит в
соответствующем диалоге при
нажатии кнопки “Add new link…” (см.
рис.5). Предварительный этап
закончен и можно нажать кнопку
“Done”.

Рис. 4: Диалог
добавления таблицы в отчет

Рис. 5:
Определение связи между таблицами
ReportSmith
считает данные из таблиц и создаст
начальный табличный отчет. В нашем
отчете слишком большое количество
столбцов и он не умещается по
ширине на стандартной странице.
Можно убрать ненужные колонки,
выбирая столбец и нажимая клавишу
Del. Удалите все столбцы кроме OrderNo,
SaleDate, ShipDate, paymentMethod, AmountPaid. ReportSmith
позволяет изменить ширину колонки
с помощью мыши. Теперь отчет
выглядит примерно так, как на рис.6.

Рис. 6: Отчет с
выбранными полями
Однако, пока
это не то, что нам нужно - в отчете
нет информации о заказчике, для
которого данный заказ
предназначен. Прежде, чем добавить
эту информацию нужно сгруппировать
записи в отчете по принадлежности
заказчику. Это делается в пункте
меню Tools|Report Grouping… (см. рис.7). Просто
выберите поле группировки (в нашем
случае нужно сгруппировать записи
по коду заказчика - поле CustNo) и
нажмите кнопку “OK”. Следующим
шагом добавим Header и Footer (т.е. поле
перед группой и после нее) для
каждой группы. Это выполняется в
пункте меню Insert|Headers/Footers (см. рис.8).

Рис. 7:
Диалог группировки записей в
отчете

Рис. 8:
Добавление Header/Footer для группы
В дальнейшем,
в Header для группы мы поместим
информацию о заказчике, а в Footer -
итоговую сумму всех заказов (т.е.
сумму по полю AmountPaid для данной
группы). А теперь наш отчет имеет
вид, представленный на рис.9. (Для
того, чтобы показывались названия
полей в каждой группе нужно вызвать
пункт меню Insert|Field Labels…)

Рис. 9: Отчет
с группами записей и полями перед и
после них
Для того
чтобы добавить данные в Header нужно
выбрать пункт меню Insert|Field. Появится
соответствующий диалог (см. рис.10). В
этом диалоге требуется указать
поле, которое вы хотите вставить в
отчет, нажать кнопку “Insert” и
щелкнуть мышью в то место на отчете,
куда его нужно поместить. В нашем
отчете это будет поле Company и
размещаться оно будет в заголовке
группы (Header). Кроме того, если нужно,
чтобы названия компаний в отчете
шли в алфавитном порядке, то это
можно указать в пункте меню
Tools|Sorting… В диалоге укажите поля для
сортировки - Company и OrderNo (номера
заказов внутри каждой группы
должны быть также упорядочены).
После этого нажмите “Done”.

Рис. 10:
Диалог добавления поля в отчет
Теперь
добавим суммирующее поле в Footer для
группы. Для этого выберите пункт
меню Tools|Summary Fields… В диалоге нужно
выбрать группу CustNo_Group, поле AmountPaid,
операцию Sum и нажать “Add To Group”(см.
рис.11). Далее, по аналогии с полем
Company, добавьте суммирующее поле в
Footer группы (в диалоге вставки поля
пункта меню, рис.10, в верхнем ComboBox’е
нужно выбрать Summary Fields).
Отчет готов,
его вид показан на рис.12.

Рис. 11:
Диалог определения полей
суммирования

Рис. 12: Готовый отчет.
|