DeepEdit!

Программирование баз данных на Oracle, техническая документация, литература, статьи и публикации

  • Увеличить размер шрифта
  • Размер шрифта по умолчанию
  • Уменьшить размер шрифта

Fastreport - генератор отчётов для Delphi и .Net

Авторы: Марко Россен, Роб ван ден Богерт, Детлеф Овербек


Если нужно представить какие-либо данные в доступной форме, люди часто используют отчёты. Отчёт представляет собой данные в заранее определенном формате. Это делается с использованием таблиц, диаграмм, графиков или обычного текста. Данные могут извлекаться из разных источников, например, баз данных, результатов (сложных) вычислений, это могут быть данные, которые были ранее введены пользователем и сохранены в файл, или даже сняты с выходов измерительного оборудования.
Макет отчёта можно полностью запрограммировать в коде. Программист рассчитывает и кодирует точное положение каждого элемента отчёта. Однако это не гибкое решение. Представьте себе, что конечный пользователь хочет получить дополнительные графики или таблицы, добавить что-то в отчёт или просто отобразить те же данные в другом порядке. Тогда программист должен пересчитать и переписать весь макет отчёта, проверить и обсудить этот новый формат с пользователем и т.д. Было бы намного лучше, если конечный пользователь смог бы самостоятельно внести изменения (незначительные) в макет отчёта, даже не имея при этом навыков программирования.
Решением, обеспечивающим подобного рода гибкость, является использование генератора отчётов. Генератор отчетов формирует отчёт с помощью шаблона отчёта и данных. Полученный отчёт можно просмотреть, распечатать или даже экспортировать в требуемый формат (рисунок 1).
На рынке генераторов отчётов для Delphi есть несколько продуктов. Наиболее известные из них: Report Builder, Crystal Report, Rave Reports, Quick Report и Fast Reports.
Мы сами выбирали генератор отчётов, для использования в некоторых существующих и планируемых приложениях. Эти приложения написаны (или будут написаны) на Delphi 7, 2006 и C#. Они используют одну СУБД (MS-SQL) и несколько разных источников данных (XML, CSV и EDF/EDF+).
При выборе генератора отчётов у нас было несколько требований:
Работа как с Delphi, так и с .NET
Интегрированный редактор макетов для конечных пользователей Экспорт в различные форматы (например, PDF, JPG, TIFF) с предварительным просмотром
Наличие исходников для адаптации/расширения функциональности
и независимости от производителя
Возможность в перспективе получить Web-отчёты
Невысокая цена (ну, это обычное дело в сфере здравоохранения).
С учётом этих требований мы рассмотрели несколько разных генераторов отчётов и перечислили преимущества и недостатки каждого из них:
Report Builder:
+    Полная интеграция с Delphi IDE
+    Визуальное создание макета отчёта
+    21 различный компонент для отображения данных
+    Скорость
+    Runtime Pascal Environment (RAP). Object Pascal с поддержкой
обработки событий для создания сложных отчётов +    Хорошая документация +    Исходный код включён во все издания

RAP доступно только в редакциях Enterprise и Server

Относительно дорог. Версия с интегрированным редактором макетов для конечных пользователей (Professional Edition) стоит $495

Не доступна версия для .NET

Crystal report:
+    Большое количество функций
+    Может отображать данные из различных баз данных

Интеграция с Delphi может оказаться проблематичной

Для коммерческого использования потребуются дополнительные лицензии Высокая стоимость, начинается от 479 евро

Rave reports:
+    Бесплатная Rave BE (встроенная редакция) устанавливается
автоматически при установке Delphi 7, 8, 2005, 2006, 2007, 2009, 2010 и XE
+    Полная интеграция с Delphi IDE
Многие жалуются на проблемы с Delphi 2009

Очень трудно контактировать (с разработчиками [прим. переводчика]) или получить техподдержку

Сайт не обновлялся в течение долгого времени, и нет информации о продаваемых версиях

Не доступна версия для .NET

Quick Report:
+    Quick Report: (версия 5.05) работает с Delphi
5/6/7/2005/2006/2007/2009/2010/Xe (в Win32 режиме); доступна для скачивания версия 5,05 для Delphi XE 32 +    Работает с C++ Builder версии XE +    Полностью интегрируется в Delphi IDE + /- Цена версии Pro - 345 Евро
+    Стоимость обновления составляет 25% от стоимости новой лицензии
+    Редактор отчётов для конечного пользователя и экспорт в PDF (версия Pro)
Fastreport :

