FastReport Studio — современный генератор отчетов

Автор: Ирина Цыбульникова
Источник: RSDN Magazine #2-2008
Опубликовано: 28.08.2008
Версия текста: 1.0
Создание отчетов
Пример №1
Пример №2
Настройка соединения с базой данных
Подключение отчета к программе

Примеры к статье

Излишне говорить, что бухгалтерии без отчетов не бывает. Какой универсальный язык программирования не использовался бы при создании бухгалтерских программ, почти всегда возникает потребность в отдельном дополнительном средстве — генераторе отчетов. Генератор отчетов может быть в большей или меньшей степени интегрирован со средой разработки основного приложения: он может поставляться в виде отдельного приложения или в виде набора компонентов. Правильный выбор генератора на этапе создания приложения будет определять не только важные эргономические качества приложения для конечного пользователя, но и удобство создания, подключения новых отчетов и оперативной модификации существующих. Качество программы только повысится, если эти действия могут быть выполнены не только разработчиком, но и силами службы сопровождения заказчика. В этой статье я хочу показать, как создавать отчеты для любых сред разработки, совместимых с технологией COM, с помощью FastReport Studio.

Рассмотрим данную задачу на примере списка платежей абонентов за услуги ЖКХ. Пусть необходимо создать отчеты «Список платежей за период» и «Расшифровка по видам платежей». Для того чтобы конечный пользователь увидел готовый отчет, разработчик должен выполнить следующие шаги:

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

Традиционный путь — для каждого из отчетов нарисовать свой шаблон. Но зачем делать лишнюю работу, если есть возможность использовать наследование отчетов. Начнем с создания универсального базового отчета, на основе которого будем строить остальные отчеты-потомки. Создаем новый отчет и расставляем на нем компоненты, как показано на рисунке:


Пользователь должен иметь возможность где-то задавать ограничения, например период прихода платежа. Для этого в FastReport Studio есть диалоговые формы. Нажмем на кнопку «Добавить форму в отчет», этим мы добавим в отчет страницу с диалоговой формой. На форму базового отчета поместим только самое важное — период, а остальные ограничения будем добавлять по мере необходимости в отчетах-потомках.


Теперь для базового отчета создадим соединение с базой данных. Добавим на форму компоненты «База данных ADO» и «Запрос ADO».


Свяжем «Запрос ADO» с «База данных ADO» через свойство ConnectionName. А свойству ConnectionString компонента «База данных ADO» присвоим значение:

FILE NAME=test_fb.udl

Это означает, что строка ADO-соединения не указана непосредственно в отчете, а будет при каждом запуске читаться из конфигурационного файла специальной структуры. Файл test_fb.udl должен находиться в текущем каталоге программы. Преимущества от использования в базовом классе udl-файла очевидны. Во-первых, не придется выполнять настройку соединения для всех отчетов-потомков. Во-вторых, описанная в отдельном udl-файле строка позволит распространять заказчикам отчеты в неизменном виде. Подробно настройку строки соединения я описала в следующем разделе статьи.

Остается сохранить базовый отчет с именем BaseRepSt.fr3. Теперь можно приступить к созданию отчетов-потомков. Начну с отчета «Список платежей за период».

Пример №1

Для того чтобы создать отчет-наследник базового отчета, его необходимо положить в каталог ..FastReport Studio\Bin. После этого, выбрав «файл»-«новый…», увидим следующее окно:


Для отчета «Список платежей» на диалоговой форме достаточно вписать наименование отчета, которое будем передавать в отчет при нажатии на кнопку «Печать».

				procedure bPrintOnClick(Sender: TfrxComponent);
begin
				//записываем название отчета и период формированя
  mNameReport.Text := lNameReport.Caption;
  mPeriod.Text := 
    ' за ' + MonthTitle(cbMonth.ItemIndex+1) + ' '+ edYear.Text + ' года';
end;

В наследованный отчет добавим элементы «заголовок страницы» и «данные 1 уровня». Отчет будет выглядеть следующим образом:


В свойстве SQL «Запроса ADO» напишем текст запроса, который из двух таблиц выберет нам список платежей абонентов за указанный месяц;

В свойстве Params опишем значения параметров таким образом, чтобы запрос получал их значения из диалоговой формы отчета.


Теперь наш отчет готов.

Пример №2

Вторым отчетом-наследником базового отчета BaseRepSt.fr3 будет «Расшифровка по видам платежей». Поскольку отчет будет формироваться по видам платежей, то на диалоговую форму я добавилю два TfrxCheckBoxControl, которые позволят формировать отчет по каждому из виду платежей вместе или раздельно.


Добавим на наш отчет-потомок следующие элементы: «заголовок страницы» и «данные 1 уровня», «заголовок группы» и «подвал группы». Отчет будет иметь следующий вид:


В отличие от примера №1, в данном случае необходимо изменять условие запроса в зависимости от параметров, выбранных на диалоговой форме. Создадим обработчик нажатия на кнопку «Печать» и впишем в него такой код:

				//дописываем ограничение в запрос
				//банк
				if (cbBank.Checked) and
				not(cbTill.Checked) then
     frxMainQuery.SQL[5] := 'AND D.PL_CODE_SERVCHARGE = 1';
  //касса
				if
				not(cbBank.Checked) and (cbTill.Checked) then
     frxMainQuery.SQL[5] := 'AND D.PL_CODE_SERVCHARGE = 2';
  //все, без группировки
				if
				not(cbBank.Checked) and
				not(cbTill.Checked) then
				begin              
     GroupHeader1.Visible := false;
     GroupFooter1.Visible := false;
  end;

