Блог Александра Божко
Архивы
Рубрики

FastReport

Создание отчётов в приложениях никогда не относилось к категории моих любимых занятий. Тем не менее, так или иначе, этим приходится заниматься. В своем рабочем проекте, о котором я уже не раз рассказывал, я перевёл практически все отчеты с Rave на FastReport. Последний инструмент сейчас является безусловным лидером “отчётостроения” и если есть необходимость поддерживать проект в управляемом состоянии, то подобное преобразование просто необходимо выполнить. Естественно, при этом хотелось максимально эффективно использовать возможности FastReport и оптимизировать во всех отношениях старые отчеты. Одной из типичных проблем отчётах всегда была проблема отображения Memo полей. Они могут содержать достаточно объемный текст, а могут, напротив, иметь пустые значения. Если такие данные отображать в столбце рядом с обычными данными, то визуально это будет выглядеть малопривлекательно. Читабельность отчета снижается и данные воспринимаются значительно хуже. Проблема довольно типичная, поэтому я решил сделать небольшой пост на эту тему.

На уровне логики всё решается достаточно просто. Значения Memo полей можно опционально выводить под строкой, содержащей основные данные. Примерно так:

Решение простое и логичное. При этом обратите внимание на то, что в случае отсутствия данных в Memo поле, не остается пустого места между строками. Читать далее

2 апреля компания FastReports, Inc. объявила о выходе новой версии генератора отчетов для VCL приложений – FastReport VCL 5.

Уже сейчас продукт можно купить у партнеров:

 

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

На прошлой неделе я стал обладателем Enterprise редакции FastReport. И в сегодняшнем посте хочу немного рассказать о возможностях старших редакций флагмана мирового отчетостроения.

Прежде всего, хочу отметить, что продукт великолепно документирован. Особенно приятно, что имеется  документация и на русском  языке. Три объемных руководства (пользователя, программиста и разработчика) дополнены обширным набором примеров, который обеспечивает «лёгкое вхождение» в продукт.

Для многих программистов FastReport стал основным средством построения отчетов в Delphi еще до появления  Embarcadero редакции. Редакция, вошедшая в состав RAD Studio, конечноимеет свои ограничения, но, тем не менее, предоставляет весь тот базовый набор функций, который был у предшественников. Я имею ввиду Rave Report и Quick Report, которые были «родными» для более ранних версий Delphi и C++ Builder. Впрочем, к моменту выхода Delphi XE2 мало кто пользовался этими средствами построения отчетов, по крайней мере, для новых проектов.

В свое время  я, как и многие, оказался непосредственно вовлечен в процесс перевода старого проекта на новую систему построения отчетов. Правда, на тот момент я использовал Basic Edition. Собственно, я уже писал о том, как можно «малой кровью» портировать отчет с Rave на FastReport. К слову, подобным образом поддерживается переход и с других устаревших систем построения отчетов, в частности  Quick Reports и Report Builder.

В этом обзоре я хочу рассказать, что же не вошло в Embarcadero редакцию FastReport.

Итак, кроме редакции, поставляемой в комплекте с Delphi/C++ Builder существует еще четыре варианта комплектации продукта – Basic, Standard, Professional и Enterpriseю Сразу приведу ссылку на сводную таблицу функционала в зависимости от редакции и немного прокомментирую  представленные в ней возможности. Читать далее

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

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

Ну, а пока я продолжу тему затронутую в этом посте.

Напомню, суть вопроса. У некоторых DataSet‘ов, в частности у TADOQuery, отсутствуют свойства MasterSource и MasterField. Требуется построить отчет с несколькими уровнями данных в FastReport.

Приведенное мной решение не оправдало ожиданий. К сожалению вынужден признать, что так делать нельзя. На большом объеме данных “пропадают” записи в подчиненной таблице.

Как быть?

Вариантов существует несколько.

Первый способ – создать запросы непосредственно в БД (напомню, в моем случае речь идет об Access) и использовать TADOTable. Минус – надо менять структуру базы, кто слушал вебинар, возможно помнит, что в нашем проекте задача это не совсем простая.

Второй способ – использовать альтернативный набор компонентов, в частности FireDAC. Я  использовал это решение в проекте (уж очень было любопытно посмотреть на практике). В принципе, не возникло абсолютно никаких проблем.

Третий способ, думаю, самый идеологически правильный. А именно, использование компонентов доступа к данным FastReport.

Документация гласит следующее:

FastReport позволяет создавать новые компоненты в run-time. В FastReport принципы создания компонентов доступа к данным максимально приближены к тем, что используются в среде Delphi. Так же, как и в Delphi, на форму кладется компонент и в инспекторе объектов настраиваются его свойства. Компонентная идеология очень гибкая: можно легко создавать новые компоненты для поддержки разных движков доступа к данным.

http://www.fast-report.com/public_download/html/UserMan-ru/index.html?tfrxadoquery.htm

Собственно, в нашем случае все сводится к тому, что у нас есть возможность в дизайнере разместить компоненты TfrxADOQuery. Для этого компонента есть возможность задать связь Master-Details.

http://www.fast-report.com/public_download/html/UserMan-ru/index.html?tfrxadoquery.htm (спасибо Николаю Звереву за ссылку).

Предварительно нужно разместить на форме компонент TfrxADOComponents. Это будет работать и в FastReport Embarcadero Edition. При том работать очень быстро!

И в продолжение затронутой темы – эксперименты по производительности. Николай Зверев предложил вместо переоткрытия запроса использовать фильтр. Примерно так:

