Довідковий посібник з Delphi - Генератор звітів ReportSmith
- Короткий огляд
- 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 включаєпідтримку:
Звіти, створені за допомогою 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
AutoUnloadвизначає, чи вивантажується ReportSmith Runtime з пам'яті після завершення друку звіту. Якщо AutoUnload True, ReportSmith Runtime вивантажується, як тільки закінчено пересилання звіту на друк. Якщо AutoUnload False, ReportSmith Runtime залишається в пам'яті. Наприклад, можна створити програму, яка включає пункт меню, який запускає звіт. Після того, як звіт виконався, можна побажати, щоб ReportSmith Runtime залишився в пам'яті, і повторно звіт надрукується швидше. Щоб вивантажити ReportSmith Runtime із пам'яті при AutoUnload=False, потрібно викликати метод CloseApplication.
EndPageвказує на останню сторінку звіту, яка буде надрукована. За замовчуванням це 9999 (щоб надрукувативесь звіт).
InitialValues- рядок змінних звіту, які використовуються звітом під час запуску (якщо такі є). Наприклад, у звіт можна передавати з програми початкову та кінцеву дати для вибірки даних. Вказуючи значення цих змінних, не потрібно використовувати діалоги для введення під час виконання звіту.
PrintCopiesвизначає, скільки копій звіту буде надруковано.
ReportDir- каталог, де зберігаються файли звітів. Визначаючи каталог звіту, не потрібно включати ім'я файлу звіту.
ReportNameмістить ім'я звіту, який потрібно виконати. Тут можна вказати повне ім'я звіту (каталог + ім'я файлу), якщо ви не визначили каталог у властивості ReportDir або хочете виконати звіт, збережений в іншому місці. Якщо св-во ReportDir визначено, ім'я каталогу опускається і просто вказується ім'я звіту.
StartPage- це номер сторінки, з якої ви хочете почати друкувати звіт. За замовчуванням дорівнює 1.
CloseReportприпиняє друк звіту.
CloseApplicationприпиняє виконання ReportSmith Runtime, якщо він запущений.
Connectслужить для встановлення з'єднання з SQL БД.
Print- функція, що перевіряє, чи йде друк в даний момент.
RecalcReportперераховує та передруковує звіт із новим значенням для змінної звіту, попередньо зміненої методом SetVariable.
Runзапускає ReportSmith Runtime, виконує звіт вказаний у властивості ReportName, і надсилає звіт на принтер.
RunMacro -викликає виконання ReportSmith макросу (програми, написаної на ReportSmith Baisc).
SetVariableзмінює значення змінної звіту.Параметр Name визначає, яка змінна змінюється, та параметр Value визначає нове значення. Після виклику методу SetVariable, ваша програма може викликати метод RecalcReport, який перераховує та передруковує звіт із новим значенням зміною.
Помістіть компонент TReport на форму та встановіть потрібні властивості для виклику друку звіту. Напишіть обробник OnClick для кнопки Button1 на формі (кнопка - для простоти):
procedure TForm1.Button1Click(Sender: TObject);
procedure TForm1.PrintReportClick(Sender: TObject);
if OpenDialog1.Execute then begin
У цьому розділі показаний приклад побудови досить простого звіту з урахуванням даних з таблиць, які у каталозі \DELPHI\DEMOS\DATA. У звіті для кожного замовника виводитиметься список його замовлень із сортуванням на ім'я замовника. Для цього потрібно використовувати таблиці ORDERS.DB (замовлення) та CUSTOMER.DB (замовники).
Запустіть ReportSmith. Він попросить вас відкрити звіт (якщо звіт вже існує, можна вибрати ім'я звіту). Щоб побудувати новий звіт, натисніть кнопку Cancel, а потім у меню ReportSmith виберіть FileNew. 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: Звіт з вибраними полями
Однак, поки що це не те, що нам потрібно - у звіті немає інформації про замовника, для якого це замовлення призначене. Перш ніж додати цю інформацію, потрібно згрупувати записи у звіті за належністю замовнику. Це у пункті меню ToolsReport Grouping… (див. рис.7). Просто виберіть поле угруповання (у нашому випадку потрібно згрупувати записи за кодом замовника – поле CustNo) та натисніть кнопку “OK”. Наступним кроком додамо Header та Footer (тобто поле перед групою та після неї) для кожної групи. Це виконується у пункті меню InsertHeaders/Footers (див. мал.8).

Мал. 7: Діалог групування записів у звіті

Мал. 8: Додавання Header/Footer для групи
Надалі, в Header для групи ми помістимо інформацію про замовника, а Footer - підсумкову суму всіх замовлень (тобто. суму поля AmountPaid для цієї групи). А тепер наш звіт має вигляд, поданий на рис.9. (Для того, щоб показувалися назви полів у кожній групі, потрібно викликати пункт меню InsertField Labels…)

Мал. 9: Звіт з групами записів та полями перед і після них
Щоб додати дані в Header потрібно вибрати пункт меню InsertFi e ld. З'явиться відповідний діалог (див. рис.10). У цьому діалозі потрібно вказати поле, яке ви хочете вставити у звіт, натиснути кнопку “Insert” і клацнути мишею на те місце на звіті, куди його потрібно помістити. У нашому звіті це буде поле Company і розміщуватиметься воно у заголовку групи (Header). Крім того, якщо потрібно, щоб назви компаній у звіті йшли в алфавітному порядку, то це можна вказати в пункті меню ToolsSorting… У діалозі вкажіть поля для сортуванняCompany та OrderNo (номери замовлень усередині кожної групи повинні бути також упорядковані). Після цього натисніть "Done".

Мал. 10: Діалог додавання поля до звіту
Тепер додамо підсумовування у Footer для групи. Для цього виберіть пункт меню ToolsSummary Fields… У діалозі потрібно вибрати групу CustNo_Group, поле AmountPaid, операцію Sum та натиснути “Add To Group”(див. рис.11). Далі, за аналогією з полем Company, додайте підсумовує поле у Footer групи (у діалозі вставки поля пункту меню, рис.10, у верхньому ComboBox'і потрібно вибрати Summary Fields).
Звіт готовий, його вигляд показано на рис.12.

Мал. 11: Діалог визначення полів підсумовування