4.7.3 Подготовка и печать отчетов с помощью QuickReport — компоненты QuickRep, QRSubDetail, QRLabel, QRExpr, QRSysData, QRMemo, QRRichText, QRShape, QRImage

На странице QReport палитры компонентов Delphi имеется множество элементов (см. таблицу 4.2), предназначенных для подготовки и печати отчетов с помощью системы QuickReport. Таблица 4.2. Компоненты системы QuickReport
Пикто-
грамма
КомпонентОписание
QuickRep
(отчет)
Используется для введения в приложение средств печати отчетов QuickReport
QRSubDetail
(детали)
Используется для компоновки в отчет дополнительных данных
QRStringsBand
(полоса текста)
Используется для компоновки в отчет дополнительных текстов
QRBand
(полоса)
Используется для построения отчетов путем размещения на нем печатаемых компонентов
QRChildBand
(дочерняя полоса)
Используется для создания дочерних полос, которые могут содержать другие компоненты QuickRep и полосы
QRGroup
(группировка)
Используется для группировки данных
QRLabel
(метка)
Используется для размещения текста в отчете
QRDBText
(текст из базы данных)
Представляет собой ориентированный на данные компонент для размещения текста в отчете
QRExpr
(математические выражения)
Позволяет вам строить и отображать выражения над полями данных и системными величинами (такими, как время и дата). Свойство Expression компонента включает диалоговое окно Построителя Выражений (Expression Builder), дающее возможность графического построения выражений
QRSysData
(системные данные)
Используется для отображения системных данных
QRMemo
(многострочный текст)
Используется для размещения в отчете многострочных текстов
QRExprMemo
(тексты с математическими выражениями)
Используется для размещения в отчете текстов с математическими выражениями
QRRichText
(многострочный текст RTF)
Используется для размещения в отчете текста в обогащенном формате
QRDBRichText
(многострочный текст RTF базы данных)
Используется для размещения в отчете текста из базы данных в обогащенном формате
QRShape
(форма)
Используется для рисования в отчете графических форм
QRImage
(изображение)
Используется для печати изображений в отчете
QRDBImage
(изображение из базы данных)
Используется для печати изображений из баз данных в отчете
QRCompositeReport
(составной отчет)
Используется для построения составных отчетов
QRPreview
(предварительный просмотр)
Используется для предварительного просмотра на экране подготовленного к печати отчета
QRTextFilter
(фильтр текста)
Используется для установки фильтра текста
QRCSVFilter
(разделитель)
Используется для установки разделителя текста
QRHTMLFilter
(фильтр HTML)
Используется для установки фильтра HTML
QRChart
(диаграммы, графики)
Используется для печати в отчете диаграмм, построенных на основе баз данных

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

QuickReport — это система, позволяющая визуально проектировать отчеты и связывать их с кодом приложения. QuickReport генерирует отчеты, представляемые в виде полос различных типов. Именно для размещения в отчете полос предназначены такие компоненты, как QRSubDetail, QRStringsBand, QRBand, QRChildBand, QRGroup. Однако, понятие полосы тесно связано с отображением информации из баз данных. С этим же связаны такие компоненты, как QRDBTest, QRDBRichText, QRDBImage. Все они в совокупности позволяют строить отчеты, в которых автоматически просматриваются базы данных и отображается их текущее состояние. Но в данном разделе мы сосредоточимся на основном компоненте QuickRep и на компонентах, не связанных с данными. При этом можно строить только простые отчеты, содержащие тексты и рисунки, как показано на рис. 4.16.

Рис. 4.16
Пример отчета

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

Компонент QuickRep имеет ряд свойств, определяющих характеристики печати отчета:


