文章目录

  • 前言
  • 范例代码
  • 总结

前言

采用BDC创建客商主数据复用性低,且时常发生错误,比如字段必输性调整造成报错等
现通过API或BAPI去查询,创建,修改,锁定
以下为实际做的一个RFC接口


范例代码

客户主数据创建查询修改锁定

FUNCTION zfm_pi_rfc_cust_mas.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(IT_HEADER_INFO) TYPE  Z_PARTNER_H OPTIONAL
*"     VALUE(IT_BANK_INFO) TYPE  Z_BANK_INFO OPTIONAL
*"  EXPORTING
*"     VALUE(ET_RETURN_INFO) TYPE  Z_MAS_RETURN
*"----------------------------------------------------------------------DATA:ls_return      TYPE z_s_mas_return,ls_cus_mas     TYPE cmds_ei_main,ls_ei_main     TYPE cmds_ei_main,ls_customr     TYPE cmds_ei_extern,lv_test        TYPE xfeld,ls_error       TYPE cvis_message,lt_header_info TYPE z_partner_h,lt_header_n    TYPE z_partner_h,  "经营性客商数据lt_bank_info   TYPE z_bank_info,lt_bank        TYPE TABLE OF zzt_bnka,lt_bank_n      TYPE TABLE OF zzt_bnka, "经营性客商银行数据ls_bank_info   TYPE zzt_bnka,*       lt_bapiret1    TYPE TABLE OF bapiret1 WITH HEADER LINE,
*       lt_bapiret1    TYPE TABLE OF bapiret1,ls_bapiret1    LIKE bapiret1,lv_cre_err     TYPE char1,ls_msg         TYPE bapiret2,lv_kunnr       TYPE kunnr,lt_brnch_d     TYPE TABLE OF fitha_brnch_t,ls_brnch_d     TYPE fitha_brnch_t,lt_brnch       TYPE TABLE OF fitha_brnch,ls_brnch       TYPE fitha_brnch,BEGIN OF ls_ktokd,ktokd       TYPE ktokd,next_num(5) TYPE n,kunnr5      TYPE char5,END OF ls_ktokd,lt_ktokd       LIKE STANDARD TABLE OF ls_ktokd,lv_next_num(5) TYPE n,lt_cust        TYPE cmds_ei_extern_t,ls_cust        TYPE cmds_ei_extern,lt_smtp_str    TYPE cvis_ei_smtp_t,ls_smtp_str    TYPE cvis_ei_smtp_str,lt_company     TYPE cmds_ei_company_t,ls_company     TYPE cmds_ei_company,lv_index       TYPE int4,lv_count       TYPE int4,lv_tgsys       TYPE tbdlst-logsys,lv_type        TYPE syst_msgty,lv_type1       TYPE syst_msgty,lv_str         TYPE string,lv_msg         TYPE string,lv_msg1        TYPE string,lv_diff        TYPE char1,BEGIN OF ls_namet,name1   TYPE name1_gp,name2   TYPE name2_gp,name3   TYPE name3_gp,name4   TYPE name4_gp,name_cn TYPE char70,name_en TYPE char70,END OF ls_namet,lt_namet LIKE STANDARD TABLE OF ls_namet.DATA:lv_nr_range_nr TYPE inri-nrrangenr,lv_syentry     TYPE syentry.CONSTANTS:lc_numrg  TYPE numkr VALUE '19',  "创建  规定区间lc_object TYPE inri-object VALUE 'DEBITOR'.  "客户 编号对象FIELD-SYMBOLS:<fs_ktokd> LIKE ls_ktokd,
*                 <ls_message> TYPE bapiret2,<fs_bank>  LIKE zes_ _bank_info.*  校验必输性   筛除错误数据IF it_header_info[] IS NOT INITIAL.MOVE-CORRESPONDING it_header_info[] TO lt_header_info.LOOP AT lt_header_info ASSIGNING FIELD-SYMBOL(<fs_header>).lv_index = sy-tabix.CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'EXPORTINGinput  = <fs_header>-partnerIMPORTINGoutput = lv_kunnr.<fs_header>-partner = lv_kunnr."当客商是  经营性的时候, 不会修改客商内容,且不校验客商字段必输性
*      N为非经营性IF <fs_header>-zzjyx NE 'N'.APPEND <fs_header> TO lt_header_n.DELETE lt_header_info INDEX lv_index.ENDIF.ENDLOOP.*    去除测试数据DELETE lt_header_info WHERE partner EQ '?'.
*    限制账户组SELECT ktokd,numkr INTO TABLE @DATA(lt_t077d)FROM t077dWHERE numkr EQ @lc_numrg.IF sy-subrc EQ 0.CLEAR:lv_str.LOOP AT lt_t077d INTO DATA(ls_t077d).IF lv_str IS INITIAL.lv_str = ls_t077d-ktokd.ELSE.lv_str = lv_str && ',' && ls_t077d-ktokd.ENDIF.ENDLOOP.SORT lt_t077d BY ktokd.LOOP AT lt_header_info ASSIGNING <fs_header>.lv_index = sy-tabix.READ TABLE lt_t077d WITH KEY ktokd = <fs_header>-ktokk TRANSPORTING NO FIELDS.IF sy-subrc NE 0.ls_return-unique_number = <fs_header>-unique_number.ls_return-partner = <fs_header>-partner.ls_return-bukrs = <fs_header>-bukrs.ls_return-error_msg = text-021 && lv_str && text-022."账户组不能为规定以外的.ls_return-flag = 'E'.APPEND ls_return TO et_return_info.DELETE lt_header_info INDEX lv_index.ENDIF.ENDLOOP.ELSE.ls_return-unique_number = <fs_header>-unique_number.ls_return-partner = <fs_header>-partner.ls_return-bukrs = <fs_header>-bukrs.ls_return-error_msg = text-023."账户组未维护间隔ls_return-flag = 'E'.APPEND ls_return TO et_return_info.CLEAR:lt_header_info.RETURN.ENDIF.SORT lt_header_info BY partner bukrs.LOOP AT lt_header_info INTO DATA(ls_header).lv_index = sy-tabix.IF ls_header-process_type IS INITIAL OR ls_header-sr_number IS INITIAL.*        CHECK ls_header-process_type NE 'V'.   "在V的时候不检查SR_NUMBERIF ls_header-process_type NE 'V'.CLEAR:ls_return.ls_return-unique_number = ls_header-unique_number.ls_return-partner = ls_header-partner.ls_return-bukrs = ls_header-bukrs.ls_return-error_msg = text-008."'处理类型、服务请求编号不能为空!'.ls_return-flag = 'E'.APPEND ls_return TO et_return_info.DELETE lt_header_info INDEX lv_index.EXIT.ENDIF.ENDIF.CALL FUNCTION 'BAPI_CUSTOMER_GETDETAIL2'EXPORTINGcustomerno  = ls_header-partnercompanycode = ls_header-bukrsIMPORTING
*         CUSTOMERADDRESS             =
*         CUSTOMERGENERALDETAIL       =
*         CUSTOMERCOMPANYDETAIL       =return      = ls_bapiret1
*       TABLES
*         CUSTOMERBANKDETAIL          =
*         CUSTOMERIBANDETAIL          =
*         CUSTOMERSEPADETAIL          =.IF ls_bapiret1-type EQ 'E'.IF ls_bapiret1-id EQ 'FN' AND ls_bapiret1-number EQ '502'.CASE ls_header-process_type.WHEN 'C' OR 'V'.
*            EXIT.WHEN 'U' OR 'L'.ls_return-error_msg = ls_bapiret1-message.lv_cre_err = abap_true.
*            EXIT.WHEN OTHERS.ENDCASE.ELSE.IF ls_bapiret1-id EQ 'FN' AND ls_bapiret1-number EQ '503' .IF ls_header-process_type EQ 'U' OR ls_header-process_type EQ 'C' OR ls_header-process_type EQ 'V'.ELSE.lv_cre_err = abap_true.ls_return-error_msg = ls_return-error_msg && ' ' && ls_bapiret1-message.ENDIF.ELSE.lv_cre_err = abap_true.ls_return-error_msg = ls_return-error_msg && ' ' && ls_bapiret1-message.ENDIF.ENDIF.ENDIF.*      判断当类型为U时 判断主数据是否发生变动
*      有变动  有未清项不能改,无未清项可以修改IF ls_header-process_type EQ 'U'.CLEAR:lv_diff.SELECT SINGLE * INTO @DATA(ls_kna1_u)FROM kna1WHERE kunnr EQ @ls_header-partner.IF sy-subrc EQ 0.IF ls_header-stcd1 NE ls_kna1_u-stcd1 AND ls_header-stcd1 IS NOT INITIAL.lv_diff = abap_true.ENDIF.IF ls_header-stcd2 NE ls_kna1_u-stcd2 AND ls_header-stcd2 IS NOT INITIAL.lv_diff = abap_true.ENDIF.IF ls_header-stcd3 NE ls_kna1_u-stcd3 AND ls_header-stcd3 IS NOT INITIAL.lv_diff = abap_true.ENDIF.IF ls_header-stcd4 NE ls_kna1_u-stcd4 AND ls_header-stcd4 IS NOT INITIAL.lv_diff = abap_true.ENDIF.IF ls_header-stcd5 NE ls_kna1_u-stcd5 AND ls_header-stcd5 IS NOT INITIAL.lv_diff = abap_true.ENDIF.IF ls_header-stceg NE ls_kna1_u-stceg AND ls_header-stceg IS NOT INITIAL.lv_diff = abap_true.ENDIF.IF ls_header-ktokk NE ls_kna1_u-ktokd AND ls_header-ktokk IS NOT INITIAL.lv_diff = abap_true.ENDIF.IF ls_header-land1 NE ls_kna1_u-land1 AND ls_header-land1 IS NOT INITIAL.lv_diff = abap_true.ENDIF.IF ls_header-ort01 NE ls_kna1_u-ort01 AND ls_header-ort01 IS NOT INITIAL.lv_diff = abap_true.ENDIF.IF ls_header-stras NE ls_kna1_u-stras AND ls_header-stras IS NOT INITIAL.lv_diff = abap_true.ENDIF.IF ls_header-telf1 NE ls_kna1_u-telf1 AND ls_header-telf1 IS NOT INITIAL.lv_diff = abap_true.ENDIF.*            称谓IF lv_diff NE abap_true.IF ls_kna1_u-anred IS NOT INITIAL.SELECT * INTO TABLE @DATA(lt_tsad3t)FROM tsad3t.IF sy-subrc EQ 0.SORT lt_tsad3t BY title_medi.DELETE ADJACENT DUPLICATES FROM lt_tsad3t COMPARING title_medi.READ TABLE lt_tsad3t INTO DATA(ls_tsad3t) WITH KEY title_medi = ls_kna1_u-anred BINARY SEARCH.IF sy-subrc EQ 0 AND ls_tsad3t-title NE ls_header-title AND ls_header-title IS NOT INITIAL.lv_diff = abap_true.ENDIF.ENDIF.ELSE.IF ls_header-title IS NOT INITIAL.lv_diff = abap_true.ENDIF.ENDIF.ENDIF.IF lv_diff NE abap_true.SELECT SINGLE * INTO @DATA(ls_addr6)FROM adr6WHERE addrnumber EQ @ls_kna1_u-adrnr.IF sy-subrc EQ 0 AND ls_addr6-smtp_addr NE ls_header-email_addr.lv_diff = abap_true.ENDIF.ENDIF.IF lv_diff NE abap_true.SELECT SINGLE * INTO @DATA(ls_knb1_u)FROM knb1WHERE kunnr EQ @ls_header-partnerAND bukrs EQ @ls_header-bukrs.IF sy-subrc EQ 0.IF ls_knb1_u-akont NE ls_header-akont AND ls_header-akont IS NOT INITIAL.lv_diff = abap_true.ENDIF.IF ls_knb1_u-fdgrv NE ls_header-fdgrv  AND ls_header-fdgrv IS NOT INITIAL.lv_diff = abap_true.ENDIF.IF ls_knb1_u-zuawa NE ls_header-zuawa AND ls_header-zuawa IS NOT INITIAL.lv_diff = abap_true.ENDIF.ELSE.lv_diff = abap_true.ENDIF.ENDIF.ENDIF.ENDIF.*      END  ADD*   校验修改时客商下是否有未清项IF ls_header-partner IS NOT INITIAL AND ls_header-process_type EQ 'U'.IF lv_diff EQ abap_true.SELECT COUNT(*)FROM bsidWHERE kunnr = ls_header-partner.IF sy-subrc EQ 0.lv_cre_err = abap_true.ls_return-error_msg = text-025.ENDIF.ENDIF.ENDIF.*      税号必输CASE ls_header-land1.WHEN 'CN'.
*          IF ls_header-stcd3 IS INITIAL.  "CN调整为增值税号必输IF ls_header-stceg IS INITIAL.lv_cre_err = abap_true.ls_return-error_msg = ls_header-land1 && text-032.ENDIF.*          IF ls_header-process_type EQ 'C' OR ls_header-process_type EQ 'V'.IF ls_header-process_type EQ 'C'.  "C创建才检验*            校验增值税登记号在当前系统是否存在IF ls_header-stceg IS NOT INITIAL.*              CLEAR:lv_index.
*              SELECT COUNT(*) INTO lv_indexCLEAR:lv_count.SELECT COUNT(*) INTO lv_count
*              END  MODIFYFROM kna1WHERE stceg EQ ls_header-stceg.
*              IF lv_index GE 1.IF lv_count GE 1.
*                END  MODIFYlv_cre_err = abap_true.ls_return-error_msg = text-037.ENDIF.ENDIF.*          校验供应商名称在当前系统中是否存在IF lt_t077d IS NOT INITIAL.SELECT name1 name2 name3 name4 INTO CORRESPONDING FIELDS OF TABLE lt_nametFROM kna1FOR ALL ENTRIES IN lt_t077dWHERE ktokd EQ lt_t077d-ktokd.IF sy-subrc EQ 0.LOOP AT lt_namet ASSIGNING FIELD-SYMBOL(<fs_namet>).<fs_namet>-name_cn = <fs_namet>-name1 && <fs_namet>-name2.<fs_namet>-name_en = <fs_namet>-name3 && <fs_namet>-name4.ENDLOOP.ENDIF.IF ls_header-name_cn IS NOT INITIAL.SORT lt_namet BY name_cn.DELETE ADJACENT DUPLICATES FROM lt_namet COMPARING name_cn.READ TABLE lt_namet WITH KEY name_cn = ls_header-name_cn BINARY SEARCH TRANSPORTING NO FIELDS.IF sy-subrc EQ 0.lv_cre_err = abap_true.ls_return-error_msg = text-038.ENDIF.ENDIF.IF ls_header-name_en IS NOT INITIAL.SORT lt_namet BY name_en.DELETE ADJACENT DUPLICATES FROM lt_namet COMPARING name_en.READ TABLE lt_namet WITH KEY name_en = ls_header-name_en BINARY SEARCH TRANSPORTING NO FIELDS.IF sy-subrc EQ 0.lv_cre_err = abap_true.ls_return-error_msg = text-038.ENDIF.ENDIF.ENDIF.ENDIF.WHEN 'MY'.WHEN 'SG'.WHEN 'HK'.WHEN 'BR' OR 'CL' OR 'AR' OR 'PE' OR 'MX' OR 'UY' OR 'FR' OR 'MM' OR 'TH' OR 'VN' OR 'ID'OR 'CZ' OR 'NL' OR 'GB' OR 'IN' OR 'ES' OR 'DE' OR 'IT' OR 'GR'.IF ls_header-stcd1 IS INITIAL.lv_cre_err = abap_true.ls_return-error_msg = ls_header-land1 && text-027.ENDIF.IF ls_header-land1 EQ 'AR' OR ls_header-land1 EQ 'IN' OR ls_header-land1 EQ 'IT'.IF ls_header-stcd2 IS INITIAL.lv_cre_err = abap_true.ls_return-error_msg = ls_header-land1 && text-028.ENDIF.ENDIF.IF ls_header-land1 EQ 'IN'.IF ls_header-stcd3 IS INITIAL.lv_cre_err = abap_true.ls_return-error_msg = ls_header-land1 && text-029.ENDIF.ENDIF.IF ls_header-land1 EQ 'IT'.IF ls_header-stcd4 IS INITIAL.lv_cre_err = abap_true.ls_return-error_msg = ls_header-land1 && text-030.ENDIF.ENDIF.IF ls_header-land1 EQ 'FR' OR ls_header-land1 EQ 'CZ' OR ls_header-land1 EQ 'NL' OR ls_header-land1 EQ 'ES' ORls_header-land1 EQ 'IT' OR ls_header-land1 EQ 'GR'.IF ls_header-stceg IS INITIAL.lv_cre_err = abap_true.ls_return-error_msg = ls_header-land1 && text-032.ENDIF.ENDIF.IF ls_header-land1 EQ 'TH'.IF ls_header-j_1tpbupl IS INITIAL.lv_cre_err = abap_true.ls_return-error_msg = ls_header-land1 && text-033.ENDIF.ENDIF.WHEN 'CA'.WHEN 'PA'.WHEN 'PH'.IF ls_header-stcd3 IS INITIAL.lv_cre_err = abap_true.ls_return-error_msg = ls_header-land1 && text-029.ENDIF.IF ls_header-stcd4 IS INITIAL.lv_cre_err = abap_true.ls_return-error_msg = ls_header-land1 && text-030.ENDIF.WHEN OTHERS.ENDCASE.IF lv_cre_err EQ abap_true.DELETE lt_header_info INDEX lv_index.
*        CLEAR:ls_return.ls_return-unique_number = ls_header-unique_number.ls_return-partner = ls_header-partner.ls_return-bukrs = ls_header-bukrs.ls_return-flag = 'E'.APPEND ls_return TO et_return_info.CLEAR:lv_cre_err.EXIT.ENDIF.ENDLOOP.ENDIF.IF it_bank_info[] IS NOT INITIAL.IF lt_header_n IS NOT INITIAL.SORT lt_header_n BY partner bukrs.ENDIF.MOVE-CORRESPONDING it_bank_info[] TO lt_bank_info.LOOP AT lt_bank_info ASSIGNING <fs_bank>.lv_index = sy-tabix.CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'EXPORTINGinput  = <fs_bank>-partnerIMPORTINGoutput = lv_kunnr.<fs_bank>-partner = lv_kunnr.*      READ TABLE lt_header_n WITH KEY partner = <fs_bank>-partner bukrs = <fs_bank>-bukrs TRANSPORTING NO FIELDS BINARY SEARCH.READ TABLE lt_header_n INTO ls_header WITH KEY partner = <fs_bank>-partner bukrs = <fs_bank>-bukrs BINARY SEARCH.IF sy-subrc EQ 0 AND ( ls_header-process_type EQ 'C' OR ls_header-process_type EQ 'U' ).APPEND <fs_bank> TO lt_bank_n.DELETE lt_bank_info INDEX lv_index.ENDIF.ENDLOOP.SORT lt_header_info BY partner bukrs.*    去除测试数据DELETE lt_bank_info WHERE partner EQ '?'.LOOP AT lt_bank_info INTO DATA(ls_bank).lv_index = sy-tabix.IF ls_bank-partner IS INITIAL OR ls_bank-bukrs IS INITIAL OR ls_bank-land1 IS INITIALOR ls_bank-bankl IS INITIAL OR  ls_bank-zbankh IS INITIAL "OR ls_bank-ziban IS INITIALOR ls_bank-waers IS INITIAL.CLEAR:ls_return.ls_return-error_msg = text-018."'客户编号、公司代码、国家代码、开户行联行号、银行账号、账户币种 均不能为空'.LOOP AT lt_header_info INTO ls_header WHERE partner EQ ls_bank-partner AND bukrs EQ ls_bank-bukrs.ls_return-unique_number = ls_header-unique_number.ls_return-partner = ls_header-partner.ls_return-bukrs = ls_header-bukrs.ls_return-flag = 'E'.APPEND ls_return TO et_return_info.EXIT.ENDLOOP.DELETE lt_bank_info INDEX lv_index.DELETE lt_header_info WHERE partner EQ ls_bank-partner.ENDIF.IF ls_bank-land1 NE 'CN' AND ( ls_bank-ziban IS INITIAL OR ls_bank-swift IS INITIAL ).   "海外iban swift必输CLEAR:ls_return.ls_return-error_msg = text-026.LOOP AT lt_header_info INTO ls_header WHERE partner EQ ls_bank-partner AND bukrs EQ ls_bank-bukrs.ls_return-unique_number = ls_header-unique_number.ls_return-partner = ls_header-partner.ls_return-bukrs = ls_header-bukrs.ls_return-flag = 'E'.APPEND ls_return TO et_return_info.EXIT.ENDLOOP.DELETE lt_bank_info INDEX lv_index.DELETE lt_header_info WHERE partner EQ ls_bank-partner.ENDIF.ENDLOOP.ENDIF.*  处理主数据IF lt_header_info IS NOT INITIAL.LOOP AT lt_header_info INTO ls_header.CLEAR:ls_cus_mas,ls_return,lt_cust,lt_smtp_str.CASE ls_header-process_type.WHEN 'C' OR 'U' OR 'V'. "C--创建(Create)  U--更改(UPDATE)  V--校验(VALIDATION)CLEAR:ls_cust,lt_company.IF ls_header-process_type EQ 'C' OR ls_header-process_type EQ 'V'.*            客户外部给号IF ls_header-ktokk IS NOT INITIAL.*              限定客户码   分配的区间为20000MG往上READ TABLE lt_ktokd ASSIGNING <fs_ktokd> INDEX 1."WITH KEY ktokd = ls_header-ktokd ASSIGNING <fs_ktokd>.IF sy-subrc NE 0.SELECT MAX( kunnr ) INTO lv_kunnrFROM kna1WHERE kunnr LIKE 'Z20001%'.IF sy-subrc NE 0.*                  一个都没读取到 给一个最初的间隔lv_kunnr = 'Z200010000'.ELSE.PERFORM frm_get_next_number_customer CHANGING lv_kunnr.ls_cust-header-object_instance-kunnr = lv_kunnr."lv_kunnr+0(6) && lv_next_num.ls_ktokd-next_num = lv_kunnr+5(5)."lv_next_num.ls_ktokd-kunnr5 = lv_kunnr+0(5).IF lt_ktokd IS INITIAL.APPEND ls_ktokd TO lt_ktokd.ENDIF.ENDIF.ELSE.lv_kunnr = <fs_ktokd>-kunnr5 && <fs_ktokd>-next_num.PERFORM frm_get_next_number_customer CHANGING lv_kunnr.ls_cust-header-object_instance-kunnr = lv_kunnr."ls_ktokd-kunnr5 && lv_next_num.<fs_ktokd>-next_num = lv_kunnr+5(5)."lv_next_num.<fs_ktokd>-kunnr5 = lv_kunnr+0(5).ENDIF.ELSE.*                报错 没有账户组ls_return-unique_number = ls_header-unique_number.ls_return-partner = ls_header-partner.ls_return-bukrs = ls_header-bukrs.ls_return-flag = 'E'.ls_return-error_msg = text-034."'账户组不能为空。'.APPEND ls_return TO et_return_info.EXIT.ENDIF.ls_cust-header-object_instance-kunnr = lv_kunnr.ls_cust-header-object_task = 'I'.ls_cust-central_data-address-task = 'I'.IF ls_header-process_type EQ 'V'.DELETE lt_header_info WHERE process_type NE 'V'.ENDIF.ELSE.ls_cust-header-object_task = 'M'.ls_cust-central_data-address-task = 'M'.ls_cust-header-object_instance-kunnr = ls_header-partner.ENDIF.*          主数据ls_cust-central_data-central-data-ktokd = ls_header-ktokk.ls_cust-central_data-central-datax-ktokd = 'X'.ls_cust-central_data-central-data-stcd1 = ls_header-stcd1.ls_cust-central_data-central-datax-stcd1 = 'X'.ls_cust-central_data-central-data-stcd2 = ls_header-stcd2.ls_cust-central_data-central-datax-stcd2 = 'X'.ls_cust-central_data-central-data-stcd3 = ls_header-stcd3.ls_cust-central_data-central-datax-stcd3 = 'X'.ls_cust-central_data-central-data-stcd4 = ls_header-stcd4.ls_cust-central_data-central-datax-stcd4 = 'X'.ls_cust-central_data-central-data-stcd5 = ls_header-stcd5.ls_cust-central_data-central-datax-stcd5 = 'X'.ls_cust-central_data-central-data-stceg = ls_header-stceg.ls_cust-central_data-central-datax-stceg = 'X'.ls_cust-central_data-central-data-sperr = ls_header-sperr.ls_cust-central_data-central-datax-sperr = 'X'.*          公司数据IF ls_header-process_type EQ 'C' OR ls_header-process_type EQ 'V'.ls_company-task = 'I'.ELSE.ls_company-task = 'M'.ENDIF.ls_company-data_key-bukrs = ls_header-bukrs.ls_company-data-fdgrv = ls_header-fdgrv.ls_company-datax-fdgrv = 'X'.ls_company-data-zuawa = ls_header-zuawa.ls_company-datax-zuawa = 'X'.ls_company-data-akont = ls_header-akont.ls_company-datax-akont = 'X'.APPEND ls_company TO lt_company.
*          ls_cust-company_data-current_state = 'X'.ls_cust-company_data-company = lt_company.*          地址数据IF ls_header-process_type EQ 'C' OR ls_header-process_type EQ 'V'.ls_cust-central_data-address-task = 'I'.ELSE.ls_cust-central_data-address-task = 'M'.ENDIF.ls_cust-central_data-address-postal-data-postl_cod1 = ls_header-pstlz.  "城市邮编ls_cust-central_data-address-postal-datax-postl_cod1 = 'X'.ls_cust-central_data-address-postal-data-title = ls_header-title.ls_cust-central_data-address-postal-datax-title = 'X'.ls_cust-central_data-address-postal-data-langu = sy-langu.ls_cust-central_data-address-postal-datax-langu = 'X'.ls_cust-central_data-address-postal-data-country = ls_header-land1.ls_cust-central_data-address-postal-datax-county = 'X'.ls_cust-central_data-address-postal-data-city = ls_header-ort01.ls_cust-central_data-address-postal-datax-city = 'X'.ls_cust-central_data-address-postal-data-street = ls_header-stras.ls_cust-central_data-address-postal-datax-street = 'X'.ls_cust-central_data-address-postal-data-name = ls_header-name_cn+0(35).ls_cust-central_data-address-postal-datax-name = 'X'.ls_cust-central_data-address-postal-data-name_2 = ls_header-name_cn+35(35).ls_cust-central_data-address-postal-datax-name_2 = 'X'.ls_cust-central_data-address-postal-data-name_3 = ls_header-name_en+0(35).ls_cust-central_data-address-postal-datax-name_3 = 'X'.ls_cust-central_data-address-postal-data-name_4 = ls_header-name_en+35(35).ls_cust-central_data-address-postal-datax-name_4 = 'X'.*          针对公司做特别处理CASE ls_header-bukrs.WHEN ' 3271'.ls_cust-central_data-address-postal-data-name_3 = ls_cust-central_data-address-postal-data-name.ls_cust-central_data-address-postal-data-name_4 = ls_cust-central_data-address-postal-data-name_2.WHEN OTHERS.ENDCASE.ls_cust-central_data-address-postal-data-langu = sy-langu.ls_cust-central_data-address-postal-datax-langu = 'X'.*          邮箱IF ls_header-process_type EQ 'C' OR ls_header-process_type EQ 'V'.ls_smtp_str-contact-task = 'I'.ELSE.ls_smtp_str-contact-task = 'M'.ENDIF.ls_smtp_str-contact-data-e_mail = ls_header-email_addr.ls_smtp_str-contact-datax-e_mail = 'X'.APPEND ls_smtp_str TO lt_smtp_str.
*          ls_cust-central_data-address-communication-smtp-current_state = 'X'.ls_cust-central_data-address-communication-smtp-smtp = lt_smtp_str.APPEND ls_cust TO lt_cust.ls_cus_mas-customers = lt_cust.IF ls_header-process_type EQ 'V'.lv_test = 'X'.ELSE.CLEAR:lv_test.ENDIF.*          CALL METHOD cmd_ei_api=>maintain_bapi
*            EXPORTING
*              iv_test_run            = lv_test
*              iv_collect_messages    = 'X'
*              is_master_data         = ls_cus_mas
*            IMPORTING
*              es_master_data_correct = ls_ei_main
**             es_message_correct     = ls_error
**             es_master_data_defective =
*              es_message_defective   = ls_error.CALL METHOD cmd_ei_api=>maintainEXPORTINGiv_test_run    = lv_testis_master_data = ls_cus_masIMPORTINGes_error       = ls_error.IF ls_error-is_error NE 'X'.*              创建或修改成功IF ls_header-process_type EQ 'C'.*              READ TABLE ls_ei_main-customers INTO ls_customr INDEX 1.
*              IF sy-subrc EQ 0.*                lv_kunnr = ls_customr-header-object_instance-kunnr.
*              经讨论 当创建时partner传一个不存在的客户客户编号做关联  创建成功后修改掉就行LOOP AT lt_bank_info ASSIGNING <fs_bank> WHERE partner EQ ls_header-partner AND bukrs EQ ls_header-bukrs.<fs_bank>-partner = lv_kunnr.ENDLOOP.ls_header-partner = lv_kunnr.MODIFY lt_header_info FROM ls_header TRANSPORTING partner WHERE unique_number EQ ls_header-unique_number.*              ENDIF.ENDIF.ls_return-unique_number = ls_header-unique_number.ls_return-partner = ls_header-partner.ls_return-bukrs = ls_header-bukrs.ls_return-flag = 'S'.APPEND ls_return TO et_return_info.COMMIT WORK AND WAIT.  ELSE.*              创建或修改失败IF ls_header-process_type EQ 'C'.ls_return-error_msg = text-013."' 客户主数据创建失败'.ELSE.ls_return-error_msg = text-014."' 客户主数据修改失败'.ENDIF.LOOP AT ls_error-messages INTO ls_msg WHERE type EQ 'E'.ls_return-error_msg = ls_return-error_msg && '-' && ls_msg-message.ENDLOOP.ls_return-unique_number = ls_header-unique_number.CLEAR:ls_return-partner." = ls_header-partner.ls_return-bukrs = ls_header-bukrs.ls_return-flag = 'E'.APPEND ls_return TO et_return_info.DELETE lt_header_info INDEX lv_index.ROLLBACK WORK.   ENDIF.cmd_ei_api=>initialize( ).WHEN 'L'. "L--冻结(Lock)CALL METHOD cmd_ei_api=>lockEXPORTINGiv_kunnr = ls_header-partner
*             iv_mode_kna1 = 'E'
*             iv_mandt = SY-MANDT
*             iv_collect   = ' '
*             iv_wait  = SPACE
*             iv_scope = '2'
*             iv_x_kunnr   = SPACEIMPORTINGes_error = ls_error.IF ls_error-is_error EQ 'X'.ls_return-error_msg = text-010.ls_return-flag = 'E'.DELETE lt_header_info INDEX lv_index.ELSE.
*            ls_return-error_msg = text-006."' 客户主数据冻结成功!'.ls_return-flag = 'S'.ENDIF.ls_return-unique_number = ls_header-unique_number.CLEAR:ls_return-partner." = ls_header-partner.ls_return-bukrs = ls_header-bukrs.APPEND ls_return TO et_return_info.*          cmd_ei_api=>initialize( ).
*          EXIT.*        WHEN 'V'. "V--校验(Verification)"
**          ls_return-error_msg = ' 客户主数据校验成功!'.ENDCASE.ENDLOOP.ENDIF.IF lt_bank_n IS NOT INITIAL.LOOP AT lt_bank_n INTO ls_bank.CLEAR:ls_bank_info.MOVE-CORRESPONDING ls_bank TO ls_bank_info.ls_bank_info-objkt = ls_bank-partner.ls_bank_info-upnam = sy-uname.ls_bank_info-udat = sy-datum.ls_bank_info-utime = sy-uzeit.CALL FUNCTION 'IB_CONVERT_INTO_TIMESTAMP'EXPORTINGi_datlo     = sy-datumi_timlo     = sy-uzeiti_tzone     = sy-zonloIMPORTINGe_timestamp = ls_bank_info-timestamp.ls_bank_info-banks = ls_bank-land1.APPEND ls_bank_info  TO lt_bank.CHECK et_return_info IS INITIAL.LOOP AT it_header_info[] INTO ls_header WHERE zzjyx NE 'N' AND partner EQ ls_bank-partner AND bukrs EQ ls_bank-bukrs.ls_return-unique_number = ls_header-unique_number.ls_return-partner = ls_header-partner.ls_return-bukrs = ls_header-bukrs.ls_return-flag = 'S'.APPEND ls_return TO et_return_info.EXIT.ENDLOOP.ENDLOOP.MODIFY zzt_bnka FROM TABLE lt_bank.IF sy-subrc EQ 0.COMMIT WORK AND WAIT.LOOP AT lt_bank INTO ls_bank_info.LOOP AT lt_header_info INTO ls_header WHERE process_type NE 'L' AND partner EQ ls_bank_info-objkt.lv_index = sy-tabix.*      1.分发CLEAR:ls_msg,lv_type,lv_type1.IF ls_header-zzdest1 IS NOT INITIAL.lv_tgsys = ls_header-zzdest1.IF lv_tgsys NE 'SAP'.  "SAP  毋需推送 PERFORM frm_customer_to_other_system USING ls_header-bukrs ls_header-partnerlv_tgsysCHANGING lv_type lv_msg.ENDIF.ENDIF.IF ls_header-zzdest2 IS NOT INITIAL.lv_tgsys = ls_header-zzdest2.IF lv_tgsys NE 'SAP'.  "SAP  毋需推送 PERFORM frm_customer_to_other_system USING ls_header-bukrs ls_header-partnerlv_tgsysCHANGING lv_type1 lv_msg1.ENDIF.ENDIF.IF lv_type1 EQ 'E' OR lv_type EQ 'E'.DELETE lt_header_info INDEX lv_index.ENDIF.ENDLOOP.ENDLOOP.RETURN.ENDIF.ENDIF.*  校验就rollback 不走了LOOP AT it_header_info[] INTO ls_header WHERE process_type EQ 'V'.ROLLBACK WORK.RETURN.ENDLOOP.*  排除可能因客户创建失败的对应银行数据SORT lt_header_info BY partner bukrs.LOOP AT lt_bank_info INTO ls_bank.lv_index = sy-tabix.READ TABLE lt_header_info WITH KEY partner = ls_bank-partner bukrs = ls_bank-bukrs TRANSPORTING NO FIELDS BINARY SEARCH.IF sy-subrc NE 0.DELETE lt_bank_info INDEX lv_index.ENDIF.ENDLOOP.IF lt_header_info IS NOT INITIAL.*  银行数据IF lt_bank_info IS NOT INITIAL.CLEAR:lt_bank.
*      MOVE-CORRESPONDING lt_bank_info TO lt_bank.SORT lt_header_info BY partner process_type.LOOP AT lt_bank_info INTO ls_bank.CLEAR:ls_bank_info.MOVE-CORRESPONDING ls_bank TO ls_bank_info.ls_bank_info-objkt = ls_bank-partner.READ TABLE lt_header_info WITH KEY partner = ls_bank-partner process_type = 'C' TRANSPORTING NO FIELDS BINARY SEARCH.IF sy-subrc EQ 0.ls_bank_info-autor = sy-uname.ls_bank_info-cdat = sy-datum.ls_bank_info-ctime = sy-uzeit.ELSE.READ TABLE lt_header_info WITH KEY partner = ls_bank-partner process_type = 'U' TRANSPORTING NO FIELDS BINARY SEARCH.IF sy-subrc EQ 0.ls_bank_info-upnam = sy-uname.ls_bank_info-udat = sy-datum.ls_bank_info-utime = sy-uzeit.ENDIF.ENDIF.CALL FUNCTION 'IB_CONVERT_INTO_TIMESTAMP'EXPORTINGi_datlo     = sy-datumi_timlo     = sy-uzeiti_tzone     = sy-zonloIMPORTINGe_timestamp = ls_bank_info-timestamp.ls_bank_info-banks = ls_bank-land1.APPEND ls_bank_info  TO lt_bank.ENDLOOP.MODIFY zzt_bnka FROM TABLE lt_bank.ENDIF.*    BRANCH CODE
*    FITHA_BRNCH_T,FITHA_BRNCHLOOP AT lt_header_info INTO ls_header WHERE j_1tpbupl IS NOT INITIAL." AND land1 EQ 'TH'.SELECT SINGLE * INTO ls_brnchFROM fitha_brnchWHERE bp_nummr EQ ls_header-partnerAND bcode EQ ls_header-j_1tpbuplAND bukrs EQ ls_header-bukrsAND koart EQ 'D'.CHECK sy-subrc NE 0.CLEAR:ls_brnch,ls_brnch_d.ls_brnch-bcode = ls_header-j_1tpbupl.ls_brnch-bp_nummr = ls_header-partner.ls_brnch-bukrs = ls_header-bukrs.ls_brnch-koart = 'D'.APPEND ls_brnch TO lt_brnch.ls_brnch_d-bcode = ls_header-j_1tpbupl.ls_brnch_d-bp_nummr = ls_header-partner.ls_brnch_d-bukrs = ls_header-bukrs.ls_brnch_d-koart = 'D'.ls_brnch_d-spras = sy-langu.APPEND ls_brnch_d TO lt_brnch_d.ENDLOOP.IF lt_brnch IS NOT INITIAL.MODIFY fitha_brnch FROM TABLE lt_brnch.MODIFY fitha_brnch_t FROM TABLE lt_brnch_d.ENDIF.CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'EXPORTINGwait = 'X'    " Using the command `COMMIT AND WAIT`
*      IMPORTING
*       return =     " Return Messages. "数据库提交ELSE.   "没有执行成功的数据CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.ENDIF.ENDFUNCTION.

总结

银行信息如果不是自定义的 就需要把银行信息填入到API对应的结构中
以上

SAP ABAP 客户主数据的 查询-创建-修改-锁定 API或BAPI相关推荐

  1. SAP ABAP 供应商主数据的 查询-创建-修改-锁定 API或BAPI

    文章目录 前言 范例代码 总结 前言 采用BDC创建客商主数据复用性低,且时常发生错误,比如字段必输性调整造成报错等 现通过API或BAPI去查询,创建,修改,锁定 以下为实际做的一个RFC接口 范例 ...

  2. SAP ABAP 物料主数据的视图维护状态

    SAP ABAP 物料主数据的视图维护状态 引言: 物料主数据的视图维护状态会经常使用,是物料主数据批量创建/修改的逻辑路由. 关键字:SAP ABAP VPSTA PSTAT T132T 文章目录 ...

  3. SAP MM 物料主数据利润中心字段之修改

    SAP MM 物料主数据利润中心字段之修改 近日,收到业务部门报的一个问题,说是MM02去修改物料的利润中心字段值,系统报错说物料库存存在,不让修改. 笔者查询了该物料的库存,当期库存并不存在.MMB ...

  4. BP客户主数据信用数据批量修改

    S4 HANA中BP客户主数据信用数据批量修改 修改的关键性代码: LOOP AT gt_upload INTO gs_upload. *------------------------------- ...

  5. SAP ABAP TOOLS 在生产系统直接修改程序(ZABAP_SE38)

    SAP ABAP TOOLS 在生产系统直接修改程序(ZABAP_SE38) 引言: 这是一个潘多拉魔盒1. 关键字:SAP ABAP SE38 ZABAP_SE38 TOOLS 文章目录 SAP A ...

  6. SAP ABAP 根据物料工厂查询工作中心(ARBPL)的两种方式

    SAP ABAP 根据物料工厂查询工作中心(ARBPL)的两种方式 引言: 根据物料工厂查询工作中心的两种方式 关键字:SAP ABAP CR_WORKSTATION_READ ARBPL 工作中心 ...

  7. SAP ABAP 添加企业微信群机器人并调用 API 发送消息

    SAP ABAP 添加企业微信群机器人并调用 API 发送消息 引言: 这篇文章以我在个人开源项目"任务管理服务(ZTASK)"中的应用为例,通过讲述使用企业微信机器人实现任务的通 ...

  8. SAP C4C客户主数据重复检查和清洗实现

    首先在系统Business configuration里打开允许客户主数据merge的功能: 将数据清洗Data Cleansing工作中心分配给业务用户: 新建一个异步的主数据清洗工作: 我们要选择 ...

  9. SAP ABAP 数据字典教程 SE11:表、锁定对象、视图和结构 -03

    ABAP 数据字典教程 SE11:表.锁定对象.视图和结构 -03 什么是数据字典? 数据字典是信息管理系统中数据的中心信息源. 它的主要功能是支持数据定义(或"元数据")的创建和 ...

