Отчеты в Delphi / Еще немного о компонентах

Невизуальный компонент, с помощью которого можно производить всевозможные вычисления с данными, включающими в себя значения из полей таблиц (свойство SrclDataField, Src2DataField), константами (SrclValue, Src2Value) и других вычисляемых параметров (ScrlCalcVar, Src2CalcVar). Свойство Operator задает тип операции. Каждый операнд может быть дополнительно обработан с использованием стандартных функций, например тригонометрических (SrclFunction, Src2Fuction). Задействуя параметры проекта для хранения промежуточных результатов вычислений, можно строить сколь угодно сложные выражения.


Невизуальный компонент, связывающий между собой компоненты DataBand, CalcText и CalcTotal через их свойства Controller. В процессе печати отчета обрабатывает сигналы от этих компонентов, вырабатывая результат операции в зависимости от полосы, на которой данный компонент расположен. Другая функция — инициализация компонентов CalcText и CalcTotal указанным значением (свойства InitCalcVar, InitData Field и InitValue).


Невизуальная версия компонента CalcText, во время «печати» которой отображаются значения, сохраненные в параметре проекта (свойство DestParam) и форматируются в соответствии со значением свойства DisplayFormat. Используется для выполнения вычислений, результаты которых будут нужны для проведения других вычислений посредством компонентовCalcOp.


Невизуальная полоса отчета, связанная с таблицей базы данных, и ориентированная для работы с изменяющейся в DataView информацией. По сути, представляет собой цикл (петлю) через все detail-записи данных для одного уровня master-записи.

 

Типичный случай: счет, генерируемый для таблицы со множеством пользователей, в которой каждый пользователь имеет различные статьи расхода, связанные с этим счетом. Для каждого такого пользователя вы должны представить список его собственных расходов. В таком случае вы можете организовать master-таблицу, в которой каждому пользователю будет присвоен уникальный идентификатор. В результате перед выводом на печать информации по каждому следующему пользователю будет осуществляться цикл но таблице, содержащей сведения но всем статьям расхода, с ним связанным. 

 

Имя такой master-таблицы определяется свойством MasterDataView. Две таблицы связываются между собой посредством свойства DetailKey. В нашем примере это идентификатор пользователя.

Данные компонента DataCycle могут быть во время формирования отчета отсортированы или отфильтрованы. Эту возможность предоставляет свойство MasterKey. Если нажать на кнопку с многоточием при задании значении свойства, откроется окно Data Text Editor (рис. 7.14). Например, если вы хотите исключить из отчета всех пользователей, проживающих за пределами вашего города, введите в поле Data Text этого окна соответствующее значение.


Компонент DataMirrorSection предназначен для задания так называемой «зеркальной» области, которая будет использоваться в отчете для создания вариаций отчетов и представляет собой секцию, которая копирует с незначительными расхождениями оригинальную секцию, основываясь на содержании свойства DataField.

 

«Зеркалированне» секций — мощный метод, поскольку секция (TRaveSection, похожа на TPanel в Delphi) может содержать любые другие компоненты, включая графические, регионы, текстовые и т. д. При этом все дочерние ее элементы зеркалируются.

 

При изменении оригинального компонента все зеркалируемые соответственно изменяются. В качестве примера рассмотрим компонент DataMirrorSection, включенный в демонстрационный файл Rave (найдите его в каталоге Rave и откройте). Этот пример демонстрирует, как зеркалируется блок адресных данных в международный или американский формат (в формате США отсутствует строка государства и сам блок смещен к краю).

 

На странице 2 имеются три секции. Секция 3 включает в себя общие строки, которые присутствуют в обоих шаблонах. Секции 1 и 2 содержат зеркала секции 3. В «международной» секции дополнительно находится строка государства. Заметьте, что комментарий («remarks»), который будет добавлен на страницу 2 проекта — не есть часть какой-либо секции.

 

