Общее описание

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

Версия для печатиLink to Версия для печати

В панели есть возможность получить версию для печати и pdf-версию отчета.

Для получения печатной версии необходимо к списку параметров отчета добавить out=print, для pdf версии добавить out=pdf. Перед добавлением необходимо убедиться, что панель поддерживает версию pdf. надо смотреть в desktop параметр <pdf>on</pdf> и только тогда выводить ссылку на pdf версию. Также смотрите:Настройки_вывода_документа_в_PDF

Иконки в теме orion

Текстовое описание

У отчета может быть описание, оно задается наличием в xml локализованного сообщения с именем report_info и выводится перед формой.

Форма

Поведение формы полностью совпадает с поведением обычной формы.

Список

Список в отчете несколько отличается от обычного. У него есть сортировка, строка статуса, на странице может быть более одного списка; может содержать ссылки на вложенные отчеты, а также якоря на ниже расположенные отчеты. По умолчанию список располагается по середине страницы и в ширину имеет около 600px, но он также может быт открыт на всю ширину страницы.

Диаграмма

Диаграмма строится из данных в таблице, по данным из одной таблицы может быть построено несколько диаграмм.

Виды диаграммLink to Виды диаграмм

Диаграмма может быть вида pie, histоgram, column, area, stepped area и line.

Pie (Пирог)Link to Pie (Пирог)

Представляет из себя так называемый "пирог" — круг, разделенный на сектора.

Пример из orion, используется библиотека Google Charts:

Histogram(Гистограмма)Link to Histogram(Гистограмма)

Представляет из себя ряд прямоугольников с одинаковой шириной, но отличающиеся высотой, пропорционально значению.

Пример из orion:

Line (Линия)Link to Line (Линия)

Представляет из себя одну или более ломанную линию.

Пример из orion:

AreaLink to Area

Пример:

Stepped AreaLink to Stepped Area

Пример:

ColumnLink to Column

Пример:

Описание XML

Элемент bandLink to Элемент band

Содержит в себе описание списков и диаграмм.

Атрибуты элемента bandLink to Атрибуты элемента band

@name имя бэнда, говорит о том, в каком элементе reportdata находятся данные отчета.

@hidden наличие атрибута говорит, что список с данными должен быть свернут.

@fullwidth наличие атрибута говорит, что бэнд (список и диаграмма) должен быть во всю ширину страницы.

Элемент diagramLink to Элемент diagram

Содержит информацию о диаграмме к текущему бэнду.

Атрибуты элемента diagramLink to Атрибуты элемента 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)

Элемент lineLink to Элемент line

Содержит информацию о том, откуда брать данные для диаграммы, присутствует только у элементов histogram, line, column, area, steppedarea. У диаграммы может быть несколько элементов line.

Атрибуты элемента lineLink to Атрибуты элемента line

@data говорит, из какой таблицы брать данные для построения диаграммы.

@color задает цвет линии/столбца, для применения цвета необходимо, чтобы цвет был задан у каждого элемента line.

Элемент colLink to Элемент col

Описывает колоку таблицы.

Атрибуты элемента colLink to Атрибуты элемента 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

Существует несколько кейсов построения бэндов, давайте рассмотрим их.

Обычный случай, Один бэндLink to Обычный случай, Один бэнд

Бэнд без вложенных бэндов. Например статистика продаж автомобилей по брендам.

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.

Вложенные бэндыLink to Вложенные бэнды

Случай со вложенными бэндами.

Опять же статистика продаж автомобилей, только с детальной информацией по моделям.

<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, то нужно сделать якорные ссылки на детальные бэнды, а также значение ячейки колонки будет заголовком детального бэнда.

Родительский бэнд как заголовок дочернегоLink to Родительский бэнд как заголовок дочернего

Схема такая же, как и в предыдущем случае, только не нужно выводить общего бэнда.

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 бэнда.