FastReport 3 Enterprise Edition: шаг вперед, два шага впереди конкурентов

Copyright © 2005 Вячеслав Колдовский

1. Крепкие корни

Те разработчики, которые использовали FastReport 2-й версии в своей работе хорошо знают о его достоинствах: удобный интуитивный интерфейс, компактный код, очень высокая скорость работы, наличие паскалеподобного скриптового языка и средств конструирования форм, позволяющие делать отчеты полностью независимые от логики, "прошитой" в тексте программы.

Очень важно, что FastReport поставляется в исходниках, а потому компилируется непосредственно в исполняемые файлы создаваемых проектов и не требует для себя никаких внешних библиотек или среды исполнения. Естественно, что доступность исходных кодов позволяет говорить о таких преимуществах, как возможность самостоятельно изучить особенности внутренних механизмов его работы или, при необходимости, внести изменения с целью расширить/изменить функциональность, подогнать ее под рамки конкретного проекта.

Немаловажную роль для отечественного разработчика играет и весьма разумная ценовая политика Fast Reports, Inc.: низкая стоимость FastReport на рынке СНГ и отсутствие каких-либо лицензионных отчислений при встраивании дизайнера отчетов  в конечные приложения.

Все это вместе позволило выйти FastReport на бесспорное 1-е место в качестве инструмента для построения отчетов в среде Delphi, что подтверждает полученный им титул "продукт года" в самом авторитетном для разработчиков на Delphi издании "Delphi Informant Magazine"

Но вторая версия FastReport имела и свои недостатки. Некоторые, к сожалению, весьма существенные:

  • скриптовый язык был несколько "непредсказуем", очень сложно на нем было написать именно то, что требуется. В связи с этим разработчики часто жертвовали "независимостью" создаваемого отчета и реализовывали его логику на Delphi;
  • сами скрипты писать было неудобно, поскольку они были связаны с конкретными объектами и размещены в свойствах объектов. Эта особенность очень усложняла разработку и сопровождение сложных отчетов, поскольку невозможно было всю логику реализовать "в одном месте", да и отсутствие таких элементарных свойств любого процедурного языка как подпрограммы тоже оказывало свое влияние на сложность работы с FastReport;
  • определенные претензии высказывались к дизайнеру отчетов - у него не было режима масштабирования, а принятая система единиц не позволяла очень точно позиционировать объекты при печати с высоким разрешением.

Указанные недостатки были, пожалуй, наиболее существенными. Они не были настолько принципиальными, чтобы серьезно ставить вопрос отказа от FastReport в пользу конкурентов, но гарантировали определенное не очень приятное времяпровождение, которое иначе как "танцы с бубном" не назовешь.

2. FastReport 3 - его ждали именно таким

Выхода третьей версии FastReport разработчики ждали долго и терпеливо. И после ее выхода они оказались не разочарованы: можно без преувеличений утверждать, что команда Fast Reports Inc. реализовала все наиболее востребованные и ожидаемые изменения в продукте.