OnAfterScroll:
qryExpenses.Filter := 'EXPCATEGORY_ID=' + qryCategoriesExpCategoryID.AsString;
qryExpenses.Filtered := True;
qryExpenses.First;

При этом (процитирую Николая), если [свойство] CursorLocation = clUseClient (значение по дефолту), то фильтр применяется локально. Если CursorLocation = clUseServer – то текст фильтра тупо примешивается к Where условию запроса.

Проверил на практике. В моем варианте (с передачей параметра) тестовая база обрабатывается почти в три (!!!) раза быстрее чем с использованием фильтра.

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

Проблема заключается в том, что у некоторых DataSet‘ов, в частности у TADOQuery, отсутствуют свойства MasterSource и MasterField. Это отнюдь не означает, что с помощью этих компонентов нельзя построить отчет с несколькими уровнями данных. Однако, для  этого необходимо организовать связь Главный-Подчиненный вручную. Вариантов того, как это сделать достаточно много. Один из простейших – обработать событие OnAfterScroll для главного датасета. Например, так:

qryExpenses.Close;
qryExpenses.Parameters.ParamByName(‘EXPCATEGORY_ID’).Value:= qryCategoriesExpCategoryID.AsInteger;
qryExpenses.Open;

Данный вариант вполне устроил FastReport.

Читать далее

Как вы знаете, начиная с XE2 в Delphi в качестве встроенного генератора отчетов используется специальная версия FastReport.

И единственная проблема, которая в связи с этим возникает – перевод старых отчетов, написанных на Rave, на Fast Report. К счастью, команда Fast Reports Inc. позаботилась о пользователях и предоставила конвертер отчетов из Rave в Fast Report. Детально процедура использования конвертера описана в блоге Антона Хайрудинова.

Совершенно недавно я попробовал преобразовать некоторые из отчетов в моем рабочем проекте на FR. И мне это удалось! Однако, были нюансы, о которых ниже.

По сути, конвертер отчетов представляет собой один единственный модуль (ConverterRR2FR.pas). Он поставляется с исходным кодом, и, в свою очередь, использует следующие модули:

{ FastReport }

frxClass,
frxBarCode,
frxBarcod,
frxADOComponents,
frxBDEComponents,
frxDBXComponents,
frxIBXComponents,
frxCustomDB,

{ RaveReport }

RpDefine,
RpRave,
RpBase,
RpSystem,
RpBars,
RvClass,
RvProj,
RvCsRpt,
RvDefine,
RvCsStd,
RvCsBars,
RvCsDraw,
RvCsData,
RvDatabase,
RvDriverDataView;

Вот тут и начинается самое интересное. Прежде всего, XE2 стала последней версией, в которой присутствовал Rave Report.

В Delphi XE3 Rave Report уже нет!

А модули RR нужны, иначе ConverterRR2FR.pas попросту не откомпилируется. Как следствие, единственная версия Delphi, в которой вы можете использовать данный инструмент, без дополнительных ухищрений – XE2. Однако, здесь уместно напомнить, что все владельцы XE3 автоматически получают лицензию и на предыдущие версии соответствующих продуктов. В том числе, и на XE2.

Вторая сложность заключается в том, что ConverterRR2FR при работе использует модули, которых нет в Embarcadero редакции FastReport (frxADOComponents,  frxBDEComponents,  frxDBXComponents, frxIBXComponents). И здесь следует воспользоваться недвусмысленными рекомендациями форума поддержки:

FR Embarcadero Edition dosn’t support internal datasets. So, easy way – install FR Trial and convert Rave reports. Other way – comment all references to internal datasets classes in ConverterRR2FR.pas

FR Embarcadero Edition не поддерживает внутренних датасетов. Поэтому простейший вариант – установить FR Trial и преобразовать отчеты Rave. Второй способ – закомментировать все ссылки на классы внутренних датасетов в ConverterRR2FR.pas.

Я воспользовался первым вариантом.

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

В принципе все зависит от исходных отчетов. В моем случае их около 30. “История успеха”, описанная на том же форуме поддержки свидетельствует об успешном преобразовании более чем 300 отчетов.

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

В одном из следующих постов я собираюсь рассказать о значительно более веселой и трепетной во всех отношениях процедуре. А именно, о сабмите Delphi приложения на Microsoft AppStore.

Итак, пришла пора подводить итоги конкурса, проводившегося на сайте DelphiFeeds.Ru, при поддержке Embarcadero. Скажу честно, мы были приятно удивлены количеством интересных материалов, опубликованных за те два месяца, которые продолжался конкурс. И, как следствие, в двух первых номинациях мы не смогли выявить явного победителя. Поэтому было принято решение не оглашать победителя в номинации “Лучший гостевой пост” и “Самый оригинальный код в посте”, а вместо этого наградить сразу троих участников конкурса в номинациях “Лучший блоггер” и “Лучший молодой блог” и двух участников в номинации “Лучший Delphi компонент или библиотека“.

Итак, победители: Читать далее

Итак, RAD Studio XE2 (Delphi XE2, C++ Builder, ) официально выпущена.

Я не принимал участия в бета тестировании продукта. Но были деморолики, вебинар, рассылки все это я смотрел и читал. И, наконец, официальный триал. Есть о чем говорить. Есть о чем думать.

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

Новая Delphi действительно самая революционная. Не со времени Delphi 7. Не со времени перехода продукта в руки компании Embarcadero. Она вообще самая революцонная за все 15 с лишним лет, в течении которых выходили новые версии продукта. Попытаюсь аргументировать. Читать далее

Продукты DevArt
Купить онлайн:



Читай русскоязычные Delphi блоги
Каталог блогов Blogdir.ru
Яндекс.Метрика