- •Урок 11: Генерация отчетов Содержание
- •Компоненты для построения отчетов
- •Компонент tQuickRep
- •Свойства
- •События
- •Компонент tqrBand
- •Создание простейшего отчета
- •Использование компонента tqrexpr
- •Использование tqrBand для представления заголовков столбцов
- •Использование tqrBand для показа заголовка и подвала страницы.
- •Использование компонента tqrSysData
- •Группировки данных
- •Множественная группировка данных
- •Построение отчета главный-детальный
- •Построение композитного отчета
События
Событие |
Назначение |
property AfterPreview : TQRAfterPreviewPrint; |
Возникает в момент закрытия окна предварительного просмотра отчета. |
property AfterPrint: TQRAfterPrintEvent; |
Наступает после печати отчета или его подготовки к печати. |
property BeforePrint: TQRBeforePrintEvent; |
Наступает в момент начала генерации отчета (до выдачи окна предварительного просмотра отчета или до его печати). |
property OnEndPage: procedure (Sender: TObject); |
Возникает в момент подготовки к генерации последней страницы отчета. |
property OnNeedData: procedure (Sender: TObject; var MoreData: boolean); |
Используется при создании отчета по данным, которые берутся не из НД, а из текстового файла, списка строк, массива и т.п. В параметре MoreData обработчик должен вернуть True, если источник данных еще не исчерпан. |
property OnPreview: procedure (Sender: TObject); |
Используется для связывания с отчетом нестандартного окна просмотра (см. ниже). |
property OnStartPage: procedure (Sender: TObject); |
Возникает в момент подготовки к генерации первой страницы отчета. |
С помощью компонента QRPreview программист может создать нестандартное окно предварительного просмотра. Для связи с отчетом используется событие OnPreview по следующей схеме:
Procedure RepForm.MyREportOnPreviewEvent(Sender: TObject);
begin
MyPrevForm.QRPreview1.QRPrinter := TQRPrinter(Sender);
MyPreviewForm.Show;
end;
Чтобы явное приведение типа TQRPrinter(Sender) стало возможным, необходима ссылка на модуль QRPrntr в предложении Uses соответствующего модуля (в примере – модуля RepForm).
Компонент tqrBand
Компоненты TQRBand являются основными частями отчета и используются для размещения на них отображающих компонентов, таких как TQRLabel, TQRDBText, TQRImage и т.п.
Свойства компонента:
Свойство |
Назначение |
property AlignToBottom: boolean; |
Если имеет значение True полоса печатается непосредственно над подвалом страницы вместо обычного расположения справа/снизу от предыдущей полосы. |
type TQRBandType = (rbTitle, rbPageHeader, rbDetail, rbPageFooter, rbSummary, rbGroupHeader, rbGroupFooter, rbSubDetail, rbColumnHeader); property BandType: TQRBandType; |
Указывает назначение полосы: rbTitle – содержит заголовок отчета; rbPageHeader – содержит заголовок страницы (на первой странице печатается под rbTitle); rbDetaul – содержит информацию из НД; выводится всякий раз при переходе на новую запись НД; эта полоса повторяется для всех записей DataSet, начиная с первой записи и заканчивая последней; позицирование на первую запись и последовательный их перебор осуществляется компонентом TQuickRep автоматически; rbPageFooter – содержит подвал страницы; выводится в конце каждой страницы отчета после всех других полос; rbSummary – подвал отчета; выводится на последней странице отчета после всей иной информации, но перед подвалом последней страницы; rbGroupHeader – содержит заголовок группы; применяется при группировках информации в отчете и выводится всякий раз при выводе новой группы; rbGroupFooter – содержит подвал группы; выводится всякий раз при окончании вывода группы, после всех данных группы; rbSubDetail – содержит детальную информацию из подчиненного НД при выводе в отчете информации из двух или более наборов данных, связанных в приложении как главный-подчиненный; этот тип назначается полосе автоматически при размещении на форме компонента TQRSubDetail; rbColumnHeader – содержит заголовки столбцов; размещается на каждой странице отчета после заголовка страницы. |
property Enabled: boolean; |
Разрешает/запрещает печать полосы. |
property ForceNewColumn: boolean; |
Если содержит True, полоса печатается в следующей колонке. |
property ForceNewPage: boolean; |
Если содержит True, полоса печатается на новой странице. |
property HasChild: boolean; |
Если содержит True, полоса имеет дочернюю полосу TChildBand. Установка True в это свойство автоматически создает в отчете дочернюю полосу. |
События
property AfterPrint: TQRAfterPrintEvent;
и
property BeforePrint: TQRBeforePrintEvent;
наступают соответственно до и после печати полосы. Метод
function AddPrintable(PrintableClass: TQRNewComponentClass): TQRPrintable;
используется для вставки в полосу отображающего компонента в процессе прогона программы. Он автоматически устанавливает между полосами отношение собственности. Два следующих фрагмента выполняют одинаковую работу:
with DetailBand1.AddPrintable(TQRLabel) do
begin
Size.Left := 20;
Size.Top := 5;
Caption := ‘Новая полоса’;
end;
var
aLabel : TQRLabel;
begin
aLabel := TQRLabel.Create(ReportForm);
aLabel.Parent := DetailBand1;
with aLabel do
begin
Size.Left := 20;
Size.Top := 5;
Caption := ‘Новая полоса’;
end;
end;