:: Не фоксом единым
пример разбора справочника БИК ЦБ ED807 на АБАПе
прошелмимо
Автор

Сообщений: 784
Дата регистрации: 21.02.2012
ЦБ РФ, дали постоянную ссылку на файлы:
www.cbr.ru- это последний загруженный справочник
www.cbr.ru - полный список файлов по датам



возможно, будет полезным, немного кому-то скратит разработку.
(слышал абаперы тут есть).
код для старой версии сап ерп, в которой нет трансформации
(в данном случае так нужно было/афтар знает про трансформацию).
*---------------------------------------------------------------------*
* FORM get_xml_ED807 *
*---------------------------------------------------------------------*
form get_xml_ED807.
data: filename type localfile
, lv_rc type sy-subrc
, lr_xml type ref to cl_xml_document
, lr_node type ref to if_ixml_node
, lr_iterator type ref to if_ixml_node_iterator
, lv_node_name type string
, lv_node_type type i
, lv_nodemap type ref to if_ixml_named_node_map
, lv_attr_count type i
, lv_index type i
, lv_attr type ref to if_ixml_node
, lv_attr_name type string
, lv_attr_value type string
, lv_step type i
, ls_bank_table2013 like line of bank_table2013
, ls_account like line of bank_accounts
.
filename = p_file.
create object lr_xml.
lv_rc = lr_xml->create_with_file( filename ).
if lv_rc ne 0.
MESSAGE E000(38) WITH 'Ошибка чтения файла:' p_file
RAISING FILE_READ_ERROR.
endif.
lr_node = lr_xml->m_document.
check not lr_node is initial.
* Создаем итератор для перемещения по узлам
lr_iterator = lr_node->create_iterator( ).
* Проходим по всем узлам
lr_node = lr_iterator->get_next( ).
while not lr_node is initial.
lv_node_type = lr_node->get_type( ).
if lv_node_type = if_ixml_node=>co_node_element.
lv_node_name = lr_node->get_name( ).
lv_nodemap = lr_node->get_attributes( ).
if not lv_nodemap is initial.
case lv_node_name.
when 'BICDirectoryEntry'.
lv_step = 1.
if not ls_account is initial.
append ls_account to bank_accounts.
endif.
perform check_ls_bank
using ls_bank_table2013.
clear: ls_account, ls_bank_table2013.
refresh bank_accounts[].
when 'ParticipantInfo'.
lv_step = 2.
when 'RstrList'.
lv_step = 3.
when 'SWBICS'.
lv_step = 4.
when 'Accounts'.
lv_step = 5.
when others.
clear lv_step.
endcase.
lv_attr_count = lv_nodemap->GET_LENGTH( ).
do lv_attr_count times.
lv_index = sy-index - 1.
lv_attr = lv_nodemap->get_item( lv_index ).
lv_attr_name = lv_attr->get_name( ).
lv_attr_value = lv_attr->get_value( ).
perform parse_ED807
using lv_step
lv_attr_name
lv_attr_value
changing
ls_bank_table2013
ls_account.
enddo.
endif.
endif.
lr_node = lr_iterator->get_next( ).
endwhile. "not lr_node is initial
free lr_xml.
if not ls_bank_table2013 is initial.
if not ls_account is initial.
append ls_account to bank_accounts.
endif.
perform check_ls_bank
using ls_bank_table2013.
endif.
endform.
*---------------------------------------------------------------------*
* FORM parse_ED807 *
*---------------------------------------------------------------------*
form parse_ED807
using pstep type i
pv_attr_name type string
pv_attr_value type string
changing
ps_bank_table2013 like line of bank_table2013
ps_account like line of bank_accounts.
check not pstep is initial.
case pstep.
when 1.
if pv_attr_name = 'BIC'.
clear ps_bank_table2013.
ps_bank_table2013-field3 = pv_attr_value.
endif.
when 2.
case pv_attr_name.
when 'NameP'. "наименование
ps_bank_table2013-field2 = pv_attr_value.
when 'PrntBIC'.
ps_bank_table2013-PrntBIC = pv_attr_value.
when 'Nnp'. "город
ps_bank_table2013-field1 = pv_attr_value.
when 'Adr '.
ps_bank_table2013-field5 = pv_attr_value.
when 'PtType'.
ps_bank_table2013-PtType = pv_attr_value.
endcase.
when 3.
case pv_attr_name.
when 'Rstr'.
if pv_attr_value = 'LWRS'.
* Ограничения сервисов перевода денежн.средств участника
* LWRS Отзыв (аннулирование) лицензии
bank_table_del-newnum = ps_bank_table2013-field3.
append bank_table_del.
endif.
endcase.
when 4.
case pv_attr_name.
when 'SWBIC'.
ps_bank_table2013-SWBIC = pv_attr_value.
endcase.
when 5.
case pv_attr_name.
when 'Account'.
if not ps_account is initial.
append ps_account to bank_accounts.
endif.
clear ps_account.
ps_account-Account = pv_attr_value.
when 'RegulationAccountType'.
ps_account-RegulationAccountType = pv_attr_value.
endcase.
endcase.
endform.
*---------------------------------------------------------------------*
* FORM check_ls_bank *
*---------------------------------------------------------------------*
form check_ls_bank
using ps_bank like line of bank_table2013.
check not ps_bank is initial.
data ls_account like line of bank_accounts.
if ps_bank-PtType = '00' "Главное управление Банка России
or ps_bank-PtType = '10' "Расчетно-кассовый центр
or ps_bank-PtType = '12' "Отделение – нац.банк ГУ БРоссии
or ps_bank-PtType = '15' "Структурн.подр. ЦА Банка России
or ps_bank-PtType = '20' "Кредитная организация
or ps_bank-PtType = '30' "Филиал кредитной организации
or ps_bank-PtType = '40' "Полевое учреждение Банка России
or ps_bank-PtType = '90' "Конкурсн.управл.(ликвидатор)
.
read table bank_accounts into ls_account
with key RegulationAccountType = 'CRSA'.
if sy-subrc = 0.
* Корр.счет
ps_bank-field4 = ls_account-Account.
endif.
append ps_bank to bank_table2013.
endif.
endform.



Исправлено 2 раз(а). Последнее : прошелмимо, 24.01.19 17:10
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 5 (Гостей: 5)

© 2000-2024 Fox Club 
Яндекс.Метрика