Отчёты¶
Отчеты необходимы для генерации файлов отчетов на базе шаблонов с данными из внешних источников.
Форма отчетов доступна через пункт меню «Отчеты». Через форму можно настроить, запустить генерацию, и просмотреть сформированный экземпляр отчета.
Имеется возможность формирования и просмотра экземпляра отчета через HTTP API.
Доступные типы отчетов: DOCX, XLSX, JRXML, HTML.
Поддержка форматов различными типами отчетов:
- JRXML: docx, html, pdf, pptx, rtf, xls, xlsx, odt, ods;
- XLSX: xlsx, с возможностью полноценного редактирования;
- DOCX: docx, с возможностью редактирования;
- HTML: txt, html.
Данные для заполнения отчетов могут быть:
- получены из внешних источников с помощью провайдеров, предоставляющих данные (например, из PostgreSQL, Visiology ViQube и т.д.);
- переданы внешней системой при вызове API генерации отчета в POLYHUB (например, для генерации отчета с дашборда Visology).
Создание отчета¶
Описание создания отчета приводится на примере создания JRXML-отчета. Создание отчетов остальных типов в общем случае совпадает – за исключением процесса настройки отображения отчета, определяемого его шаблоном.
1.Для создания отчета необходимо перейти на страницу «Отчеты», используя пункт «Отчеты» в левом меню, и нажать кнопку «Создать».

2.На открывшейся форме заполнить поля:

- FQN: указать путь до папки с отчетом, например, path/to/report/folder
- Тип шаблона: выбрать из списка необходимый тип отчёта
- Ограниченный доступ: по умолчанию выключен, при включении позвляет просмотр сгенерированных экземпляров отчета только пользователю, который его сгенерировал.
- Описание - описание структуры отчета в JSON формате в конструкторе.
- Параметры - параметры отчета, описанные в JSON формате в конструкторе.
- Дополнительные опции - дополнительные опции
3.И нажать кнопку «Создать».
Созданны отчет появится в списке доступных отчетов.

В результате создания отчета на томе resources в директории reporting/reports cгенерируется каталог с шаблоном и файлами с описаниями датасетов и параметров отчета.
4.Далее необходимо отчет настроить активным. Для этого нужно открыть отчет на редактирование через пункт «Редактировать» меню действий строки (кнопка ▾ в столбце «Действия») и выбрать значение «Активен».
Генерация отчета¶
Для создания экземпляра отчета нужно нажать на кнопку «Построить отчёт» в столбце «Действия» строки отчёта.

После нажатия кнопки откроется форма для ввода параметров, при нажатии на кнопку «Построить» запуститься процесс генерации отчета, согласно заданным настройкам шаблона и описания отчета.
После запуска генерации отчёта, необходимо кликнуть по ссылке наименования отчёта и перейти на форму «Экземпляры отчёта».
Откроется список экземпляров отчета в которых отражена информация по Дате создания, Состоянию.
После того как процесс генерации отчета завершится (иконка в столбце состояние изменится), можно загрузить отчет через пункт «Скачать» меню действий строки экземпляра (кнопка ▾ в столбце «Действия»).
Описание отчета¶
Для описания отчетов допускается параметризация. В качестве параметром могут быть применены jinja переменные и подстановки jsqlib.

Структура Датасета¶
Датасет(dataset) - описывает получение данных из источников. Поддерживаемые источники: JSON, PostgreSQL, Viqube, Веб снимок.
Типы получения данных:
SQL Запрос¶
Позволяет получить данные из БД.

