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

RvCsRpt ■TRaveRegion Компонент-контейнер, размещающий в себе элементы оформления отчета. Также позволяет создать печать отчета в несколько столбцов. Используется для работы с источниками баз данных. ■TRaveBand Компонент-контейнер, также размещающий в себе элементы оформления отчета. В основном используется для создания верхних и нижних колонтитулов или других сносок. ■TRaveDataBand Компонент-контейнер, размещающий в себе элементы оформления отчета для вывода информации из баз данных. ■TRaveDataCycle Используется для вычислений, сортировки или фильтрации. RvCsData ■TRaveDataText Элемент оформления отчета, для вывода однострочных данных из источника баз данных. ■TRaveDataMemo Элемент оформления отчета, для вывода многострочных данных из источника баз данных. ■TRaveDataMirrorSection Компонент-контейнер, размещающий в себе элементы оформления отчета для доступа к источникам баз данных и объединяющий их в одну группу. ■TRaveCalcText Элемент оформления отчета, позволяющий производить вычисления по указанному полю источника данных. ■TRaveCalcOp Вспомогательный элемент, позволяющий производить вычисления по двум указанным полям источника данных. ■TRaveCalcTotal Вспомогательный элемент, позволяющий производить вычисления по указанному полю источника данных и имеет возможность передать вычисленное значение какому либо элементу оформления отчета. ■TRaveCalcController Вспомогательный элемент, позволяющий задать параметры вычислений. Также данный класс выполняет все заданные функции вычислений. Доступ к объектам проекта отчета Rave Report в режиме RunTime Ну вот, когда проведена большая работа по исследованию классов в проекте отчета Rave Report, наконец, можно приступить непосредственно к работе с отчетом в режиме RunTime. Еще раз напомню порядок доступа к активному (текущему) отчету Rave: 1.Для доступа к проекту отчета необходимо обратиться к классу TRaveProjectManager. 1.Для доступа к классу TRaveProjectManager следует обратиться к свойству «ProjMan» класса TRvProject. 1.Чтобы получить доступ к активному отчету, следует обратиться к свойству «ActiveReport» класса TRaveProjectManager. 1.То есть последовательность такого типа: TRvProject.ProjMan.ActiveReport. Как вы уже знаете в отчете содержаться еще и страницы. К сожалению, разработчики не предоставили методов для навигации по страницам отчета (представлено только одно свойство «FirstPage» – первая страница), но это проблема вполне решаема. Ниже приведена процедура, которая возвращает список указателей на объекты (если таковые имеются), порожденных от указанного класса.

// Возвращает список указателей на объекты, порожденных от указанного класса FindClass
procedure GetObjectList(RootComponent: TComponent; FindClass: TClass; var
 PageList: TList);
var
 I: Integer;
begin
 PageList.Clear;
 if (RootComponent = nil) or (PageList = nil) then
  EXIT;
 for I := 0 to RootComponent.ComponentCount - 1 do
  if RootComponent.Components[I] is FindClass then
  PageList.Add(RootComponent.Components[I]);
end;

Пример вызова процедуры:
GetObjectList(RvProjectRTR.ProjMan.ActiveReport, TRavePage, RavePageList);
Данный вызов процедуры заполняет список RavePageList указателями на все найденные страницы в текущем отчете. Теперь используя список RavePageList можно удобно осуществлять навигацию по страницам отчета, точно так же, как по списку отчетов представленный менеджером отчетов TRaveProjectManager. Список отчетов можно получить, обратившись к свойству «ReportList» класса TRaveProjectManager. Используя процедуру GetObjectList можно получить список и других объектов произошедших от определенного класса, что облегчает навигацию по объектам определенного типа.
Примечание: У класса TRaveReport в наличии есть свойство «PageList». Данное свойство определяет порядок страниц при печати. Допустим, в отчете имеется 10 страниц, а в «PageList» указанно печатать 3-ю и 8-ю страницу. Тогда свойство «PageList.Count», будет равным 2-ум, и доступ вы сможете получить только к 3-й и 8-й странице отчета. Если же в свойстве «PageList» нет ссылок на страницы отчета (PageList = NIL), то при попытке обратиться к данному свойству будет получено сообщение об ошибке. Поэтому не следует забывать специфику данного свойства.
Примечание: TRaveReport также предоставляет свойство «Page» доступное только для чтения. Можно было бы предположить, что данное свойство хранит ссылку на активную страницу текущего отчета, но по каким то причинам в данном свойстве все время присутствует значение равное NIL. Так что назначение данного свойства для меня пока неизвестно.
Слов сказано уже много, но на практике еще мало чего сделано. Думаю, настало время перейти к практической части. За основу, как оговаривалось в начале статьи, взят демонстрационный проект отчета «RaveDemo.rav», вот над ним и будут производиться все опыты на практике. Для экспериментов возьмем, к примеру, отчет «Mirror Report».
Попробуем изменить заголовок первой страницы у отчета «Mirror Report». Для оттого необходимо: 1.Найти и активизировать отчет «Mirror Report» средством вызова метода «SelectReport» класса TRvProject. 1.Произвести поиск текстового элемента оформления TRaveText на первой странице отчета TRavePage. Для этого можно воспользоваться методом «FindRaveComponent» класса TRaveProjectManager, который в случае успешного поиска в качестве возвращаемого параметра вернет найденный объект, в противном случае возвратится NIL. 1.Убедиться, что искомый объект произошел от нужного класса. 1.Если искомый объект найден, то произвести с ним все необходимые манипуляции. 1.После внесенных изменений сгенерировать отчет методом «Execute» или «ExecuteReport» класса TRvProject.
Ниже представлен пример реализации всего выше изложенного.

...

var

 I: Integer;

 TmpRaveComponent: TRaveComponent;

begin

 // Поиск и активизация необходимого отчета. Метод вернет false если отчет не найден

 if not RvProjectRTR.SelectReport('Mirror Report', true) then

  EXIT;

 // Поиск компонента с именем 'Text1' на первой странице отчета

 TmpRaveComponent := RvProjectRTR.ProjMan.FindRaveComponent('Text1',

  RvProjectRTR.ProjMan.ActiveReport.FirstPage);

 // Если объект найден, и он произошел от класса TRaveText

 if (TmpRaveComponent <> nil) and (TmpRaveComponent is TRaveText) then

 begin

  // Замена выводимого текста

  TRaveText(TmpRaveComponent).Text := 'Это мой новый заголовок';

  // Изменение стиля шрифта

  TRaveText(TmpRaveComponent).Font.Style := [fsItalic];

 end;

 // Генерация активного отчета

 RvProjectRTR.Execute;

end;

...

Как видите, ничего особо сложного нет. Найдя необходимый объект в отчете с ним можно делать почти все что угодно. Почему почти? Когда вы исследовали визуальные элементы оформления отчета средствами RTTI, то, может быть, обратили внимание на то, что все эти компоненты не имеют свойства «Visible», хотя данное свойство уже доступно начиная с класса TRaveComponent. К сожалению, разработчики по каким то причинам не стали учитывать значение свойства «Visible», что в принципе огорчает. Все-таки иногда может возникнуть необходимость скрыть, что-либо из отчета в зависимости от событий в программе.
Есть возможность имитировать свойство «Visible» используя свойство «Parent» нужного объекта. Чаще всего в качестве родителя объектов выступает страница отчета, но для группировки визуальных компонентов отчета в качестве родителя может выступать компонент-контейнер TRaveSection (также группировку объектов выполняют TRaveRegion и TRaveDataBand). Если визуальному компоненту не будет указан родитель в свойстве «Parent», т.е. значение равное NIL, то данный объект не будет отображен в сгенерированном отчете. Для имитации свойства «Visible» объектов вновь обратимся к отчету «Mirror Report». В данном отчете скроем все элементы оформления TRaveRectangle путем скрытия объектов TRaveSection. Последовательность действий будет следующей: 1.Найти и активизировать отчет «Mirror Report» средством вызова метода «SelectReport» класса TRvProject. 1.Пробежаться по всем дочерним компонентам страницы и найти компоненты производные от класса TRaveSection. 1.У компонентов TRaveSection в свойстве «Parent» проверить наличие родителя. Если родительский компонент назначен, то данному свойству присвоить значение NIL (скрытие объекта), в ином случае данному свойству в качестве родителя присвоить страницу отчета (отображение объекта на странице). 1.После внесенных изменений сгенерировать отчет.
Возможно, некоторые задались вопросом, – почему бы сразу не скрыть TRaveRectangle напрямую, а через объект TRaveSection? Все возможно, но в данном случае: 1.Элементы оформления TRaveRectangle объединены в группу компонентом TRaveSection. Следовательно, у объектов TRaveRectangle общий родитель TRaveSection.

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

Проверка
Антиспам проверка
Image CAPTCHA
...