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

Работа с отчетами Rave Report в режиме RunTime Автор: Турушев Виталий Введение С выходом Delphi 7 мы стали свидетелями выхода нового генератора отчетов Rave Report Borland Edition от разработчиков фирмы Nevrona. Среда разработки Rave имеет довольно много новшеств, и в тоже время ряд ошибок и недочетов. Среди положительных качеств можно отметить: сохранение проекта отчета в файл и чтение его из файла, что позволяет удобно загрузить или сохранить необходимый проект отчета, и в дальнейшем работать с ним. Также есть набор компонентов для конвертирования отчета Rave в другие форматы (PDF, HTML, RTF, TEXT). Rave Report значительно облегчает разработку отчетов где используются базы данных, ведь выбор компонентов доступа к источникам данных весьма неплох. Среди недочетов отмечу: недоработку среды разработки отчетов Rave, где присутствует ряд серьезных ошибок. Также Nevrona предоставила довольно таки очень скудную справку для разработчика и не порадовала достаточным количеством примеров работы с отчетами Rave. Причиной написания данной статьи стало отсутствие примеров и описания работы с отчетами Rave в режиме RunTime, что не позволяет пользователю более гибко работать с отчетом (например: изменение данных/оформления в отчете при наступлении определенного события в программе, а возможности Event Editor в Rave Report увы ограничены), что отталкивает пользователей от использования генератора отчетов Rave. Возможно, по этой причине или по причине недоработки генератора отчета часть пользователей возвращается к генератору отчетов Quick Report или к генераторам отчетов других разработчиков. Исследование классов в проекте отчета Rave Report Для работы с отчетами в RunTime потребуется, знание имен подключаемых модулей в раздел uses, создаваемого проекта. Ниже представлена таблица описания основных модулей, которые могут понадобятся для работы с отчетом Rave в RunTime. Примечание: Для разработчиков CLX приложений название модулей почти идентично, только в имени модуля предшествует символ «Q». Например: QRvCsBars. Все модули находятся в каталоге «\Rave5\Lib» куда установлена среда программирования Delphi 7. Имя модуля Описание модуля RvClass Этот модуль содержит реализацию базовых классов RvProj В этом модуле набор классов реализующие собственно сам проект отчета и отвечающих за работу с ним RvCsDraw Классы в этом модуле реализуют графические примитивы RvCsBars В этом модуле реализованы штриховые коды RvCsStd В этом модуле реализуются основные элементы оформления отчета RvCsRpt, Набор классов в данном модуле служит для вывода данных из RvCsData баз данных или других источников данных Примечание: В качестве файла отчета взят уже готовый демонстрационный пример отчета RaveDemo.rav, поставляемый с генератором отчета Rave Report, который находится в каталоге «\Rave5\Demos». Поэтому следует указать полный путь к файлу отчета или скопировать данный файл в каталог с текущим проектом. И так, осталось выяснить, что далее необходимо для работы с отчетом в RunTime. Всю работу с проектом отчета обеспечивает класс TRaveProjectManager – менеджер отчетов. Следовательно, потребуются некоторые знания о свойствах и методах этого класса. Примечание: Следует разделять понятие проект отчета и отчет как таковой в отдельности. Проект отчета – может содержать в себе целую коллекцию отдельных отчетов. Отчет – это набор страниц, элементов оформления, элементов доступа к различным источникам данных и т.п., то, что подготовлено или подготавливается для печати отчета. Также могут, пригодиться знания по работе с технологией RTTI для извлечения наименований свойств, событий (методов) и другой информации из объектов (компонентов) отчета Rave Report. Можно и не изучать принципы работы с технологией RTTI, ведь наименование доступных свойств интересующего объекта можно увидеть в среде разработки Rave Report инспектора объектов. И так, двигаемся далее. Для работы с отчетом в RunTime, конечно, необходимо знать из набора каких объектов состоит данный отчет и, от каких классов произошли эти объекты, ведь в справочной системе Rave Report о них нет ни слова. Для этого необходимо написать процедуру, которая поможет узнать, из каких объектов состоит отчет, а также поможет выяснить имена классов и объектов. Код данной процедуры представлен ниже:

procedure GetListObjects(ListClass: TStrings; ClassX: TComponent; TabStr:
 string; AddObjects: Boolean = False);
var
 I: Integer;
begin
 if (ClassX = nil) or (ListClass = nil) then
  EXIT;
 for I := 0 to ClassX.ComponentCount - 1 do
 begin
  if AddObjects then
  ListClass.AddObject(TabStr + ClassX.Components[I].Name +
  ' - ' + ClassX.Components[I].ClassName, ClassX.Components[I])
  else
  ListClass.Add(TabStr + ClassX.Components[I].Name +
  ' - ' + ClassX.Components[I].ClassName);
  if ClassX.Components[I].ComponentCount > 0 then
  GetListObjects(ListClass, ClassX.Components[I], TabStr + '..',
  AddObjects);
 end;
end;

Как видите, процедура достаточно проста. В цикле процедуры осуществляется проход по всем дочерним компонентам в компоненте «ClassX» и если дочерний компонент содержит в себе еще вложенные компоненты, то используется рекурсивный вызов процедуры GetListObjects. В результате чего будет получен список всех компонентов. Вполне вероятно, что захочется узнать всех предков исследуемого объекта, тогда можно воспользоваться приведенной ниже процедурой.

procedure GetListParentClassName(ListClass: TStrings;

 ClassX: TClass; ClearList: Boolean = True);

begin

 if (ClassX = nil) or (ListClass = nil) then

  EXIT;

 if ClearList then

  ListClass.Clear;

 while ClassX <> nil do

 begin

  ListClass.Add(ClassX.ClassName);

  ClassX := ClassX.ClassParent;

 end;

end;

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

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