Как показала практика, различных типов детализаций только на территории России существует больше сотни.
Поэтому, кроме работы с уже заложенными в программу "Анализ детализаций" форматов была добавлена возможность
загружать либо заранее подготовленные детализации, либо, практически, любые детализации с помощью плагинов.
Быстрая навигация Подготовленная детализация | Загрузка детализаций с помощью плагинов | Готовые плагины |
Подготовленная детализация.
Это некий промежуточный вариант между реальной детализацией и базой данных, с которой работает программа.
Детализацию в этом формате можно подготовить либо с помощью специально разработанной программы, либо с
помощью программы Excel, сохранив документ виде текстового файла с разделителем "Табуляция":
- Каждая строка детализации содержит информацию об одном вызове (звонок, SMS, GPRS).
- Данные в строке разделены символом "табуляция"
- Первая строка детализации содержит названия колонок.
Полный формат подготовленной детализации следующий:
Что означает каждая колонка:
| PhoneNum | - | Номер телефона сотрудника к которому относится информация о вызове (абон.плате) |
| Service | - | Наименование услуги. Как она будет отображаться в детализации |
| ServicePrep | - |
Наименование услуги подготовленное для анализа. Может принимать только такие значения:
| CALL | - | Звонок |
| SMS | - | SMS или MMS - сообщение |
| INTERNET | - | GPRS-соединение (любой Интернет-трафик) |
| ABON_PLATA | - | Абонентская плата |
| OTHER_PLATA | - | Прочие (дополнительные) платежи |
|
| CallDateTime | - |
Дата и время вызова.
Может быть представлена в любом из следующих форматов
(все, которые поддерживает Excel):
| dd-mm-yyyy hh:nn:ss | dd-mm-yyyy h:nn:ss |
| yyyy-mm-dd hh:nn:ss | yyyy-mm-dd h:nn:ss |
| dd-mm-yyyy hh:nn | dd-mm-yyyy h:nn |
| yyyy-mm-dd hh:nn | yyyy-mm-dd h:nn |
| dd-mm-yyyy | yyyy-mm-dd |
| yyyymmddhhnnss - это формат, который использует программа |
Разделители в дате и времени могут быть любыми.
|
| Abonent | - | Вызываемый (или вызывающий) абонент. Как будет показано в детализации. |
| AbonentPrep | - | Вызываемый (или вызывающий) абонент. Используется при анализе. Как правило, это последние 10 цифр номера телефона абонента. |
| Duration | - | Длительность звонка в секундах или объем трафика в байтах. Для СМС равен 1. |
| Direction | - |
Направление звонка.
Может принимать только такие значения:
| O | - | Исходящий (от слова Output) |
| I | - | Входящий (от слова Input) |
|
| ZonePC | - | Зона предприятия связи. Т.е. название зоны (город, страна) где находился телефон в роуминге. В анализе не используется. Будет показываться в детализации. |
| ZoneVTK | - | Зона внешней телефонной компании. Т.е. название зоны (город, страна), при междугородном/международном вызове. В анализе не используется. Будем показвываться в детализации. |
| local_MG_roum | - |
Тип звонка: местный, междугородний/международный или роуминговый. Используется в анализе и может принимать только такие значения:
| LOCAL | - | Местный звонок |
| MG | - | Междугородний/международный звонок |
| ROUM | - | Звонок в роуминге |
| OTHER | - | Это не звонок (SMS, GPRS или что-то еще) |
|
| Cost | - | Стоимость вызова или сумма абонентской платы (прочего платежа) |
Самое сложное - позади! :) Теперь о хорошем:
- Колонки могут идти в любой последовательности, а не только в той, которая представлена выше.
- Колонок может быть любое количество!
Чем меньше - тем менее подробный и информативный анализ выдаст программа.
Т.е., даже если в подготовленной детализации будет только одна колонка "Абонент" (Abonent),
то программа сможет показать количество вызовов на каждого абонента и связать номера телефонов со справочниками.
А имея на входе только колонки "Дата" и "Стоимость" (CallDateTime и Cost) можно получить отчеты
показывающие распределение расходов по дням, дням недели и по времени суток!
Но, все таки, желательно использовать как минимум эти колонки:
| PhoneNum | CallDateTime | Abonent | Cost |
для того, чтобы получить более или менее информативный результат.
Загрузка детализаций с помощью плагинов.
Для того, чтобы было проще разрабатывать новые плагины (в том числе и самостоятельно)
было принято решение использовать скриптовые плагины базирующиеся на языке программирования Pascal.
Сразу перейдем к примеру плагина, которые загружает детализацию представленную выше, в разделе "Подготовленная детализация".
Саму детализацию в текстовом формате можно загрузить по этой ссылке.
var
CallRec : TCallRec;
i : integer;
SL : TStringList;
RE : TRegExp; // Это переменная для работы с регулярными выражениями
begin
SL := TStringList.Create;
RE := TRegExp.Create;
try
// Загружаем детализацию из файла, имя которого передается плагину в переменной DetailFileName
SL.LoadFromFile (DetailFileName);
// Создаем регулярное выражение для поиска и извлечения информации из строки с информацией о вызове
RE.Expression := '^(.*?)\t(.*?)\t(.*?)\t(.*?)\t(.*?)\t(.*?)\t(.*?)\t(.*?)\t(.*?)\t(.*?)\t(.*?)\t(.*?)$';
// Начинаем парсинг детализации не с первой, а со второй строки, т.к. мы заранее знаем,
// что в первой строке содержатся заголовки столбцов
for i := 1 to SL.Count-1 do
begin
// Если пользователь во время загрузи детализации нажал кнопку "Остановить"
// то предопределенная переменная Processing (тип boolean) примет значение FALSE
// Это надо отследить и прервать загрузку.
if not Processing then Break;
// Если регулярное выражение удалось применить к тексту (очередной строке в детализации) то...
if RE.Exec (SL[i]) then
begin
// Очищаем переменную CallRec
EmptyCallRec(CallRec);
// Запонляем переменную CallRec данными. Описание переменных см. выше,
// в разделе "Подготовленная детализация"
CallRec.PhoneNum := RE.Match[01]; // Номер телефона сотрудника
CallRec.Service := RE.Match[02]; // Название услуги, как оно будет показано в детализации
CallRec.ServicePrep := RE.Match[03]; // Подготовленное название услуги
CallRec.CallDateTime := RE.Match[04]; // Дата и время вызова
CallRec.Abonent := RE.Match[05]; // Номер абонента
CallRec.AbonentPrep := RE.Match[06]; // Номер абонента подготовленный для анализа
CallRec.Duration := StrToIntDef(RE.Match[07], 0); // Секунды или байты
CallRec.Direction := RE.Match[08]; // Направление вызова (входящий, исходящий)
CallRec.ZonePC := RE.Match[09]; // Зона предприятия связи (роуминг)
CallRec.ZoneVTK := RE.Match[10]; // Зона внешней телефонной компании (межгород)
CallRec.local_MG_roum := RE.Match[11]; // Флаг типа звонка: местный, роуминговый или междугородний
CallRec.Cost := StrToFloatDef(RE.Match[12], 0); // Стоимость
// Отправляем переменную CallRec процедуре, которая занимается загрузкой информации в базу данных
// Одновременно, вторым параметром, передаем процент выполненной работы
// (как соотношение номера текущей строки к общему количеству строк в файле детализации)
LoadCallBack (CallRec, Trunc(i/SL.Count*100)+1);
end;
end;
finally
SL.Free;
RE.Free;
end;
// Показываем совершенно необязательное окошко сообщающее об окончании загрузки.
ShowMessage('Загрузка детализации успешно завершена!');
end.
Принцип работы плагина простой: он заполняет для каждого вызова переменную CallRec, которая имеет следующую структуру:
TCallRec = packed record
PhoneNum : string;
CallDateTime : string;
Abonent : string;
AbonentPrep : string;
Duration : cardinal;
Direction : string;
CallType : string;
Service : string;
ServicePrep : string;
SubService : string;
ZonePC : string;
ZoneVTK : string;
local_MG_roum : string;
Cost : currency;
end;
и передает ее процедуре LoadCallBack имеющую определение:
procedure LoadCallBack (const CallRec: TCallRec; LoadPercent: integer);
Готовые плагины
Мы прекрасно понимаем, что все вышеописанное - не самая простая задача и (особенно создание плагинов) требует навыков программирования,
поэтому готовы проконсультировать и создать плагины для Ваших детализаций.
Пишите: da@mtsoft.ru
Звоните: (495)721-84-05, (916)-605-0844 (МТС-Москва)
По мере создания новых плагинов для различных типов детализаций они будут добавляться в этот раздел.
Плагины готовые для использования
|