- Выгрузка на СОРМ3
- Отчеты
- 1. Отчёт по заключенным договорам на оказание услуг связи c использованием только стандартных реквизитов.
- 2. Активированные пользователями дополнительные услуги (услуги, не включенные в тариф) services без учета системных обещанных платежей.
- 3. Пополнение баланса личного счета абонента обобщенная информация.
- 4. Отчёт выводит дополнительные услуги
- Статичные данные для справочников
Выгрузка на СОРМ3
Для автоматизации передачи отчетов на СОРМ3 следует:
- Удалить в начале select '' from abonents UNION
- Открыть текстовый файл в редакторе и привести к следующему виду set heading off; <ТЕКСТ ЗАПРОСА>;, например:
set heading off; select * from abonents;
- Сохранить в пределах контейнера /app/asr_billing, например /app/asr_billing/root/sorm3.sql
- Выполнить отчет следующей командой:
chroot /app/asr_billing isql-fb 169.254.30.50:/var/db/billing.gdb -p servicem -u SYSDBA -i /root/sorm3.sql | sed '/^$/d'| sed 's/ */ /g' | iconv -f utf8 -t cp1251 > /app/asr_billing/root/sorm3-export.csv
В данном примере sed убирает лишние пробелы и пустые строки, iconv преобразует кодировку в Windows-1251, согласно требованиям СОРМ3
- Любым удобным способом наладить автоматическое выполнение и передачу результата запроса в СОРМ3, например с помощью curl:
curl -v -sS --user login:password -T /app/asr_billing/root/sorm3.sql ftp://192.168.0.1/abonents/abonents/
Отчеты
1. Отчёт по заключенным договорам на оказание услуг связи c использованием только стандартных реквизитов.
select '' from abonents UNION select distinct '"' || U.LOGIN || '";"' || UF_IP2STRING(U.IP) || '";"' || U.MAC || '";"' || CAST(lpad(EXTRACT(DAY FROM a.create_date),2,'0') AS varchar(2))||'.'|| CAST(lpad(EXTRACT(MONTH FROM a.create_date),2,'0') AS varchar(2))||'.'|| EXTRACT(YEAR FROM a.create_date) || ' 00:00:00' || '";"' || A.CONTRACT_NUMBER || '";"' || case when a.id in (select distinct abonent_id from abonents_block where (b_own = 1 or b_admin = 1 or b_sys = 1 or b_own2 = 1)) then '1' else '0' end || '";"' || CAST(lpad(EXTRACT(DAY FROM a.activate_date),2,'0') AS varchar(2))||'.'|| CAST(lpad(EXTRACT(MONTH FROM a.activate_date),2,'0') AS varchar(2))||'.'|| EXTRACT(YEAR FROM a.activate_date) || ' 00:00:00";"' || case when a.id in (select distinct abonent_id from abonents_block where (b_own = 1 or b_admin = 1 or b_sys = 1 or b_own2 = 1)) then (select first 1 CAST(lpad(EXTRACT(DAY FROM abb.b_date),2,'0') AS varchar(2))||'.'|| CAST(lpad(EXTRACT(MONTH FROM abb.b_date),2,'0') AS varchar(2))||'.'|| EXTRACT(YEAR FROM abb.b_date) || ' 00:00:00' from abonents_block abb where abb.abonent_id = a.id and (b_own = 1 or b_admin = 1 or b_sys = 1 or b_own2 = 1)) else '' end || '";"' || A.COMPANY || '";' || case when a.company=0 then '"1";"";"";"";"' || A.NAME || '";"' || coalesce(av22.attribute_value,'') || '";"1";"";"";"";"' || iif( (coalesce(av14.attribute_value,'') || coalesce(av13.attribute_value,'') || coalesce(av16.attribute_value,'') || coalesce(av17.attribute_value,'')) <> '', iif(coalesce(av14.attribute_value,'') <> '', av14.attribute_value,'') || iif(coalesce(av13.attribute_value,'') <> '', ' ' || av13.attribute_value,'') || iif(coalesce(av16.attribute_value,'') <> '', ' ' || av16.attribute_value,'') || iif(coalesce(av17.attribute_value,'') <> '', ' ' || av17.attribute_value,'') || iif(coalesce(av15.attribute_value,'') <> '', ' Адрес регистрации: ' || (select IIF(coalesce(h.CITY, '') <> '', h.CITY || ' ', '') || IIF(coalesce(h.STREET,'') <> '', h.STREET || ' ', '') || coalesce(h.S_NUMBER,'') || IIF(coalesce(h.S_LITER,'') <> '', '/' || h.S_LITER, '') || IIF(coalesce(a.A_HOME_NUMBER, '') <> '', ' ' || a.A_HOME_NUMBER,'') from homes h where h.id=av15.attribute_value),' Адрес регистрации не заполнен') , '-') || '";"1";"' || coalesce(av7.attribute_value,'') || '";"' || coalesce(av6.attribute_value,'') || '";' else '"";"";"";"";"";"";"";"";"";"";"";"";"";"";"' end || case when a.company = 1 then coalesce(av2.attribute_value,'') || '";"' || coalesce(av4.attribute_value,'') || '";"' || coalesce(av32.attribute_value,'-') || '";"' || coalesce(av1.attribute_value,'') || '";"' || coalesce(av7.attribute_value,'') || '";"' || coalesce(av6.attribute_value,'') || coalesce(av6.attribute_value,'') || ';' else '"";"";"";"";"";"";' end || '"1";"";"";"";"";"";"";"";"";"";' || IIF(a.home_id > 0, '"' || IIF(coalesce(h.CITY, '') <> '', h.CITY || ' ', '') || IIF(coalesce(h.STREET,'') <> '', h.STREET || ' ', '') || coalesce(h.S_NUMBER,'') || IIF(coalesce(h.S_LITER,'') <> '', '/' || h.S_LITER, '') || IIF(coalesce(a.A_HOME_NUMBER, '') <> '', ' ' || a.A_HOME_NUMBER,'') || '"', '"-"') || ';"1";"";"";"";"";"";"";"";"";"";' || IIF(a.home_id > 0, '"' || IIF(coalesce(h.CITY, '') <> '', h.CITY || ' ', '') || IIF(coalesce(h.STREET,'') <> '', h.STREET || ' ', '') || coalesce(h.S_NUMBER,'') || IIF(coalesce(h.S_LITER,'') <> '', '/' || h.S_LITER, '') || IIF(coalesce(a.A_HOME_NUMBER, '') <> '', ' ' || a.A_HOME_NUMBER,'') || '"', '"-"') from ABONENTS A left join USERS U on A.ID = U.ABONENT_ID left join HOMES H on A.HOME_ID = H.ID left join TARIF T on A.TARIF_ID=T.ID left join ATTRIBUTE_VALUES as av1 on a.id=av1.ABONENT_ID and av1.ATTRIBUTE_ID=1 left join ATTRIBUTE_VALUES as av2 on a.id=av2.ABONENT_ID and av2.ATTRIBUTE_ID=2 left join ATTRIBUTE_VALUES as av4 on a.id=av4.ABONENT_ID and av4.ATTRIBUTE_ID=4 left join ATTRIBUTE_VALUES as av6 on a.id=av6.ABONENT_ID and av6.ATTRIBUTE_ID=6 left join ATTRIBUTE_VALUES as av7 on a.id=av7.ABONENT_ID and av7.ATTRIBUTE_ID=7 left join ATTRIBUTE_VALUES as av13 on a.id=av13.ABONENT_ID and av13.ATTRIBUTE_ID=13 left join ATTRIBUTE_VALUES as av14 on a.id=av14.ABONENT_ID and av14.ATTRIBUTE_ID=14 left join ATTRIBUTE_VALUES as av16 on a.id=av16.ABONENT_ID and av16.ATTRIBUTE_ID=16 left join ATTRIBUTE_VALUES as av17 on a.id=av17.ABONENT_ID and av17.ATTRIBUTE_ID=17 left join ATTRIBUTE_VALUES as av15 on a.id=av15.ABONENT_ID and av15.ATTRIBUTE_ID=15 left join ATTRIBUTE_VALUES as av22 on a.id=av22.ABONENT_ID and av22.ATTRIBUTE_ID=22 left join ATTRIBUTE_VALUES as av25 on a.id=av25.ABONENT_ID and av25.ATTRIBUTE_ID=25 left join ATTRIBUTE_VALUES as av32 on a.id=av32.ABONENT_ID and av32.ATTRIBUTE_ID=32 left join abonents_block ab on ab.abonent_id=a.id where A.IS_FOLDER=0 and a.parent_id not in (244) and a.deleted=0 and a.id is not null
Тот же отчёт, в который попадает только информация, добавленная за последние сутки
select distinct '"' || U.LOGIN || '";"' || UF_IP2STRING(U.IP) || '";"' || U.MAC || '";"' || CAST(lpad(EXTRACT(DAY FROM a.create_date),2,'0') AS varchar(2))||'.'|| CAST(lpad(EXTRACT(MONTH FROM a.create_date),2,'0') AS varchar(2))||'.'|| EXTRACT(YEAR FROM a.create_date) || ' 00:00:00' || '";"' || A.CONTRACT_NUMBER || '";"' || case when a.id in (select distinct abonent_id from abonents_block where (b_own = 1 or b_admin = 1 or b_sys = 1 or b_own2 = 1)) then '1' else '0' end || '";"' || CAST(lpad(EXTRACT(DAY FROM a.activate_date),2,'0') AS varchar(2))||'.'|| CAST(lpad(EXTRACT(MONTH FROM a.activate_date),2,'0') AS varchar(2))||'.'|| EXTRACT(YEAR FROM a.activate_date) || ' 00:00:00";"' || case when a.id in (select distinct abonent_id from abonents_block where (b_own = 1 or b_admin = 1 or b_sys = 1 or b_own2 = 1)) then (select first 1 CAST(lpad(EXTRACT(DAY FROM abb.b_date),2,'0') AS varchar(2))||'.'|| CAST(lpad(EXTRACT(MONTH FROM abb.b_date),2,'0') AS varchar(2))||'.'|| EXTRACT(YEAR FROM abb.b_date) || ' 00:00:00' from abonents_block abb where abb.abonent_id = a.id and (b_own = 1 or b_admin = 1 or b_sys = 1 or b_own2 = 1)) else '' end || '";"' || A.COMPANY || '";' || case when a.company=0 then '"1";"";"";"";"' || A.NAME || '";"' || coalesce(av22.attribute_value,'') || '";"1";"";"";"";"' || iif( (coalesce(av14.attribute_value,'') || coalesce(av13.attribute_value,'') || coalesce(av16.attribute_value,'') || coalesce(av17.attribute_value,'')) <> '', iif(coalesce(av14.attribute_value,'') <> '', av14.attribute_value,'') || iif(coalesce(av13.attribute_value,'') <> '', ' ' || av13.attribute_value,'') || iif(coalesce(av16.attribute_value,'') <> '', ' ' || av16.attribute_value,'') || iif(coalesce(av17.attribute_value,'') <> '', ' ' || av17.attribute_value,'') || iif(av15.attribute_value > 0, ' Адрес регистрации: ' || (select IIF(coalesce(h.CITY, '') <> '', h.CITY || ' ', '') || IIF(coalesce(h.STREET,'') <> '', h.STREET || ' ', '') || coalesce(h.S_NUMBER,'') || IIF(coalesce(h.S_LITER,'') <> '', '/' || h.S_LITER, '') || IIF(coalesce(a.A_HOME_NUMBER, '') <> '', ' ' || a.A_HOME_NUMBER,'') from homes h where h.id=av15.attribute_value),' Адрес регистрации не заполнен') , '-') || '";"1";"' || coalesce(av7.attribute_value,'') || '";"' || coalesce(av6.attribute_value,'') || '";' else '"";"";"";"";"";"";"";"";"";"";"";"";"";"";"' end || case when a.company = 1 then coalesce(av2.attribute_value,'') || '";"' || coalesce(av4.attribute_value,'') || '";"' || coalesce(av32.attribute_value,'-') || '";"' || coalesce(av1.attribute_value,'') || '";"' || coalesce(av7.attribute_value,'') || '";"' || coalesce(av6.attribute_value,'') || coalesce(av6.attribute_value,'') || ';' else '"";"";"";"";"";"";' end || '"1";"";"";"";"";"";"";"";"";"";' || IIF(a.home_id > 0, '"' || IIF(coalesce(h.CITY, '') <> '', h.CITY || ' ', '') || IIF(coalesce(h.STREET,'') <> '', h.STREET || ' ', '') || coalesce(h.S_NUMBER,'') || IIF(coalesce(h.S_LITER,'') <> '', '/' || h.S_LITER, '') || IIF(coalesce(a.A_HOME_NUMBER, '') <> '', ' ' || a.A_HOME_NUMBER,'') || '"', '"-"') || ';"1";"";"";"";"";"";"";"";"";"";' || IIF(a.home_id > 0, '"' || IIF(coalesce(h.CITY, '') <> '', h.CITY || ' ', '') || IIF(coalesce(h.STREET,'') <> '', h.STREET || ' ', '') || coalesce(h.S_NUMBER,'') || IIF(coalesce(h.S_LITER,'') <> '', '/' || h.S_LITER, '') || IIF(coalesce(a.A_HOME_NUMBER, '') <> '', ' ' || a.A_HOME_NUMBER,'') || '"', '"-"') from ABONENTS A left join USERS U on A.ID = U.ABONENT_ID left join HOMES H on A.HOME_ID = H.ID left join TARIF T on A.TARIF_ID=T.ID left join ATTRIBUTE_VALUES as av1 on a.id=av1.ABONENT_ID and av1.ATTRIBUTE_ID=1 left join ATTRIBUTE_VALUES as av2 on a.id=av2.ABONENT_ID and av2.ATTRIBUTE_ID=2 left join ATTRIBUTE_VALUES as av4 on a.id=av4.ABONENT_ID and av4.ATTRIBUTE_ID=4 left join ATTRIBUTE_VALUES as av6 on a.id=av6.ABONENT_ID and av6.ATTRIBUTE_ID=6 left join ATTRIBUTE_VALUES as av7 on a.id=av7.ABONENT_ID and av7.ATTRIBUTE_ID=7 left join ATTRIBUTE_VALUES as av13 on a.id=av13.ABONENT_ID and av13.ATTRIBUTE_ID=13 left join ATTRIBUTE_VALUES as av14 on a.id=av14.ABONENT_ID and av14.ATTRIBUTE_ID=14 left join ATTRIBUTE_VALUES as av16 on a.id=av16.ABONENT_ID and av16.ATTRIBUTE_ID=16 left join ATTRIBUTE_VALUES as av17 on a.id=av17.ABONENT_ID and av17.ATTRIBUTE_ID=17 left join ATTRIBUTE_VALUES as av15 on a.id=av15.ABONENT_ID and av15.ATTRIBUTE_ID=15 left join ATTRIBUTE_VALUES as av22 on a.id=av22.ABONENT_ID and av22.ATTRIBUTE_ID=22 left join ATTRIBUTE_VALUES as av25 on a.id=av25.ABONENT_ID and av25.ATTRIBUTE_ID=25 left join ATTRIBUTE_VALUES as av32 on a.id=av32.ABONENT_ID and av32.ATTRIBUTE_ID=32 left join abonents_block ab on ab.abonent_id=a.id where A.IS_FOLDER=0 and (u.login in (select uh.login from users_history uh where uh.time_changed between (current_timestamp - 1) and current_timestamp) or a.id in (select ah.abonents_id from abonents_history ah where ah.time_changed between (current_timestamp - 1) and current_timestamp)) and a.parent_id not in (244) and a.deleted=0 and a.id is not null
2. Активированные пользователями дополнительные услуги (услуги, не включенные в тариф) services без учета системных обещанных платежей.
Формат "логин";"номер договора";"идентификатор услуги";"дата и время подключения услуги";"дата и время отключения";""
set heading off; select distinct '"' || (select first 1 U.LOGIN from users u where u.abonent_id = a.id) || '";"' || A.CONTRACT_NUMBER || '";"' || UU.USLUGA_ID || '";"' || CAST(lpad(EXTRACT(DAY FROM UU.ENABLE_DATE),2,'0') AS varchar(2))||'.'|| CAST(lpad(EXTRACT(MONTH FROM UU.ENABLE_DATE),2,'0') AS varchar(2))||'.'|| EXTRACT(YEAR FROM UU.ENABLE_DATE) || ' 00:00:00' || '";"'|| coalesce((CAST(lpad(EXTRACT(DAY FROM UU.END_TIME),2,'0') AS varchar(2))||'.'|| CAST(lpad(EXTRACT(MONTH FROM UU.END_TIME),2,'0') AS varchar(2))||'.'|| EXTRACT(YEAR FROM UU.END_TIME) || ' ' || EXTRACT(HOUR FROM UU.END_TIME) || ':' || '00:00' ), '') || '";""' from ABONENTS A left join USERS_USLUGA UU on UU.ABONENT_ID=A.ID where A.IS_FOLDER=0 and A.PARENT_ID!=244 and A.DELETED=0 and UU.ENABLE_DATE is not null and UU.USLUGA_ID!=-4 and UU.USLUGA_ID!=-3 order by A.NAME;
Тот же отчёт, который выводит только услуги подключенные за последний час
set heading off; select distinct '"' || (select first 1 U.LOGIN from users u where u.abonent_id = a.id) || '";"' || A.CONTRACT_NUMBER || '";"' || UU.USLUGA_ID || '";"' || CAST(lpad(EXTRACT(DAY FROM UU.ENABLE_DATE),2,'0') AS varchar(2))||'.'|| CAST(lpad(EXTRACT(MONTH FROM UU.ENABLE_DATE),2,'0') AS varchar(2))||'.'|| EXTRACT(YEAR FROM UU.ENABLE_DATE) || ' 00:00:00' || '";"'|| coalesce((CAST(lpad(EXTRACT(DAY FROM UU.END_TIME),2,'0') AS varchar(2))||'.'|| CAST(lpad(EXTRACT(MONTH FROM UU.END_TIME),2,'0') AS varchar(2))||'.'|| EXTRACT(YEAR FROM UU.END_TIME) || ' ' || EXTRACT(HOUR FROM UU.END_TIME) || ':' || '00:00' ), '') || '";""' from ABONENTS A left join USERS_USLUGA UU on UU.ABONENT_ID=A.ID where A.IS_FOLDER=0 and A.PARENT_ID!=244 and A.DELETED=0 and UU.ENABLE_DATE is not null and UU.USLUGA_ID!=-4 and UU.USLUGA_ID!=-3 and uu.id in (select uuh.users_usluga_id from users_usluga_history uuh where uuh.time_changed between dateadd (-1 hour to current_timestamp) and current_timestamp) order by A.NAME;
3. Пополнение баланса личного счета абонента обобщенная информация.
Отчёт выводит информацию в виде "1";"идентификатор способа оплаты";"номер договора ";"статический IP-адрес";"дата и время пополнения баланса";"сумма";""
Идентификаторы перечислены в "Справочнике способов оплаты (пополнения баланса)" (далее в статье) и учитывает все интегрированные в Carbon Billing платежные системы в стабильной ветке на 09.06.2017. Если на момент интеграции используемая Вами платежная система отсутствует с правочнике и не учитывается в отчете, обратитесь в техпожжержку по вопросы актуализации отчета.
set heading off; select '"1";"' || coalesce(case when fo.operator_name = 'CITY_PAY' then '1' when fo.operator_name = 'EXPRESS_VOLGA' then '2' when fo.operator_name = 'ForwardMobile' then '3' when fo.operator_name = 'JCC' then '4' when fo.operator_name = 'Kassa24' then '5' when fo.operator_name = 'KAZKOMBANK' then '6' when fo.operator_name = 'Krasplat' then '7' when fo.operator_name = 'MINBANK' then '8' when fo.operator_name = 'MKB_OSMP' then '9' when fo.operator_name = 'OSMP_Amigo' then '10' when fo.operator_name = 'OSMP_CHECK' then '11' when fo.operator_name = 'OSMP_DELTAPAY' then '12' when fo.operator_name = 'OSMP_EXPRESS_OPLATA' then '13' when fo.operator_name = 'OSMP_INTERPAY' then '14' when fo.operator_name = 'OSMP_MOROZOV' then '15' when fo.operator_name = 'OSMP_QIWI' then '16' when fo.operator_name = 'OSMP_SBRF' then '17' when fo.operator_name = 'OSMP_SIPAY' then '18' when fo.operator_name = 'PAYANYWAY' then '19' when fo.operator_name = 'Payfon_phone' then '20' when fo.operator_name = 'PAYMASTER' then '21' when fo.operator_name = 'PAYNET_UZ' then '22' when fo.operator_name = 'QIWI_OSMP' then '23' when fo.operator_name = 'Qiwiwallet' then '24' when fo.operator_name = 'SBERBANK_ACQ' then '25' when fo.operator_name = 'SBRF_BS' then '26' when fo.operator_name = 'TelePay' then '27' when fo.operator_name = 'UBRIR' then '28' when fo.operator_name = 'UCS_ACQ' then '29' when fo.operator_name = 'Uniteller' then '30' when fo.operator_name = 'UnitellerAutopay' then '31' when fo.operator_name = 'XPLAT' then '32' when fo.operator_name is null then '33' else '-' end,'-') || '";"' || a.contract_number || '";"' || coalesce((select first 1 uf_ip2string(ip) from users u where u.abonent_id = a.id and u.ip is not null),'-') || '";"' || CAST(lpad(EXTRACT(DAY FROM fo.OP_DATE),2,'0') AS varchar(2))||'.'|| CAST(lpad(EXTRACT(MONTH FROM fo.OP_DATE),2,'0') AS varchar(2))||'.'|| EXTRACT(YEAR FROM fo.OP_DATE) || ' ' || CAST(lpad(EXTRACT(hour FROM fo.OP_DATE),2,'0') AS varchar(2))||':'|| CAST(lpad(EXTRACT(minute FROM fo.OP_DATE),2,'0') AS varchar(2))||':'|| '00";"' || cast(fo.op_summa/10000000000.00 as varchar(40)) || '";"' || coalesce(fo.DESCR,'') || '"' from finance_operations fo join abonents a on fo.abonent_id = a.id where fo.abonent_id is not null and fo.op_type = 2 and fo.storno = 0 and a.deleted = 0 order by fo.op_date;
Тот же отчет, выводящий пополнения баланса за последний час
set heading off; select '"1";"' || coalesce(case when fo.operator_name = 'CITY_PAY' then '1' when fo.operator_name = 'EXPRESS_VOLGA' then '2' when fo.operator_name = 'ForwardMobile' then '3' when fo.operator_name = 'JCC' then '4' when fo.operator_name = 'Kassa24' then '5' when fo.operator_name = 'KAZKOMBANK' then '6' when fo.operator_name = 'Krasplat' then '7' when fo.operator_name = 'MINBANK' then '8' when fo.operator_name = 'MKB_OSMP' then '9' when fo.operator_name = 'OSMP_Amigo' then '10' when fo.operator_name = 'OSMP_CHECK' then '11' when fo.operator_name = 'OSMP_DELTAPAY' then '12' when fo.operator_name = 'OSMP_EXPRESS_OPLATA' then '13' when fo.operator_name = 'OSMP_INTERPAY' then '14' when fo.operator_name = 'OSMP_MOROZOV' then '15' when fo.operator_name = 'OSMP_QIWI' then '16' when fo.operator_name = 'OSMP_SBRF' then '17' when fo.operator_name = 'OSMP_SIPAY' then '18' when fo.operator_name = 'PAYANYWAY' then '19' when fo.operator_name = 'Payfon_phone' then '20' when fo.operator_name = 'PAYMASTER' then '21' when fo.operator_name = 'PAYNET_UZ' then '22' when fo.operator_name = 'QIWI_OSMP' then '23' when fo.operator_name = 'Qiwiwallet' then '24' when fo.operator_name = 'SBERBANK_ACQ' then '25' when fo.operator_name = 'SBRF_BS' then '26' when fo.operator_name = 'TelePay' then '27' when fo.operator_name = 'UBRIR' then '28' when fo.operator_name = 'UCS_ACQ' then '29' when fo.operator_name = 'Uniteller' then '30' when fo.operator_name = 'UnitellerAutopay' then '31' when fo.operator_name = 'XPLAT' then '32' when fo.operator_name is null then '33' else '-' end,'-') || '";"' || a.contract_number || '";"' || coalesce((select first 1 uf_ip2string(ip) from users u where u.abonent_id = a.id and u.ip is not null),'-') || '";"' || CAST(lpad(EXTRACT(DAY FROM fo.OP_DATE),2,'0') AS varchar(2))||'.'|| CAST(lpad(EXTRACT(MONTH FROM fo.OP_DATE),2,'0') AS varchar(2))||'.'|| EXTRACT(YEAR FROM fo.OP_DATE) || ' ' || CAST(lpad(EXTRACT(hour FROM fo.OP_DATE),2,'0') AS varchar(2))||':'|| CAST(lpad(EXTRACT(minute FROM fo.OP_DATE),2,'0') AS varchar(2))||':'|| '00";"' || cast(fo.op_summa/10000000000.00 as varchar(40)) || '";"' || coalesce(fo.DESCR,'') || '"' from finance_operations fo join abonents a on fo.abonent_id = a.id where fo.abonent_id is not null and fo.op_type = 2 and fo.storno = 0 and a.deleted = 0 and fo.op_date between dateadd (-1 hour to current_timestamp) and current_timestamp order by fo.op_date;
4. Отчёт выводит дополнительные услуги
Формат "идентификатор услуги ";"название/обозначение в Вашей системе";"дата создания услуги в биллинге";"";"описание";
set heading off; select '"' || usl.id || '";"' || usl.NAME || '";"' || (select first 1 cast(lpad(extract(day from time_changed),2,'0') as varchar(2)) || '.' || cast(lpad(extract(month from time_changed),2,'0') as varchar(2)) || '.' || extract(year from time_changed) from usluga_history where usluga_id = usl.id) || ' 00:00:00";"' || iif(usl.deleted > 0, (select first 1 cast(lpad(extract(day from time_changed),2,'0') as varchar(2)) || '.' || cast(lpad(extract(month from time_changed),2,'0') as varchar(2)) || '.' || extract(year from time_changed) from usluga_history where usluga_id = usl.id order by time_changed desc) || ' 00:00:00";"', '";"') || coalesce(usl.comments,'') || '"' from usluga usl where usl.system_type != 13 and usl.id in (select usluga_id from usluga_history union distinct select usluga_id from users_usluga where deleted = 0 and abonent_id is not null) order by id;
Тот же отчёт, выводящий услуги, созданные за прошедшие сутки:
set heading off; select '"' || usl.id || '";"' || usl.NAME || '";"' || (select first 1 cast(lpad(extract(day from time_changed),2,'0') as varchar(2)) || '.' || cast(lpad(extract(month from time_changed),2,'0') as varchar(2)) || '.' || extract(year from time_changed) from usluga_history where usluga_id = usl.id) || ' 00:00:00";"' || iif(usl.deleted > 0, (select first 1 cast(lpad(extract(day from time_changed),2,'0') as varchar(2)) || '.' || cast(lpad(extract(month from time_changed),2,'0') as varchar(2)) || '.' || extract(year from time_changed) from usluga_history where usluga_id = usl.id order by time_changed desc) || ' 00:00:00";"', '";"') || coalesce(usl.comments,'') || '"' from usluga usl where usl.system_type != 13 and usl.id in (select usluga_id from usluga_history union distinct select usluga_id from users_usluga where deleted = 0 and abonent_id is not null) and (id in (select usluga_id from usluga_history where time_changed between (current_timestamp - 1) and current_timestamp)); order by id;
Статичные данные для справочников
Некоторые данные, выгружаемые на СОРМ, невозможно получить по средством системы отчетов по по той или иной причине. Где-то это несоотвествие логики БД СОРМ3 и БД Carbon Billing. Так же часть данных статична и создавать для этого отчет нецелесообразно. Некоторые данные, как например план адресации или список шлюзов, могут в биллинге вообще не заполняться.
Справочник типов документов, удостоверяющих личность
В Carbon Billing 5 нет как такового справочника документов удостоверяющих личность. Для этого существуют [реквизиты].
Предустановленные реквизиты есть только для одного типа - Паспорт гражданина РФ. Ниже приведен пример содержимого csv с типами документов:
"1";"01.01.2017";"";"Паспорт РФ"
Справочник IP-плана адресации
Эти данные строго индивидуальны для каждого оператора связи. Теоретический, если справочник IP-пулов совпадает с планом адрессации, можно составить отчет (в даном примере не рассматривается)
"Серая сеть";"10.0.0.0";"8";"01.01.2017";"" "Белая сеть";"8.8.0.0";"16";"01.01.2017";""
Справочник способов оплаты (пополнения баланса)
Примечания:
- Приход денежных средств в Carbon Billing - это тип финансовой операции.
- Финансовые операции хранятся в таблице FINANCE_OPERATIONS, Приход - в поле OP_TYPE, значение = 2 (целочисленное).
- При проведении платежа через платежную систему, поле DESCR заполняются соответствующим идентификатором, представляющим из себя мнемоническое обозначение оператора (название).
- При проведении платежа через веб-кассу или интерфейс администратора биллинга, DESCR доступно для свободного редактирования.
Эта информация требуется для отчета о пополнении баланса, в которм требуется указать идентификатор типа оплаты, который должен представлять из себя число. В справочнике способов оплаты будут представлены всевозможные идентификаторы платежных систем. Последний идентификатор - пополнение наличными. В отчете о пополнении баланса все, что не подходит под тот или иной шаблон, будет учтено как пополнение наличными.
При заполнении описания подобно предустановленном идентификатору платежной системы, платеж НЕ будет считаться проведенным через эту платежную систему, в отчете будет использовано иное поле однозначно идентифицируеще платежную систему и недоступное для ручного изменения. Во избежание возможной путаницы, инструктируйте сотрудников абонентского отдела что без необходимости так делать не следует |
При необходимости, список можно сократить в соответствии с используемыми платежными системами, но рекомендуется данный список выгрузить целиком.
"1";"01.01.2017 00:00:00";""01.01.2017 00:00:00";"CITY_PAY" "2";"01.01.2017 00:00:00";""01.01.2017 00:00:00";"EXPRESS_VOLGA" "3";"01.01.2017 00:00:00";""01.01.2017 00:00:00";"ForwardMobile" "4";"01.01.2017 00:00:00";""01.01.2017 00:00:00";"JCC" "5";"01.01.2017 00:00:00";""01.01.2017 00:00:00";"Kassa24" "6";"01.01.2017 00:00:00";""01.01.2017 00:00:00";"KAZKOMBANK" "7";"01.01.2017 00:00:00";""01.01.2017 00:00:00";"Krasplat" "8";"01.01.2017 00:00:00";""01.01.2017 00:00:00";"MINBANK" "9";"01.01.2017 00:00:00";""01.01.2017 00:00:00";"MKB_OSMP" "10";"01.01.2017 00:00:00";""01.01.2017 00:00:00";"OSMP_Amigo" "11";"01.01.2017 00:00:00";""01.01.2017 00:00:00";"OSMP_CHECK" "12";"01.01.2017 00:00:00";""01.01.2017 00:00:00";"OSMP_DELTAPAY" "13";"01.01.2017 00:00:00";""01.01.2017 00:00:00";"OSMP_EXPRESS_OPLATA" "14";"01.01.2017 00:00:00";""01.01.2017 00:00:00";"OSMP_INTERPAY" "15";"01.01.2017 00:00:00";""01.01.2017 00:00:00";"OSMP_MOROZOV" "16";"01.01.2017 00:00:00";""01.01.2017 00:00:00";"OSMP_QIWI" "17";"01.01.2017 00:00:00";""01.01.2017 00:00:00";"OSMP_SBRF" "18";"01.01.2017 00:00:00";""01.01.2017 00:00:00";"OSMP_SIPAY" "19";"01.01.2017 00:00:00";""01.01.2017 00:00:00";"PAYANYWAY" "20";"01.01.2017 00:00:00";""01.01.2017 00:00:00";"Payfon_phone" "21";"01.01.2017 00:00:00";""01.01.2017 00:00:00";"PAYMASTER" "22";"01.01.2017 00:00:00";""01.01.2017 00:00:00";"PAYNET_UZ" "23";"01.01.2017 00:00:00";""01.01.2017 00:00:00";"QIWI_OSMP" "24";"01.01.2017 00:00:00";""01.01.2017 00:00:00";"Qiwiwallet" "25";"01.01.2017 00:00:00";""01.01.2017 00:00:00";"SBERBANK_ACQ" "26";"01.01.2017 00:00:00";""01.01.2017 00:00:00";"SBRF_BS" "27";"01.01.2017 00:00:00";""01.01.2017 00:00:00";"TelePay" "28";"01.01.2017 00:00:00";""01.01.2017 00:00:00";"UBRIR" "29";"01.01.2017 00:00:00";""01.01.2017 00:00:00";"UCS_ACQ" "30";"01.01.2017 00:00:00";""01.01.2017 00:00:00";"Uniteller" "31";"01.01.2017 00:00:00";""01.01.2017 00:00:00";"UnitellerAutopay" "32";"01.01.2017 00:00:00";""01.01.2017 00:00:00";"XPLAT" "33";"01.01.2017 00:00:00";""01.01.2017 00:00:00";"Поступление наличных"