Создание отчетов в Delphi

 

Лабораторная работа №6:   Работа с отчётами

 

Цель работы: Изучить технологию формирования отчетов в среде визуального программирования.

 

1. ПОСТАНОВКА ЗАДАЧИ

 

Необходимо сформировать отчет к БД содержащей сведения по успеваемости курсантов содержащий список оценок (База данных состоит из одного отношения (табл. 1.1)

Отчет должен выводить данные об успеваемости курсантов по дисциплинам

Отчет должен выводить следующую информацию: ФИО студентов, Наименование дисциплины, Оценка.

Таблица 1

Успеваемость студентов.

 

ФИО курсанта

Наименование дисциплины

Оценка

Иванов И.И.

Информатика

2

Иванов И.И.

Математика

4

Петров П.П.

Физика

5


Итого оценок: 3

2. СОЗДАНИЕ ОТЧЕТОВ В DELPHI 6

 

В большинстве случаев данные, которые хранятся в таблицах БД, необходимо тем или иным способом публиковать, создавая так называемые отчеты. Уже в первую версию Delphi были включены средства генерации отчетов — утилиты Report-Smith и ReportSmith Run Time Viewer. Это были автономные средства, никак не связанные со средой Delphi. Более того, утилита ReportSmith Run Time Viewer должна была наравне с BDE поставляться вместе с программой. Все это затрудняло использование этих средств, поэтому уже начиная со второй версии в Delphi были включены специальные компоненты для генерации отчетов, разработанные независимой компанией QuSoft AS (Норвегия). Переход на компонентный уровень позволил использовать естественную для Delphi технику визуального программирования, что существенно упростило как разработку программ, так и их распространение, — компоненты являются встроенными в программу «кирпичиками» и не нуждаются в каких-либо внешних средствах (таких, как утилита Report-Smith Run Time Viewer) для выполнения возложенных на них задач. От версии к версии эти компоненты совершенствовались, их набор расширялся, так что в Delphi 6 на вкладке QReport размещено более 20 компонентов, с помощью которых программист может сравнительно легко создавать достаточно сложные отчеты.

2.1. Принципы построения отчета

Центральным компонентом при построении отчета является компонент TQuick-Rep, определяющий свойства отчета в целом. Этот компонент всегда помещается на отдельную пустую форму, создавая с ее помощью визуальную среду конструирования отчета (рис. 1).

 

 

 

Рис. 1. Пример формы с размещенным на ней компонентом TQuickRep

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

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

type TQRBandType

(rbTitle,  rbPageHeader,  rbDetail, rbPageFooter,  rbSummary, rbGroupHeader, rbGroupFooter. rbSubDetail. rbColumnHeader, rbOverlay,  rbChild);

property BandType : TQRBandType:

 

Свойство может содержать одно из следующих значений, определяющих, что будет отображать полоса:

  • rbTitle—заголовок отчета в целом; 
  • rbPageHeader — верхний колонтитул;
  • rbDetail — данные из НД (какой конкретно НД будет отображаться в такой полосе, определяется значением свойства DataSet компонента-отчета TQuickRep);
  • rbPageFooter — нижний колонтитул, в котором обычно размещается номер страницы отчета и другая вспомогательная информация;
  • rbSummary — общие для отчета в целом итоговые данные;
  • rbGroupHeader — заголовок группы данных;
  • rbGroupFooter — подвал группы данных;
  • rbSubDetail — зарезервировано для реализации дочернего компонента TQRSub-Detail, программист не должен использовать это значение;
  • rbColumnHeader — заголовки колонок отчета;
  • rbOverlay — введено для совместимости с более ранней версией QuickReport 1; не рекомендуется использовать в новых разработках;
  • rbChild — зарезервировано для реализации дочернего компонента TQRChiId-Band; программист не должен использовать это значение.

На полосах TQRBand или полосах дочерних компонентов TQRStringsBand, TQRSub-Detail, TQRChildBand и др. размещаются остальные компоненты отчета, которые делятся на оформительские и отображающие данные. Оформительские компоненты содержат различного рода вспомогательную информацию — надписи, изображения и т. д. Эта информация не является частью данных из БД, но служит для удобства чтения отчета. Компоненты отображения данных получают информацию из соответствующих полей НД или вычисляют ее на основе этой информации.

По структуре различают три рода отчетов: простые, типа главный-детальный, и композитные. В простых отчетах отображаются данные из одного НД, например список всех накладных, связанных с отпуском книг конкретному покупателю, упорядоченный по дате или сумме. В простом отчете должна использоваться хотя бы одна полоса TQRBand типа rbDetail, которая при печати (просмотре) отчета будет автоматически повторяться столько раз, сколько записей содержит НД. В отчетах типа главный-детальный используется информация из двух НД, связанных соответствующим реляционным отношением. Например, такой отчет позволяет напечатать не только текущую накладную, но и связанный с ней список книг. В отчетах главный-детальный обязательно используется полоса TQRSubDetail, которая автоматически повторяется столько раз, сколько записей содержит детальный НД. Наконец, композитный отчет строится как механическое объединение двух и более других отчетов. Например, с его помощью можно создать отчет, в котором данные по конкретной накладной будут дополняться исчерпывающей информацией о партнере. Для создания композитного отчета на любую форму помещается компонент TQRCompositeReport, после чего на этапе прогона программы он наполняется с помощью метода Add и его свойства Reports, например, так:

procedure TfmPrint.FormCreate(Sender: TObject);

begin

with QrCompositeReportl do begin

Reports.Add(QuickRepl); Reports.Add(QuickRep2) end

end:

Любой отчет можно напечатать, если обратиться к его методу Print, или просмотреть в специальном окне просмотра, если вызвать метод Preview.

2.2. Пример создания отчета

В этом разделе иллюстрируются основные приемы создания отчета.

Создайте в проекте новую пустую форму, расположите на ней компонент TQuickRep, измените имя формы на fmPrint и сохраните в дисковом файле fmPrintU. Эта форма не будет создаваться автоматически в момент старта программы, поэтому после ее присоединения к проекту выберите команду Project ► Options и перенесите ее в список доступных форм Available forms (рис. 2).

Рис.2 Убираем новую форму из списка создаваемых автоматически при старте приложения

С помощью команды File ► Use unit свяжите новую форму с основной формой приложения Form1, после чего поместите в свойство DataSet компонента QuickRep значение Form1.Table3. Замечу, что это свойство всегда должно быть заполнено ссылкой на тот набор данных, который будет содержать основную информацию — иначе полосы TQRBand типа rbDetail и TQRSubDetail не смогут автоматически реплицироваться по количеству записей НД.

Поместите на отчет полосу TQRBand. Эта полоса по умолчанию имеет тип rbTitle, то есть появляется всего один раз в самом начале отчета. Используем ее для размещения заголовка отчета, для чего установите ее высоту Height = 40 и поместите на нее компонент TQRLabel со следующими свойствами:

  • Caption = Успеваемость курсантов
  • Тор = 8,
  • Left = 212,
  • Font. Size = 16,
  • Font.Style.fsBold = True;

Вид отчета к этому моменту на этапе конструирования показан на рис. 3. Чтобы увидеть отчет в окне предварительного просмотра, щелкните на компоненте QuickRep правой кнопкой мыши и выберите в контекстном меню команду Preview.

Рис. 3. Отчет на этапе конструирования

 

Теперь поместим в отчет заголовки его колонок. Для этого используется компонент TQRBand со свойством BandType = rbColumnHeader. Установите для этого компонента также следующие свойства: Font. Size = 10; Font. Style. fsBold = True, чтобы заголовки отображались полужирным шрифтом, а также поместите значения True в свойства Frame.DrawBottom, Frame.DrawLeft, Frame.DrawRight и Frame.Draw-Top, чтобы полоса очерчивалась прямоугольной рамкой.

Разместите на новой полосе три компонента TQRLabel со следующими свойствами (рис. 4):

 компонент QRLabel2 со свойствами:

    • Caption = ФИО курсанта,
    • Left = 104,
    • Тор = 10;

компонент 0RLabel3 со свойствами:

    • Caption = Название дисциплины,
    • Left = 352,
    • Тор = 10,

компонент QRLabel4 со свойствами:

    • Caption = Оценка,
    • Left = 624,
    • Top = 10

Рис. 4 Отчет с заголовками колонок

Чтобы в отчете появился список курсантов с дисциплинами и оценками, поместите в него компонент TQRSubDetail с такими значениями свойств:

    • DataSet   = Form1.Тable3,
    • Font.Size = 8,
    • Height = 20,
    • Frame. DrawLeft = True,
    • Frame.DrawRight = True,
    • Frame.DrawBottom  = True.

На полосе TQRSubDetail разместите три компонента TQRDBText для отображения содержимого трех колонок отчета:

  • компонент QRDBText1 со свойствами:
    • AutoSize = False,
    • DataSet   = = Form1.Тable3,
    • DataField  = Fio_k,
    • Frame.DrawRight = True,
    • Height = 20,
    • Left = 0,
    • Top = 0,
    • Width = 300;
  • компонент QRDBText2 со свойствами:
    • AutoSize = False,
    • DataSet   = Form1.Тable3,
    • DataField = Name_d,
    • Frame.DrawRight = True,
    • Height = 20,
    • Left = 301,
    • Top = 0,
    • Width = 300,  
    • Alignment = taCenter;
  • компонент QRDBText3 со свойствами:
    • AutoSize = False,
    • DataSet   = Form1.Тable3,
    • DataField = Ocenka,
    • Frame.DrawRight = True,
    • Height = 20,
    • Left = 605,
    • Top = 0,
    • Width = 112,
    • Alignment = taCenter;

Вид отчета показан на рис. 6.

Рис. 6. Отчет с заголовками колонок и детальной информацией

Для размещения в отчете итоговой информации используется полоса RQRBand типа rbSummary. Поместите на эту полосу:

  • компонент TQRLabel со свойствами:
    • Тор = 5,
    • Left = 10,
    • Caption = Итого оценок:
  • компонент TQRSysData со свойствами:
    • Тор = 5,
    • Left = 96,
    • Data = qrsDetailCount;

Чтобы вызывать отчет в приложении на основную форму приложения поместите кнопку присвойте ее свойству Caption значение Отчет и организуйте вызов формы fmPrint по нажатию этой кнопки рис.7.

Рис. 7 Поместим кнопку Отчет на основную форму приложения

Листинг 1. Обработчик нажатия на кнопку Отчет

procedure TForm1.Button2Click(Sender: TObject);

begin

  fmPrint := TfmPrint.Create(Self);

  fmPrint.QuickRepl.Preview;

  fmPrint.Free

end;

Запустите программу на выполнение и нажмите кнопку Отчет Вы должны получить результат аналогичный представленному на рис. 8

Рис. 8 Пример готового отчета

 

3. СОЗДАНИЕ ОТЧЕТОВ В DELPHI 7

3.1. Принципы построения отчета

 

Генератор отчетов Rave Reports 5.0

 

Генератор отчетов Rave Reports 5.0 разработан фирмой Nevrona и входит в состав Delphi 7 в качестве основного средства для создания отчетов. Он состоит из трех частей:

  1. ядро генератора отчетов обеспечивает управление отчетом и его предварительный просмотр, и отправку на печать. Исполняемый код ядра сервера включается в приложение Delphi, делая его полностью автономным при работе с отчетами на компьютере клиента;
  2. визуальная среда разработки отчетов Rave Reports предназначена для разработки самих отчетов. Она позволяет добавлять к отчету страницы, размешать на них графические и текстовые элементы управления, подключать к отчетам источники данных и т. д. Отчеты сохраняются в файлах с расширением rav и должны распространяться совместно с приложениями, использующими их;
  3. компоненты Rave Reports расположены на странице Rave Палитры компонентов Delphi. Они обеспечивают управление отчетами в приложении.

Отчет в приложении Delphi

Завершив обзор нового генератора отчетов, давайте обратимся к деталям программирования и посмотрим, что нужно сделать, чтобы приложение могло работать с отчетами.

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

После создания проект отчета необходимо связать с приложением Delphi. Для этого используется компонент TRvProject. Этот компонент обеспечивает представление отчета в приложении.

Но этого недостаточно, чтобы просмотреть или напечатать отчет. Для выполнения этих операций используется код ядра генератора отчета, который автоматически прикомпилируется к исполняемому коду приложения при переносе на любую форму проекта компонентов TRvProject и TRvSystem. Для управления операциями печати и просмотра в проекте должен присутствовать компонент TRvSystem (рис. 9).

Рис. 9. Компоненты Rave Reports в приложении Delphi

Для того чтобы приложение Delphi могло выполнять функции печати отчетов, разработчик должен выполнить следующий набор операций.

  1. При помощи визуальной среды разработки Rave Reports необходимо создать проект отчета и сохранить его.
  2. Перенести в проект приложения в Delphi компонент TRvProject и связать его с файлом проекта отчета при помощи свойства ProjectFile.
  3. Перенести в проект приложения в Delphi компонент TRvSystem и связать его с компонентом TRvProject. ля этого используется свойство Engine компонента TRvProject.
  4. Написать код приложения, обеспечивающий просмотр и печать отчета (при необходимости и другие операции), используя методы компонента TRvProject.

 

3.2. Пример создания отчета

Запустите среду визуальной среды разработки Rave Reports для этого в Delphi выбирите команду меню Tools ► Rave Designer.

Визуальная среда создания отчетов входит в состав генератора отчетов Rave Reports 5.0. В отличие от генератора отчетов Quick Report, который поставлялся с Delphi 6 и более ранними версиями, визуальная среда в Rave Reports значительно облегчает самый трудоемкий этап в процессе создания отчета и его включения в состав приложения — постраничную разработку шаблона отчета.

Под шаблоном отчета мы подразумеваем совокупность страниц отчета с расположенными на них графическими и текстовыми элементами оформления, а также свойствами и правилами создания отчета, сохраненными в файле с расширением rav.

Каждый файл RAV может включать несколько независимых шаблонов отчетов. Затем эти шаблоны используются в компонентах TRvProject и служат основой для создания и печати отчетов в приложении.

Подводя итог сказанному, мы можем выделить несколько основных задач, которые можно решать в визуальной среде создания отчетов:

    1. загрузка, редактирование и сохранение шаблонов отчетов в файлах RAV; 
    2. создание структуры отчета и определение его основных свойств;
    3. разработка страниц отчета;
    4. подключение к отчету источников данных и использование этих данных при оформлении страниц отчетов;
    5. генерация отчета на основе созданного шаблона, его предварительный просмотр или печать.

Проект отчета

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

Корневой элемент RaveProject содержит три дочерние ветви:  

  1. Report Library — библиотека отчетов включает все шаблоны отчетов, содержащиеся в этом проекте;
  2. Global Page Catalog — каталог глобальных страниц содержит перечень страниц, не принадлежащих какому-либо из отчетов проекта;  
  3. Data View Dictionary — словарь просмотров данных содержит созданные соединения с внешними источниками данных.

Рис. 10. Пример дерева проекта отчета

Для начала создайте в визуальной среде Rave Reports новый проект (команда File | New главного меню). Обратите внимание, что по умолчанию вместе с проектом создается первый отчет Reportl с одной страницей Pagel. Его мы и используем, переименовав в UspRepor рис. 10. Сохраните проект, присвоив ему  имя UspReport.

 

Задайте осмысленное имя новому отчету для этого выделите отчет в дереве проекта отчета рис. 11


Рис. 11 Задание имени отчета

Соединение с источником данных и просмотры

Если отчет Rave Reports должен отображать данные из какого-либо источника данных, на этапе разработки в визуальной среде в проект отчета должны быть добавлены специальные объекты, обеспечивающие соединение с источником данных и формирование набора данных, который затем отображается в отчете.

В Rave Reports существуют два типа соединений с источниками данных (рис. 12):

    1. соединение через драйвер Rave Reports;
    2. соединение через компонент Rave Reports и компонент набора данных в приложении Delphi.

Рис. 12 Соединения с источниками данных в отчете Rave Reports

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

SELECT Kursant.Fio_k, Discipl.Name_d, Uspev.Ocenka

FROM Kursant, Uspev, Discipl

WHERE  Discipl.N_Disc = Uspev.N_Disc AND Kursant.Num_VB =  Uspev.Num_VB

Установим свойство Active  в значение True, если мы не допустили ошибок в тексте запроса то свойство установится.

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

Компонент TRvTableConnection работает с компонентом TTаblе. Для связывания с таблицей BDE используется свойство Table.

Компонент TRvQueryConnection работает с компонентом TQuery для связывания с запросом используется свойство Query.

Поскольку в качестве источника данных у нас используется запрос, то необходимым компонентом для нас будет TRvQueryConnection, поместим его на основную форму нашего приложения и установим его свойство Query нашему запросу QueryReport.

Рис. 13 Настройка компонента доступа к данным TRvQueryConnection

Теперь вернемся в окно Rave Designer и создадим соединение с источником данных.

Для этого необходимо воспользоваться командой главного меню File | New Data Object. После этого открывается диалог выбора типа объекта Data Connections рис.14, в котором выберем объект просмотра Direct Data View

Рис. 14 Создание соединения с источником данных.

При создании объекта прямого просмотра для него необходимо выбрать из списка одно из соединений из приложения Delphi, в котором будет использоваться проект отчета. В этом списке можно выбрать все соединения, доступные как во время разработки, так и во время выполнения приложения. Для этого используются флажки в нижней части окна (рис. 15).

Рис. 15. Список доступных соединений из приложения Delphi

После создания объект прямого просмотра (компонент DataView) доступен в дереве проекта и может быть использован. В его состав входят все поля набора данных, связанного в приложении Delphi с компонентом соединения. И их можно подключить к элементам оформления нужного отчета.

После выполненных действий дерево проекта отчета должно выглядеть так как представлено на рис. 16.

Рис. 16 Дерево проекта отчета после настройки соединения с источником данных

Вернемся к созданию шаблона нашего отчета.

Рассмотрим структурные элементы.

Основой отчета, использующего просмотры баз данных, является элемент Region. Он создает в отчете область, предназначенную для размещения любых других элементов и определяющую часть страницы отчета, отведенную под отображение данных. Он обладает одним интересным свойством Columns, которое задает число колонок, в которых будет печататься отчет.

При создании отчета, использующего базу данных, этот элемент переносится на страницу в первую очередь. Затем приходит очередь элементов Band и DataBand.

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

Элемент DataBand создает полосу, моделирующую строку просмотра данных. На ней располагаются элементы отображения данных, которые будут рассмотрены ниже. При печати отчета для каждой строки печатается новый экземпляр полосы элемента DataBand со всеми расположенными на ней элементами оформления. Таким образом и получается отчет, отображающий строка за строкой весь просмотр данных.

Продолжим создание шаблона отчета:

Для быстрого создания заготовки отчета воспользуемся мастером выберем команду Tools ►Report Wizards ►Simple Tables. В появившемся окне нажимаем кнопку Next, в соедующем окне выберем все поля, которые будут включены в отчет см.рис.17.

Рис. 17 Диалог выбора поля, включаемых в отчет

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

Рис. 18 Диалог настройки с названием отчета

В следующем окне можно задать шрифт заголовка, изменим шрифт на «MS Sans Serif» для корректного отображения русских букв и установим размер шрифта 20 пунктов.

ВАЖНО. Для правильного отображения русских букв у всех элементов DataText необходимо с помощью свойства Font установить шрифт «MS Sans Serif».


Результат работы мастера представлен на рис. 19

Рис. 19 Результат работы мастера отчетов

Откорректируем отчет для придания ему нужного нам вида, для этого:

1. В секции DataView1DataBand (это секция заголовков таблицы) изменим шрифт Для компонентов Fio_k, Name_d и Ocenka на «MS Sans Serif» и дадим им русские названия: ФИО курсанта, Дисциплина, Оценка

2. Для компонентов Fio_k, Name_d и Ocenka установим шрифт «MS Sans Serif».

3. Добавим нумерацию страниц для перенесем на страницу элемент Section со страницы Standard Палитры инструментов и поместим его в верхней части страницы отчета. Эта секция будет содержать номера страниц.

Поместим в секции элемент DataText — нам необходимо его свойство DataFieid. Редактор свойства Data Text Editor (рис. 11) позволяет настраивать свойство так, чтобы элемент мог отображать разнообразные данные. Сейчас нас интересуют номера страниц отчета.

Из списка Report Variables, который содержит глобальные переменные отчета, необходимо выбрать переменную CurrentPage. Затем нужно щелкнуть на кнопке Insert Report Var и переменная Report. CurrentPage появится в поле Data Text в нижней части диалога. Эта переменная при печати отчета будет содержать порядковый номер текущей страницы.

 

Рис. 20. Редактор свойства DataField элемента DataText

Аналогичным образом добавим переменную TotalPages, которая возвращает общее число страниц отчета. Затем вручную отредактируем текст в поле Data Text:

'Страница ' + Report. CurrentPage + ' из ' + Report.TotalPages

Шаблон номера страницы готов. Но для того, чтобы механизм нумерации заработал, необходимо перенести на страницу невизуальный элемент pageNuminit (закладка Standart). Он будет работать автоматически. Единственное, что нужно сделать, — это настроить свойство initvalue, в котором задается номер начальной страницы.

4. Для отображения итога разместим  компонент Band, установим для него свойства

    • Name=FooterBand,

5. Разместим компонент Text на компоненте Band и установим для него следующие свойства:

    • Font= MS Sans Serif,12,Bold,
    • Text= Итого оценок:
    1. Для подсчета количества оценок воспользуемся компонентом CalcText (закладка Report) разместим его левее компонента Text и установим для него следующие свойства:
    • CalcType= ctCount,
    • Controller = DataView1DataBand
    • DataField= Ocenka,
    • DataView= DataView1,
    • Font= MS Sans Serif,12,Bold,

Результат готового шаблона представлен на рис. 21

Рис. 21 Готовый шаблон отчета

Для вызова отчета из Delphi нам понадобится два компонента.

Компонент отчета TRvProject

Компонент TRvProject обеспечивает представление в приложении отчета. Для того чтобы связать проект отчета Rave Reports с компонентом, используется свойство

property ProjectFile: string;

До начала печати необходимо связать компонент TRvProject с компонентом управления отчетом TRvSystem. Для этого достаточно передать в свойстве

property Engine: TRpComponent;

ссылку на компонент TRvSystem.

Организуем вызов отчета из Delphi.

Разместим на основной форме компонент TRvSystem и TRvProject, для компонента TRvProject установим следующие свойства:

    • Engine =RvSystem1,
    • ProjectFile= D:\USER \UspevKursant.rav (имя файла шаблона отчета, куда мы его сохранили)

Разместим на форме кнопку для вызова отчета и в событии OnClick пропишем следующий фрагмент кода для вызова созданного отчета без показа диалога настройки печати:

 

// Необходимо присвоить значение False, т. к. по умолчанию оно имеет  значение True, которое и заставляет компонент показывать диалог настройки печати перед выполнением операции.

RvSystem1.DoNativeOutput := False;

//Режим предварительного просмотра

 RvSystem1.DefaultDest := rdPreview;

// Убираем из свойства SystemSetups опцию ssAllowSetup эта опция разрешает или запрещает //использование диалога настройки печати компонента

 RvSystem1.SystemSetups := RvSystem1.SystemSetups - [ssAllowSetup];

//Печать отчета

 rvProject1.Execute;

Результат сформированного отчета представлен на рис. 22

Рис. 22 Сформированный отчет

 


Создание отчетов в Delphi