1)Организация отчета:
Формируемый отчет может быть организован различными способами. Простейший случай – обычный отчет, содержащий ту или иную информацию, взятую из БД. Информация в нем разделяется по своему назначению (заголовки, данные, итоговые результаты, постоянная информация и т.д.) и размещается в отдельных секциях. Эти секции могут группироваться на основе каких-то признаков. Такие группировки могут, в свою очередь, группироваться на основе других признаков.
Более сложным является отчет с подотчетом (подотчетами), когда подотчет выдает дополнительную информацию для записей отчета.
Delphi содержит специальные компоненты, позволяющие реализовать все эти варианты. Они являются потомками общего базового класса TQRBasePanel. Здесь введено большое количество разнообразных секций, используемых с различными целями. Иерархия этих классов показана на рисунке.
Иерархия потомков класса TQRBasePanel.

В этой иерархии имеются классы, которые нежелательно использовать в Delphi 3.0 и которые используются только для совместимости с проектами, созданными в Delphi 2.0.
Класс TQRBasePanel.
Класс TQRBasePanel является потомком класса TCustomPanel. Он является предком всех возможных секций, используемых в отчете.
В этом классе определены следующие основные свойства для всех панелей:
Frame – определяет границу панели (цвет, наличие отдельных частей границы, вид линии, ширина линии).
Zoom – определяет масштаб в процентах отображения панели на экране от ее натуральной величины; актуально только на стадии подготовки отчета.
Подробнее рассматривать этот класс не будем, т.к. он является абстрактным и объекты этого класса не создаются.
Макет отчета (QuickRep).
Компонента QuickRep класса TQuickRep указывает генератору отчета QuickReport, что форма, в которой она находится, является отчетом. Именно эта компонента размещает в форме макет страницы отчета с координатной сеткой и границей выводимой области для создания отчета.
Следует иметь в виду, что непосредственно размещать на форме компоненты, которые отображают данные из БД, бессмысленно, но при помещении их на компоненту QuickRep значение отображается на одном и том же месте во всех страницах. В этом смысле компонента QuickRep ведет себя как колонтитул.
Чтобы просмотреть созданный отчет, в форме для предварительного просмотра следует выбрать компоненту QuickRep, а затем нажать правую кнопку мыши. Затем во всплывающем меню следует выбрать пункт Preview, после чего созданный отчет будет выведен в стандартной форме для предварительного просмотра.
Перед просмотром можно задать значения многим свойствам отчета, определяющим его внешний вид, без использования инспектора объектов. Для этого нужно активизировать компоненту QuickRep, в результате чего появится окно, содержащее настройки отчета.
Все размеры задаются в единицах измерения, которые определяются в комбинированной строке ввода Units в группе Other (Inches – дюймы, MM – миллиметры, Pixel – пикселы, Native – внутренний размер, используемый в QuickReport, соответствует 1/10 миллиметра, Characters – в символах, размер которых определяется параметром Size свойства Font).Окно содержит следующие группы элементов управления для определения параметров отчета:
Paper size (Размер бумаги) – группа элементов управления определяет размеры листа бумаги, на котором будет выведен отчет.
Margins (Поля) - группа элементов управления предназначена для определения полей страницы при выводе отчета.
Other (Прочие) - группа элементов управления определяет вспомогательные характеристики отчета.
Page frame (Рамка вокруг страницы) - группа элементов управления, определяющих обрамление области страницы, в которой формируется отчет.
Bands (Секции) - группа элементов управления, определяющих отображение в отчете определенных секций).
Класс TQuickRep является потомком класса TQRBasePanel. Вот некоторые основные свойства отчета в дополнение к наследуемым:
DataSet – свойство типа TDataSet, определяет набор данных, содержащий отображаемое поле.
ReportTitel – свойство типа string, определяет краткое описание отчета, которое соответствует в принтерных очередях заданию на печать данного отчета.
Units – свойство типа TQRUnits, которое определяет единицы измерения размеров в отчете.
Класс TQuickRep определяет следующие методы в дополнение к наследуемым (некоторые из них):
Prepare – процедура вызывает генератор отчета для создания отчета и пересылки его к объекту QRPrinter, не показывая его и не печатая.
Preview – процедура, вызывающая генератор отчета для создания отчета и его предварительного просмотра.
Print – процедура, вызывающая генератор отчета для создания отчета и его печати.
Отчет (QuickReport).
Класс TQuickReport является потомком класса TQuickRep. В QuickReport 2.0 он присутствует для обеспечения совместимости с отчетами, созданными в предыдущих версиях. Этот класс является потомком класса TQRController в Delphi 2.0.
Управление секцией отчета (класс TQRCustomBand).
Класс TQRCustomBand является потомком класса TQRBasePanel. Этот класс определяет общие свойства для всех секций, используемых в отчете. Непосредственно компоненты этого класса в отчете не используются, но определенные в нем свойства, методы и события являются основными для используемых компонент.
В Delphi 3.0 при отображении компонент – потомков класса TQRCustomBand в левом нижнем углу светлым цветом выводится описание типа этих компонент.
Класс TQRCustomBand определяет следующие основные свойства в дополнение к наследуемым (только некоторые из них):
BandType – свойство типа TQRBandType, которое определяет, какую информацию будет содержать секция и где будет располагаться информация, помещенная в секцию, при печати отчета. Тип TQRBandType определен следующим образом:
type
TQRBandType = (rbTitel, rbPageHeader, rbDetail, rbSubDetail, rbPageFooter, rbSummary, rbGroupHeader, rbGroupFooter, rbColumnHeader, rbOverlay, rbChild);
где rbTitel – заголовок отчета, печатается вверху на первой странице отчета; rbPageHeader – заголовок страницы, печатается вверху на каждой странице отчета; rbDetail – секция данных, выводящая каждую запись из набора данных; в запросе с подзапросом используется для отображения данных в основном запросе; rbSubDetail – секция данных, выводящая в отчете с подотчетом информацию в подчиненном запросе; используется компонентой QRSubDetail, это значение не требуется задавать непосредственно для секции отчета; rbPageFooter – окончание страницы, выводится внизу каждой страницы; rbSummary – итоговая секция, выводится в конце отчета после всех секций данных и итоговых секций групп; rbGroupHeader – секция заголовка группы; rbGroupFooter – итоговая секция группы; rbColumnHeader – секция заголовка столбца, выводится в заголовке всех столбцов в отчете печати почтовых этикеток; rbOverlay – секция постоянной информации, выводится на всех страницах отчета в одном и том же заданном месте, она не используется, но присутствует только для совмещения с предыдущей версией генератора отчета; rbChild – секция данных, выводящая в отчете с подотчетом дополнительную информацию в подчиненном отчете; используется компонентой QRChildBand, это значение не требуется непосредственно задавать для секции отчета. В зависимости от значения этого свойства определяется порядок следования секции в отчете.
ChildBand – свойство типа TQRCustomBand, указывает на секцию, которая является подчиненной для данной. Свойство только для чтения.
HasChild – свойство логического типа; значение True определяет наличие у секции подчиненной секции, False – секция вывода данных является единственной.
Секция отчета (QRBand).
Компонента QRBand класса TQRBand предназначена для определения секции в отчете для вывода конкретной информации. Это основная компонента, которая используется практически в любом отчете.
Класс TQRBand является потомком класса TQRCustomBand. Этот класс не определяет никаких новых свойств, методов и событий, используя наследуемые.
Вспомогательная секция отчета (QRChildBand).
Компонента QRChildBand класса TQRChildBand предназначена для определения секции в отчете, в которой выводится дополнительная информация для другой (основной) секции. Эта компонента, в свою очередь, может быть основной компонентой для другой и т.д. Следует отметить, что и основная секция, и вспомогательная используют один и тот же набор данных. У основной секции может быть только одна вспомогательная.
Класс TQRChildBand является потомком класса TQRCustomBand. Он определяет одно новое свойство:
ParentBand – свойство типа TQRBand, которое определяет основную для данной секции отчета.
Этот класс не определяет никаких новых методов и событий, используя наследуемые.
Управление секцией подотчета (класс TQRControllerBand).
Класс TQRControllerBand является потомком класса TQRCustomBand и предназначен для определения секции, в которой определяется подотчет в отчете. Следует отметить, что подотчет и отчет могут использовать различные наборы данных и у одного отчета может существовать несколько подотчетов.
Класс TQRControllerBand определяет следующие свойства в дополнение к наследуемым:
PrintIfEmpty – свойство логического типа; Значение True определяет печать заголовка и окончания подотчета, даже если нет ни одной записи для печати. Значение False в случае, если нет ни одной записи для печати, запрещает печать.
Master – свойство типа TQRCustomBand, которое определяет секцию основного отчета, в котором создается подотчет.
Этот класс не определяет никаких новых методов и событий, используя наследуемые.
Подотчет (QRSubDetail).
Компонента QRSubDetail класса TQRSubDetail предназначена для определения секции подотчета в отчете для генератора отчетов QuickReport 2.0.
Класс TQRSubDetail является потомком класса TQRControllerBand. Он определяет следующие свойства в дополнение к наследуемым (некоторые из них):
Bands – сложное свойство типа TQuickRepBands, определяющее секции, которые необходимо включить в подотчет.
DataSet – свойство типа TDataSet, определяет набор данных, содержащий отображаемое в подотчете поле.
Подотчет QuickReport 2.0 (QRDetailLink).
Компонента QRDetailLink класса TQRDetailLink в QuickReport 2.0 присутствует для обеспечения совместимости с отчетами, созданными в предыдущих версиях. Класс TQRDetailLink является потомком класса TQRSubDetail. Этот класс не определяет никаких новых свойств, методов и обработчиков событий, используя наследуемые.
Отчет с группировкой (QRGroup).
Компонента QRGroup класса TQRGroup предназначена для организации группировки записей, которую можно в некотором смысле рассматривать как подотчет. Группировкой называется объединение нескольких записей, которые имеют одинаковое значение в одном или нескольких полях. Подобный вариант отчета удобен для подведения промежуточных итогов по значениям в определенном поле.
Класс TQRGroup является потомком класса TQRCustomBand. Рассмотрим только два свойства, которые дополняются к наследуемым:
Expression – свойство типа string, задающее поле, по значению которого происходит группировка. Можно определить имя поля вручную, однако для этого лучше воспользоваться редактором выражения. Он появляется при активизации этого свойства.
Для обеспечения группировки в группе параметров Data Field нужно в окно редактора выражения поместить из списка в комбинированной строке ввода DataSet название набора данных, записи которого сортируются, а в списке Field – название поля, по которому проводится сортировка. После определения набора данных и поля нужно нажать кнопку Add в той же группе элементов управления, в результате чего выбранные значения отобразятся в поле результата. Для присвоения полученного результата данному свойству нежно нажать кнопку ОК.
Master – определяет секцию основного отчета, в котором создается группировка.
Класс TQRGroup не вводит новых методов и событий, используя наследуемые.
