Создайте в директории сервера биллинга директорию reports.
Создайте файл <модуль>_<id>.rep.xml, где
<модуль> - название модуля, для которого создаётся отчёт: kernel
(ядро, основной модуль), dialup, voiceip, bill, mps и т.д., а <id>
- уникальное имя отчёта (рекомендуется добавлять суффикс, чтобы
идентификатор не совпал с идентификаторами отчётов, которые
входят/войдут в будущем в дистрибутив модуля).
В *.rep.xml хранится название отчёта и описание фильтра в виде
xml-файла. Далее представлена структура файла и доступные
фильтры:
<?xml version="1.0" encoding="UTF-8"?>
<report title="Мой отчёт">
<month name="month" title="Месяц"/>
<combo name="combo" title="ComboBox" textBefore="textBefore" textAfter="textAfter">
<item id="0" title="-"/>
<item id="1" title="Value 1"/>
</combo>
<checkedList name="name" title="title>
<item id="0" title="title"/>
<item id="1" title="item2"/>
</checkedList>
<textField name="textField" title="TextField" textBefore="textBefore" textAfter="textAfter"/>
<contracts name="contracts"/>
<date name="date" default="today"/>
<hours name1="hours1" name2="hours2"/>
<module name="servs" title="Услуги модулей">
<monthAndDays name1="monthAndDays1" name2="monthAndDays2" title="Месяц и дни"/>
<period name1="period1" default1="yesterday" name2="period2" default2="last_day_of_month"/>
<contractGroups name="contractGroups" title="Группы договоров"/>
<services name="services" title="Услуги"/>
<paymentTypes name="paymentTypes" title="Типы платежей"/>
<chargeTypes name="chargeTypes" title="Типы расходов"/>
<tariffs name="tariffs" title="Тарифы"/>
<tariffOptions name="tariffOptions" title="Тарифные опции"/>
<tariffGroups name="tariffGroups" title="Группы тарифов"/>
<registerCategories name="registerCategories" title="CRM - категории проблем"/>
<registerExecutors name="registerExecutors" title="CRM - исполнители"/>
<registerGroups name="registerGroups" title="CRM - группы решения"/>
<users name="users" title="Пользователи"/>
<nases name="nases" title="NASы"/>
<dealers name="dealers" title="Дилеры"/>
<cashcheckKKM name="kkm" title="ККМ"/>
<inetDevices title="Выбор устройств" mid="<mid>", name="inetDevices" />
</report>
<!--
month - месяц
combo - combobox с указанием значений в дочерних элементах item, где title - выводимое значение, id - передаваемое значение
checkedList - отмечаемый список с указанием дочерних элементов item (аналогично combo)
textField - текстовое поле
contracts - выбор из открытых договоров
date - дата (default - для указания даты по умолчанию с использованием макроса)
hours - часы с по
module - услуги модулей с возможностью произвольной каталогизации
monthAndDays - месяц и дни (период в пределах одного месяца )
period - период (default1, default2 - для указания даты по умолчанию с использованием макроса)
contractGroups - группы договоров
services - услуги данного модуля
paymentTypes - типы платежей
chargeTypes - типы расходов
tariffs - тарифные планы
tariffOptions - тарифные опции
tariffGroups - группы тарифов
registerCategories - CRM категории проблем
registerExecutors - CRM исполнители
registerGroups - CRM группы решения
users - пользователи биллинга
nases - NASы модуля
dealers - Дилеры для модуля Карточки
cashcheckKKM - все настроенные принтеры в плагине cashcheck
inetDevices - выбор списка устройств заданного экземпляра модуля Inet с возможностью фильтрации
address - Адрес (город, улица, район, квартал, дом). Пример - <address cityName="city" streetName="street" houseName="house" title="Адрес"/>
list - список (с галочками) с указанием значений в дочерних элементах item, где title - выводимое значение, id - передаваемое значение. Список поодерживает выбор нескольких значений
<hide title="name"></hide> - фильтры заключенные в эти теги скрываются и доступны по щелчку на title
макросы для даты: today - сегодня, yesterday - вчера, tommorrow - завтра, first_day_of_month - первый день месяца, last_day_of_month - последний день месяца.
-->
report/@title - отображаемое в списке название
отчёта (если имя пустое или отсутствует, то отчет не попадает в
выпадающий список с перечнем отчетов).
Дочерние элементы report - фильтры отображаемые в клиенте.
Например, фильтры, описанные выше будут выглядеть так:
Если фильтр большой и не помещается в высоту, то можно установить
в элемент report атрибуты высоты и использования скроллинга. По
умолчанию элементы фильтра располагаются друг под другом, последними
размещаются фильтры-вкладки. Однако, можно изменять положение элементов
фильтра атрибутами x и y - координатами фильтров по горизонтали и
вертикали. Ниже приведён фрагмент кода rep.xml файла
с установленными координатами фильтров и скроллированием.
<?xml version="1.0" encoding="UTF-8"?>
<report title="Отчет УСТ Интернет" scroll="true" height="1200">
<month name="month_from" title="Месяц с" width="4"/>
<month name="month_to" title="Месяц по" width="4"/>
<combo name="status" title="Статус" width="4">
<item id="0" title="--Любой--"/>
<item id="1" title="Статус 1"/>
<item id="2" title="Статус 2"/>
</combo>
<address cityName="city" streetName="street" areaName="area" houseName="house" title="Адрес" width="4"/>
<textField name="frac" title="Дробь" x="0" y="4"/>
<textField name="flat" title="Квартира" x="1" y="4"/>
<textField name="room" title="Комната" x="2" y="4" width="2"/>
<textField name="pod" title="Подъезд" x="0" y="5" width="2"/>
<textField name="floor" title="Этаж" x="2" y="5" width="2"/>
<textField name="inRestFrom" title="Вх. ост. от" x="0" y="6"/>
<textField name="inRestTo" title="до" x="1" y="6"/>
<textField name="outRestFrom" title="Исх. ост. от" x="2" y="6"/>
<textField name="outRestTo" title="до" x="3" y="6"/>
<textField name="accountFrom" title="Наработка от" x="0" y="7" width="2"/>
<textField name="accountTo" title="до" x="2" y="7" width="2"/>
<textField name="payFrom" title="Плат. от" x="0" y="8"/>
<textField name="payTo" title="до" x="1" y="8"/>
<textField name="chargeFrom" title="Расх. от" x="2" y="8"/>
<textField name="chargeTo" title="до" x="3" y="8"/>
<textField name="trafVneshInFrom" title="Внеш. вх. от" x="0" y="9"/>
<textField name="trafVneshInTo" title="до" x="1" y="9"/>
<textField name="trafVneshOutFrom" title="Внеш. исх. от" x="2" y="9"/>
<textField name="trafVneshOutTo" title="до" x="3" y="9"/>
<textField name="trafVnutrInFrom" title="Внутр. вх. от" x="0" y="10"/>
<textField name="trafVnutrInTo" title="до" x="1" y="10"/>
<textField name="trafVnutrOutFrom" title="Внутр. исх. от" x="2" y="10"/>
<textField name="trafVnutrOutTo" title="до" x="3" y="10"/>
<combo name="trafDiv" title="Выводить трафик в" y="11" width="4">
<item id="b" title="байтах"/>
<item id="kb" title="КБ"/>
<item id="mb" title="МБ"/>
</combo>
<module title="Услуги модулей" name="sids">
<service_set mid="66">
<folder title="Платные услуги">
<folder title="ДОРОГИЕ услуги">
<folder title="САМЫЕ-САМЫЕ ДОРОГИЕ услуги" items ="120,198" />
<folder title="СУПЕРДОРОГИЕ услуги" items ="103,114" />
</folder>
<folder title="ДЕШЕВЫЕ услуги" items ="79" />
<folder title="Разное" items="other"/>
</folder>
</service_set>
<service_set mid="179">
<folder title="Платный интернет">
<folder title="ДОРОГОЙ интернет">
<folder title="САМЫЙ-САМЫЙ ДОРОГОЙ интернет" items ="208" />
<folder title="СУПЕРДОРОГОЙ интернет" items ="209,210" />
</folder>
<folder title="ДЕШЕВЫЙ интернет" items ="207" />
</folder>
<folder title="Интернет по сходной цене" items ="205,203" />
<folder title="Интернет в регионах" items ="other" />
</service_set>
</module>
....
Внешний вид получившегося фильтра:
Код генерации отчёта имеет доступ к:
-
значениям фильтра с использованием атрибута
name;
-
переменным конфигурации модуля, используя название переменной
конфигурации, также можно использовать для передачи в отчёт кодов
параметров и т.п.;
-
переменной mid - коду текущего выбранного экземпляра модуля,
для которого делается отчёт (0 - для ядра).