- Адаптер (
adapter) - позволяет адаптировать аргументы полученные из источника к аргументам запроса- Провайдер (
provider) - провайдер для подключения к источнику - Запрос (
query) - запрос, соответсвующий правилам типу источника
- Провайдер (
- Колонки (
columns) - столбцы таблицы - Наименование (
name) - наименование параметра, для использования в шаблоне - Провайдер (
provider)- Код (
code) - код провайдера источника - Идентификатор (
id) - идентификатор источника
- Код (
- Запрос (
query) - запрос данных из БД в формате JSON, сформированный согласно правилам jsqlib. Поддерживает переменные подставовки для уточнения запроса по определенным параметрам.
Пример запроса:
Пример запроса:
Viqube Запрос¶

Позволяет получить данные из Visiology
- Адаптер (
adapter) - используется для обработки различных типов запросов, поддерживает sql и visiology- Провайдер (
provider) - провайдер для подключения к источнику, тип: VIQUBE - Запрос (
query) - запрос, соответсвующий правилам типу источника
- Провайдер (
- Колонки (
columns) - столбцы таблицы - Эндпоинт API (
endpoint) - тип для описания запроса получения, значениеsql - Наименование (
name) - наименование параметра, для использования в шаблоне - Провайдер (
provider)- Код (
code) - код провайдера источника - Идентификатор (
id) - идентификатор источника
- Код (
- Запрос (
query) - запрос данных из БД в формате JSON, сформированный согласно правилам jsqlib. Поддерживает переменные подставовки для уточнения запроса по определенным параметрам.
Пример запроса:
"dataset": [
{
"name": "viquery",
"type": "visiology",
"endpoint": "viqube/metadata/rawdata/query",
"query": {
"database": "DB",
"mgid": "test_msv_types",
"columns": [
{
"mid": "ftime"
},
{
"mid": "fdate"
},
{
"mid": "fdatetime"
},
{
"mid": "flong"
},
{
"mid": "fshort"
},
{
"mid": "fboolean"
},
{
"mid": "fstring"
},
{
"mid": "finteger"
},
{
"mid": "freal"
}
],
"limit": 10
},
"adapter": {
"query": {
"select": [
{
"eval": "<=ftime=>"
},
{
"eval": "<=fdate=>"
},
{
"eval": "<=fdatetime=>"
},
{
"eval": "<=flong=>"
},
{
"eval": "<=fshort=>"
},
{
"eval": "<=fboolean=>"
},
{
"eval": "<=fstring=>"
},
{
"eval": "<=finteger=>"
},
{
"eval": "<=freal=>"
}
],
"from": [
{
"name": "viquery"
}
]
},
"form": "list"
},
"provider": {
"code": "testviconn"
}
}
]
JSON Запрос¶

Позволяет получить данные из готового набора JSON
- Наименование (
name) - наименование параметра, для использования в шаблоне - Данные (
query) - описание набора данных в формате JSON, поддерживает Jinja переменные, для дополнения набора данных.
Пример запроса:
"dataset": [
{
"name": "person",
"type": "json",
"query": [
{
"name": "Торговый дом Воткинский завод",
"street": "ул. Декабристов, д. 8",
"city": "Воткинск",
"phone": "+7 341 456 55 51"
},
{
"name": "ООО GIPERTEC",
"street": "ул. Вавилова, 9А, стр. 3",
"city": "Москва",
"phone": "8 (800) 550-32-13"
},
{
"name": "ООО Metal Master",
"street": "4-й Рощинский проезд, д. 18, стр. 7",
"city": "Москва",
"phone": "+7 495 374 64 07"
},
{
"name": "ООО АВТОграф Инструментальные Решения",
"street": "ул. Заусадебная, д. 15, строение 5",
"city": "Санкт-Петербург",
"phone": "+7 (812) 640-39-96"
},
{
"name": "ООО Алькор-С",
"street": "ул. 22 Партсъезда, 7а",
"city": "Самара",
"phone": "+7 846 977 74 57"
}
]
},
{
"name": "context",
"type": "json",
"data": {
"login": "{{ login }}"
}
}
]
Веб-снимок¶

Позволяет получить скриншот
- Наименование (
name) - наименование параметра, для использования в шаблоне - Провайдер (
provider) - провайдер для подключения к источнику, тип: VIQUBE, с заполненным полем Хост- Код (
code) - код провайдера источника - Идентификатор (
id) - идентификатор источника
- Код (
- Источник (
source)- Снимок (
shot)- Локальный путь (
path) - путь в источнике, где храниться физический файл - URL (
url) - ссылка для подстановки
- Локальный путь (
- Снимок (
Пример запроса:
Параметры отчетов¶
Для описания отчетов допускается параметризация. В качестве параметром могут быть применены jinja переменные и подстановки jsqlib.
Структура параметров

- Группы
- Наименование (
label) - наименование группы - Элементы группы (
fields) - список параметров, входящих в группу
- Наименование (
Допустимые типы параметров:
- Число (
number) - Строка (
text) - Дата (
date) - Время (
time) - Дата и время (
datetime) - Логический (
boolean) - Интервал (
range) - Список (
select) - Произвольный (
textarea)
Значения параметров задаются при генерации отчетов на форме Параметров.
API¶
Для использования api требуется активный токен с действующими правами на вызываемое действие. Процесс создания токен описан в разделе Токены
Запрос на генерацию отчета
mutation($input: GenerateReportInstanceInput!) {
public {
report {
generateInstance(input: $input) {
payload {
instance {
phase
slug
note
}
}
}
}
}
}
{
"input": {
"token": token,
"refresh": false,
"arguments": [ // зависит от заданных параметров отчета
{
"name": "context",
"body": "{\"value\":{\"boo\":[1,2],\"foo\":1}}",
"type": "json"
}
]
}
}
Ответ:
{
"data": {
"public": {
"report": {
"generateInstance": {
"payload": {
"instance": {
"phase": "GENERATED",
"slug": "/api/reporting/reports/e532109e-cf9e-4b91-9b03-8b938f5ee5f1/jrxml/99914b93-2bd3-7a50-b983-c5e7c90ae93b/test_report.docx",
"note": null
}
}
}
}
}
}
}
Получение отчета (выполняется запросом GET с токеном по ссылке из slug, токен при этом передается в хидере Authorization и без префикса)
GET /api/reporting/reports/e532109e-cf9e-4b91-9b03-8b938f5ee5f1/jrxml/99914b93-2bd3-7a50-b983-c5e7c90ae93b/test_report.docx HTTP/1.1
Authorization: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiIsImtpZCI6IkVWbENReklabmFRYjNHNDNXZU0zNkEifQ.eyJvYmplY3QiOiJlMDM4ODIwNS1hOTZkLTRlZGQtYThlMi01NzNlMDliNDkxZDciLCJ0eXBlIjoiUkVQT1JUIiwidXNlciI6Ijg5NDNlMWE4LWI0MDYtNDM1Zi05Y2JmLWFiZmI0YmZiMzQ2NCIsImNhcGFiaWxpdGllcyI6WyJyZWFkSW5zdGFuY2VzIiwid3JpdGVJbnN0YW5jZXMiXX0.dQweL0MalJjazg5NWgHquez8noDsL_xwRdSMW3aBVMY
Host: polyhub.domain.local:8000