Общее описание
Отчет — представление статистических данных в виде списков с графиками или без них. Отчет может состоять из трех элементов интерфейса: формы, списка и диаграммы. Форма нужна для выбора периода или объекта статистики; в таблице выводятся данные, и по ним строится диаграмма; предполагается, что данные можно скрывать. Также в отчете может быть тулбар, используется кнопка не редактирования,например, back.
Пример из orion, изображен только верхний бэнд:
XML:
<doc lang="ru" func="journal.stat" binary="/ipmgr" host="https://127.0.0.1:1500" theme="/manimg/orion/" css="main.css" logo="logo-ipmgr.png" logolink="" favicon="favicon-ipmgr.ico" localdir="default/">
<metadata name="journal.stat" type="report" level="30" mgr="core">
<toolbar view="buttontext">
<toolbtn func="journal" type="back" img="t-back" name="back" sprite="yes"/>
</toolbar>
<text name="title"/>
<form>
<field name="period">
<select period="yes" name="period">
<if value="other"/>
<else hide="periodstart"/>
<else hide="periodend"/>
</select>
</field>
<field name="periodstart">
<input type="text" name="periodstart" date="yes"/>
</field>
<field name="periodend">
<input type="text" name="periodend" date="yes"/>
</field>
</form>
<band name="function" psort="funcname">
<diagram name="func" label="funcname" data="percentage" type="pie"/>
<col name="funcname" type="data" total="count" link="yes"/>
<col name="percentage" type="data" sort="digit" sorted="desc"/>
<band name="user" psort="funcname">
<diagram name="user" label="username" type="histogram">
<line data="percentage"/>
</diagram>
<col name="username" type="data" total="count"/>
<col name="percentage" type="data" sort="digit" sorted="desc"/>
</band>
</band>
</metadata>
<messages name="journal.stat" checked="yes">...</messages>
<reportdata>
<function>
<elem>
<funcname>license.auto</funcname>
<percentage>100.00</percentage>
<user>
<elem>
<username>root</username>
<percentage>100.00</percentage>
</elem>
</user>
</elem>
</function>
</reportdata>
<slist name="period">
<val key="today">текущий день</val>
<val key="currentweek">текущая неделя</val>
<val key="currentmonth">текущий месяц</val>
<val key="currentyear">текущий год</val>
<val key="lastday">предыдущий день</val>
<val key="lastweek">предыдущая неделя</val>
<val key="lastmonth">предыдущий месяц</val>
<val key="lastyear">предыдущий год</val>
<val key="other">произвольный диапазон</val>
<val key="nodate">за все время</val>
</slist>
<periodstart/>
<periodend/>
<period>lastday</period>
<tparams>
<func>journal.stat</func>
<out>devel</out>
</tparams>
</doc>
Версия для печати
В панели есть возможность получить версию для печати и pdf-версию отчета.
Для получения печатной версии необходимо к списку параметров отчета добавить out=print, для pdf версии добавить out=pdf. Перед добавлением необходимо убедиться, что панель поддерживает версию pdf. надо смотреть в desktop параметр <pdf>on</pdf> и только тогда выводить ссылку на pdf версию. Также смотрите:Настройки_вывода_документа_в_PDF
Иконки в теме orion
Текстовое описание
У отчета может быть описание, оно задается наличием в xml локализованного сообщения с именем report_info и выводится перед формой.
Форма
Поведение формы полностью совпадает с поведением обычной формы.
Список
Список в отчете несколько отличается от обычного. У него есть сортировка, строка статуса, на странице может быть более одного списка; может содержать ссылки на вложенные отчеты, а также якоря на ниже расположенные отчеты. По умолчанию список располагается по середине страницы и в ширину имеет около 600px, но он также может быт открыт на всю ширину страницы.
Диаграмма
Диаграмма строится из данных в таблице, по данным из одной таблицы может быть построено несколько диаграмм.
Виды диаграмм
Диаграмма может быть вида pie, histоgram, column, area, stepped area и line.
Pie (Пирог)
Представляет из себя так называемый "пирог" — круг, разделенный на сектора.
Пример из orion, используется библиотека Google Charts:
Histogram(Гистограмма)
Представляет из себя ряд прямоугольников с одинаковой шириной, но отличающиеся высотой, пропорционально значению.
Пример из orion:
Line (Линия)
Представляет из себя одну или более ломанную линию.
Пример из orion:
Area
Пример:
Stepped Area
Пример:
Column
Пример:
Описание XML
Элемент band
Содержит в себе описание списков и диаграмм.
Атрибуты элемента band
@name имя бэнда, говорит о том, в каком элементе reportdata находятся данные отчета.
@hidden наличие атрибута говорит, что список с данными должен быть свернут.
@fullwidth наличие атрибута говорит, что бэнд (список и диаграмма) должен быть во всю ширину страницы.
Элемент diagram
Содержит информацию о диаграмме к текущему бэнду.
Атрибуты элемента diagram
@name имя диаграммы.
@label говорит, из какой колонки таблицы брать подписи к диаграмме.
@title отображать заголовок на графике.
@data говорит, из какой таблицы брать данные для построения диаграммы, присутствует только у типа pie
@type задает тип диаграммы — pie, histogram,line, column, area, steppedarea.
@min Задает нижний вертикальный предел для графика (только для type="line" и type="histogram").
@max Задает верхний вертикальный предел для графика (только для type="line" и type="histogram").
@others Задает минимальный процент для отображения на круге, все данные ниже этого процента будут отображаются как "другое" (только для type="pie", задается дробным числом например 20% это 0.2)
Элемент line
Содержит информацию о том, откуда брать данные для диаграммы, присутствует только у элементов histogram, line, column, area, steppedarea. У диаграммы может быть несколько элементов line.
Атрибуты элемента line
@data говорит, из какой таблицы брать данные для построения диаграммы.
@color задает цвет линии/столбца, для применения цвета необходимо, чтобы цвет был задан у каждого элемента line.
Элемент col
Описывает колоку таблицы.
Атрибуты элемента col
@name имя колонки, служит для локализации заголовка колонки.
@type задает тип данных в таблице, может быть только data.
@sort задает тип сортировки, digit или alpha — числовая или алфавитная
@total говорит о том, что внизу колонки нужно вывести итоговую информацию, сумму (sum), сумму с обработкой суффикса и convert="money" (sumsuffix), среднее значение (avg) или количество элементов (count)
@link наличие атрибута, говорит, что содержимое ячейки колонки нужно сделать ссылкой на детальный бэнд расположенный ниже, а также значение ячейки будет заголовком детального бэнда.
@nestedreport наличие атрибута говорит, что содержимое ячейки колонки нужно сделать ссылкой на вложенный отчет. Т.е при клике вызвать функцию из атрибута и передать имя колонки в параметре colname и содержимое в параметре elid (или, если у elem есть атрибут id, передать его), а также все значения формы отчета. Пример из отчета "По пользователям" в IPmanager: MGR_URL?func=iptypestat&elid=admin&col=name
@convert если равно money, то при подсчете итогов надо учитывать, что значения будут в формате 100 000 000.00
Особенности построения band
Существует несколько кейсов построения бэндов, давайте рассмотрим их.
Обычный случай, Один бэнд
Бэнд без вложенных бэндов. Например статистика продаж автомобилей по брендам.
XML:
<metadata ...>
<band name="cars"...>
<diagram ...>
<col name="brand".../>
<col name="sale".../>
</band>
</metadata>
<reportdata>
<cars>
<elem>
<brand>Mercedes-Benz</brand>
<sale>21</sale>
</elem>
<elem>
<brand>Audi</brand>
<sale>34</sale>
</elem>
<elem>
<brand>Volkswagen</brand>
<sale>51</sale>
</elem>
<elem>
<brand>BMW</brand>
<sale>9</sale>
</elem>
<elem>
<brand>Porsche</brand>
<sale>19</sale>
</elem>
</cars>
</reportdata>
То есть в итоге будет один бэнд (диаграмма + список).
Данные списка содержатся в дочернем элементе reportdata — cars.
Вложенные бэнды
Случай со вложенными бэндами.
Опять же статистика продаж автомобилей, только с детальной информацией по моделям.
<metadata ...>
<band name="cars"...>
<diagram ...>
<col name="brand".../>
<col name="sale".../>
<band name="models" ...>
<diagram .../>
<col name="model" .../>
<col name="sale" .../>
</band>
</band>
</metadata>
<reportdata>
<cars>
<elem>
<brand>Mercedes-Benz</brand>
<sale>21</sale>
<models>
<elem>
<model>S600</model>
<sale>7</sale>
</elem>
<elem>
<model>CL500</model>
<sale>7</sale>
</elem>
<elem>
<model>C180</model>
<sale>7</sale>
</elem>
<models>
</elem>
<elem>
<brand>Audi</brand>
<sale>34</sale>
<models>
<elem>
<model>S8</model>
<sale>34</sale>
</elem>
<models>
</elem>
<elem>
<brand>Volkswagen</brand>
<sale>51</sale>
<models>
...
<models>
</elem>
<elem>
<brand>BMW</brand>
<sale>9</sale>
<models ...>
...
</models>
</elem>
</cars>
</reportdata>
В итоге должно быть отображено 5 бэндов, один общий по брендам, и детальный по моделям каждого бренда. Данные детального бэнда находятся в elem текущего бренда по имени вложенного бэнда.
Если у колонки родительского бэнда есть атрибут @link, то нужно сделать якорные ссылки на детальные бэнды, а также значение ячейки колонки будет заголовком детального бэнда.
Родительский бэнд как заголовок дочернего
Схема такая же, как и в предыдущем случае, только не нужно выводить общего бэнда.
XML:
<metadata ...>
<band name="cars"...>
<col name="brand".../>
<band name="models" ...>
<diagram .../>
<col name="model" .../>
<col name="sale" .../>
</band>
</band>
</metadata>
<reportdata>
<cars>
<elem>
<brand>Mercedes-Benz</brand>
<models>
<elem>
<model>S600</model>
<sale>7</sale>
</elem>
<elem>
<model>CL500</model>
</elem>
<elem>
<model>C180</model>
</elem>
<models>
</elem>
<elem>
<brand>Audi</brand>
<models>
<elem>
<model>S8</model>
</elem>
<models>
</elem>
<elem>
<brand>Volkswagen</brand>
<models>
...
<models>
</elem>
<elem>
<brand>BMW</brand>
<models ...>
...
</models>
</elem>
</cars>
</reportdata>
В итоге должно быть отображено 4 бэнда.