Оказалось, что Quick report имеет несколько серьёзных ошибок

Нет версии для .NET

+  Полная интеграция с Delphi IDE Улучшенный движок:
улучшенный механизм смещения; объединение дублирующихся значений; новые агрегатные функции; улучшенный CrossTab; изменения в XML формате (запись коллекций в виде XML); улучшенное наследование отчётов; печать иерархий; водяной знак/ заливка объектов градиентом;
улучшенные линейные штрих коды; улучшенные интерактивные отчёты: события OnMouseEnter/OnMouseLeave; детализированные отчёты; многостраничный предпросмотр для детализированных отчётов. +  Хорошо документирован
+  Визуальное создание макетов из IDE Delphi или Visual Studio +  Много разных компонентов для представления данных. Новые объекты: двухмерные штрих коды: DataMatrix и PDF417;
Объект таблица; Cellular text; Zip Code; +  Набор фильтров экспорта: PDF, RTF, XLS, XML, HTML, JPG, BMP, GIF, TIFF, TXT, CSV, ODF (вы 

даже можете создавать собственные

фильтры экспорта!): 

Новые фильтры экспорта: BIFF XLS / PPTX / XLSX / DOCX +  Встроенный скриптовый механизм для PascalScript, C++Script, BasicScript, JScript с отладчиком (Win32 версия). Версия для .NET в настоящее время использует для написания скриптов C# и VB.NET. +  Доступны версии для Delphi 4 - XE и .NET (интегрируется с Visual Studio: Delphi Prism, C#, VB.NET и т.д.) +  Встроенный редактор связей для конечных пользователей, начиная с Standard Edition, без каких-либо дополнительных лицензионных отчислений
+  Доступны исходники (начиная с версии Professional) +  Веб-отчёты (Enterprise Edition)
+  Стоимость лицензии от $ 79 (Basic) до $ 349 (Enterprise)

Вывод:
Из вышеперечисленного становится ясно, что мы выбираем FastReport.

