Работа с отчетами Rave Report в режиме RunTime

В режиме RunTime вполне самостоятельно возможно создать: отчет, страницу отчета, визуальные элементы оформления или другие объекты, поддерживаемые отчетом Rave Report. Для создания нового отчета необходимо обратиться к методу «NewReport» менеджера отчетов TRaveProjectManager. В качестве возвращаемого параметра, возвращается объект порожденный от класса TRaveReport вновь созданного отчета. Для создания новой страницы для отчета следует обратиться к методу «NewPage» класса TRaveReport. Данный метод, как и в предыдущей ситуации, в качестве возвращаемого параметра возвращает объект типа TRavePage вновь созданной страницы отчета. Примечание: При создании нового отчета автоматически создается и новая страница. При создании многостраничного отчета не следует забывать про свойство «GotoPage» компонента TRavePage или свойство «PageList» компонента TRaveReport, ведь данные свойства содержат указатели на следующую генерируемую страницу отчета. Если не воспользоваться ни одним из представленных свойств, то при генерации отчета будет сгенерированна только первая страница отчета. При создании новой страницы или отчета в RunTime нет необходимости указывать вновь созданным объектам хозяина или родителя компонента, все это, данные методы «NewReport» и «NewPage» осуществляют самостоятельно. При создании визуальных и не визуальных компонентов следует указать хозяина объекта. Если в качестве хозяина будет передано значение равное NIL, то после завершения работы с данными объектами, программист должен уничтожить их самостоятельно, воспользовавшись методом «Free» данного объекта. Для всех визуальных элементов оформления отчета следует обязательно указывать нужного родителя в свойстве «Parent». Вспомните имитацию скрытия объектов в отчете. Также учитывайте установленную единицу измерения в проекте отчета, для верного размещения визуальных объектов в отчете, иначе можете удивиться полученному результату. В ниже приведенном примере создается отчет с двумя страницами. На первой странице создается текстовый элемент оформления TRaveText, а на второй странице компонент TRaveBitMap для вывода графического изображения.

const
 NewRep = 'MyNewReport'; // Имя отчета (динамически создаваемого)
 FieldStr = 'FieldStr'; // Имя строкового поля
 FieldInt = 'FieldInt'; // Имя целочисленного поля
 NewDataView = 'NewDataView';
 // Имя компонента для посредника с источником данных
 ...
 // Вычисление позиции точки в процентах относительно
 // ширины/высоты визуального компонента
function SetPointInPercent(RaveControlWH: TRaveUnits; Percent: Byte):
 TRaveUnits;
begin
 Result := (RaveControlWH / 100) * Percent;
end;
...
const
 Picture = '1.bmp';
var
 TmpRaveReport: TRaveReport;
 TmpRavePage: TRavePage;
 TmpRaveText: TRaveText;
 TmpRaveBitMap: TRaveBitmap;
 TmpPageList: TRaveComponentList;
begin
 // Если отчет уже создан, то выходим
 if RvProjectRTR.SelectReport(NewRep, true) then
  EXIT;
 // Добавление нового отчета в проект и заполнение его свойств
 TmpRaveReport := RvProjectRTR.ProjMan.NewReport;
 with TmpRaveReport do
 begin
  Name := NewRep;
  FullName := NewRep;
  // Создание новой страницы для отчета (здесь будет графическое изображение)
  TmpRavePage := NewPage;
  // Указывается следующая страница для генерации отчета,
  // после того, как будет сгенерированна первая страница отчета
  TmpRaveReport.FirstPage.GotoPage := TmpRavePage;
 end;
 // Создание компонента для вывода графического изображения и заполнение его свойств
 TmpRaveBitMap := TRaveBitMap.Create(TmpRavePage);
 with TmpRaveBitMap do
 begin
  Name := 'MyNewRaveBitMap';
  Left := SetPointInPercent(TmpRavePage.PageWidth, 5);
   := SetPointInPercent(TmpRavePage.PageHeight, 20);
  Width := SetPointInPercent(TmpRavePage.PageWidth, 30);
  Height := SetPointInPercent(TmpRavePage.PageHeight, 30);
  // Загрузка графического изображения (если найден указанный файл)
  if FileExists(Picture) then
  Image.LoadFromFile(Picture);
  // Размеры изображения будут подогнаны под клиентские размеры компонента
  MatchSide := msBoth;
  // Родителем данного компонента будет страница TmpRavePage
  Parent := TmpRavePage;
 end;
 // Создание элемента TRaveText и заполнение его свойств
 TmpRaveText := TRaveText.Create(TmpRaveReport.FirstPage);
 with TmpRaveText do
 begin
  Left := SetPointInPercent(TmpRaveReport.FirstPage.PageWidth, 10);
  ;
   := SetPointInPercent(TmpRaveReport.FirstPage.PageHeight, 15);
  ;
  Font.Size := 18;
  Name := 'MyNewRaveText';
  // Родителем данного объекта будет первая страница отчета
  Parent := TmpRaveReport.FirstPage;
  Text := 'Этот текст расположен на первой странице отчета';
 end;
 // Заполение свойств страницы TmpRavePage
 with TmpRavePage do
 begin
  Name := 'MyNewRavePage';
  FullName := 'Моя новая страница';
 end;
 // Создание списка генерируемых страниц
 TmpPageList := TRaveComponentList.Create;
 TmpPageList.Add(TmpRavePage);
 TmpPageList.Add(TmpRaveReport.FirstPage);
 TmpRaveReport.PageList := TmpPageList;
 // Обновление списка доступных отчетов
 RvProjectRTR.GetReportList(ListReport.Items, True);
