S4 BP 更新

FUNCTION zmdm_customer_s4. *"---------------------------------------------------------------------- *"*"本地接口: *" IMPORTING *" VALUE(I_BASIC) TYPE ZZMDMS042 *" TABLES *" ACC_TAB TYPE ZZMDMT019 *" SALE_TAB TYPE ZZMDMT020 *" T_KNBK TYPE ZZMDMT043 *" PART_TAB TYPE ZZMDMT021 *" EXTEND_RES_TAB STRUCTURE ZZMDMS022 *"---------------------------------------------------------------------- DATA: lt_data TYPE cvis_ei_extern_t, ls_data TYPE cvis_ei_extern, ls_bpinput TYPE ty_head, ls_but000 TYPE but000, lt_return TYPE bapiretm, lv_message TYPE string, lv_sybrc TYPE sy-subrc. DATA: lwa_part_tab TYPE zzmdms021. DATA: lt_sale_tab TYPE zzmdmt020 WITH HEADER LINE. DATA: lt_knvp_2 TYPE TABLE OF knvp, lwa_knvp_2 TYPE knvp. CLEAR: gv_bpguid ,gv_kunnr ,gv_bpnum, gv_task. **清除接口传的空数据 DELETE sale_tab WHERE vkorg = ''. DELETE acc_tab WHERE bukrs = ''. DELETE part_tab WHERE parvw = ''. ls_bpinput = i_basic. ls_bpinput-land1 = 'CN'. * Ls_bpinput-spras = sy-langu. IF ls_bpinput-kunnr IS INITIAL. gv_task = 'I' . "创建 ELSE. ls_bpinput-kunnr = |{ ls_bpinput-kunnr ALPHA = IN }|. gv_kunnr = ls_bpinput-kunnr. gv_bpnum = ls_bpinput-kunnr. SELECT SINGLE a~partner_guid b~partner INTO ( gv_bpguid ,gv_bpnum ) FROM cvi_cust_link AS a INNER JOIN but000 AS b ON a~partner_guid = b~partner_guid WHERE a~customer = gv_kunnr. IF sy-subrc <> 0 . * IF ls_bpinput-ktokd = 'Z002' OR * ls_bpinput-ktokd = 'Z001' OR * ls_bpinput-ktokd = 'Z005' . gv_task = 'I' . "创建 * ELSE. * extend_res_tab[] = VALUE #( BASE extend_res_tab[] ( kunnr = gv_kunnr * zkunnr = |{ gv_kunnr ALPHA = OUT }| * msg_type = 'E' * message = '不存在该客户,无法修改' ) ). * ENDIF . ELSE. gv_task = 'U' . "修改 ENDIF. IF sale_tab[] IS NOT INITIAL. CLEAR:lt_sale_tab,lt_sale_tab[]. LOOP AT sale_tab. lt_sale_tab-kunnr = |{ sale_tab-kunnr ALPHA = IN }|. lt_sale_tab-vkorg = sale_tab-vkorg."销售组织 lt_sale_tab-vtweg = sale_tab-vtweg."分销渠道 lt_sale_tab-spart = sale_tab-spart."产品组 APPEND lt_sale_tab. CLEAR lt_sale_tab. ENDLOOP. CLEAR:lt_knvp_2,lwa_knvp_2. SELECT * INTO CORRESPONDING FIELDS OF TABLE lt_knvp_2 FROM knvp FOR ALL ENTRIES IN lt_sale_tab WHERE kunnr = lt_sale_tab-kunnr "客户编号 AND vkorg = lt_sale_tab-vkorg "销售组织 AND vtweg = lt_sale_tab-vtweg "分销渠道 AND spart = lt_sale_tab-spart "产品组 AND parvw = 'Z1'. LOOP AT lt_knvp_2 INTO lwa_knvp_2. lwa_part_tab-kunnr = lwa_knvp_2-kunnr ." 客户编号 lwa_part_tab-vkorg = lwa_knvp_2-vkorg." 销售组织 lwa_part_tab-vtweg = lwa_knvp_2-vtweg." 分销渠道 lwa_part_tab-spart = lwa_knvp_2-spart ." 产品组 lwa_part_tab-parvw = lwa_knvp_2-parvw ." 合作伙伴功能 lwa_part_tab-parza = lwa_knvp_2-parza." 合作伙伴计数器 lwa_part_tab-kunn2 = lwa_knvp_2-kunn2." 业务伙伴的客户号 APPEND lwa_part_tab TO part_tab. CLEAR lwa_part_tab. ENDLOOP. ENDIF. ENDIF. LOOP AT part_tab INTO lwa_part_tab WHERE kunn2 <> '' . lwa_part_tab-kunn2 = |{ lwa_part_tab-kunn2 ALPHA = IN }|. SELECT COUNT(*) FROM cvi_cust_link AS a WHERE a~customer = lwa_part_tab-kunn2. * IF sy-subrc <> 0 . * extend_res_tab[] = VALUE #( BASE extend_res_tab[] ( kunnr = lwa_part_tab-kunn2 * zkunnr = |{ lwa_part_tab-kunn2 ALPHA = OUT }| * msg_type = 'E' * message = '不存在该合作伙伴,无法使用' ) ). * ELSE. MODIFY part_tab FROM lwa_part_tab. * ENDIF . ENDLOOP. IF extend_res_tab[] IS NOT INITIAL . RETURN . ENDIF . PERFORM frm_build_cus_partdata TABLES t_knbk extend_res_tab[] USING ls_bpinput CHANGING ls_data . IF extend_res_tab[] IS NOT INITIAL . RETURN . ENDIF . PERFORM frm_build_customer_data TABLES acc_tab[] sale_tab[] part_tab[] extend_res_tab[] USING ls_bpinput CHANGING ls_data . IF extend_res_tab[] IS NOT INITIAL . RETURN . ENDIF . APPEND ls_data TO lt_data. CALL FUNCTION 'CVI_EI_INBOUND_MAIN' EXPORTING i_data = lt_data IMPORTING e_return = lt_return. LOOP AT lt_return INTO DATA(ls_return). SORT ls_return-object_msg BY type id number message . DELETE ADJACENT DUPLICATES FROM ls_return-object_msg COMPARING type id number message . LOOP AT ls_return-object_msg INTO DATA(ls_mes) WHERE type = 'E' OR type = 'A'. lv_message = lv_message && ls_mes-message. ENDLOOP. ENDLOOP. IF lv_message IS INITIAL. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. CLEAR lv_sybrc. IF gv_task = 'I' . IF gv_kunnr IS INITIAL . SELECT SINGLE customer INTO gv_kunnr FROM cvi_cust_link WHERE partner_guid = gv_bpguid. ENDIF . lv_message = '客户创建成功' . ELSE. lv_message = '客户修改成功' . ENDIF . extend_res_tab[] = VALUE #( BASE extend_res_tab[] ( kunnr = gv_kunnr zkunnr = |{ gv_kunnr ALPHA = OUT }| msg_type = 'S' message = lv_message ) ). DATA lw_customer TYPE zzsdt038 . DATA lt_customer TYPE TABLE OF zzsdt038 . CLEAR:lt_customer[] ,lw_customer. lw_customer-kunnr = gv_kunnr . "客户编号 lw_customer-name1 = i_basic-name1. "客户名称 lw_customer-zzfxqd = i_basic-zzfxqd. "主分销渠道 lw_customer-regio = i_basic-regio. "省 lw_customer-ort01 = i_basic-ort01. "市 lw_customer-ort02 = i_basic-ort02. "区 lw_customer-zfl1 = i_basic-zfl1. "经营模式 lw_customer-zfl2 = i_basic-zfl2. "部门 lw_customer-zfl = i_basic-zfl. "一级渠道 lw_customer-zxsdq = i_basic-zxsdq. "销售大区(编码) lw_customer-zxssq = i_basic-zxssq. "销售省区(编码) lw_customer-zzarea = i_basic-zzarea. "区域市场 lw_customer-zzarea_t = i_basic-zzarea_t. "区域市场描述 lw_customer-zzarea2 = i_basic-zzarea2. "二级区域市场 lw_customer-zzarea2_t = i_basic-zzarea2_t. "二级区域市场描述 lw_customer-zxsdq_t = i_basic-zxsdq_t."销售大区描述 lw_customer-zxssq_t = i_basic-zxssq_t."销售省区描述 lw_customer-zzfxqd_t = i_basic-zzfxqd_t."主分销渠道描述 lw_customer-zfl3 = i_basic-zfl3."子渠道 "add--hjl--20231217-- APPEND lw_customer TO lt_customer. CLEAR lw_customer. MODIFY zzsdt038 FROM TABLE lt_customer. IF sy-subrc = 0. COMMIT WORK AND WAIT. ENDIF. DATA ls_kna1 TYPE kna1 . SELECT SINGLE * INTO ls_kna1 FROM kna1 WHERE kunnr = gv_kunnr . IF sy-subrc = 0. UPDATE kna1 SET datlt = i_basic-extension1 telbx = i_basic-extension2 WHERE kunnr = gv_kunnr. UPDATE adrc SET extension1 = i_basic-extension1 extension2 = i_basic-extension2 WHERE addrnumber = ls_kna1-adrnr . COMMIT WORK AND WAIT . ENDIF . ELSE. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. lv_sybrc = 4. IF gv_task = 'I' . "创建 lv_message = '客户创建失败:' && lv_message . ELSE. lv_message = '客户修改失败:' && lv_message. ENDIF . extend_res_tab[] = VALUE #( BASE extend_res_tab[] ( kunnr = i_basic-kunnr zkunnr = |{ i_basic-kunnr ALPHA = OUT }| msg_type = 'E' message = lv_message ) ). ENDIF . **3 写入WS LOG PERFORM frm_call_method28 TABLES extend_res_tab. ENDFUNCTION.

posted on 2026-02-03 11:12  加西亚1986  阅读(2)  评论(0)    收藏  举报

导航