Настройка соединения с базой данных

Для подключения к базе данных в FastReport Studio используется технология OLE DB. Чтобы создать соединение, необходим установленный в системе OLE DB Provider для баз Interbase/Firebird. Для лучшего понимания сути выполняемых действий, я сделаю небольшое теоретическое отступление.

Технология OLE DB допускает два варианта подключения:

  1. Подключение с использованием OLE DB-провайдера, специально разработанного для СУБД Interbase/Firebird. Например, такой OLE DB-провайдер выпускает фирма «Lipetsk Center of Legal Informatization». Получить ограниченную по времени версию можно по адресу http://www.ibprovider.com/getfile/IBProvider_v3_trial_rus.exe.
  2. Подключение с использованием связки из стандартного OLE DB Provider for ODBC Drivers и ODBC-драйвера для СУБД Interbase/Firebird. Стандартный провайдер OLE DB Provider for ODBC Drivers разработан фирмой Microsoft и включен в состав Windows. Драйвер ODBC для Interbase входит в комплект поставки сервера и называется datadirect. Драйвер ODBC для Firebird можно получить на сайте разработчика по адресу: http://www.ibphoenix.com/main.nfs?a=ibphoenix&page=ibp_60_odbc.

Для создания подключения в FastReport Studio можно использовать любой из этих способов. Я буду создавать соединение с использованием IBProvider. Почему я сделала такой выбор, а также подробно о достоинствах и недостатках технологий ODBC и OLE DB можно узнать здесь http://www.ibprovider.com/rus/documentation/firebird_interbase_odbc_drivers.html

Параметры строки соединения задают способом подключения к БД. Строка подключения хранится в udl-файле. Файлы «Microsoft Data Link» (*.udl) создаются и редактируются с помощью специального редактора «Data Link Properties». Основная задача этого редактора — построить строку соединения. Параметры строки зависят от OLE DB-провайдера, поэтому для некоторых OLE DB-провайдеров внешний вид редактора может отличаться от стандартного. Создать udl-файл легко. В системах типа Windows 2000 и более новых надо создать пустой файл с расширением udl, а редактор «Data Link Properties» открывается автоматически при попытке открыть файл.

Вернемся к примеру. Создадим и откроем файл test_fb.udl. На странице «Поставщик данных» выберем OLE DB Provider for InterBase:


На странице «Подключение» введем путь к базе данных (можно вводить как абсолютный, так и относительный путь), имя, пароль, кодовую страницу, уровень изоляции, как показано на рисунке:


На странице «Дополнительно» введем тип клиента:


На этом настройка завершена. Перед нажатием «Ok» есть возможность протестировать соединение с помощью кнопки «Проверить подключение» на странице «Подключение».


Подключение отчета к программе

Для использования отчетов на компьютерах конечных пользователей следует выполнить регистрацию компонента. Документация предлагает два способа регистрации: либо с помощью вызова экспортируемой функции DllRegisterServer из библиотеки Redist\FastReport3.dll, либо командной строкой:

regsvr32.exe FastReport3.dll.

В примере я использовала способ с вызовом экспортируемой функции. Обработчик bbRegisterServerClick — регистрация компонента, обработчик bbUnregisterServerClick — удаление компонента.

Для распространения отчетов конечным пользователям кроме файла FastReport3.dll понадобится файл Bin\Russian.frc — это русские ресурсы для окна предварительного просмотра. Готовый метод для печати отчета выглядит так:

			procedure TfmFRStudioDelphi.bbReport1 (Sender: TObject);
var
  VReport : Variant;
  VRepName: WideString;
begin
			//отчет "Список платежей"

  VRepName:= 'FRep\Report1.fr3';
  VReport:= CreateOleObject('FastReport.TfrxReport');  //создание компонента TfrxReport
  VReport.Resources.LoadLanguageResourcesFromFile('Russian.frc');  //руссификация просмотра отчета

  VReport.LoadReportFromFile(VRepName); //загрузка отчета
  VReport.ShowReport; //построение и показ отчета
			end;

На языке С++ метод для печати отчета будет иметь вид:

			//отчет "Список платежей"
  IfrxReportPtr VReport(__uuidof(TfrxReport));  //создание компонента TfrxReport
  VReport->Resources->LoadLanguageResourcesFromFile('Russian.frc');  //руссификация просмотра отчета

  VReport->LoadReportFromFile('FRep\Report1.fr3’); //загрузка отчета
  VReport->ShowReport; //построение и показ отчета
		

Нажав на кнопку печати отчета «Список платежей», получим следующий результат:


Вид готового отчета «Расшифровка по видам платежей»:


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

Статья и примеры к ней наглядно показывают основные преимущества FastReport Studio:

К статье приложен архив example.zip с примерами, описанными в статье.


Эта статья опубликована в журнале RSDN Magazine #2-2008. Информацию о журнале можно найти здесь