11.1. Настройка фильтра

Создайте в директории сервера биллинга директорию 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>
....

Внешний вид получившегося фильтра:

Код генерации отчёта имеет доступ к: