Oracle DB, MySQL, Microsoft SQL Server, PostgreSQL, FireBird - вероятно, самые популярные, но далеко не все из многочисленных СУБД, в которых возможно создание, наполнение, изменение и управление данными.
Зачастую они довольно долго наполняются этими самыми данными (к примеру, в системах учета рабочего времени, товаров-заказов, а вопрос “как же получить из них информацию?” (читаемую, охватываемую взглядом и человеческим умом, для дальнейшего анализа) откладывают на потом. Рассмотрим, что же делать “потом” - когда данных у нас “полная база”, и мы (или менеджмент компании) задались вопросом “а что, собственно, происходит? Давайте эффективно использовать данные, собранные у нас в процессе работы, получать информацию из этих данных и принимать решения на основании этой информации!”. В принципе, это определение Business Intelligence (BI) доступным языком.
Есть множество возможностей их (отчетов) создания, но тут мы будем рассматривать FastReport VCL. Тут присутствует дизайнер для формирования шаблонов, предпросмотр и многие другие функции для осуществления задач разных уровней - мы рассматривали их в других статьях, но всё ещё рассмотрели далеко не все.
FastReport может одновременно работать с несколькими источниками данных (базами данных), или же извлекать их из так называемых пользовательских источников (не БД) - массивов или обычных файлов.
Чтобы подключить источник информации нужно применить коннектор (TfrxDBDataSet) из палитры компонентов. Это связующее звено между данными и FastReport.
Теперь же расскажу вам коротко роль компонентов:
TfrxDBDataSet - это тот элемент, который применяют для работы с источником данных, также он совместим с TDataSet, а вот TfrxIBODataSet используют для IB Objects, также TfrxUserDataSet clip0143 предназначен для иных ресурсов — массивов, файлов и др.
Прежде всего через свойство DataSet, подключимся к самому запросу или таблице, ну, или DataSource (он же коннектится к компоненту TDataSource).
А вот, чтобы данные были уже в отчете потребуется указать какие именно из них пойдут в наш отчёт! Осуществляется это также легко.
Выбираем в дизайнере FastReport VCL в меню Report -> Data.
Кликаем на нужные элементы и нажимаем “OK”!
Подключаем этот источник данных к бэнду. Выбираем DataSet (таблицу) в его свойствах. Теперь перетягиваем на соответствующие бэнды поля таблицы/запроса. После единичного перемещения имеют особенность автоматически привязываться на бэнд - поля базы.
Если нужно просмотреть сгенерированный отчет, то можно воспользоваться предпросмотром! Не забываем, что можно добавить, практически что угодно, будь это QR code, карты и прочие дополнения, которых достаточно в FastReport VCL.
В верхнем левом меню “File” - кликаем.
Сразу появился список настроек. В нем выбираем “Preview”.
И на этом все! После этого действия мы и увидим как будет выглядеть готовый отчет.
Если все устраивает есть возможность сохранения в разные форматы и экспорт в облачные хранилища или в память ПК, а также печати.
Выбираем “Save” и желаемый формат.
Выбранный же будет направлен в заданное место для сохранения/экспорта!
Для создания отчета из кода необходимо выполнить следующие шаги:
- очистить отчет.
- добавить источники данных.
- добавить страницу "Данные".
- добавить страницу отчета.
- добавить бэнды на страницу.
- настроить свойства бэндов и подключить их к данным
- добавить объекты на каждый бэнд.
- настроить свойства объектов и подключить их к данным.
Сохраняем шаблон и нажимаем “Preview”!
Отчёт готов! Можем его тоже сохранить в XML, PDF, да даже CSV или DBF для дальнейшего анализа!
Понимаю, что от такого обилия скриншотов можно впасть в депрессию. Но в написании этой статьи сделать все эти скриншоты было самым долгим и трудоемким занятием. Подготовка самого отчёта заняла минут 5. А если быстрее и без скриншотов?
Рассмотрим создание простого отчета типа "список". Предполагается, что у нас есть компоненты 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; |
Итак - мы научились превращать невидимые, но собираемые данные в отчеты - документы. Теперь их можно публиковать или передавать аналитикам!