DAK написал(а):
Поля
CI_EKPODB-ZZTAXAM, CI_EKPODB-ZZNETAM типа CURR, а
CI_EKPODB-ZZSUMAM типа CHAR.
при обычном заполнении структуры EXTENSIONIN (gs_EXTENSIONIN+30 = gs_CI_EKPODB) у меня была ошибка связанная с уникодом, пришлось сделать как написано в ноте:
берем ст. s1 исходной структуры и ст. s1 с теми же полями только типа char и делаем move-corresponding а s2 move в EXTENSIONIN.
вот только это не помогло(((
Насколько я смог понять то в OSS Note 509898 советуют "to write a customer exit/badi to the BAPI" и там обработать ваши данные.
Вроде бы как BADI ME_BAPI_PO_CUST метод MAP2I_EXTENSIONIN вызывается после проверки типа данных в customer-include.
Code:
* check if the included fields are character like data types
LOOP AT gr_abap->components ASSIGNING <comp>.
CHECK <comp>-type_kind EQ gr_abap->typekind_packed.
* message could be customized ME887
MESSAGE w887(me) WITH im_name INTO gl_dummy.
mmpur_message_enaco_forced sy-msgty sy-msgid sy-msgno sy-msgv1
sy-msgv2 sy-msgv3 sy-msgv4.
lf_exit = cl_mmpur_constants=>yes.
ENDLOOP.
* call customer BAdI for inbound mapping of extensionin
GET BADI lr_badi.
TRY.
CALL BADI lr_badi->map2i_extensionin
EXPORTING
im_container = im_container
im_name = im_name
im_error = lf_exit
CHANGING
ch_struc = ch_struc.
CATCH cx_mmpur_root.
EXIT.
ENDTRY.
CHECK lf_exit EQ cl_mmpur_constants=>no.
TRY.
ASSIGN ch_struc TO <fs>.
* convert container data to target structure
im_nls->cont_to_struc( EXPORTING cont = im_container
langu = sy-langu
IMPORTING struc = <fs> ).
CATCH: cx_root.
ENDTRY.