Fastreport поставляется в 2 различных вариантах:
FastReport для VCL. Эта версия основана на VCL и, следовательно, предназначена для Delphi Win32.
Fastreport CLX. Эта версия базируется на библиотеке CLX (Delphi и Kylix). Мы не имеем опыта работы с этой версией.
FastReport на практике
Тем временем мы добавили возможность создания отчётов в пару наших приложений. Ниже вы найдете перечень некоторых функций, которые мы использовали или собрались использовать в будущем. Вы можете скачать пробную версию FastReport на сайте FastReports (http:// www.fast-report.com/ru/download/fast-report-4-download.html), и исследовать возможности этого продукта. Пробная версия FastReport имеет два ограничения: могут быть распечатаны или экспортированы не более 5 страниц отчёта, и если отчёт содержит скрипт, то будет отображаться окно с сообщением. На странице загрузки вы также можете скачать демо-приложения и полную документацию, что очень удобно, если вы хотите попробовать FastReport впервые.
После установки FastReport 4 VCL в окне палитры инструментов появится (в зависимости от установленной версии) 2,3 или 4 новые группы компонентов (рис

2). Из них наиболее часто используемые находятся в группе в FastReport 4.0. Ниже вы найдете краткое руководство, как быстро приступить к работе.

Первые Шаги. Создание отчёта начинается с добавления на форму компонента TfrxReport. Дважды щелкните значок frxReport1. Это приведет к запуску редактора макетов (дизайнера). По умолчанию в дизайнере есть 3 вкладки: страницы "Code" (Код) и "Data" (Данные), и первая страница вашего отчёта (рис. 3).
FastReport является генератором отчётов, основанным на бэндах (band). Например, есть бэнды "Report Title" 

(Заголовок отчёта), 

"Page Header" 

(Заголовок страницы) 

и "Page Footer" 

(Подвал страницы). 

При использовании бэндов, которые могут изменять свои размеры в зависимости от размера содержимого, мы не привязываемся к объему отображаемых данных; генератор отчётов будет сдвигать другие бэнды вверх или вниз. Вы можете отображать данные из исходной базы данных различными способами: по именам столбцов, детально, с группировкой, с подсчетом сумм и т.д. Существует 6 различных типов бэндов для отображения данных.
В качестве небольшого упражнения отобразим данные из демонстрационной базы данных. Чтобы создать отчёт по данным из базы, мы должны подключить базу данных на странице "Данные". Мы можем сделать это, перетащив компонент базы данных на страницу "Данные" и дважды щелкнув по его пиктограмме. Это приведет к запуску мастера подключения 

(Connection Wizard). 

Вы также можете подключиться к базе данных вручную, настроив свойства компонентов. В этом упражнении мы будем использовать компонент BDETable, установив значение его свойства 'DatabaseName' -'DBDEMOS' 

(демонстрационная база данных Delphi), 

и свойства 'TableName' - 'clients.dbf. Теперь база готова к использованию.
Активируйте закладку "Page1" и добавьте бэнд "Master Data" 

("Данные 1 уровня"), 

нажав пиктограмму "Вставить бэнд" в левой части редактора (рис. 4). Когда редактор спросит, какую базу данных нужно использовать, выберите нашу BDETable.
Теперь перетащите из правой колонки, "Дерево данных", поля базы данных, которые вы хотите отобразить в только что добавленном бэнде Master Data. Теперь уже можно просмотреть на результаты, просто нажмите кнопку предварительного просмотра. Это построение отчёта с помощью Delphi!
Переменные
Вы можете отображать данные не только из баз данных, но и из других источников. Это можно сделать путем добавления переменных к макету отчёта в дизайнере. Чтобы добавить переменные нажмите пункт меню "Отчёт", а затем пункт меню "Переменные". В появившемся диалоге отобразятся уже имеющиеся переменные и кнопка для добавления новых переменных.
Кроме того, можно добавить переменные из кода (листинг 1). Вы можете добавить переменную в отчёт, перетащив его из списка доступных переменных на страницу "Page1". Самый простой способ добавить переменную в свой отчёт - добавить её на бэнд "'Master Data" без подключения данных.
uses StrUtils ;
procedure TForm1.FormCreate(Sender:  TObject); begin
frxReport1 Script. AddMethod(
'function SecToHHMM(Seconds: Extended):String',
CallFrxMethod,'Custom');
end;
function TForm1 SecToTime( Seconds :  Extended):  TTime; begin
result:=Seconds/(24*3600); end;
function TForm1 CallFrxMethod( Instance: TObject;
ClassType: TClass ; const MethodName: String;
var Params: Variant): Variant; begin
If( MethodName = 'SECTOHHMM') then
begin If(Params[0]  >= 0)  then
begin result:= FormatDateTime
('hh:nn', SecToTime( Params[0]));
result:= AnsiReplaceText(result,':','h')+'m';
end
else result:='--h--m';
end;

//Other methods 

end;

Листинг 2: Добавление вашей собственной функции


procedure TForir.l. Forrr.Create (Sender :  TObject.) ; begin
frxReportl .Variables .AddVariable (1 Category" , 1 Variable Haire 1, Va^^ie) ;
end;        const ACategory: string; const ANarne: string; const avalue: variant

Листинг 1: Добавление переменных отчёта из кода


Вы можете добавить в отчёт бэнд Master Data без привязки к данным. Когда появится диалог "Источник данных", выберите "[не назначен]". Не забудьте установить число записей 1. Если число записей установлено равным 0, FastReport не будет отображать бэнд, фактически скрывая его.
Вид представления данных в отчёте, например, 2 десятичных знака или DD-MMM-YYYY в качестве формата даты, можно задать, дважды щелкнув объект с текстом, выбрав вкладку "Формат" и задав требуемый формат.
Создание динамического отчёта с помощью кода
Вы можете показывать не только статические данные из БД и переменных. В отчёт можно включать и фрагменты кода. Так, можно добавить код расчёта нового значения из других переменных отчёта, например, преобразовать количество секунд в строку, отображающую часы и минуты. FastReport VCL использует скрипт на Pascal. FastReport .NET - C# или VB.NET (актуальная .NET-версия 1.1 может использовать только эти два языка, даже если вы пользуетесь Delphi Prism!). Представьте себе, насколько сложные отчёты можно создавать, используя скриптовый код. Каждый компонент, который вы добавляете в отчёт, может иметь обработчики событий, прикрепленных к нему. Например, есть событие "OnBeforePrint", которое будет вызываться перед отрисовкой компонента на внутреннюю канву отчёта. Вы можете использовать эти обработчики событий для выполнения самых разных действий. Например: вы хотите скрыть компонент "Memo", если переменная отчёта имеет предустановленное значение. В обработчике "OnBeforePrint" вы можете проверить это значение и при необходимости скрыть Memo, установив его свойство "Visible" в False.
Добавление собственных функций
В FastReport вы можете легко передавать "простые" переменные, но можно также создавать и сложные выражения с использованием одной или нескольких доступных математических, строковых и других функций. Даже если нужная вам функция недоступна, вы можете создать и внедрить свою собственную пользовательскую функцию. Чтобы использовать пользовательскую функцию вы должны реализовать алгоритм в Delphi и зарегистрировать его в FastReport. Пусть у нас есть переменные, которые отображают время в секундах, но пользователи отчёта попросили показать значение в часах и минутах. Сначала создадим функцию в Delphi, а затем зарегистрируем её в FastReport (листинг 2).
Теперь вы можете использовать эту функцию, перетащив переменную, которую вы хотите отобразить в отчёте в виде часов и минут. Дважды щёлкните компонент для вызова редактора свойств и замените имя переменной следующим выражением:
[SecToHHMM(<VariabeleNaam>)]
Процедура добавления собственных функций доступна только в FastReport VCL. FastReport .NET использует другой, ещё более простой подход. Сначала создайте сборку с функциями, которые Вам необходимы, и укажите эту сборку в качестве значения свойства "Assembly" отчёта. Вы сразу же сможете использовать собственные функции. Также вы можете использовать уже имеющиеся функции, определенные в сборках .NET Framework.

FastReport - генератор отчётов для Delphi и .NET (продолжение 3)

Рисунок 6: Наследование

Наследование отчётов
Многие компании имеют макеты отчётов по умолчанию, в которых указаны название, адрес, банковские реквизиты, логотип и т.д. Добавление этих элементов каждый раз, при создании новых шаблонов отчёта является скучной и кропотливой задачей. Создатели FastReport нашли решение данной проблемы: "наследование отчётов". Вы один раз создаете базовый отчёт с информацией о компании и можете использовать его в качестве основы для создания всех "потомков". Вы можете объявить базовый отчёт в диалоге "Настройки отчёта" (рис. 6). Если вам необходимо изменить, например, адрес или банковский счёт компании, то вам потребуется всего лишь изменить базовый отчёт. Все отчёты-потомки будут изменены автоматически. Вы можете использовать все элементы базового отчёта в отчётах-потомках, а также менять свойства (например, шрифт, размер, цвет) без изменения базового отчёта.
Однако существуют некоторые ограничения, касающиеся наследования отчётов:
Базовый отчёт не может содержать никакого кода. FastReport не предупредит вас об этом, но унаследованные отчёты будут игнорировать весь код базового.
Вы не может наследовать от унаследованных отчётов.
Вы не можете использовать одинаковые имена компонентов в базовом и унаследованном отчётах. Так, если вы не назначаете компонентам уникальные имена, возможно, что при добавлении новых компонентов в базовый отчёт в унаследованном отчёте появятся компоненты с теми же именами, и вы не сможете использовать ваш унаследованный отчёт.


Создание или модификация макета отчёта из кода
Кроме прочего, в FastReport существует возможность изменять, удалять, добавлять элементы отчёта или менять их свойства непосредственно из приложения. Листинг 4 демонстрирует фрагмент кода для добавления в отчёт бэнда "Page Footer" ("Подвал страницы"). Этот путь модификации компонентов похож на то, как это делается для формы Delphi.

procedure TPolymanAnalysisReport.AddDefaultPageFooter
(APage:  TfrxReportPage); var
Memo:   TfrxMemoViewPageFooter:  TfrxPageFooterS:  String; begin
PageFooter:= TfrxPageFooter.Create(APage); PageFooter.Name:=  'ProgramAndReportInformation'; Memo:= TfrxMemoView.Create(PageFooter); Memo.Name:=  'MemoProgramAndReportInfo';
Memo.Font.Size:= 8;
Memo.StretchMode:= smActualHeight

Listing 4 excerpt of code to add a Page Footer

Расширяемость
VCL-версия по умолчанию не имеет фильта экспорта в PNG. Поэтому нам пришлось написать этот фильтр самостоятельно. Мы приобрели лицензию FastReport Professional. Версии Professional и Enterprise поставляются с исходным кодом. Изучив исходный код реализации фильтра экспорта, мы создали свой PNG-фильтр менее чем за час. Это хороший пример, демонстрирующий что FastReport может быть довольно легко функционально расширен.

Преобразование отчётов FastReport VCL в отчёты FastReport .NET
По умолчанию расширением файлов отчётов VCL является "fr3"; .NET отчеты используют расширение "'frx". Преобразование отчётов VCL в .NET возможно путем добавления модуля 'frxSaveFRX' в VCL-приложение. Встроенный дизайнер приложения теперь будет иметь дополнительный тип сохранения отчёта - в формате FRx. Если вы откроете диалог "Сохранить", вы увидите этот формат в выпадающем списке "Тип файла". После сохранения отчёта в формате FRx вы можете открыть его с помощью дизайнера отчётов FastReport .NET. Преобразование отчёта не будет полностью автоматическим:
Если вы использовали одинарные кавычки в выражениях, вы должны их заменить на двойные.
Конечно, код скрипта не будут переведен в код C # или VB.NET. Однако код будет добавлен на вкладку "Code", в качестве комментария, так что вы можете увидеть, какие функции и обработчики событий вы должны изменить самостоятельно.
Графики не преобразуются автоматически. Этому есть логичное объяснение: FastReport VCL использует TeeChart, а FastReport .NET - Microsoft Chart Controls. Прежде чем мы сможем использовать диаграммы, мы должны установить соответствующие компоненты. Оба компонента являются бесплатными и довольно похожи.
Некоторые функции больше не доступны. Нет одной функции, которую мы часто использовали - функции "IIF". Эта функция возвращает, в зависимости от логического значения, одно из двух выражений. Однако реализация этой функции довольно проста (листинг 5).
using System;
using System. Collections;
using System.Collections.Generic;
using System. ComponentModel;
using System.Windows.Forms;
using System. Drawing;
using System. Data;
using FastReport;
using FastReport. Data;
using FastReport. Dialog;
using FastReport.Barcode;
using FastReport.Table;
using FastReport.Utils;
namespace FastReport {
public class ReportScript {
public string IIF (bool condition,
string trueValue,  string falseValue)
{
return condition trueValue   :   falseValue
}
}
}

Листинг 5: Реализация функции IFF на C#

Fastreport .NET
* Fastreport VCL
Создатели FastReport смогли создать генератор отчётов, который можно использовать как в Win32, так и в .NET-приложениях. VCL и .NET-версии имеют много общего: похожий редактор, похожие компоненты, и т.д. Но есть и много различий. Эти различия обусловлены объективной причиной:
обе платформы, VCL и .NET Framework, на которых работают генераторы отчётов также сильно отличаются друг от друга. .NET версия была полностью переписана: новые классы и новый современный дизайн редактора. Некоторое время мы использовали VCL версию, а чтобы узнать, как работает версия для .NET, постоянно обращались к документации.

Lazarus
Сейчас LazReport не совместим с FastReport, так как он основан на FreeReport (это 

очень старая версия: FastReport - 2.3). 

Например: форма файлов, который используется в FastReport - XML, а во второй верс использовался двоичный формат.
Михаил Филиппенко из FastReports в разговоре с нами сообщи что как только мы сделаем прототип специального универсального компонента 

(команда Lazarus и Blaise Pascal Magazine работают над этим), 

они рассмотрят вопрос о создании версии дл Lazarus.
Заключение
В этой статье показаны некоторые, но далеко не все возможности FastReport. В следующем номере мы сделаем пример приложения. Тем не менее, до сих пор мы не столкнулись с проблемами, которые мы не смогли бы разрешить, хотя иногда для поиска решения нам приходилось обращаться к документации или на форум поддержки. Мы настоятельно рекомендуем FastReport из-за его отличного качества, относительно низкой цены, огромного количества функций и расширяемости.

 


Такие процедуры как диеты лечение волос выпадение волос на медфоруме. . Гора скидок: Товары для праздника - качественно! . Executive MBA школы Vlerick: бизнес образование. Хотите работать на себя?







jAntivirus