FastReport. UniGUI — вывод отчетов в Web

Это удивительно, но FastReport VCL отлично вписался в Web при помощи фрэймворка UniGUI. Разберем пример из демо-версии UniGUI, который находится в

Вот результат работы примера

2

1

Мы рассмотрим только основные моменты по коду. Пример целиком можно получить, скачав UniGUI фрэймворк и пройдя до демо папки, описанной выше.

Начали!

Создадим UniGUI приложение

3

Кнопку обработаем следующим образом

Создадим отдельный юнит и добавим на него следующие компоненты

5

В дизайнере у нас уже заготовленный отчет

6

 

Этот отчет сохранен в папке files

7

Код Unit1

Разберем основные моменты по коду

Статический и динамический варианты создания отчетов

Отчет можно подгружать статически, из компонента frxReport, или же динамически, из файла rp.fr3. Что выбрать — зависит от задачи. Если задаваться целью — экономить оперативную память, то, конечно, лучше динамический способ, если задаваться целью — сделать просто и быстро, то наверное сойдет и статический вариант. В данном примере создано оба варианта.

Обратите внимание, компонент frxDBDataSet даже в динамическом случае создается статически, то есть он просто должен быть добавлен на форму, до динамического создания frxReport.

Потокобезопасность

Здесь также разобран безопасный, с точки зрения потоков (threads), способ вывода отчетов. В документации FastReport указана следующая информация

FastReport может работать независимо в разных потоках, но имеется ряд особенностей: — Нельзя создавать TfrxDBDataSet с одинаковыми именами даже в разных потоках, т.к. для поиска используется «глобальный список» и обращение всегда будет происходить к первому созданному TfrxDBDataSet(использование глобального списка можно отключить, по умолчанию активен);

— Если во врем выполнения отчета происходит изменение св-в объектов(для примера Memo1.Left := Memo1.Left + 10 в скрипте), то следует помнить, что при последующим выполнении если св-во TfrxReport.EngineOptions.DestroyForms := False шаблон отчета уже будет модифицирован и его необходимо заново загрузить или использовать TfrxReport.EngineOptions.DestroyForms := True. При восстановления из потока нельзя использовать интерактивные отчеты, т.к. объекты скрипта уничтожаются после восстановления, поэтому в некоторых случаях рациональней использовать TfrxReport.EngineOptions.DestroyForms := False и восстанавливать шаблон самостоятельно при следующем цикле построения.

При необходимости глобальный список, по которому осуществляется поиск экземпляров TfrxDBDataSet можно отключить.

В нашем случае этот кусок кода выглядит таким образом

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