"US Template" и "International Template" это обычный текстовый комментарий, помогающий понять назначение каждой секции. Свойства Data View и DataField компонента DataMirrorSection на странице 1 используются для выбора шаблона форматирования для зеркала Чтобы понять логику взаимодействия, щелкните на кнопке с многоточием при задании значения свойства DataMirrors для открытия окна Data Mirror Editor. Выберите пункт DataMirror и ознакомьтесь с установками в нижней группе элементов этого диалогового окна. Обратите внимание, что одна из установок должна быть помечена флажком Default. Если вы этого не сделаете, то при форматировании будет использовано родное содержаниекомпонента.


Рассмотрим компоненты для создания отчетов, которые поставляются вместе со средой Delphi 7 и располагаются на вкладке Rave палитры компонентов Delphi. Общий вид вкладки Rave показан на рис. 7.16.

Рис. 7.16. Вкладка Rave палитры компонентов Delphi 7

Отчеты в Delphi / Еще немного о компонентах

В Rave Reports имеются 2 различных типа объектов: компоненты вывода (Output Components) и классы отчета (Report Classes). Первые отвечают за отправку отчета по различным назначениям, вторые представляют собой управляющие классы. Вкладка содержит тринадцать объектов, часть из которых относятся к первому типу (на пиктограммах с наличием голубого цвета), а остальные соответственно, — ко второму. Все эти объекты мы опишем ниже в порядке их размещения на вкладке слева направо.


Компонент RvProject — предназначен для установки связи с файлом отчета, который был создан с помощью дизайнера Rave Reports. Используйте этот класс для получения доступа к листингам любых отчетов и их выполнения. Обычно в приложении используется всего один компонент RvProject, но вы можете определить их и больше, если это необходимо. Свойство ProjectFile задает файл проекта отчета. Этот файл с расширением RAV может содержать множество различных требуемых вам вариантов отчета.

 

При вызове метода Open файл проекта отчета загружается в оперативную память для подготовки печати отчета или настройки конечным пользователем. Вы можете использовать метод Close, если больше не собираетесь работать с проектом или перед завершением работы приложения. Любые изменения, внесенные в проект отчета, вы можете зафиксировать методом Save. RvProject также содержит несколько свойств и методов, таких как SelectReport, GetReportList, ReportDescToMemo, ReportDesc, ReportName и ReportFullName, позволяющих создать эффективный интерфейс для пользователей проекта (рис. 7.17).

Рис. 7.17. Свойства компонента RvProject

Отчеты в Delphi / Еще немного о компонентах 

Свойство Engine позволяет назначить альтернативное средство для вывода отчета. Для этого соответствующим образом настраивается компонент RvSystem и генерируются NDR-потоки или файлы посредством компонента RvNDRWriter.

При включении компонента RvProject в свое приложение вы должны обеспечить следующую базовую последовательность операций и реагирование на действия пользователя:

  1. Вызвать метод RvProject.Open, то есть открыть файл проекта, указанный в свойстве ProjectFile.
  2. Вызвать метод RvProject.GetReportList(ListBox1.Items, true) для загрузки имен отчетов в список ListBox1.
  3. Задать обработку события onclick (щелчков пользователем кнопкой мыши на элементах списка). Для этого вызовите RvProject.SelectReport(ListBox1.Items-[ListBox1.ItemIndex],true); и затем RvProject.ReportDescToMemo(Memo1); для выбора текущего элемента списка и копирования описания отчета в поле Memo1.
  4. Вызвать RvProject.Execute для печати выбранного отчета.
  5. Вызвать RvProject.Design, чтобы открыть визуальный дизайнер для работы с текущим отчетом для конечного пользователя (поддерживается только при наличии лицензии EUDL (End User Designer License).
  6. Включить в проект метод RvProjectClose для закрытия отчета и освобождения выделенной памяти.

Ради экономии ресурсов, выделяемых приложению, Rave Reports в обязательном порядке загружает только стандартные и графические компоненты, а также присутствующие на вкладке Report. Компоненты Bar Code и другие должны быть зарегистрированы и подключены для компиляции явно, если они используются приложением. Например, компонент Bar Code можно включить в приложение следующим образом. Сначала на форме с компонентом RvProject нужно добавить объект RvBarCodel для возможности использования его в программном коде, а после чего определить обработку события RvProjectOnCreate п вызвать метод RaveRegister для RvCsBars, как это показано ниже.

procedure TForm1.RvProjectCreate(Sender: TObject);
begin 
RvBarCode1.RaveRegister; 
end; 

Эти действия обязательны для любых дополнительных компонентов. В противном случае вы при запуске проекта получите сообщение об ошибке вида «Класс TRavePostNetBarcode не найден».

 

Хотя в использовании компонент RvSysteM самый легкий, следует обратить на него внимание, потому что интеграция компонентов RvRenderPreviewRvRenderPrinter и RvNDRWriter обеспечивается именно с его помощью. 

RvSystem может посылать отчет на принтер или экран предпросмотра, а также отображать настройки и статус экрана. Рассмотрим более подробно свойства этого компонента (рис. 7.18). 

Рис. 7.18. Свойства компонента RvSystem

Отчеты в Delphi / Еще немного о компонентах

  • Default Dest определяет место назначения отчета, предлагаемое по умолчанию; 
  • System Filer позволяют настроить обработчик файла отчета для RvNDRWriter, RvRenderPreview и RvRenderPrinter. Все опции SystemFiler не работают в режиме потока (если установлено значение smMemory для свойства StreamMode);
  •  System Options управляют конфигурацией компонента RvSystem:
    • значение soUseFiler будет всегда направлять отчет в файл отчета. Это может быть полезно при использовании метода Macro;
    • soWaitForOK указывает, будет ли отчет посылаться для вывода при нажатии кнопки ОК;
    • soShowStatus определяет, будет пли нет отображаться экран статуса во время генерации отчета;
    • soAllowPrintFromPreview определяет, может ли пользователь направить отчет с экрана предпросмотра на принтер;
    • soPreviewModal устанавливает модальный режим окна предпросмотра;
    • soNoGenerate указывает, пропускать ли этап генерации отчета, то есть выводить отчет непосредственно на экран. Эти настройки могут быть применены только в режиме StreamMode;
  • в свойстве System Preview отображаются все настройки предпросмотра, соответствующие RvRenderPreview;
  • в свойстве SystemPrinter отображаются все настройки принтера, соответствующие RvNDRWriter;
  • SystemSetups содержит логические свойства, отвечающие за конфигурацию экрана для RvSystem.

Используется в сочетании с RvRenderPrinter и RvRenderPreview для сохранения отчета в файле специального бинарного формата (NDR) для последующей распечатки на принтере пли предпросмотра. Полный список свойств и методов компонента представлен па рис. 7.19. Метод AccuracyMethod определяет способ вывода строк.

 

FileName — файл, который будет создан, если StreamMode установлено в значение, отличное от smUser. Используйте sm File для больших отчетов (>10 страниц пли при наличии серии изображений) и smMemory для маленьких отчетов (<10 страниц). Отчет направляется в файл вызовом метода Execute.

 

Рис. 7.19. Свойства компонента RvNDRWriter

Отчеты в Delphi / Еще немного о компонентах

 

Используя события классов Data Connection, вы можете управлять посылкой данных в отчет Rave Reports. Всего имеются четыре таких компонента:

  •  RvCustomConnection предназначен для связи DirectDataView, созданного дизайнером Rave Reports, с обычными данными (массивами в памяти, бинарными файлами, данными, генерируемыми во время событии);
  •  RvDataSetConnection предназначен для связи DirectDataView с набором данных (например, компонентом DataSet);
  •  RvTableConnection предназначен для связи DirectDataView с таблицей (например, компонентом Table);
  •  RvQueryConnection класс предназначен для связи Direct Data View с запросом (например, компонентом Query).

Компонент RvCustomConnection работает с индексированными данными и соответственно задействует свойства Datalndex и DataRows, в силу чего обработка событий при его использовании неактуапьна. Наиболее эффективным для него является реагирование на OnNext.

 

Если отчет предназначен для вывода информации из базы данных посредством компонентов Data Connection, вам не обойтись без обработки событий, и особенно — OnValldateRow. Имеются следующие виды событий:

  • OnEOF происходит при достижении конца данных. Значение true говорит о том, что строк для вывода больше не осталось или сгенерировано событие OnNext при попытке перехода за последнюю строку таблицы;
  • OnFirst происходит в момент перемещения указателя текущей записи в первую строку данных;
  • OnGetCols возникает, когда Rave Reports получает метаданные: имя ноля, тип, размер символов, полные имя и описание;
  • OnGetRow происходит при получении данных из текущей строки;
  • OnGetSorts происходит при потребности Rave в информации о поддерживаемых методах сортировки;
  • OnNext возникает тогда, когда Rave хочет переместить указатель текущей записи на следующую строку данных;
  • ОnОреn генерируется при инициализации сессии. Текущее состояние может быть впоследствии восстановлено генерацией события OnRestore;
  • OnRestore происходит, когда Rave хочет восстановить состояние данных, запомненное перед открытием сессии;
  • OnSetFilter возникает при потребности фильтрации данных, например в отчетах master-detail;
  • OnSetSort возникает при потребности сортировки данных;
  • OnValldateRow генерируется для каждой строки данных для их фильтрации.

В следующем примере показано, как можно исключить из отчета строки, неудовлетворяющие заданному условию, используя событие OnValidateRow. 

procedure Tform1 CustomCXNValidateRow(Connection: TRvCustomConnection; var ValidRow: Boolean); 
begin 
ValidRow := DataRecord.FloatField >= 0.0; 
end;
Примеры обработки всех событий вы найдете в справочной системе и электронной документации к Rave Reports, но есть смысл внимание на одно из них, позволяющее проводить дополнительную обработку направляемых в отчет данных — OnGetRow. Есть несколько способов записи данных в специальный буфер. Порядок и типы сохраняемых полей (dtString, dtlnteger, dtBoolean, dtFloat, dtCurrency, dtBCD, dtDate, dtTime, dtDateTime, dtBlob, dtMemo и dtGraphic) могут быть получены непосредственно из описаний полей, предоставляемых событием OnGetCols. Данные в буфер можно поместить согласно следующему списку методов:
procedure WnteStrData(Formatdta: string; Nativedta: string); 
{ dtString } 
procedure WriteIntData(Fonnatdta: string; Nativedta: integer);
{ dtlnteger } 
procedure WriteBoolData(Formatdta: string; Nativedta: boolean); 
{ dtBoolean } 
procedure WnteFloatOata(Formatdta: string; Nativedta: extended); 
{ dtFloat } 
procedure WriteCurrData(Formatdta: string; Nativedta: currency); 
{ dtCurrency } 
procedure WriteBCDDatatFormatdta: string; Nativedta: currency); 
{ dtBCD } 
procedure WriteDateTimeDatatFormatdta: string; Nativedta: TDateTime); 
{ dtDate. dtTime and dtDatenie } 
procedure WriteBlobData(var Buffer; Len: longint); 
{ dtBlob. dtMemo and dtGraphic }
Также имеется специальный метод WriteNullData (без параметров), который может быть вызван для любых инициализированных нолей или содержащих нулевые данные. Параметр FormatData используется для передачи форматированной строки данных в поле. Параметр NativeData предназначен для передачи неформатированных или «сырых» данных в поле. Если специальное форматирование определено в отчете, то оно будет осуществляться для NativeData, иначе для печати будут использоваться данные FormatData.

Например:

 

procedure Tform1.CustomCXNGetRow(Connection: TRvCustomConnection);

begin

With Connection do begin WntelntDataC .DataRecord.IntField);

WriteStrData(DataRecord.StrField);

WriteFloatData(DataRecord.FloatField);

end;

{with}

end;

 

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

 

Свойство Visible компонента Data Connection определяет, будут ли доступны ваши соединения в других приложениях или версии Rave Reports для конечного пользователя.

 

Соответственно, значение false блокирует видимость соединения извне, a true — открывает его для внешнего доступа. Пока соединение открытого типа доступно конечным пользователям, для него не будут отображаться попытки пользователей создать новый вид данных, если они производятся не изнутри приложения, которое запустило визуальный дизайнер. Если вы хотите сделать соединение с данными доступным нз других приложений для ваших конечных пользователей, лучшебудет создать проект отчета с версией визуального дизайнера ддя программистов, в которой все виды данных уже определены для таких внешних соединений с данными.

 

Рис. 7.20. Свойства компонента RvDataSetConnection 


  • Компонент RvRenderPreview подготавливает файл, генерируемый RvNDRWriter, и посылает его на экран для преднросмотра. Этот компонент поддерживает множество методов и событий, которыми разработчик может пользоваться для создания законченного пользовательского интерфейса. Не будем останавливаться на возможностях, определяемых свойствами этого компонента. — их описание доступно в справочной системе и вынудит нас частично повториться.
  • Компонент RvRenderPrinter формирует файл, генерируемый RvNDRWriter, и посылает его на текущий принтер. RvRenderPrinter часто используется для печати с экрана предпросмотра. Это несложный компонент, не имеющий методов и свойств, позволяющих управлять принтерами и их настройками. Отчет посылается на печать вызовом методов Execute или ExecuteCustom.
  • Компонент RvRenderPDF создает документы Adobe Acrobat из рабочего отчета. Если шрифты должны быть встроены в PDF-файл, свойство EmbedFonts устанавливается в значение true. Желаемое качество встраиваемых изображений устанавливается в процентном представлении в свойстве ImageQuality. Сжатие PDF-документов поддерживается свойством логического типа UseCompression, для которого должна быть предусмотрена обработка события OnCompress.
Например:
With TCompressionStream.Create(clMax. OutStream)
do try CopyFromdnStream. InStream.Size) ;
finally Free;
end;
{ with }
Самый простой путь использования компонентов отображения состоит в перетаскивании требуемого значка на форму, при котором автоматически регистрируется формат и стандартные настройки и диалоговые окна предпросмотра. Для получения отличного от стандартного представления вызывается метод Render с передачей в виде параметра объекта NDR TStream или имени файла NDR.
  • RvRenderHTML преобразует NDR-поток или файл в HTML-страницы с поддержкой графических объектов. Результат представляется согласно спецификации HTML4.0, но с ориентацией для вывода на печать, насколько это возможно.
  • RvRenderRTF преобразует NDR-поток пли файл в RTF-формат. Результирующий RTF-документ по возможности приближен к оригинальному отчету, направляемому на принтер. Положение элементов документа на странице указывается с помощью разделителя frames.
  • RvRenderText преобразует NDR-поток или файл в текстовый формат, при этом все нетекстовые объекты игнорируются. Свойства CPI и LPI задают количество символов и точек па дюйм соответственно при выводе на конечное устройство вывода.

В общем и целом, возможности разработки отчетов средствами Rave Report сводятся к настройке и организации связи двух независимых инструментов: средств вывода данных на печать (code-based printing engine) и визуального интерфейса (visual reporting interface). Рассмотрим порядок создания простого отчета с помощью мастера Simple Table, чтобы проследить взаимодействие между этими инструментами на примере. При этом последовательность действий после запуска Delphi и создания нового приложения включает в себя несколько этапов.
  1. Сначала мы создадим компонент тина Table. Query или DataSet н инициализируем таблицу — установим свойство Activeкомпонента в значение true для гарантии, что все другие свойства установлены корректно. Для простоты возьмем готовый пример из дистрибутивного набора Delphi — Customer.db.
  2. После чего создадим компонент RvDataSetConnection и установим в значении его свойства DataSet компонент базы данных, созданный на нервом шаге. Назначим имя этому компоненту, отличное от значения по умолчанию (например FirstReport).
  3. Создадим компонент RvProjecL Двойным щелчком кнопки мыши на этом компоненте вызовем визуальный дизайнер.
  4.  В окне дизайнера Rave Reports выберем в главном меню пункт File -> New Data Object. Откроется диалоговое окно Data Connections (рис. 7.21). Выберем Direct Data View н нажмем кнопку Next. Убедимся, что имя FirstReport стало выделенным в списке Active Data Connections, и нажмем кнопку Finish (рис. 7.22).