最新文章

  1. ECSHOP学习笔记
  2. SQL Server 2008的cross apply 和 outer apply
  3. 你的微服务实践还顺利吗?
  4. 关于中断处理程序中的关中断函数disable_irq和disable_irq_nosync
  5. SQL 四种连接:内连接、左外连接、右外连接、全连接--转载
  6. python代码可以内嵌在asp文件中_在IE中使用Python作为开发脚本(转)
  7. JavaScript常用工具类整理(总结版)
  8. 经典计算机实现量子逻辑门,量子计算机:对量子逻辑门的探讨
  9. 教你一招轻松入门python,不收藏等于错失了一个亿!
  10. springboot jsp只能在webapp_Spring Boot 项目访问JSP
  11. 深入理解Date对象
  12. 三局两胜还是五局三胜?
  13. C# 窗体半透明,控件不透明
  14. 深度学习自学(十):人脸检测android端-JNI调试调用底层检测识别库
  15. hdu 1561 树形dp+分组背包
  16. 尼奥智能陪伴机器人如何绑定设备_巴巴腾 智能陪护儿童机器人A3,为儿童专业定制的小伙伴...
  17. java编译软件 Eclipse 的安装与使用
  18. UE4实时渲染——渲染前和遮挡
  19. VS2017使用Visual Leak Detector
  20. 关于皓月GOM登录器配置器批量生成详细说明

热门文章

  1. 二手车价格预测——Task5 模型融合
  2. Win10实现局域网文件共享
  3. RTTI技术诞生的原因
  4. word标题不自动编号
  5. 【Vue全家桶】新一代的状态管理--Pinia
  6. mac上优秀的代码编辑软件Sublime Text 3
  7. vscode无环境联调
  8. 智能制造之机器视觉缺陷检测
  9. msgpack的使用
  10. 蒙特卡洛树搜索方法介绍——Q规划与Dyna-Q算法