Друк таблиць за допомогою Quick Reports
Створення звітності за допомогою «Quick Report» завдання не складне. За якихось 10 хвилин ми створили красивий і зручний звіт, який легко роздрукувати. В ньому ми готували до друку один запис з таблиці. Але що робити, якщо потрібно роздрукувати всі записи бази даних? Невже потрібно для кожного рядка ставити окремі компоненти? Звичайно ж ні, все робиться дуже просто.
Відкривайте приклад з минулої частини, зараз його треба буде підкорегувати. Відкрийте модуль «ReportForm», де знаходяться компоненти звітності. Виділіть «QuickRep1» і у властивості «Bands» встановіть true в параметрі «Hascolumnheader». На формі з'явиться новий блок «Column Header», який можна використовувати для створення заголовків таблиць. Тепер утримуючи «Shift» обведіть всі компоненти «QRLabel» в блоці «DetailBand1». Виберіть з меню «Edit» головного меню Delphi пункт «Cut», щоб вирізати компоненти в буфер обміну. Тепер виділіть блок «ColumnHeaderBand1» і виберіть з меню «Edit» головного меню Delphi пункт «Paste», щоб вставити вирізані компоненти з буфера обміну в блок «ColumnHeaderBand1».
Знову виділіть компонент «QuickRep1» і у властивості «DataSet» вкажіть таблицю «DataModule1.BookTable». Якщо зробити це, то компонент «QuickRep1» автоматично перебиратиме всі записи з цієї таблиці і використовуватиме їх в компонентах, які стоять в блоці «DetailBand1».
Запустіть програму та натисніть кнопку друку. Повинне відчинитися вікно, схоже на рис. 1.6:
Рис. 1.6 Вікно попереднього перегляду
Як бачите, блок заголовка і «ColumnHeaderBand1» роздрукувалися лише по одному разу, а блок «DetailBand1» був надрукований для кожного рядка таблиці. Блок заголовків колонок друкуватиметься по одному разу вверху кожної сторінки, а після нього йтимуть рядки таблиць. В принципі, на цьому можна було б закінчити розмову, але необхідно ж створити таблицю, а для цього потрібно намалювати сітку. Ось тут можна відмітити єдиний недолік звітності за допомогою «Quick Report» – кожну комірку доведеться малювати окремо за допомогою компонентів «QRShape».
Друк пов’язанних таблиць
В результаті вийшов досить хороший звіт. Але в телефонному довіднику використовується зв'язана таблиця і хотілося б, щоб у вихідному документі друкувалися всі телефони, що належать людям! Можна знову написати SQL запит, який буде створювати зведену таблицю з двох і потім використовувати цей запит для звіту, замість таблиць, але це не вихід.
Додайте на форму звіта ще один компонент – «QRSubDetail» з закладки «QReport». Цей компонент призначений для перебору даних, що відносяться до підлеглих таблиць. Встановіть у нього наступні властивості:
DataSet – встановіть «DataModule1.TelephonTable», щоб пов'язати блок з таблицею «Телефоны», яка є підлеглою до головного довідника.
Master – тут потрібно вказати головний компонент з основними даними. Оберіть в цій властивості «QuickRep1».
Зараз додайте на цей блок компонент «QRLabel», щоб зробити надпис «Телефон». Праворуч від нього додайте компонент «QRDBText». У нього встановіть властивість «DataSet» в «DataModule1.TelephonTable», а властивість «DataField» в «Телефон» (рис. 1.7):
Рис. 1.7 Вікно попереднього перегляду