Превращаем данные из Баз Данных в документ в Delphi / Lazarus / C++ Builder

03.02.2021

Как сделать кашу из данных информативным отчетом?

Oracle DB, MySQL, Microsoft SQL Server, PostgreSQL, FireBird  - вероятно, самые популярные, но далеко не все  из многочисленных СУБД, в которых возможно создание, наполнение, изменение и управление данными.

OracleMySQL

Microsoft SQL Server

Зачастую они довольно долго наполняются этими самыми данными (к примеру, в системах учета рабочего времени, товаров-заказов, а вопрос “как же получить из них информацию?” (читаемую, охватываемую взглядом и человеческим умом, для дальнейшего анализа) откладывают на потом. Рассмотрим, что же делать “потом” - когда данных у нас “полная база”, и мы (или менеджмент компании) задались вопросом “а что, собственно, происходит? Давайте эффективно использовать данные, собранные у нас в процессе работы, получать информацию из этих данных и принимать решения на основании этой информации!”. В принципе, это определение Business Intelligence (BI) доступным языком.

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

FastReport может одновременно работать с несколькими источниками данных (базами данных), или же извлекать их из так называемых пользовательских источников (не БД) - массивов или обычных файлов.

Как же получить из БД информацию в Delphi?

Чтобы подключить источник информации нужно применить коннектор (TfrxDBDataSet) из палитры компонентов. Это связующее звено между данными и FastReport.

Теперь же расскажу вам коротко роль компонентов:

TfrxDBDataSet - это тот элемент, который применяют для работы с источником данных, также он совместим с TDataSet, а вот TfrxIBODataSet используют для IB Objects, также TfrxUserDataSet clip0143 предназначен для иных ресурсов — массивов, файлов и др.

Прежде всего через свойство DataSet, подключимся к самому запросу или таблице, ну, или DataSource (он же коннектится к компоненту TDataSource).

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

Выбираем в дизайнере FastReport VCL в меню Report -> Data.

FastReport VCL

Кликаем на нужные элементы и нажимаем “OK”! 

FastReport VCL

Подключаем этот источник данных к бэнду. Выбираем DataSet (таблицу) в его свойствах. Теперь перетягиваем на соответствующие бэнды поля таблицы/запроса. После единичного перемещения имеют особенность автоматически привязываться на бэнд - поля базы.

Если нужно просмотреть сгенерированный отчет, то можно воспользоваться предпросмотром! Не забываем, что можно добавить, практически что угодно, будь это QR code, карты  и прочие дополнения, которых достаточно в FastReport VCL.

Предпросмотр:

В верхнем левом меню “File” - кликаем.

FastReport VCL

Сразу появился список настроек. В нем выбираем “Preview”.

И на этом все! После этого действия мы и увидим как будет выглядеть готовый отчет.

FastReport VCL

Если все устраивает есть возможность сохранения в разные форматы и экспорт в облачные хранилища или в память ПК, а также печати.

Выбираем “Save” и желаемый формат.

Выбранный же будет направлен в заданное место для сохранения/экспорта!

FastReport VCL

Для создания отчета из кода необходимо выполнить следующие шаги:
- очистить отчет.

FastReport VCL

FastReport VCL

FastReport VCL

- добавить источники данных.

FastReport VCL

FastReport VCL

- добавить страницу "Данные".

FastReport VCL

- добавить страницу отчета.

FastReport VCL

- добавить бэнды на страницу.

FastReport VCL

FastReport VCL

- настроить свойства бэндов и подключить их к данным

FastReport VCL

- добавить объекты на каждый бэнд.

FastReport VCL

FastReport VCL

- настроить свойства объектов и подключить их к данным.

FastReport VCL

Сохраняем шаблон и нажимаем “Preview”! 

FastReport VCL

Отчёт готов! Можем его тоже сохранить в XML, PDF, да даже CSV или DBF для дальнейшего анализа!

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

Делаем отчёт из нашей базы данных из Delphi / Lazarus - кода!

Рассмотрим создание простого отчета типа "список". Предполагается, что у нас есть компоненты frxReport1: TfrxReport и frxDBDataSet1: TfrxDBDataSet (последний подключен к данным из DBDEMOS, таблица Customer.db). Наш отчет будет содержать одну страницу с бэндами report title и master data. На бэнде report title будет объект с текстом "Hello FastReport!", а на master data - объект со ссылкой на поле "CustNo".

Превращаем данные из Баз Данных в документ в Delphi / Lazarus / C++ Builder
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
var
 DataPage: TfrxDataPage;
 Page: TfrxReportPage;
 Band: TfrxBand;
 DataBand: TfrxMasterData;
 Memo: TfrxMemoView;
 
{ очищаем отчет }
frxReport1.Clear;
 
{ добавляем источник данных в список доступных для отчета }
frxReport1.DataSets.Add(frxDBDataSet1);
 
{ добавляем страницу "Данные" }
DataPage := TfrxDataPage.Create(frxReport1);
 
{ добавляем страницу }
Page := TfrxReportPage.Create(frxReport1);
{ создаем уникальное имя }
Page.CreateUniqueName;
{ устанавливаем размеры полей, бумаги и ориентацию по умолчанию }
Page.SetDefaults;
{ меняем ориентацию бумаги }
Page.Orientation := poLandscape;
 
{ добавляем report title }
Band := TfrxReportTitle.Create(Page);
Band.CreateUniqueName;
{ для бэнда достаточно установить координату Top и высоту }
{ обе координаты - в пикселах }
Band.Top := 0;
Band.Height := 20;
 
{ добавляем объект на report title }
Memo := TfrxMemoView.Create(Band);
Memo.CreateUniqueName;
Memo.Text := 'Hello FastReport!';
Memo.Height := 20;
{ этот объект будет растянут на ширину бэнда }
Memo.Align := baWidth;
 
{ добавляем master data }
DataBand := TfrxMasterData.Create(Page);
DataBand.CreateUniqueName;
DataBand.DataSet := frxDBDataSet1;
{ координата Top не должна пересекать ранее добавленный бэнд! }
DataBand.Top := 100;
DataBand.Height := 20;
 
{ добавляем объект на master data }
Memo := TfrxMemoView.Create(DataBand);
Memo.CreateUniqueName;
{ подключаем к данным }
Memo.DataSet := frxDBDataSet1;
Memo.DataField := 'CustNo';
Memo.SetBounds(0, 0, 100, 20);
{ выравниваем текст по правому краю объекта }
Memo.HAlign := haRight;
 
{ показываем отчет }
frxReport1.ShowReport;

Итак - мы научились превращать невидимые, но собираемые данные в отчеты - документы. Теперь их можно публиковать или передавать аналитикам!

11 декабря 2023

Новый транспорт S3 (Amazon) в FastReport VCL

В этой статье мы рассмотрим новый транспорт в S3 (Amazon) для FastReport VCL, являющийся объектным хранилищем файлов и бакетов.
26 сентября 2023

Установка компонентов FastReport и FastCube в Lazarus

Инструкция по установке FastReport в Lazarus для различных операционных систем со сравнением редакций Academic, Trial, Professional.
26 сентября 2023

Новый транспорт NextCloud в FastReport VCL

Подробная инструкция по использованию нового транспорта для подключения к NextCloud чтобы сохранять построенные отчёты в облако.