Может использоваться как протокол обмена между внешними программами по приёму платежей и сервером биллинга. Загрузка производится из текстового, либо DBF-файла. Менеджер загрузки расположен в меню Сервис=>Автоматизация=>Загрузка платежей и расходов.
Загрузка платежей и расходов может производится из файлов различных форматов. Для каждого формата файла должен быть определён шаблон, шаблоны загрузки платежа (расхода) описываются в конфигурации сервера биллинга (меню Сервис=>Настройка=>Конфигурация).
Для загрузки строки с платежом (расходом) из файла программа выполняет следующие шаги:
Разбор строки на части (только для TXT-файлов). При этом из сплошной строки образуется запись, содержащая позиции (подстроки), нумерующиеся с единицы. Очевидно, что для DBF файлов данный этап не требуется, т.к. файл изначально состоит из записей;
Вычленение из записи сумм платежей (расходов), идентификатора договора, комментария платежа (расхода), даты платежа\расхода (опционально);
Сопоставление записи договору в биллинге;
Зачисление (снятие) суммы на договор.
Каждый шаблон обозначается уникальным числовым идентификатором (<id>), он должен присутствовать в каждой строке, описывающей шаблон. Шаблоны следует нумеровать строго по порядку. Приведённые ниже примеры описывают шаблон с кодом 1.
Предупреждение |
---|
Все дальнейшие примеры будут описывать шаблоны загрузки только реестров платежей. Шаблоны реестров расходов идентичны шаблонам платежей с точностью до слова payment в начале каждой строки (для расходов следует писать charge, например charge.load.pattern.1=Новый шаблон) и до указания типа payment_type (следует писать charge_type). Нумерация шаблонов расходов независима от нумерации шаблонов платежей (т.е. может быть как шаблон платежа, так и шаблон расхода с номером 1). |
В каждом шаблоне должны быть обязательно определены параметры:
Блок кода | ||||
---|---|---|---|---|
| ||||
payment.load.pattern.<id>=<Название>
payment.load.pattern.<id>.type=<Тип>
payment.load.pattern.<id>.encoding=<Кодировка>
payment.load.pattern.<id>.payment_type=<Типы платежей>
payment.load.pattern.<id>.position_sum=<Позиции сумм> |
Где:
- Название - текстовая строка, обозначающая шаблон в выпадающем списке менеджера загрузки платежей
- Тип - число, определяющее тип файла. 1 - для текстового файла, 2 - DBF.
- Кодировка - кодировка файла (Cp1251, UTF-8, Cp866).
- Типы платежей - коды типов платежа, которыми вносятся платежи в договор. Лучше, если это будет не редактируемый тип. Код вы можете посмотреть в справочнике типов платежей Справочники=>Другие=>Типы платежей.
- Позиции сумм - из какой позиции записи брать суммы платежей.
Начиная с версии 4.6 появилась возможность указывать в одной строке одновременно несколько сумм для разных типов платежей. Для этого в полях payment_type и position_sum нужно указывать типы платежей и позиции сумм через запятую, в правильном, соответственном порядке. Т.е. если указать payment_type=1,2,3 и position_sum=2,3,4, то это будет означать, что на 2ой позиции расположена сумма с платежом типа 1, на 3ей позиции - типа 2 и т.п
...
Блок кода | ||||
---|---|---|---|---|
| ||||
payment.load.pattern.<id>.summa.replace=<Строка замен> payment.load.pattern.<id>.position_commentid=<Позиция комментарияуникального платежа>идентификатора> payment.load.pattern.<id>.position_iddate=<Позиция уникального идентификатора> даты> payment.load.pattern.<id>.date_format=<Формат даты платежа> payment.load.pattern.<id>.position_datecomment=<Позиция<Позиции даты> комментария платежа через запятую> payment.load.pattern.<id>.datecomment_formatdelimiter=<Формат<Разделитель даты платежа>полей комментария> payment.load.pattern.<id>.handler_class=<Динамический класс с реализацией интерфейса ru.bitel.bgbilling.kernel.integration.server.bean.RegisterHandler (класс реализует предварительную обработку загружаемого реестра)> |
Где:
- Строка замен - несколько записей вида {REGEXP что}=>{На что}, разделённые вертикальной чертой;
- Позиция Позиции комментария платежа - из какой позиции записи брать комментарий платежа, если параметр не указан, то комментарий - пустая строка; если необходимо собрать комментарий из нескольких полей, то можно указать номера полей через запятую;
- Разделитель полей комментария - любая строка, которая будет вставлена между полями комментария. По умолчанию используется пробел.
- Позиция уникального идентификатора - из какой позиции записи брать уникальный строковый идентификатор платежа. При указании данного поля загрузчик будет считать ошибочными платёж, если в уже загруженных реестрах с датой реестра в том же месяце, что и загружаемый реестр, уже есть платёж с таким идентификатором;
- Позиция даты и Формат даты платежа - из какой позиции записи брать дату платежа и в каком формате она указана. Если параметры не указаны, то дата платежа равна дате реестра.
...
Последнее, что необходимо определить для каждого шаблона - метод сопоставления записи с договором биллинга. Для этого могут быть определены один или несколько методов поиска. По умолчанию результаты поиска по всем методам складываются, но можно соединить их условием логическое И, установив опцию:
Блок кода | ||||
---|---|---|---|---|
| ||||
payment.load.pattern.<id>.search.mode=and |
...
Блок кода | ||||
---|---|---|---|---|
| ||||
payment.load.pattern.<id>.search.<s_id>.type=<Тип метода> payment.load.pattern.<id>.search.<s_id>.pos=<Позиция> payment.load.pattern.<id>.search.<s_id>.regime=<Метод сопоставления> |
Где:
- Тип метода - может принимать значения: cid (код договора), contract (название договора), comment (комментарий договора), parameter (текстовый параметр договора), parameter_email (параметр договора типа E-Mail), cerbercrypt (номер карты в модуле CerberCrypt), login (логин, либо алиас модуля DialUp/VoiceIP), phone (номер телефона модуля phone);
- Позиция - из какой позиции записи брать идентификатор для данного метода поиска;
- Метод сопоставления - какое MySQL-выражение использовать для запроса поиска. 1 - "=", точное совпадение идентификатора с записью в базе; 2 - LIKE; 3 - REGEXP.
...
Блок кода | ||||
---|---|---|---|---|
| ||||
payment.load.pattern.<id>.search.<s_id>.groups=<Группы договоров> payment.load.pattern.<id>.search.<s_id>.pattern=<REGEXP-фильтр> payment.load.pattern.<id>.search.<s_id>.replace=<REGEXP замены> # Не учитывать период действия договора при поиске payment.load.pattern.<id>.search.<s_id>.no.contract.period.check=1 |
Где:
- Группы договоров - список через запятую кодов групп договоров, разрешённых к поиску данным методом.Группы можно посмотреть в справочнике Справочники=>Другие=>Группы договоров;
- REGEXP фильтр - ограничение искомых договоров по их названию, следует учитывать, что используется MySQL REGEXP;
- REGEXP замены - преобразование идентификатора договора с помощью REGEXP-выражения. Возможно указание нескольких замен, разделённых двойной вертикальной чертой (||). Каждая замена состоит из REGEXP-шаблона, далее строка => и на что необходимо заменять шаблон. В строке-замене возможно использование макросов $0-$5, соответствующих номерам групп из REGEXP-выражения. Например при методе сопоставления LIKE (см. ранее) можно добавлять в конец строки-идентификатора "%", указав в replace-параметре: ..replace=.*=>$0%.
Раскрыть | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||
Формат строки в исходном файле (разделители полей - точка с запятой). Первым идёт название договора, далее сумма платежа и комментарий. Даты платежа нет, в этом случае она равна дате реестра.
Описание шаблона в конфигурации. Идентификация клиента проводится по номеру договора.
|
Раскрыть | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||
Формат строки в исходном файле (разделители полей - табуляторы). На второй позиции идёт номер телефона, на четверной - сумма платежа, на пятой - комментарий договора. Дата платежа из файла не используется.
Описание шаблона в конфигурации. Идентификация клиента производится по номеру телефона + ФИО.
|
Раскрыть | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||
Формат строки в исходном файле (разделители полей - точка с запятой). Первым идёт номер договора, далее сумма, комментарий договора и дата платежа. Обратите внимание, что комментарий договора может быть указан не полностью, только фамилия.
Описание шаблона в конфигурации. Идентификация клиента производится по номеру договора + началу ФИО.
|
Раскрыть | |||||||
---|---|---|---|---|---|---|---|
| |||||||
Загрузка производится из DBF-файла, второй столбец - дата платежа, третий - сумма, шестой - номер договора. Описание шаблона в конфигурации. Идентификация клиента производится по номеру договора.
|
Обработка платежей осуществляется на основании реестров следующим образом:
...
Для загрузки реестра необходимо выбрать файл, дату реестра и шаблон для разбора. Если название реестра не указано, оно принимается равным имени файлу. После нажатия кнопки Загрузить реестр отображается в таблице (фильтр по дате должен включать дату реестра) и в нижнем окне выводится лог загрузки реестра и выделенные платежи.
...
Для проведения реестра - выбрать строку в таблице и нажать кнопку Провести реестр. Для отката - также выбор строки и кнопка Откат реестра.