Создайте в директории сервера биллинга директорию reports. Создайте файл
, где <модуль> - название модуля, для которого создаётся отчёт: 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 - фильтры отображаемые в клиенте. Например, фильтры, описанные выше будут выглядеть так:
Если фильтр большой и не помещается в высоту, то можно установить в элемент report атрибуты высоты и использования скроллинга. По умолчанию элементы фильтра располагаются друг под другом, последними размещаются фильтры-вкладки. Однако, можно изменять положение элементов фильтра атрибутами x и y - координатами фильтров по горизонтали и вертикали. Ниже приведён фрагмент кода
файла с установленными координатами фильтров и скроллированием.<?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> ....
Внешний вид получившегося фильтра:
Код генерации отчёта имеет доступ к:
значениям фильтра с использованием атрибута
переменным конфигурации модуля, используя название переменной конфигурации, также можно использовать для передачи в отчёт кодов параметров и т.п.;
переменной mid - коду текущего выбранного экземпляра модуля, для которого делается отчёт (0 - для ядра).