Рис. 7.21. Окно Data Connection 

Рис. 7.22. Выбор активного соединения

 

5.Переместимся в панель Project Tree и откроем Data View Dictionary. Выберем новый вид — DataView1. Используя панель свойств (Property Panel), расположенную ниже дерева проекта, изменим имя созданного вида DataView1 на FirstReportDV.

6. С этого момента приступаем непосредственно к созданию отчета. Выберем Tools -> Report Wizards -> Simple Table в главном меню для открытия мастера простой таблицы (Simple Table wizard). Удостоверимся, что имя FirstReportDV выделено, и нажмем кнопку Next для продолжения (рис. 7.23). Выберем 2 и 3 поле в списке и еще раз нажмем Next (рис. 7.24). По желанию изменим порядок полей и опять нажмем Next (рис. 7.25). По желанию зададим отчету осмысленное имя в заголовке и изменим размеры полей и снова нажимаем Next (рис. 7.26). Если нужно, изменим размеры шрифта и нажмем кнопку Generate для создания отчета.

Рис. 7.23. Выбор Direct DataView 

Рис. 7.24. Выбор полей таблицы

Рис. 7.25. Перестановка полей

Рис. 7.26. Параметры оформления отчета

7. Для предпросмотра результатов выберем File -> Execute Report, чтобы открыть диалоговое окно Report Setup. Убедимся, что Preview выделено как место отправки отчета и нажмем ОК (рис. 7.27).

Рис. 7.27. Настройка печати отчета

Вот теперь мы воочию наблюдаем плоды своей работы (рис. 7.28) и получили представление о новейших принципах «отчетостроительства». Наш первый отчет с помощью Rave создан за минимальное число шагов.

Рис. 7.28. Простой отчет, сгенерированный Delphi

 

Среда Delphi 6 имеет специальную вкладку палитры компонентов, на которой располагаются компоненты для построения отчетов. Эта вкладка носит название QReport и содержит 23 компонента (рис. 7.29). 

Рис. 7.29. Вкладка QReport

 Рассмотрим эти компоненты по порядку (слева направо) и познакомимся с их основными свойствами.

Первый компонент — QuickRep — является базовым компонентом отчета. Данный компонент представляет собой форму для создания внешнего вида отчета, с его помощью можно размещать полосы, которые являются основными элементами отчета (рис. 7.30).

Рис. 7.30. Элементы отчета

В форме QuickRep можно настраивать шрифт, размеры отчета и другие параметры с помощью соответствующих свойств. Отчет связывается с набором данных Table или Query, для которого он создается, с помощью компонента DataSet. Таблица 7.1 содержит перечень основных свойств данного компонента, отображаемых в окне инспектора объектов, и их описание.

Таблица 7.1. Основные свойства компонента QuickRep

  

Второй компонент вкладки QReport палитры компонентов Delphi 6 называется QRSubDetail. Названный компонент предназначен для создания связанных отчетов данных. Рассмотрим его основные свойства, которые перечислены в табл. 7.2.

Таблица 7.2. Основные свойства компонента QRSubDetail

Следующий компонент называется QRStringsBand. Этот компонент служит для вставки в отчет дополнительных текстов. При добавлении данного компонента в отчет появляется новая полоса. Мы не будем рассматривать его свойства. Скажем лишь, что одно из них — Items — может содержать строки текста, выводимые на печать.

