Компания Быстрые отчеты открыла сайт с коллекцией шаблонов для генератора отчетов FastReport. Коллекция содержит шаблоны для более чем 50 документов, форма которых утверждена Росстатом, Госкомстатом или Центральным Банком России. Каждый шаблон загружен в двух форматах: fr3 (для Delphi) и frx (для .NET). Дополнительный приятный бонус – шаблоны можно скачать в формате PDF. Хотя сайт и называется "МоиОтчеты Магазин", но все шаблоны можно скачать бесплатно. Может быть, пока бесплатно...
Подобная коллекция шаблонов для FastReport – это хорошая идея и ее нужно было реализовать уже давно. На протяжении десятков лет тысячи программистов тратили свое время на создание одинаковых шаблонов. Теперь его можно сэкономить, воспользовавшись готовыми шаблонами. Но хотелось бы больше категорий и, чтобы география этой коллекции не ограничивалась одной страной.
Язык программирования самого высокого уровня содержит всего несколько команд для управления программистами
Показаны сообщения с ярлыком FastReport. Показать все сообщения
Показаны сообщения с ярлыком FastReport. Показать все сообщения
18 мая 2023
01 апреля 2022
FastLinux – operating system must be fast
Сегодня, 1 апреля 2022 года, компания Fast Reports анонсировала выпуск FastLinux Server. FastLinux Server – это операционная система, которая отвечает всем требованиям современных предприятий, обладает высокой надёжностью, быстродействием и устойчивой работой при любых нагрузках. FastLinux – это единственный дистрибутив Linux оптимизированный для формирования и хранения документов. Его главной особенностью является наличие встроенной специальной версии FastReport Corporate Server.
14 июня 2021
Цифровая подпись PDF документов созданных в FastReport
С ростом популярности обмена документами в электронном виде тема защиты их от подделки становится все более важной. На прошлой неделе я писал о добавлении в PDF документ цифровой подписи с использованием Foxit Quick PDF Library. Сегодня хочу рассказать о возможности цифровой подписи PDF документов, созданных с использованием генератора отчетов FastReport.
22 марта 2021
Использование TrueType шрифтов Microsoft в FastReport FMX под Linux
Шрифты, устанавливаемые на компьютер вместе с продуктами Microsoft, плотно вошли в нашу жизнь. Их использование в документах – это давно уже не дань моде или привычке. Это требование, закрепленное в наших государственных стандартах. Например, шрифт Times New Roman упоминается в "инструкции по оформлению документов с использованием компьютерных технологий в органах государственного управления и иных государственных организациях". Дистрибутивы Linux не поставляется с проприетарными шрифтами Microsoft. Но, тогда как заставить исполняемую под Linux программу создавать в FastReport документы, соответствующие высоким государственным стандартам?
02 марта 2021
FastReport меняет лицензию
Мой интерес к Linux и комментарии к статье о создании документов в формате PDF подтолкнули меня к экспериментам с FastReport FMX. Задумавшись о получении на него лицензии я попытался разобраться, что поменялось в лицензировании генератора отчетов FastReport за последние 5-6 лет пока я им не пользовался? А ни чего. Но, по информации из надежного источника следует, что мы в шаге от новых правил лицензирования продуктов компании FastReport. Сегодня я решил поделиться этими слухами, так как нашел им подтверждение в тексте лицензионного соглашения FastReport VCL. Поэтому у меня для вас есть две новости. Как говорится, "одна плохая, вторая..."
22 февраля 2021
Создание PDF файла в Linux без графической оболочки используя FastReport FMX
В комментариях к статье "Создание PDF файла в Windows и Linux" читатели рассказали о использовании для создания документов в формате PDF генератора отчетов FastReport. У меня уже был подобный опыт, и я даже писал об этом 10 лет тому назад. Сейчас я не стал приводить пример с FastReport, так как моя статья была написана еще до выхода FastReport FMX версии 2.8, в которой была добавлена поддержка FmxLinux. Сегодня я сделал несколько первых экспериментов с FastReport FMX под Ubuntu Desktop 20.04. Он действительно работает под Linux! Запускать мой тест экспорта в PDF я решил, как и в прошлой статье, не под Ubuntu Desktop, а под Ubuntu Server.
21 апреля 2014
FastReport VCL 5. Улучшение интерактивности
Интерактивные отчеты позволяют определить в отчёте действие, которое произойдет при щелчке мыши на каком-нибудь объекте отчета в окне предварительного просмотра. В предыдущих версиях FastReport существовало несколько способов сделать отчет интерактивным.
11 апреля 2014
FastReport. PDF-экспорт и встраивание шрифта
В списке новшеств FastReport VCL 5 значится "В PDF-экспорт улучшено встраивание шрифтов: вместо целого шрифта встраивается только используемое в отчёте подмножество символов шрифтов. Это позволяет значительно сократить размер файла". В своих программах я часто работаю с документами в PDF-формате, поэтому вопрос размера документа, экспортированного из FastReport в PDF-файл меня интересует.
04 апреля 2014
FastReport VCL 5. Мы уже не ждали, а он припёрся
Вчера вечером, разгребая спам, я наткнулся на письмо от FastReports, Inc с темой "Внезапно релиз FastReport VCL 5". О как! Мы уже и не ждали, а он припёрся. Тут же в голове возникла знаменитая фраза, которую сказал дедушка Ленин 7 ноября 1917 года: "Товарищи! Рабочая и крестьянская революция, о необходимости которой всё время говорили большевики, свершилась! ". Спросите: "Почему такая реакция? ". Для тех, кто не в теме расскажу предысторию этого события.
15 апреля 2011
FastReport. Вывод данных в внизу страницы
Недавно коллега обратился с вопросом "Как в FastReport сделать так, чтобы бэнд с данными выводился внизу страницы?".
Первая моя мысль была положить SubReport на PageFooter. Но такое решение естественно не сработало, и я стал пробовать управлять положением бэнда на странице с помощью скрипта. В результате я нашел решение данного вопроса с помощью дополнительного бэнда и одной строчки скрипта. Поясню на примере.
Например, вверху отчета нам нужно вывести какую-то информацию (добавляем на страницу бэнд MasterData1) и внизу отчета нам нужно вывести какую-то информацию (добавляем на страницу бэнд MasterData2). А между ними положим еще один бэнд (MasterData3), который заполнит пространство между MasterData1 и MasterData2. Его не будем подключать к данным, а просто укажем количество строк RowCount = 1.
Первая моя мысль была положить SubReport на PageFooter. Но такое решение естественно не сработало, и я стал пробовать управлять положением бэнда на странице с помощью скрипта. В результате я нашел решение данного вопроса с помощью дополнительного бэнда и одной строчки скрипта. Поясню на примере.
Например, вверху отчета нам нужно вывести какую-то информацию (добавляем на страницу бэнд MasterData1) и внизу отчета нам нужно вывести какую-то информацию (добавляем на страницу бэнд MasterData2). А между ними положим еще один бэнд (MasterData3), который заполнит пространство между MasterData1 и MasterData2. Его не будем подключать к данным, а просто укажем количество строк RowCount = 1.
В скрипте, при старте отчета зададим размер MasterData3:
MasterData3.Height := Engine.PageHeight - MasterData1.Height * MasterData1.RowCount – MasterData2.Height * MasterData2.RowCount
т.е., от высоты страницы отнимаем высоту бэндов с данными. Высоту бэндов с данными вычисляем следующим образом: высоту одной строки бэнда умножаем на количество строк, которые будут в нём выводиться. У меня здесь в скрипте количество строк – это RowCount, а в примере отчета для моего коллеги я использовал количество строк в запросе (DataSet.RecordCount).
Вот такими нехитрыми манипуляциями мне удалось решить поставленную задачу.
MasterData3.Height := Engine.PageHeight - MasterData1.Height * MasterData1.RowCount – MasterData2.Height * MasterData2.RowCount
т.е., от высоты страницы отнимаем высоту бэндов с данными. Высоту бэндов с данными вычисляем следующим образом: высоту одной строки бэнда умножаем на количество строк, которые будут в нём выводиться. У меня здесь в скрипте количество строк – это RowCount, а в примере отчета для моего коллеги я использовал количество строк в запросе (DataSet.RecordCount).
Вот такими нехитрыми манипуляциями мне удалось решить поставленную задачу.
Может быть, вы знаете способ проще?
13 февраля 2011
Сохранение в базу данных отчета FastReport в формате PDF
Недавно пришлось писать DLL, одна из функций которой должна была:
Для начала я создал процедуру, которая будет вставлять файл в базу данных и возвращать идентификатор вставленного файла.
1. сформировать отчет в FastReport;Предположим, что исходная структура таблицы для хранения файла в базе данных была такая (MS SQLServer 2000):
2. экспортировать отчет в файл PDF-формата и сохранить его в базе данных;
3. возвратить идентификатор сохраненного в базе данных файла.
CREATE TABLE X.FILES (где FILE_BODY – это поле, в которое сохраняется файл, а ID – идентификатор файла.
ID BIGINT IDENTITY NOT NULL,
FILE_BODY IMAGE NULL,
CONSTRAINT PK_FILES PRIMARY KEY (ID)),
Для начала я создал процедуру, которая будет вставлять файл в базу данных и возвращать идентификатор вставленного файла.
CREATE PROCEDURE X.InsertFile
@FILE image,
@ID bigint OUTPUT
AS
INSERT INTO X.FILES(FILE_BODY) VALUES(@FILE)
SET @ID = SCOPE_IDENTITY()
GO
Потом сел писать код DLL. В Delphi вся работа с файлами реализована с помощью потоков, поэтому я немного удивился, когда оказалось, что метод Export у TfrxReport экспортирует отчет только в файл (честно сказать, я ожидал увидеть, что-то в стиле ExportToStream). Т.е. вместо прямой передачи отчета через поток в базу данных, необходимо было сначала сохранить отчет во временный файл, а потом этот файл загрузить в базу данных. Мне это не понравилось, т.к. файловые операции (сначала записи, потом чтения) должны были хоть немного, но тормозить работу. Но нужно было срочно отдать DLL, поэтому я не стал разбираться с экспортом и сделал через файл:
...
db: TSDDatabase; // база данных SQLDirect
spInsertFile: TSDStoredProc; // вызов X.InsertFile
frxReport: TfrxReport;
frxPDFExport: TfrxPDFExport;
...
Function GetDoc(const sDotName: String; ...): Integer;
begin
Result := -1;
// загружаем шаблон отчета
If frxReport.LoadFromFile(sDotName)
then begin
// устанавливаем параметры отчета
...
If frxReport.PrepareReport
then try
// получаем имя временного файла
frxPDFExport.FileName := GetTempFileName;
Try
// экспортируем отчет во временный файл
frxReport.Export(frxPDFExport);
// загружаем PDF-файл в параметр процедуры
// из временного файла
spInsertFile.Params[1].LoadFromFile(frxPDFExport.FileName, ftBlob);
Except
on E: Exception do
WriteErrorMessage(E.Message);
End;
// сохраняем PDF-файл в базу данных
Try
db.StartTransaction;
spInsertFile.ExecProc;
db.Commit;
Result := spInsertFile.Params[2].AsInteger;
Except
on E: ESDEngineError do
begin
db.Rollback;
WriteErrorMessage(E.Message);
end;
End;
Finally
// удаляем временный файл
DeleteFile(frxPDFExport.FileName)
End
else WriteErrorMessage('Ошибка подготовки отчета')
end
else WriteErrorMessage('Файл шаблона не найден')
end;
После передачи DLL другому программисту, мысли о лишних файловых операциях при сохранении отчета в базу через временный файл, не давала мне покоя. Вечером, не найдя решения в документации по FastReport, я, прежде чем смотреть исходный код экспорта, решил еще раз пройтись по методам и свойствам экспорта. Глаз сразу же зацепился за свойство Stream. Я создал для этого свойства поток и метод Export у TfrxReport выгрузил отчет не в файл, а в поток.
Function GetDoc(const sDotName: String; ...): Integer;
begin
Result := -1;
// загружаем шаблон отчета
If frxReport.LoadFromFile(sDotName)
then begin
// устанавливаем параметры отчета
...
If frxReport.PrepareReport
then begin
Try
Try
// создаём поток в памяти
frxPDFExport.Stream := TMemoryStream.Create;
// экспортируем отчет в поток
frxReport.Export(frxPDFExport);
// загружаем PDF-файл в параметр процедуры
// из потока в памяти
spInsertFile.Params[1].LoadFromStream(frxPDFExport.Stream, ftBlob);
Except
on E: Exception do
WriteErrorMessage(E.Message);
End;
Finally
frxPDFExport.Stream.Free;
End;
// сохраняем PDF-файл в базу данных
Try
db.StartTransaction;
spInsertFile.ExecProc;
db.Commit;
Result := spInsertFile.Params[2].AsInteger;
Except
on E: ESDEngineError do
begin
db.Rollback;
WriteErrorMessage(E.Message);
end;
End;
end
else WriteErrorMessage('Ошибка подготовки отчета')
end
else WriteErrorMessage('Файл шаблона не найден')
end;
Часто решение задачи лежит на поверхности и нет нужды копаться в чужом коде. Нужно лишь быть внимательным и никогда не сдавайтесь – "ищите и обрящите".
16 сентября 2010
Экономия при покупке FastReport 5
Компания FastReport уже включила в обновленный для партнеров прайс-лист цены на 5-ю версию генератора отчетов FastReport. Проанализируем стоимость single-лицензии на FastReport VCL (цены в российских рублях):
Как видим, с выходом новой версии цена на FastReport вырастет почти в полтора раза! Для владельцев лицензий на FastReport 3 и FastReport 4 предусмотрены специальные цены на upgrade: владельцы лицензии FastReport 4 могут проапгрейдить ее до 5-й версии за полцены, а владельцы лицензии FastReport 3 за три четвертых от цены. Тем, кто планирует купить FastReport 5, но не имеет лицензии на FastReport 3 или FastReport 4, рост цен вообще не страшен (если конечно не тормозить) – существует законный способ существенно сэкономить, немного "надув" производителя.
Рассказываю. У компании FastReport есть принцип – бесплатное полугодичное обновление продуктов на любую новую версию той же самой редакции (так было в 2006-м году, когда вышел FastReport 4). Для тех, кто не догадался, рассказываю дальше. Ранее было объявлено, что FastReport 5 будет выпущен осенью 2010 года (т.е. до релиза уже осталось меньше полугода). А это значит, что, купив FastReport 4 сейчас, можно бесплатно получить лицензию на FastReport 5. А это очень существенная экономия :-)
P.S. Надеюсь, что рост цен на FastReport обусловлен хорошей реализацией нового функционала, а не тем, что "очень нужны деньги".
| Редакция | FastReport 4 | FastReport 5 | Рост цены |
| Basic | 690 | 990 | 1.43 |
| Standard | 2590 | 3590 | 1.39 |
| Professional | 3590 | 4990 | 1.39 |
| Enterprise | 6990 | 9790 | 1.40 |
Как видим, с выходом новой версии цена на FastReport вырастет почти в полтора раза! Для владельцев лицензий на FastReport 3 и FastReport 4 предусмотрены специальные цены на upgrade: владельцы лицензии FastReport 4 могут проапгрейдить ее до 5-й версии за полцены, а владельцы лицензии FastReport 3 за три четвертых от цены. Тем, кто планирует купить FastReport 5, но не имеет лицензии на FastReport 3 или FastReport 4, рост цен вообще не страшен (если конечно не тормозить) – существует законный способ существенно сэкономить, немного "надув" производителя.
Рассказываю. У компании FastReport есть принцип – бесплатное полугодичное обновление продуктов на любую новую версию той же самой редакции (так было в 2006-м году, когда вышел FastReport 4). Для тех, кто не догадался, рассказываю дальше. Ранее было объявлено, что FastReport 5 будет выпущен осенью 2010 года (т.е. до релиза уже осталось меньше полугода). А это значит, что, купив FastReport 4 сейчас, можно бесплатно получить лицензию на FastReport 5. А это очень существенная экономия :-)
P.S. Надеюсь, что рост цен на FastReport обусловлен хорошей реализацией нового функционала, а не тем, что "очень нужны деньги".
14 июня 2010
FastReport VCL 5: Объединение дублирующихся значений
Компания Fast Reports обещает осенью 2010 года выпустить FastReport VCL 5. Из всех нововведений пятой версии меня наиболее заинтересовало "объединение дублирующихся значений". Это связано с тем, что за несколько дней до того, как я узнал о возможностях 5-й версии FastReport VCL, я делал отчет, в котором, если ФИО повторялось в соседних строках, то эти строки первого столбца должны были объединяться в одну строку. Думаю, многие делали, что-либо подобное:
В текущей версии FastReport VCL это без скрипта сделать нельзя. У объекта "Текст" есть свойство " SuppressRepeated", но оно только позволяет скрывать повторяющиеся значения. При этом в FastReport.NET у объекта "Текст" есть свойство "Duplicates", которое может иметь одно из следующих значений:
• Показывать (Show) – показывать повторяющиеся значения;
• Прятать (Hide) – прятать объект с повторяющимся значением;
• Очищать (Clear) – очищать текст в объекте, но показывать сам объект;
• Объединять (Merge) – объединять объекты с одинаковыми значениями.
Эта вопиющая несправедливость будет исправлена в FastReport VCL 5! В пятой версии, по аналогии с .NET, будет несколько режимов SuppressRepeated.
В текущей версии FastReport VCL это без скрипта сделать нельзя. У объекта "Текст" есть свойство " SuppressRepeated", но оно только позволяет скрывать повторяющиеся значения. При этом в FastReport.NET у объекта "Текст" есть свойство "Duplicates", которое может иметь одно из следующих значений:
• Показывать (Show) – показывать повторяющиеся значения;
• Прятать (Hide) – прятать объект с повторяющимся значением;
• Очищать (Clear) – очищать текст в объекте, но показывать сам объект;
• Объединять (Merge) – объединять объекты с одинаковыми значениями.
Эта вопиющая несправедливость будет исправлена в FastReport VCL 5! В пятой версии, по аналогии с .NET, будет несколько режимов SuppressRepeated.
21 апреля 2010
Fast Reports переманивает клиентов у конкурентов
Когда-то давно, на заре человечества, единственным и неповторимым генератором отчетов для Delphi был QuickReport (про ReportSmith даже вспоминать не будем). Он много лет входил в поставку Delphi и его изначально использовали все. Поработав с QuickReport и устав регулярно вспоминать "матерей его разработчиков" программисты стали искать ему альтернативу. Кто то пытался сам улучшить QuickReport, кто то стал генерировать отчеты в MS Word/Excel (например, я), кто то, в надежде на лучшее, украл или купил другие генераторы Report Builder или Rave Reports (или даже монстра по имени Crystal Reports), а кто то стал писать свой генератор отчетов. Одним из тех, кого не устроил QuickReport и кто начал писать свой генератор, был Александр Цыганенко – автор FastReport. Думал ли Александр в далеком 1998 году, что его генератор станет лидером рынка?
За последние десять лет ситуация изменилась – генераторов отчетов, которые могут быть использованы в Delphi, написано уже много и на любой вкус. Поэтому рынок генераторов отчетов уже насытился и теперь начинается новая стадия борьбы за старых клиентов. Стадия, в которой главная роль отводится не программистам, а маркетологам. Компания Fast Reports, опередив своих конкурентов по функциональным возможностям их генераторов отчетов, решила дожать тех, кто сомневался в его покупке и начала акцию по переманиванию пользователей других коммерческих генераторов отчетов на FastReport. В обмен на лицензию конкурента они предлагают скидку в 20% на FastReport 4 VCL, FastReport VCL OLAP Pack, FastReport.NET и FastReport Studio. VCL-версию FastReport можно получить в обмен на Report Builder, Rave Reports, Crystal Reports и ActiveReports.
Обидно за QuickReport. Его, классика жанра, вообще обделили вниманием. Но, думаю – это "заслужено", ни кто на просторах бывшего СССР не покупал это убожество программисткой мысли.
За последние десять лет ситуация изменилась – генераторов отчетов, которые могут быть использованы в Delphi, написано уже много и на любой вкус. Поэтому рынок генераторов отчетов уже насытился и теперь начинается новая стадия борьбы за старых клиентов. Стадия, в которой главная роль отводится не программистам, а маркетологам. Компания Fast Reports, опередив своих конкурентов по функциональным возможностям их генераторов отчетов, решила дожать тех, кто сомневался в его покупке и начала акцию по переманиванию пользователей других коммерческих генераторов отчетов на FastReport. В обмен на лицензию конкурента они предлагают скидку в 20% на FastReport 4 VCL, FastReport VCL OLAP Pack, FastReport.NET и FastReport Studio. VCL-версию FastReport можно получить в обмен на Report Builder, Rave Reports, Crystal Reports и ActiveReports.
Обидно за QuickReport. Его, классика жанра, вообще обделили вниманием. Но, думаю – это "заслужено", ни кто на просторах бывшего СССР не покупал это убожество программисткой мысли.
Подписаться на:
Сообщения (Atom)