end;
...

В данном примере для перехода к следующей генерируемой странице применены оба свойства «PageList» и «GotoPage». Чтобы лучше понять их принцип работы создайте новый отчет по выше представленному примеру и сгенерируйте его.

...

if RvProjectRTR.SelectReport('Мой новый отчет', true) then

 RvProjectRTR.Execute;

...

Как видите, отчет сгенерировал три страницы. Это происходит потому, что сначала осуществляется проход по списку в свойстве «PageList» (если он не пуст). Вновь генерируемая страница из этого списка также проверяет свое свойство «GotoPage» на наличие перехода на другую страницу. После генерации страницы указанной в свойстве «GotoPage» (если данное свойство указывает на страницу) продолжается обход по списку «PageList». Следует соблюдать осторожность при указании порядка генерации страниц отчета, при задании неверного порядка может произойти бесконечный цикл генерации страниц (если данный случай имеет место быть). Схематично это можно отобразить так (в скобках указан порядок генерации страниц):
clip0006
Если очистить список страниц у отчета в свойстве «PageList» (все в том же выше приведенном примере) и вновь сгенерировать отчет, то результат соответственно будет совсем другим.

...

if RvProjectRTR.SelectReport('Мой новый отчет', true) then

begin

 RvProjectRTR.ProjMan.ActiveReport.PageList := nil;

 RvProjectRTR.Execute;

end;

...

Можно в отчете в RunTime подключить и источник данных. Как оговаривалось выше эти функции выполняют основные классы: TRaveDataView, TRaveDataField и собственно сам источник данных, например TRvDataSetConnection. 1.Условимся, что некий источник данных в проекте уже существует и содержит некоторые данные. В данном случае рассмотрим пример подключения к текстовому типу поля таблицы. Для начала нам потребуется «связной» с источником данных – TRaveDataView. Для того, чтобы созданный «связной» присутствовал в проекте отчета Rave Report его нужно добавить в список подключенный модулей данных, воспользовавшись методом «Add» свойства «DataObjectList» у класса TRaveProjectManager. У созданного объекта TRaveDataView достаточно заполнить четыре основных свойства: Name – имя компонента, Parent – родительский компонент (TRaveProjectManager), DataCon.Connection – подключаемый источник данных (в данном примере TRvDataSetConnection), ConnectionName – имя подключаемого источника данных. 1.Далее необходимо найти необходимое поле в источнике данных TDataSet воспользовавшись методом «FindField» и выяснить к какому типу данных это поле принадлежит. После определения типа поля в источнике данных необходимо создать соответствующее (совместимое) поле данных TRaveDataField для отчета Rave Report. Для TRaveDataField также достаточно заполнить четыре основных свойства: Name – имя компонента, FieldName – имя поля, Parent – родительский компонент (TRaveDataView), DataIndex – порядковый номер в списке полей источника данных (таблице). 1.При необходимости в отчете можно создать TRaveRegion, TRaveDataBand, TRaveDataText (если не созданны). Будем считать, что данные объекты уже созданы в проекте отчета Rave Report. Для TRaveDataBand, TRaveDataText следует указать поставщика источников данных
(TRaveDataView) воспользовавшись свойством «DataView» этих классов. Для TRaveDataText следует дополнительно указать имя поля, из которого будет производиться выборка данных, для чего следует обратиться к свойству «DataField» этого класса.
Пример реализации подключения источника данных приведен ниже. Данный пример присоединяет источник данных к вновь созданному отчету ('MyNewReport' – рассмотренному выше).

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
Проверка
Антиспам проверка
Image CAPTCHA
...