PrinterSettingЗадает число копий отчета и диапазон печатаемых страниц.
PageЗадает размер страницы PaperSize (можно установить заказной размер — Custom и определить длину и ширину страницы свойствами Length и Width), ее ориентацию и поля.
OptionsОпределяет, надо ли печатать верхний колонтитул первой страницы (FirstPageHeader) и нижний колонтитул последней (LastPageFooter).
UnitsЗадает единицу измерения размеров страницы, полей и т.п.: миллиметры, дюймы, пиксели и т.д.
ZoomМасштаб печати в процентах.
ReportTitleЗаголовок окна предварительного просмотра.

Перенесите на форму компонент QuickRep и посмотрите перечисленные и иные его свойства в Инспекторе Объектов. Одно из основных свойств — Bands. Оно имеет ряд подсвойств. Отметим из них следующие: HasTitle — имеется полоса заголовка отчета, HasDetail — имеется полоса детализации, HasPageHeader — имеется верхний колонтитул (заголовок) на каждой странице отчета, HasPageFooter — имеется нижний колонтитул на каждой странице отчета. Для дальнейшего рассмотрения компонентов установите в true свойство HasDetail. На компоненте QuickRep появится слабо видимая полоса с надписью «Detail». На этой полосе, увеличив при необходимости ее размеры, можно размещать компоненты, которые отображают ту или иную информацию: QRLabel, QRExpr, QRSysData, QRMemo, QRRichText, QRShape, QRImage.

Компонент QuickRep имеет два основных метода: Preview — предварительный просмотр, и Print — печать. Предварительный просмотр и даже печать отчета можно осуществлять и в процессе проектирования. Для этого надо щелкнуть правой кнопкой мыши на компоненте QuickRep и из всплывшего меню выбрать команду Preview. Перед вами откроется окно предварительного просмотра, в котором, в частности, имеется кнопка печати.

Компоненты QRLabel, QRMemo, QRRichText, QRShape, QRImage, размещаемые на полосах отчета, являются аналогами обычных компонентов — Label, Memo, RichEdit, Shape, Image, которые уже рассматривались ранее. Основной особенностью соответствующих компонентов QuickReport является их способность печататься в тех полосах отчета, в которых они размещены. Компоненты имеют два свойства, отсутствующих в обычных компонентах: Frame и Size.

Свойство Frame имеет ряд подсвойств, определяющих рамку вокруг компонента: Color — цвет, Style — стиль, Width — ширина, DrawBottom, DrawLeft, DrawRight, DrawTop — определяют наличие рамки соответственно внизу, слева, справа и вверху компонента.

Свойство Size имеет подсвойства, определяющие размер и место размещения компонента при печати. Все определяется в единицах измерения, заданных свойством Units компонента QuickRep.

Некоторые компоненты имеют свойство AlignToBand — выравнивание в полосе. Если это свойство установить в true, то компонент будет выровнен по краю полосы, заданному свойством Alignment: taLeftJustify — влево, taCenter — по центру, taRightJustify — вправо.

Остановимся теперь на свойствах отдельных компонентов. Интересное свойство имеет компонент QRRichTextParentRichEdit. Это свойство указывает на обычный компонент RichEdit, текст из которого автоматически передается в компонент QRRichText. Вы можете, например, ввести в свое приложение компонент RichEdit и предоставить пользователю возможность вводить в него нужный текст, форматируя соответствующим образом слова и абзацы. Этот текст будет автоматически переноситься в отчет — в размещенный в нем компонент QRRichText. Впрочем, и в другие компоненты QuickReport можно программно заносить тексты и изображения, задаваемые пользователем. Например, вы можете ввести в свое приложение компонент Edit и предоставить пользователю возможность вводить в него нужный текст. А перед предварительным просмотром или печатью отчета вы можете перенести этот текст, например, в метку QRLabel, оператором

QRLabel1.Caption:=Edit1.Text;

Компонент QRExpr позволяет отображать в отчете результаты каких-то вычислений. Основное свойство этого компонента — Expression. Нажав на кнопку с многоточием около этого свойства в Инспекторе Объектов, вы попадете в окно, представленное на рис. 4.17 а. В этом окне вы можете ввести выражение, результаты которого должны отображаться в отчете на месте расположения компонента QRExpr. Элементами выражения могут быть поля базы данных (Database field), такие переменные (Variable), как текущее время, дата, номер страницы и др., функции (Function). Кнопка Validate позволяет вам проверить синтаксическую правильность введенного выражения и посмотреть результат вычисления. Поэкспериментируйте с этим компонентом и вы легко поймете принципы работы с ним.

Пусть, например, вы хотите отобразить текущую дату, включая месяц и год, но не включая числа. Обычно дата отображается в формате «дд.мм.гг». Значит вам надо убрать из этого формата первые три символа, отображающие день. Это можно сделать с помощью функции копирования фрагмента строки COPY(DATE, 4, 5), в которой первый аргумент указывает строку, второй — индекс первого копируемого символа, третий — число копируемых символов. В приведенном примере DATE — функция, возвращающая текущую дату в виде строки.

Рис. 4.17
Окна ввода выражений компонента QRExpr: основное окно (а), окно выбора функции (б) и окно ввода параметров (в)
а)
б)
в)

Вы можете просто написать приведенную выше функцию COPY с соответствующими аргументами в свойстве Expression. Но если вы хотите воспользоваться окном ввода выражений, то вам надо выполнить следующее. Нажмите кнопку Function. Перед вами откроется окно выбора функции, представленное на рис. 4.17 б. В левом списке вы видите категории функций, а в правом — доступные функции. В нашем примере вам надо выбрать в правом списке функцию COPY. При этом под списками вы видите пояснение функции и ее синтаксис. Нажмите кнопку Continue (продолжить). Вы попадете в окно ввода параметров, представленное на рис. 4.17 в. Может в его окнах непосредственно писать значения аргументов. Но если в качестве аргумента выступает другая функция (в нашем примере первый аргумент — функция DATE), то можете нажать кнопку с многоточием около окна соответствующего аргумента. Вы опять попадете в окно 4.17 а, можете в нем опять нажать Function и выбрать в появившемся окне рис. 4.17 б функцию DATE. После этого вы вернетесь в окно рис. 4.17 в, но в качестве аргумента в нем уже будет занесена функция. Таким образом просто вводить выражения, содержащие вложенные функции.

Когда вы ввели все аргументы, щелкните на ОК и вернетесь в основное окно рис. 4.17 а, в котором будет сформировано требуемое выражение. Щелкните в нем на OK и сформированное выражение занесется в свойство Expression.

Компонент QRSysData позволяет отображать в отчете системные данные. Его основное свойство Data, которое может принимать следующие значения:


qrsDateтекущая дата
qrsDateTimeтекущие дата и время
qrsDetailCountчисло записей в базе данных
qrsDetailNoтекущий номер записи в базе данных
qrsPageNumberномер текущей страницы
qrsReportTitleзаголовок отчета
qrsTimeтекущее время

Свойство Text компонента QRSysData определяет текст, предшествующий отображаемой величине.

Давайте в качестве примера использования всех этих компонентов рассмотрим создание простого отчета вида, представленного на рис. 4.16. Он содержит некоторый текст и рисунки, имеет нижние колонтитулы, в которых печатается название отчета и номер страницы. Кроме того, мы хотим, чтобы на первой странице над нижним колонтитулом было написано «МОСКВА» и дата создания отчета.

Приложение закончено. Запустите его на выполнение. Отформатируйте текст в окне (см. пример на рис. 4.18). Выполните команду Просмотр. Вы увидите окно предварительного просмотpa, показанное на рис. 4.19.

Рис. 4.19
Предварительный просмотр отчета

В этом окне вы можете просматривать отчет, изменяя размер изображения, переходить со страницы на страницу (ваш отчет имеет всего одну страницу, так что переходы в нем невозможны), сохранять отчет в файле, проводить установку принтера, печатать отчет, сохранять его в файле, чтобы в каких-то будущих сеансах можно было загрузить его опять из файла. Словом, возможностей много. Опробуйте их все.


к началу страницы