Отметим наиболее значимые из них:

  • новый подход к работе со скриптами - это, пожалуй, самое значимое изменение. Во-первых, для исполнения скриптов теперь используется новый движок собственной разработки Fast Reports Inc. - FastScript, который поддерживает языки PascalScript, C++Script, BasicScript, JScript, а также предоставляет возможность подключить новый язык. Во-вторых, теперь все скрипты отчета не "разбросаны" по объектам, а находятся в одном модуле, подобно модулю Delphi, который поддерживает процедуры и функции. В-третьих, следует отметить, что FastScript - это очень гибкий и функциональный движок, поддерживающий функции структурированной обработки исключений и другие конструкции современных процедурных языков, использовать который можно и независимо от FastReport. Успех FastScript подтверждает цитата из Delphi Informant Magazine Readers Choice Awards 2004 в категории "Библиотеки": "The big story in this category is that FastScript (FastReports) has come out of nowhere to take 19% and second place." ("Большим событием этого года является то, что FastScript (FastReports) пришел из ниоткуда, чтобы занять 19% [голосов] и второе место" (Перевод автора);
  • новый дизайнер - теперь дизайнер отчетов приобрел очень солидный и презентабельный вид и не менее солидные и презентабельные возможности: новый продуманный интерфейс с удобным расположением элементов, масштабирование в режиме дизайнера, возможность многоуровневой отмены/повторения действий, полный WYSIWYG, поддержка drag'n'drop, новая система единиц измерения, позволяющая точное позиционирование объектов при выводе на печать с высоким разрешением, встроенный отладчик скриптов;
  • новый формат сохранения шаблонов и готовых отчетов - XML. Поддержка XML предоставляет интересные возможности для автоматической генерации шаблонов отчетов и редактирования их в текстовой форме;
  • новый подход для доступа к данным: теперь источники данных, к которым нужно получить доступ, должны быть объявлены с помощью компонента TfrxDataSet, что является, безусловно, более разумным подходом, чем принятый в версии 2.х, когда, наоборот, ненужные для отчета источники данных необходимо было исключать особым образом;
  • и, наконец, самое интересное нововведение, которое является предметом рассмотрения данной статьи: FastReport 3 теперь имеет Enterprise-версию, которая отличается от версии Professional наличием встроенного WEB-сервера, позволяющего просмотреть отчеты в WEB-браузере, а также содержит средства для разработки клиентских приложений, позволяющие через протокол HTTP запросить данные отчета у WEB-сервера и отобразить их в виде привычного отчета.

Если охарактеризовать FastReport 3 в целом, то он получился весьма удачным продуктом: вряд ли кто-то может утверждать, что существуют какие-то нововведения, которые не пошли ему на пользу. Единственное заметное неудобство - новая версия не поддерживает обратную совместимость со старой, хотя и обладает средствами для облегчения миграции уже готовых приложений. В частности, названия модулей и иерархия классов FastReport 3 не содержат названий, пересекающихся с предыдущей версией, а потому может быть установлена и использована совместно с FastReport 2.х, в том числе и в одном и том же приложении, что позволяет сделать миграцию последовательной и безболезненной.

Автор данной статьи, основываясь на собственном опыте, может утверждать, что процесс перехода на новую версию проходит достаточно безболезненно: после проведения оценки целесообразности, миграция на новую версию FastReport приложения, содержащего около 20 достаточно сложных отчетов (в некоторых были скрипты, содержащие более 2500 строк кода), заняла одну неделю, притом все работы были выполнены одним разработчиком, а преимущества новой версии позволили ускорить работу над проектом, вследствие чего общий срок выполнения проекта не был нарушен и все работы были завершены вовремя.

3. FastReport 3 Client/Server - как это работает

3.1. Схема функционирования

Схематически работу FastReport 3 Client/Server можно представить следующим образом (рис. 1).


Рис. 1. Схема функционирования

Рассмотрим рисунок более подробно. Фактически FastReport Сервер представляет собой HTTP-сервер, и, как любой другой HTTP-сервер, может обслуживать запросы клиентов как из локальной сети, так и из Интернет.

FastReport Сервер может одновременно обслуживать несколько клиентов, для чего менеджер сессий при обращении клиента создает сессию определенного типа с уникальным идентификатором в куче сессий (Session Heap) и обрабатывает запрос клиента независимо от других активных в это время запросов. Тип создаваемой сессии зависит от запроса клиента. Поддерживается два различных типа сессий: файловая сессия и сессия отчета.

Работа FastReport Сервер в режиме обслуживания файловой сессии подобна работе любого другого HTTP-сервера: если клиентом запрашивается файл, то этот файл возвращается клиенту. Если файлом является HTML-документ, то этот документ предварительно обрабатывается SSI-процессором, поддерживающим набор директив, упрощающих построение сайтов, состоящих из большого количества страниц. Таким образом, наличие подобного режима позволяет использовать FastReport Сервер для построения несложных сайтов по принципу "все в одном", без использования других WEB-серверов.

Вторым режимом работы FastReport Сервер является режим обслуживания сессии отчета. Этот режим является основным, поскольку именно в этом режиме происходит построение отчета и его возвращение клиенту. Рассмотрим его подробно.

Вначале запрос в виде строки с указанием отчета поступает от клиента к серверу. Строка анализируется и если она корректна, то происходит создание сессии отчета.

Сессия отчета, в свою очередь, создает поток с экземпляром класса TfrxReport, который, собственно, и осуществляет построение отчета.

Построенный отчет сохраняется во временный каталог с идентификатором (номером) сессии и запрос клиента перенаправляется на файл, который его содержит.

Далее клиент получает файл с отчетом точно таким же образом, как в режиме обслуживания файловой сессии.

Клиентом при обслуживании сессии отчета может выступать как браузер, так и приложение на основе FastReport 3 (компонент TfrxReportClient). В первом случае отчет сохраняется во временный каталог сессии и передается клиенту в формате HTML, а в последнем - в "нативном" для FastReport 3 формате ".fr3", что позволяет получить отчет, который по своим характеристикам, возможностям для просмотра и вывода на печать ничем не отличается от обычных отчетов, полученных FastReport 3 Professional. Кстати, разработчики FastReport побеспокоились о том, чтобы обеспечить качественный вывод на печать отчетов, которые строятся в формате HTML, который, как известно, не очень подходит для точной печати. Эта возможность реализована за счет опциональной возможности преобразования отчета в формат PDF перед выводом его на печать.

Дополнительно FastReport Сервер позволяет вести журнал работы сервера, а также собирать статистику обслуживания клиентских запросов.

Отдельный блок - серверные переменные. Серверные переменные - это список глобальных для сервера переменных, которые содержат автоматически создаваемые сервером и обновляемые в процессе работы переменные. Эти переменные позволяют получить такую информацию как имя и версию сервера, время его непрерывной работы, максимальное количество сессий и отчетов, которые могут выполняться одновременно и т.д.

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

Во-первых, это аутентификация пользователей, реализованная как обычная HTTP аутентификация. Аутентификация работает следующим образом: для того, чтобы получить доступ к серверу клиент должен в заголовке запроса передать данные о имени пользователя и пароле (в соответствии с RFC 2068). Если клиентом получено сообщение с кодом 401 "Unauthorized", то он должен повторить запрос с корректным именем пользователя и паролем, если в таком случае клиентом является браузер, то он выводит стандартное диалоговое окно с запросом имени пользователя и пароля.

Во-вторых, это списки разрешенных и запрещенных IP-адресов. Можно указать конкретные IP-адреса, с которых разрешено подключение, либо задать одновременно списки разрешенных и запрещенных IP-адресов.

Таким образом, FastReport Сервер содержит набор средств, для того чтобы построить полностью самодостаточный сайт, который кроме отчетов может содержать дополнительную информацию. Поддерживаемые средства безопасности обеспечивают достаточный уровень защиты данных, а различные типы клиентов (обычный браузер или приложение на основе клиентской части FastReport 3) позволяют удовлетворить любые запросы по отображению, выводу на печать или экспорту в другие форматы информации.

3.2. Компоненты

Рассмотрим компоненты, которые предоставляет FastReport Сервер для построения приложений с использованием технологии Client/Server. После установки FastReport Enterprise Edition они появляются на закладке Delphi "FastReport 3.0 Client/Server".

ИконкаНазваниеОписание компонент и наиболее важных свойств
TfrxReportServer Этот компонент представляет собой сервер отчетов и HTTP сервер.
Его свойство Active определяет, доступен ли сервер для обслуживания клиентских запросов в текущий момент или нет, для запуска сервера достаточно этому свойству присвоить true.
Свойства AllowIP и DenyIP имеют тип TStrings содержат список соответственно разрешенных и запрещенных для подключения к серверу IP-адресов.
Свойство PrintPDF позволяет выводить HTML-отчет на печать используя формат PDF (если установлено в true) или использовать штатную печать HTML-страниц браузера (false). При выводе на печать с использованием формата PDF необходимо, чтобы на клиентском компьютере было установлено программное обеспечение для отображения и печати этого формата (Adobe Acrobat Reader).
Свойство Configuration имеет тип TfrxServerConfig и предназначено для задания различных настроек сервера. В частности, можно задать каталог, в котором хранятся отчеты. Однако если отчеты хранятся не в файлах, а, например, в BLOB-полях базы данных, то в этом случае следует использовать событие OnGetReport, которое позволяет вернуть отчет по его имени.
TfrxServerConnection Данный компонент выступает в качестве промежуточного слоя между клиентским компонентом TfrxReportClient и серверным компонентом TfrxReportServer. Этот компонент отвечает за установление подключения со стороны клиента к серверу. С одним и тем же TfrxServerConnection может быть связано несколько экземпляров TfrxReportClient.
Свойства Host и Port определяют соответственно адрес и порт сервера (адрес может быть задан в виде IP-адреса, либо доменного имени).
Свойства PorxyHost и PorxyPort (это не опечатка, вторая и третья буквы в названиях данных свойств находятся на своем месте, что несколько странно и требует комментариев от разработчиков) соответственно определяют адрес и порт HTTP-прокси сервера.
Свойства Login и Password определяют соответственно имя и пароль, которые используются при аутентификации.
Свойство Compression определяет необходимость сжатия информации при пересылке между сервером и клиентом его предпочтительно устанавливать в true для экономии сетевого трафика.
TfrxReportClient Данный клиентский компонент предназначен для получения отчета с сервера. Он обеспечивает формирование запроса на получение отчета с указанием конкретного наименования требуемого отчета, и, при необходимости, осуществляет передачу параметров для построения отчета. Для своего функционирования требует TfrxServerConnection (ссылка задается свойством Connection).
В свойстве ReportName задается имя отчета, который должен быть получен с сервера.
В свойстве Variables могут быть помещены параметры отчета, которые будут использованы при его построении (естественно, отчет должен предусматривать параметры).
В свойстве Errors будут помещены сообщения о всех возникших ошибках в случае неудачного построения отчета.
TfrxHTTPClient Данный компонент может быть использован для получения произвольных файлов по протоколу HTTP. Его удобно использовать, если создаваемое клиентское приложение кроме отчета может запрашивать дополнительные данные из сервера.
Свойство Active позволяет выполнить запрос - при присвоении ему true происходит выполнение запроса.
Такие свойства как Host, Port, ProxyHost, ProxyPort (здесь вторая и третья буквы на своем месте) выполняют те же функции, что и в компоненте TfrxServerConnection.
Свойства ClientFields и ServerFields содержат соответственно поля заголовка запроса и поля заголовка ответа сервера.

Итак, для того, чтобы создать серверное приложение, которое будет обслуживать клиентов и возвращать отчеты в HTML формате и "родном" формате FastReport 3, а также передавать произвольные файлы по протоколу HTTP, достаточно использовать всего лишь один (!) компонент - TfrxReportServer.

Для просмотра отчетов в формате HTML и вывода их на печать либо в HTML, либо PDF форматах достаточно любого современного WEB-браузера.

Если необходимо создать клиентское приложение, которое должно выводить отчеты в "родном" формате FastReport 3, то для этой цели необходимо использовать два компонента - TfrxServerConnection для подключения к серверу и TfrxReportClient для выполнения запроса на построение отчета и его получение. В клиентском приложении TfrxReportClient можно использовать точно так же, как и обычный компонент TfrxReport, поскольку он является его наследником.

Компонент TfrxHTTPClient является скорее "бонусом", который предоставили программистам разработчики из Fast Reports Inc., чем необходимым инструментом для решения задач, для которых предназначен FastReport. На самом деле TfrxHTTPClient используется в "недрах" TfrxReportClient и его доступность в качестве отдельного компонента, возможно, окажется достаточно серьезным подспорьем при построении сложных приложений.

К сожалению, разработка клиент-серверных приложений с использованием текущей версии FastReport Enterprise Edition накладывает определенные ограничения на отчеты, которые можно использовать для этих целей.

Во-первых, при использовании диалоговых форм в отчетах, нельзя применять никакие внутренние скриптовые обработчики внутри диалоговых форм FastReport. Это ограничение вызвано способом обработки диалоговых форм: они автоматически преобразуются в WEB-формы и выводятся в виде обычных HTML-страниц перед выводом самого отчета, поэтому обычные скрипты FastReport в них исполняться не могут.

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

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

Далее рассмотрим конкретную практическую задачу и ее решение с применением FastReport Enterprise Edition.

4. Реализация клиент-серверного приложения на практике

4.1. Описание задачи

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

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

Альтернативный вариант - создание WEB-сервера, обеспечивающего доступ к отчетам. Если используемые средства разработки подобную функциональность стандартно не предусматривают, то подобное решение также может оказаться довольно дорогостоящим как в разработке, так и в последующем сопровождении.

Автор данной статьи принимал участие в разработке достаточно уникального решения поставленной задачи с применением FastReport 2.5х: был разработан программный продукт, который позволял строить отчеты в автоматическом режиме, сохранять их в файл и передавать почтовой программе для пересылки. Все отчеты были доработаны таким образом, что они содержали переменные, получающие значения либо из полей форм, заполняемых пользователем, либо из скриптов приложения, работающего в автоматическом режиме. Таким образом, один и тот же отчет мог быть сформирован пользователем в диалоговом режиме, либо программой для автоматического построения отчетов без участия оператора.

Единственный существенный недостаток у данного подхода был такой: правила для заполнения параметров отчетов должны быть определены заранее и реализованы с помощь скрипта, составить который мог только квалифицированный программист (не считая несущественных изменений готовых скриптов, которые мог сделать опытный пользователь).

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

4.2. Решение задачи

FastReport Enterprise Edition для решения подобной задачи подходит идеально, поскольку позволяет с минимальными затратами обеспечить доступ удаленных клиентов к отчетам и при этом исключить затраты на сопровождение клиентского программного обеспечения, если в качестве клиента выступает WEB-браузер. При этом, как было указано ранее, миграция с версии 2.х проходит достаточно безболезненно.

Итак, определим конкретные требования к нашему решению: необходимо создать WEB-сайт с использованием FastReport Enterprise Edition, который позволит получить доступ к построению определенных отчетов удаленным пользователям. В качестве клиентов будут выступать обычные WEB-браузеры. Должна быть предоставлена возможность просмотра отчетов, вывода их на печать и, при необходимости, сохранения в формат MS Excel для последующей обработки. Поскольку отчеты содержат конфиденциальную информацию, то необходимо обеспечить доступ к их построению только разрешенным пользователям. И еще одно требование: при разработке данного решения простота и скорость разработки является одним из ключевых факторов, призванным максимально удешевить проект.

На подготовительном этапе при решении поставленной задачи следует осуществить подготовку самих отчетов. Во-первых, их необходимо преобразовать в новый формат FastReport 3 (сделать это можно, используя функцию сохранения отчетов в формат .fr3, которая появилась в FastReport 2.54). Во-вторых, отчеты необходимо доработать с учетом ранее указанных ограничений, которые накладываются серверной архитектурой FastReport Enterprise Edition (учет многопоточности, отсутствие скриптовых обработчиков диалоговых форм, исключение обработчиков событий TfrxReport).

Далее, создадим каталоги, в которых будут размещены отчеты, HTML-страницы и будут размешены журналы (рекомендуется размещать разные типы файлов в разных каталогах). Пусть это будут каталоги с именами соответственно Reports, HTML, Logs.

Разместим наши отчеты в каталоге Reports, пусть это будут Report1.fr3 и Report2.fr3.

Если клиент знает имена отчетов, которые он хочет получить с сервера, то в адресной строке браузера можно сформировать запрос, который вернет конкретный отчет по его имени (сделать это можно, если сформировать подобный запрос: http://адрес_сервера/report=Report1.fr3 или http://адрес_сервера/result?report=Report1.fr3). Однако желательно создать HTML-страницу, на которой можно выбрать интересующий отчет и перейти к нему по ссылке. Создадим для этих целей HTML-документ с именем index.html в каталоге HTML следующего содержания:


<html>
 <head>
 <meta http-equiv="Content-Language" content="ru">
 <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
 <title>Добро пожаловать на сервер отчетов  Н-ского подразделения М-ской корпорации!
 </title>
 </head>
 <font face="Tahoma" size="4">
 Список доступных отчетов:
</font> <font face="Tahoma" size="2"> <a href=report=Report1.fr3 target="_blank">Отчет 1<br> <a href=report=Report2.fr3 target="_blank">Отчет 2 </font> </html>

Далее, реализуем требуемую функциональность в Delphi. Так как в данном случае речь идет о модернизации существующего проекта, то к нему мы добавляем компонент TfrxReportServer из закладки FastReport 3.0 Client/Server.

Зададим следующие значения для свойств компонента (при написании данной статьи использовалась версия FastReport EE 3.10, для других версий возможно понадобится задать и другие свойства, например, свойство Logging в версии до 3.09 включительно было по умолчанию false, а только начиная с 3.10 - true):


// пути к каталогам для ведения журналов, хранения отчетов и HTML-страниц
Configuration.LogPath := '.\Logs\'
Configuration.ReportPath := '.\Reports\'
Configuration.RootPath := '.\HTML\'
// Данные для аутентификации
Configuration.Login := 'BigBoss'
Configuration.Password := 'lexus'

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

Для того чтобы созданный нами сервер начал функционировать, достаточно свойству Active присвоить значение true. Сервер начнет полноценно работать даже при выполнении данной операции в design-time.

Запустим WEB-браузер и введем адрес http://localhost/. Появится диалоговое окно с запросом данных аутентификации. После их ввода (не забываем о регистрозависимости имени пользователя), можем увидеть страницу следующего содержания:

При выборе любого из двух предложенных отчетов откроется новая страница браузера и мы получим построенный отчет. Например, выбрав "Отчет 1", получаем следующий отчет (в данной статье использованы отчеты из демонстрационного проекта FastReport, который идет в стандартной поставке)

При нажатии кнопки Print отчет будет преобразован в формат PDF и, при установленном приложении для просмотра данного формата, будет выведен на экран в "дружелюбном" для печати виде:

Наша задача практически решена. Остался еще один небольшой штрих: в требованиях к решению было указано о возможности передачи отчетов в формат MS Excel при необходимости.

Сделать это очень просто, достаточно сформировать корректный запрос к серверу. Для того чтобы вывести отчет Report1.fr3 в формате XLS необходимо отправить на сервер следующий запрос: http://адрес_сервера/report=Report1.fr3&format=XlS.

Модифицируем наш HTML-документ с учетом этого требования:


<html>
 <head>
 <meta http-equiv="Content-Language" content="ru">
 <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
 <title>
 Добро пожаловать на сервер отчетов  Н-ского подразделения М-ской корпорации!
 </title>
 </head>
 <font face="Tahoma" size="4">
 Список доступных отчетов: <br>
 </font>
 <font face="Tahoma" size="2">
 <a href=report=Report1.fr3 target="_blank">Отчет 1
 <a href=report=Report1.fr3&format=XLS target="_blank"> (Формат Excel) <br>
 <a href=report=Report2.fr3 target="_blank">Отчет 2  <a href=report=Report2.fr3&format=XLS target="_blank"> (Формат Excel)
 </font>
</html>

Теперь страница с выбором отчетов будет иметь следующий вид:

А при построении отчета "Отчет 2" в формате MS Excel мы получим такой приятный календарик, вместо которого, естественно, могут быть любые цифры, доставленные "Большому Боссу" в пригодной для редактирования и последующего анализа с помощью электронных таблиц форме:

Ну что же, с учетом поставленных требований, нашу задачу можно считать полностью решенной.

В данной статье не рассматривается создание клиентских приложений с использованием клиентских компонент FastReport Enterprise Edition, поскольку их применение не требовалось для решения поставленной задачи. Однако в их применении нет ничего сложного: разработка клиентского приложения ни чем не отличается от разработки обычного приложения на основе FastReport с использованием компонента TfrxReport, за тем лишь исключением, что вместо него следует применять связку из двух компонент: TfrxServerConnection и TrxfReportClient. При правильной настройке клиентского подключения работа с TrxfReportClient создаст полную иллюзию построения обычного локального отчета, с той лишь разницей, что на самом деле отчет может строиться на сервере, расположенном на другом конце света.

5. Заключение

Итак, осталось написать несколько слов в заключение. Здесь можно было бы долго расписывать о тех преимуществах, которые предоставляет FastReport Enterprise Edition для разработчика, но автор статьи считает, что все написанное выше говорит само за себя.

Собственно, одним из требований при реализации рассмотренного в статье проекта было следующее: "при разработке данного решения простота и скорость разработки является одним из ключевых факторов, призванным максимально удешевить проект". Наверное, ни у кого не возникло сомнения в том, что решение поставленной задачи оказалось действительно очень простым.

А обратил ли кто-нибудь внимание на то, что решение поставленной задачи было выполнено без написания единой строчки кода в Delphi? Все что мы делали - это создавали текст HTML-страницы, размещали компоненты на форме (один компонент!) и задавали им свойства. Но кода в Delphi не действительно не писали. Автор статьи сам обратил на это внимание только в ее завершении...

Может быть, у кого-то остались сомнения по поводу практической ценности FastReport Enterprise Edition? Может быть... Но лично у меня - нет!

Исходные тексты примера (23.8K)

Copyright © 2005 Вячеслав Колдовский Специально для Delphi Plus



Новости за месяц

  • Апрель
    2019
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс