Отчеты
Общее описание
Отчет — представление статистических данных в виде списков с графиками или без них. Отчет может состоять из трех элементов интерфейса: формы, списка и диаграммы. Форма нужна для выбора периода или объекта статистики; в таблице выводятся данные, и по ним строится диаграмма; предполагается, что данные можно скрывать. Также в отчете может быть тулбар, используется кнопка не редактирования,например, 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 бэнда.