Следующий в рассматриваемой последовательности компонент вкладки QReport называется QRBand. Он представляет собой простую полосу отчета, по которой могут размещаться другие компоненты. С помошью свойства BandType можно определить назначение добавляемой полосы в отчете. Рассмотрим возможные значения этого свойства:

  •  rbTitle — полоса будет напечатана на первой странице отчета, сразу после верхнего колонтитула;
  • rbPageHeader — полоса будет печататься на каждой странице отчета вверху (на месте верхнего колонтитула); 
  • rbDetail — печатается для каждой записи или колонки из связанного с полосой набора данных;
  • rbPageFooter — будет печататься на каждой странице отчета внизу (на месте нижнего колонтитула);
  • rbSummary — печатается в конце отчета после всех полос перед нижним колонтитулом;
  • RbSubDetail — зарезервировано для использования компонентом QRSubDetail;
  • rbColumnHeader — печатается вверху каждой колонки на каждой странице многоколоночного отчета. В одноколоночном отчете выводится один раз после полосы типа rbPageHeader;
  • rbGroupFooter — полоса нижнего колонтитула для компонентов QRGroup или QRSubDetail. Печатается после завершения вывода группы данных;
  • rbGroupHeader — полоса верхнего колонтитула для компонентов QRGroup или QRSubDetail. Печатается перед полосой типа rbDetail для каждой группы данных;
  • rbOverlay — используется для обеспечения обратной совместимости с Quick-Report версии 1. Не используйте это значение в других случаях;
  • rbChild — зарезервировано для компонента QRChildBand.
  • Следующий компонент имеет название QRChildBand. On позволяет вам создавать дочерние полосы, которые могут содержать внутри себя другие полосы или компоненты вкладки QReport. У этого компонента два интересных свойства:
  • свойство LinkBand служит для того, чтобы связать л к нп.и две полосы отчета для их совместной печати на одной странице отчета:
  • свойство ParentBand позволяет указать родительскую полосу для полосы QRChildBand.

 

ПРИМЕЧАНИЕ: Одним из самых простых способов определения дочерних полос отчета является установка соответствующего значения в свойстве HasChild любой полосы отчета.

 

Мы не будем детально рассматривать каждый компонент, расположенный на вкладке Qreport, — это потребует слишком много бумаги и типографской краски. Да и не так актуально, поскольку большинство из этих компонентов не требуются для создания простых отчетов. Расскажем лишь о назначении всех компонентов этой вкладки и рассмотрим наиболее важные из них «крупным планом».

  • Компонент QRGroup используется для группировки данных отчета. С его помощью можно разбивать компоненты отчета на логические группы.
  • Компонент QRLabel предназначен для размещения в отчете произвольного текста. Этот компонент является полным аналогом компонента Label, только применяется внутри отчета. Для определения текста, который будет выводиться в отчет, используется свойство Caption.
  • Компонент QRDBText позволяет отображать текстовые данные, связанные с содержимым одного нз нолей набора данных, в отчете. Свойство DataSet даст возможность связать компонент с набором данных. После выбора значения этого свойства можно выбрать название поля набора данных, делается это с помощью свойства Data Field. 

Следующий компонент называется QRExpr. Он позволяет строить математические выражения и отображать результаты вычислений над полями данных и системными величинами (временем, датой и т. п.). С помощью свойства Expression можно вызвать окно построителя выражений (Expression Builder), которое служит для визуального построения математических выражений.

  • Компонент QRSysData отвечает за отображение в отчете системных данных. С помощью его свойства Data можно выбрать, какая системная информация будет включена в отчет. Возможны следующие значения свойства dta:
  • qrsColumnNo — номер текущей колонки (для одпоколопочпого отчета всегда равен 1);
  • qrsDate — текущая системная дата;
  • qrsDateTime — текущие системные дата и время;
  • qrsDetailCount - число записей в наборе данных;
  • qrsDetailNo — номер текущей записи (пли текущей записи главной таблицы);
  • qrsPageNumber — номер текущей страницы отчета;
  • qrsPageCount — количество страниц в отчете;
  • qrsTime — текущее системное время (это значение установлено в свойстве Data по умолчанию).

СОВЕТ: Будьте внимательны при установке значения qrsPageCount, так как это требует при формировании отчета двойного прохода по набору данных, что может занять много времени при подготовке отчета в случае большого количества записей.

Итак, мы более или менее подробно рассказали о средствах и их компонентах, из которых строятся отчеты в среде Delphi 7. Выбор — за вами.

������� ������ ��� dle ������� ��������� ������

Помоги проекту! Расскажи друзьям об этом сайте: