最近大家喜欢用IDOC来同步客户主数据到sap ecc系统。
没有什么太多特殊的。都是标准配置。消息类DEBMAS
基本类型DEBMAS07 。可是却死活都收不到状态消息。
经过DEBUG调试跟踪,也是头痛欲裂。确实没有抛出异常的地方。
于是想到会不会是官方问题?
然后搜索sap标准note。果不其然。
2678496 – Status message is no longer issued in batch input
2655937 – Status message is no longer displayed
事务代码SNOTE打上后,完美解决~【解决方案代码】
CONSTANTS:
* XML data
* lc_fk_stc2(20) TYPE c VALUE ‘FHK01_CCFCGD_STC2’, “Sold-to Code
* lc_fk_cn(8) TYPE c VALUE ‘FHK01_CCFCGD_CN’, “Ship-to Code
* lc_fk_cna(40) TYPE c VALUE ‘FHK01_CCFCGD_CNA’, “Ship-to Name
* lc_fk_a(40) TYPE c VALUE ‘FHK01_CCFCGD_A’, “Address
* lc_fk_a2(40) TYPE c VALUE ‘FHK01_CCFCGD_A2’, “Address 2
* lc_fk_a3(40) TYPE c VALUE ‘FHK01_CCFCGD_A3’, “Address 3
* lc_fk_ccn(30) TYPE c VALUE ‘FHK01_CCFCGD_CCN’, “Customer Contact Name
* lc_fk_ccp(8) TYPE c VALUE ‘FHK01_CCFCGD_CCP’, “Customer Contact Phone
* lc_fk_f(8) TYPE c VALUE ‘FHK01_CCFCGD_F’, “Fax
* lc_fk_cg3(3) TYPE c VALUE ‘FHK01_CUSTOMER_GROUP_3’, “Customer Group 1
* lc_fk_cg4(3) TYPE c VALUE ‘FHK01_CUSTOMER_GROUP_4’, “Customer Group 2
* lc_fk_sgsg(30) TYPE c VALUE ‘FHK01_CCFCGD_SGSG’, “Ship-to-Group
* lc_fk_cce(50) TYPE c VALUE ‘FHK01_CCFCGD_CCE’, “Email Address
* lc_fk_ag(4) TYPE c VALUE ‘FHK01_CCFCGD_AG’, “Account Group
* lc_fk_st(20) TYPE c VALUE ‘FHK01_CCFCGD_ST’, “Search Term
* lc_fk_so(4) TYPE c VALUE ‘FHK01_CCFCGD_SO’, “Sales Organization
* lc_fk_dc(2) TYPE c VALUE ‘FHK01_CCFCGD_DC’, “Distribution Channel
* lc_fk_d(2) TYPE c VALUE ‘FHK01_CCFCGD_D’, “Division
* lc_fk_ck(3) TYPE c VALUE ‘FHK01_CCFCGD_CK’, “Country Key
* lc_fk_sof(4) TYPE c VALUE ‘FHK01_CCFCGD_SOF’, “Sales Office
* lc_fk_ab(2) TYPE c VALUE ‘FHK01_CCFCGD_AB’, “Areas Block
lc_fk_stc2 TYPE string VALUE ‘FHK01_CCFCGD_STC2’, “Sold-to Code
lc_fk_cn TYPE string VALUE ‘FHK01_CCFCGD_CN’, “Ship-to Code
lc_fk_cna TYPE string VALUE ‘FHK01_CCFCGD_CNA’, “Ship-to Name
lc_fk_a TYPE string VALUE ‘FHK01_CCFCGD_A’, “Address
lc_fk_a2 TYPE string VALUE ‘FHK01_CCFCGD_A2’, “Address 2
lc_fk_a3 TYPE string VALUE ‘FHK01_CCFCGD_A3’, “Address 3
lc_fk_ccn TYPE string VALUE ‘FHK01_CCFCGD_CCN’, “Customer Contact Name
lc_fk_ccp TYPE string VALUE ‘FHK01_CCFCGD_CCP’, “Customer Contact Phone
lc_fk_f TYPE string VALUE ‘FHK01_CCFCGD_F’, “Fax
lc_fk_cg3 TYPE string VALUE ‘FHK01_CUSTOMER_GROUP_3’, “Customer Group 1
lc_fk_cg4 TYPE string VALUE ‘FHK01_CUSTOMER_GROUP_4’, “Customer Group 2
lc_fk_sgsg TYPE string VALUE ‘FHK01_CCFCGD_SGSG’, “Ship-to-Group
lc_fk_cce TYPE string VALUE ‘FHK01_CCFCGD_CCE’, “Email Address
lc_fk_ag TYPE string VALUE ‘FHK01_CCFCGD_AG’, “Account Group
lc_fk_st TYPE string VALUE ‘FHK01_CCFCGD_ST’, “Search Term
lc_fk_so TYPE string VALUE ‘FHK01_CCFCGD_SO’, “Sales Organization
lc_fk_dc TYPE string VALUE ‘FHK01_CCFCGD_DC’, “Distribution Channel
lc_fk_d TYPE string VALUE ‘FHK01_CCFCGD_D’, “Division
lc_fk_ck TYPE string VALUE ‘FHK01_CCFCGD_CK’, “Country Key
lc_fk_sof TYPE string VALUE ‘FHK01_CCFCGD_SOF’, “Sales Office
lc_fk_ab TYPE string VALUE ‘FHK01_CCFCGD_AB’, “Areas Block
lc_fk_cc TYPE string VALUE ‘FHK01_CCFCGD_CC’, “Areas Block
lc_rec_acct TYPE string VALUE ‘10202200’, ” Reconciliation account in KNB1-AKONT
lc_tax_class TYPE string VALUE ‘0’, ” Tax classification in KNVI-TAXKD
lc_tax_type TYPE string VALUE ‘MWST’, ” Tax ‘category
* Business Data
lc_fkhk_ship_to_group TYPE parvw VALUE ‘ZX’.
*———————————————————————-*
* Types
*———————————————————————-*
TYPES: BEGIN OF ty_cust_in,
kunnr TYPE kna1–kunnr,
fk_sold_to_code TYPE adrc–sort2,
fk_ship_to_code TYPE kna1–sortl,
fk_ship_to_name TYPE kna1–name1,
fk_address TYPE kna1–stras,
fk_address2 TYPE adrc–str_suppl1,
fk_address3 TYPE adrc–str_suppl2,
fk_cust_contra_name TYPE kna1–name2,
fk_cust_contact_tel TYPE kna1–telf1,
fk_fax TYPE kna1–telfx,
fk_cust_grp1 TYPE knvv–kvgr1,
fk_cust_grp2 TYPE knvv–kvgr2,
fk_ship_to_grp TYPE knvp–parvw,
fk_search_term TYPE adrc–sort1,
* fk_email_addr TYPE kna1-zemail,
fk_account_grp TYPE kna1–ktokd,
fk_sales_org TYPE knvv–vkorg,
fk_distr_channel TYPE knvv–vtweg,
fk_division TYPE knvv–spart,
fk_country_key TYPE kna1–land1,
fk_sales_office TYPE knvv–vkbur,
fk_areas_block TYPE knvv–aufsd,
fk_company_code TYPE knb1–bukrs,
END OF ty_cust_in.
TYPES: BEGIN OF ty_cust_out,
fk_ship_to_code TYPE kna1–sortl,
fk_ship_to_name TYPE kna1–name1,
fk_address TYPE kna1–stras,
fk_cust_contra_name TYPE kna1–name2,
fk_cust_contact_tel TYPE kna1–telf1,
fk_fax TYPE kna1–telfx,
fk_cust_grp1 TYPE knvv–kvgr1,
fk_cust_grp2 TYPE knvv–kvgr2,
fk_ship_to_grp TYPE knvp–parvw,
* fk_email_addr TYPE kna1-zemail,
fk_account_grp TYPE kna1–ktokd,
fk_sales_org TYPE knvv–vkorg,
fk_distr_channel TYPE knvv–vtweg,
fk_division TYPE knvv–spart,
fk_country_key TYPE kna1–land1,
fk_sales_office TYPE knvv–vkbur,
fk_areas_block TYPE knvv–aufsd,
fk_company_code TYPE knb1–bukrs,
status TYPE c,
message TYPE string,
END OF ty_cust_out.
*———————————————————————-*
* Data and define
*———————————————————————-*
DATA:
lt_cust_in TYPE STANDARD TABLE OF ty_cust_in,
ls_cust_in TYPE ty_cust_in,
lt_cust_out TYPE STANDARD TABLE OF ty_cust_out,
ls_cust_out TYPE ty_cust_out,
lr_parvw TYPE RANGE OF parvw,
ls_e1kna1m TYPE e1kna1m,
ls_e1knvvm TYPE e1knvvm,
ls_e1knvim TYPE e1knvim,
ls_e1knvpm TYPE e1knvpm,
ls_e1knkkm TYPE e1knkkm,
ls_e1knb1m TYPE e1knb1m,
ls_e1bpad1vl TYPE e1bpad1vl,
ls_e1bpadsmtp TYPE e1bpadsmtp.
DATA:
lt_idoc_contrl_cust TYPE STANDARD TABLE OF edidc,
ls_idoc_contrl_cust LIKE LINE OF lt_idoc_contrl_cust,
lt_idoc_data_cust TYPE STANDARD TABLE OF edidd,
ls_idoc_data_cust LIKE LINE OF lt_idoc_data_cust,
lt_idoc_status_cust TYPE STANDARD TABLE OF bdidocstat,
ls_idoc_status_cust LIKE LINE OF lt_idoc_status_cust,
lt_return_variables_cust TYPE STANDARD TABLE OF bdwfretvar,
ls_return_variables_cust LIKE LINE OF lt_return_variables_cust,
lt_serialization_info_cust TYPE STANDARD TABLE OF bdi_ser,
ls_serialization_info_cust LIKE LINE OF lt_serialization_info_cust.
DATA lv_index TYPE i.
CLEAR lv_index.
* IF ls_xml-cname = c_index.
* IF ls_xml-cvalue NE ‘1’ AND lv_flag = ‘X’.
* APPEND ls_in TO lt_in.
* CLEAR ls_in.
* ELSE.
* CLEAR ls_in.
* ENDIF.
* ENDIF.
ls_cust_in–fk_sold_to_code = ‘ZZZ’. ” Not handled
ls_cust_in–fk_ship_to_code = ‘ZZZ’. ” Not handled
ls_cust_in–fk_ship_to_name = ‘asdf’. ” Not handled
ls_cust_in–fk_address = ‘ADD’. ” Not handled
ls_cust_in–fk_address2 = ‘ADDD2’. ” Not handled
ls_cust_in–fk_address3 = ‘ADD3’. ” Not handled
ls_cust_in–fk_cust_contra_name = ‘sdfafds’. ” Not handled
ls_cust_in–fk_cust_contact_tel = ”. ” Not handled
ls_cust_in–fk_fax = ”. ” Not handled
ls_cust_in–fk_cust_grp1 = ’10’. ” Not handled
ls_cust_in–fk_cust_grp2 = ”. ” Not handled
ls_cust_in–fk_ship_to_grp = ‘0003’. ” Not handled
ls_cust_in–fk_search_term = ‘XXX’. ” Not handled
* ls_cust_in-fk_email_addr = ”. ” Not handled
ls_cust_in–fk_account_grp = ‘6000’. ” KTOKD
ls_cust_in–fk_sales_org = ”. ” Not handled
ls_cust_in–fk_distr_channel = ”. ” Not handled
ls_cust_in–fk_division = ”. ” Not handled
ls_cust_in–fk_country_key = ‘CN’. ” Not handled
ls_cust_in–fk_sales_office = ”. ” Not handled
ls_cust_in–fk_areas_block = ”. ” Not handled
ls_cust_in–fk_company_code = ”. ” Not handled
lr_parvw = VALUE #( “( low = ‘SP’ )
( low = ‘BP’ )
( low = ‘PY’ ) ( low = ‘SH’ ) ” ( low = lc_fkhk_ship_to_group )
).
APPEND ls_cust_in TO lt_cust_in.
LOOP AT lt_cust_in INTO ls_cust_in.
“SEND IDOC
CLEAR:
lt_idoc_contrl_cust,
lt_idoc_data_cust,
lt_idoc_status_cust,
lt_return_variables_cust,
lt_serialization_info_cust.
IF ls_cust_in–fk_sales_org IS NOT INITIAL AND
ls_cust_in–fk_distr_channel IS NOT INITIAL AND
ls_cust_in–fk_division IS NOT INITIAL AND
ls_cust_in–fk_ship_to_code IS NOT INITIAL.
SELECT SINGLE kunnr
FROM knvv
INTO ls_cust_in–kunnr
WHERE vkorg = ls_cust_in–fk_sales_org
AND vtweg = ls_cust_in–fk_distr_channel
AND spart = ls_cust_in–fk_division
AND eikto = ls_cust_in–fk_ship_to_code.
ENDIF.
“CONTROL DATA RBDMIDOC
ls_idoc_contrl_cust–mestyp = ‘DEBMAS’.
ls_idoc_contrl_cust–idoctp = ‘DEBMAS07’.
* ls_idoc_contrl_cust-mestyp = ‘DEBMDM’.
* ls_idoc_contrl_cust-idoctp = ‘DEBMDM06’.
ls_idoc_contrl_cust–sndprt = ‘LS’.
CONCATENATE sy–sysid sy–mandt INTO ls_idoc_contrl_cust–sndprn.
CONCATENATE sy–sysid sy–mandt INTO ls_idoc_contrl_cust–rcvprn.
ls_idoc_contrl_cust–rcvprt = ‘LS’.
APPEND ls_idoc_contrl_cust TO lt_idoc_contrl_cust.
CLEAR: ls_idoc_contrl_cust.
“Master customer master basic data
ls_idoc_data_cust–segnam = ‘E1KNA1M’.
ls_idoc_data_cust–dtint2 = 0.
* ls_e1kna1m-kunnr = ‘0000008998’.
ls_e1kna1m–sortl = ‘sortl’. “ls_cust_in-fk_ship_to_code.
ls_e1kna1m–name1 = ‘NAME1-WWW.HOT583.COM’. “ls_cust_in-fk_ship_to_name.
ls_e1kna1m–stras = ls_cust_in–fk_address.
ls_e1kna1m–name2 = ‘name2’. “ls_cust_in-fk_cust_contra_name.
ls_e1kna1m–telf1 = ls_cust_in–fk_cust_contact_tel.
ls_e1kna1m–telfx = ls_cust_in–fk_fax.
* ls_e1kna1m-zemail = ls_cust_in-fk_email_addr.
ls_e1kna1m–ktokd = ‘Z004’. “ls_cust_in-fk_account_grp.
ls_e1kna1m–land1 = ‘CN’.” ls_cust_in-fk_country_key.
ls_e1kna1m–spras = ‘1’.
ls_idoc_data_cust–sdata = ls_e1kna1m.
APPEND ls_idoc_data_cust TO lt_idoc_data_cust.
CLEAR: ls_idoc_data_cust, ls_e1kna1m.
“Master customer master sales data
ls_idoc_data_cust–segnam = ‘E1KNVVM’.
ls_idoc_data_cust–dtint2 = 0.
ls_e1knvvm–kvgr1 = ’10’.“ls_cust_in-fk_cust_grp1.
* ls_e1knvvm-kvgr2 = ls_cust_in-fk_cust_grp2.
ls_e1knvvm–vkorg = ‘K001’ .“ls_cust_in-fk_sales_org.
ls_e1knvvm–vtweg = ’00’ .“ls_cust_in-fk_distr_channel.
ls_e1knvvm–spart = ’00’. “ls_cust_in-fk_division.
ls_e1knvvm–vkbur = ‘2400’ .“ls_cust_in-fk_sales_office.
ls_e1knvvm–aufsd = ”.“ls_cust_in-fk_areas_block.
ls_e1knvvm–kkber = space. “ls_cust_in-fk_sales_org.
ls_idoc_data_cust–sdata = ls_e1knvvm.
* APPEND ls_idoc_data_cust TO lt_idoc_data_cust.
CLEAR: ls_idoc_data_cust, ls_e1knvvm.
“Master customer master partner roles
* BREAK-POINT.
* LOOP AT lr_parvw ASSIGNING FIELD-SYMBOL(<fs>).
* ls_idoc_data_cust-segnam = ‘E1KNVPM’.
* ls_idoc_data_cust-dtint2 = 0.
* ls_e1knvpm-parvw = <fs>-low.
* ls_idoc_data_cust-sdata = ls_e1knvpm.
* APPEND ls_idoc_data_cust TO lt_idoc_data_cust.
* CLEAR: ls_idoc_data_cust, ls_e1knvpm.
* ENDLOOP.
“Customer Master Company Code
ls_idoc_data_cust–segnam = ‘E1KNB1M’.
ls_idoc_data_cust–dtint2 = 0.
ls_e1knb1m–bukrs = ‘SH10’.“ls_cust_in-fk_company_code.
ls_e1knb1m–akont = ‘0011220200’.“lc_rec_acct.
* ls_e1knb1m-smtp_addr = ls_cust_in-fk_email_addr.
ls_idoc_data_cust–sdata = ls_e1knb1m.
* APPEND ls_idoc_data_cust TO lt_idoc_data_cust.
CLEAR: ls_idoc_data_cust, ls_e1knb1m.
“Customer Master accounting
ls_idoc_data_cust–segnam = ‘E1KNVIM’.
ls_idoc_data_cust–dtint2 = 0.
ls_e1knvim–taxkd = ‘1’.“lc_tax_class.
ls_e1knvim–aland = ‘CN’ .“ls_cust_in-fk_country_key.
ls_e1knvim–tatyp = ‘MWST’.” lc_tax_type.
ls_idoc_data_cust–sdata = ls_e1knvim.
* APPEND ls_idoc_data_cust TO lt_idoc_data_cust.
CLEAR: ls_idoc_data_cust, ls_e1knvim.
“Customer Credit Control Area ( for testing as error message towards to KKBER )
ls_idoc_data_cust–segnam = ‘E1KNKKM’.
ls_idoc_data_cust–dtint2 = 0.
ls_e1knkkm–kkber = ls_cust_in–fk_sales_org.
ls_idoc_data_cust–sdata = ls_e1knkkm.
* APPEND ls_idoc_data_cust TO lt_idoc_data_cust.
CLEAR: ls_idoc_data_cust, ls_e1knkkm.
* “Address
* ls_idoc_data_cust-segnam = ‘E1BPAD1VL’.
* ls_idoc_data_cust-dtint2 = 0.
* ls_e1bpad1vl-sort1 = ls_cust_in-fk_search_term.
* ls_e1bpad1vl-sort2 = ls_cust_in-fk_sold_to_code.
* ls_e1bpad1vl-str_suppl1 = ls_cust_in-fk_address2.
* ls_e1bpad1vl-str_suppl2 = ls_cust_in-fk_address3.
* ls_idoc_data_cust-sdata = ls_e1bpad1vl.
* APPEND ls_idoc_data_cust TO lt_idoc_data_cust.
* CLEAR: ls_idoc_data_cust, ls_e1bpad1vl.
*
* “E-Mail Addresses
* ls_idoc_data_cust-segnam = ‘E1BPADSMTP’.
* ls_idoc_data_cust-dtint2 = 0.
* ls_e1bpadsmtp-e_mail = ls_cust_in-fk_email_addr.
* ls_idoc_data_cust-sdata = ls_e1bpadsmtp.
* APPEND ls_idoc_data_cust TO lt_idoc_data_cust.
* CLEAR: ls_idoc_data_cust, ls_e1bpadsmtp.
BREAK-POINT.
CALL FUNCTION ‘IDOC_INPUT_DEBITOR’
* CALL FUNCTION ‘IDOC_INPUT_DEBITOR_MDM’
EXPORTING
input_method = space
mass_processing = space
TABLES
idoc_contrl = lt_idoc_contrl_cust
idoc_data = lt_idoc_data_cust
idoc_status = lt_idoc_status_cust
return_variables = lt_return_variables_cust
serialization_info = lt_serialization_info_cust
EXCEPTIONS
wrong_function_called = 1
OTHERS = 2.
BREAK-POINT.
IF sy–subrc <> 0.
* Implement suitable error handling here
ENDIF.
*———————————————————————-*
* Prepare Result file
*———————————————————————-*
MOVE-CORRESPONDING ls_cust_in TO ls_cust_out.
LOOP AT lt_idoc_status_cust INTO ls_idoc_status_cust WHERE msgty = ‘E’ OR msgty = ‘A’.
ENDLOOP.
IF sy–subrc = 0.
ls_cust_out–status = ‘F’.
ls_cust_out–message = ‘Customer create fail’.
ELSE.
ls_cust_out–status = ‘S’.
ENDIF.
APPEND ls_cust_out TO lt_cust_out.
CLEAR ls_cust_out.
ENDLOOP.
本文链接:http://www.hot583.com/2022/03/16/debmas07-no-return-status-message/
本文为作者原创,如果这篇文章对您有用,欢迎转载,
转载请务必注明来源《今日热点在看》http://www.hot583.com/
我的微信公众号hot583或者在这个链接联系我
《全文完》