Проект simpleReport для создания отчётов.
Класс для генерации html отчётов на основе шаблонов. Для чего? Html читается на всех платформах, любой браузер умеет его печатать.
Шаблон - подготовленный html файл, “рыба” с определенными тегами, которые заменяются данными при создании отчёта.
PS В моей реализации взаимодействует с БД Firebird через класс firelib, но не сложно привязать иную БД.
Файл шаблона разбивается на три части (1,2 и 3) на картинке Header(1) и Footer(3) используются для скалярных результатов, как вычисленных, так и установленных вручную, (2) - заполняется множеством записей из базы посредством SELECT.
Метод для установки параметра вручную
- void setVal(string nam, string value);
Используется для установки в отчёте параметра nam в значение value. На картинке обозначен как (A).
...
// вставляем в отчёт текущую дату
myRep.setVal("curDate", getDate());
...
Установка одного параметра отчета из выборки скалярного SELECT
- void setSqlVal(connection& cn, string nam, string sql);
Используется для установки в отчёте параметра nam в значение, выбранное из базы запросом sql. На картинке обозначен как (C).
// выборка и установка в отчёт sum из базы
myRep.setSqlVal(conn, "sum_sal", "select sum(salary) from employee");
Заполнение таблицы из результата выборки множества значений SELECT
- void setSqlRowsVal(connection& cn, vector nams, string sql);
Используется для установки в отчёте множества параметров nams в значения, выбранные из базы запросом sql. На картинке обозначены как (B).
// nams - имена переменных в шаблоне, которые будут заменены
// значениеями из таблицы
vector<string> nams = { "full_name", "phone_ext", "job_code", "salary" };
myRep.setSqlRowsVal(conn, nams, "select full_name, phone_ext, job_code,
salary from employee order by emp_no");
Можно создавать отчёты вида master-detail. На картинке (B) - master данные, (D) - detail данные.
Заполнение таблицы из результата выборки SELECT для отчёта Master-Detail
-
void setSqlMDRowsVal(connection& cn, vector nams_m, string sql, vector nams_d, string base_d, string field_d, vector sort_d = {});
- nams_m - имена параметров в шаблоне (== поля в базе), которые будут заменены значениеями из master таблицы
- sql - запрос к master таблице
- nams_d - имена параметров в шаблоне (== поля в базе), которые будут заменены значениеями из detail таблицы
- base_d - имя detail таблицы
- field_d - поле ключ, по которому связываются обе таблицы
- sort_d - опционально, поле detail, по которому можно отсортировать. Там же - направление сортировки.
Формирование отчёта из 3 предварительно заполненных частей
- void makeReport();
Примеры работы
В архиве - два каталога, для Windwos и Linux. Отличия в кодировке и методах сборки. Проекты MS Visual Studio и CMake, соответственно.