BP批到函数
供应商;
FUNCTION z_rfc_oa_mm_supplier_add. *"---------------------------------------------------------------------- *"*"本地接口: *" IMPORTING *" VALUE(SUPPLIER) TYPE ZZDT_OA_ERP_SUPPLIER_ADD_REQ *" EXPORTING *" VALUE(ES_RETURN) TYPE ZZDT_OA_ERP_SUPPLIER_ADD_RESP *"---------------------------------------------------------------------- **initialize logger. It should be always on the top of the FUNCTION. /afl/log_init. **optional, you can specify at most 3 fields for search. /afl/set_custom_fields supplier-is_head-partner supplier-is_head-name_org1 supplier-is_head-bu_sort1. ************************Data Declarations************************** DATA: ls_return_map TYPE mdg_bs_bp_msgmap_t, lt_data TYPE cvis_ei_extern_t, lt_return TYPE bapiretm, ls_return TYPE bapireti, ls_retmsg TYPE LINE OF bapiretct, lv_text TYPE string, lt_errors TYPE STANDARD TABLE OF bapiret2, ls_errors TYPE bapiret2, ls_data_new TYPE REF TO data, lv_flag TYPE char1, lv_mess TYPE string, lv_msg TYPE string. DATA: ls_data LIKE LINE OF lt_data, ls_role TYPE bus_ei_bupa_roles, ls_relation TYPE burs_ei_extern, ls_company TYPE vmds_ei_company, ls_addr TYPE bus_ei_bupa_address, lt_phone TYPE bus_ei_bupa_telephone_t, lt_fax TYPE bus_ei_bupa_fax_t, lt_email TYPE bus_ei_bupa_smtp_t, lt_tax TYPE bus_ei_bupa_taxnumber_t, lt_ident TYPE bus_ei_bupa_identification_t, lt_bank TYPE bus_ei_bupa_bankdetail_t, * lt_tax1 TYPE vmds_ei_tax_ind_t, ls_purchasing_central TYPE vmds_ei_vmd_central, ls_zmmt001 TYPE zmmt001, lt_zmmt001 TYPE TABLE OF zmmt001. DATA: lv_guid TYPE guid_32, lv_pguid TYPE but000-partner_guid, lv_adguid TYPE but020-address_guid, lv_adrnr TYPE but020-addrnumber, lv_partner LIKE ls_data-partner-header-object_instance-bpartner, lv_task TYPE char1, lv_exist TYPE char1, lv_tel_number1 TYPE adr2-tel_number, lv_tel_number3 TYPE adr2-tel_number, lv_consnumber1 TYPE adr2-consnumber, lv_consnumber3 TYPE adr2-consnumber, lv_tel_del TYPE char1. DATA: lt_role_cat TYPE fsbp_tb003a_tty, lt_cvi_role_cat TYPE cvis_role_category_t, ls_cvi_role_cat TYPE cvis_role_category. DATA: ls_functions_st TYPE vmds_ei_functions, ls_functions_t TYPE vmds_ei_functions_t, ls_functions TYPE vmds_ei_vmd_functions, ls_purchasing_data_st TYPE vmds_ei_purchasing, ls_purchasing_data TYPE vmds_ei_vmd_purchasing, ls_company_code_st TYPE vmds_ei_company, ls_company_code TYPE vmds_ei_vmd_company. CLEAR: lv_pguid, lv_guid, lv_task, lv_partner. CLEAR: ls_data. REFRESH: lt_data. IF supplier-is_head-partner IS NOT INITIAL. lv_partner = supplier-is_head-partner. lv_partner = |{ lv_partner ALPHA = IN }|. SELECT SINGLE partner_guid INTO lv_pguid FROM but000 WHERE partner = lv_partner. IF sy-subrc = 0. lv_task = 'U'. ENDIF. ENDIF. IF lv_task = 'U'. ls_data-partner-header-object_task = 'U'. ls_data-partner-header-object_instance-bpartner = lv_partner. ls_data-partner-header-object_instance-bpartnerguid = lv_pguid. ELSE. ******************************Guid********************************* CALL METHOD cl_system_uuid=>if_system_uuid_static~create_uuid_c32 RECEIVING uuid = lv_guid. ******************************Create VENDOR********************** ls_data-partner-header-object_task = 'I'. ls_data-partner-header-object_instance-bpartnerguid = lv_guid. lv_pguid = lv_guid. ENDIF. ***************** Partner / Central data / common ***************** ls_data-partner-central_data-common-data-bp_control-category = '2'. "3group "2 Organization ls_data-partner-central_data-common-data-bp_control-grouping = supplier-is_head-bu_group. "Grouping ls_data-partner-central_data-common-data-bp_centraldata-searchterm1 = supplier-is_head-bu_sort1. ls_data-partner-central_data-common-data-bp_centraldata-searchterm2 = supplier-is_head-bu_sort2. ls_data-partner-central_data-common-data-bp_centraldata-centralblock = supplier-is_head-xblck. * ls_data-partner-central_data-common-data-bp_centraldata-title_key = SUPPLIER-is_head-anred. ls_data-partner-central_data-common-data-bp_centraldata-authorizationgroup = supplier-is_head-augrp. ls_data-partner-central_data-common-datax-bp_centraldata-searchterm1 = abap_true. ls_data-partner-central_data-common-datax-bp_centraldata-searchterm2 = abap_true. ls_data-partner-central_data-common-datax-bp_centraldata-centralblock = abap_true. * ls_data-partner-central_data-common-datax-bp_centraldata-title_key = abap_true. ls_data-partner-central_data-common-datax-bp_centraldata-authorizationgroup = abap_true. ls_data-partner-central_data-common-data-bp_organization-name1 = supplier-is_head-name_org1. * ls_data-partner-central_data-common-data-bp_organization-name2 = supplier-is_head-name_org2. ls_data-partner-central_data-common-datax-bp_organization-name1 = abap_true. * ls_data-partner-central_data-common-datax-bp_organization-name2 = abap_true. *****************Partner / Central data / Address ***************** CLEAR: ls_addr. CLEAR: lv_adguid, lv_adrnr. SELECT SINGLE address_guid addrnumber INTO ( lv_adguid, lv_adrnr ) FROM but020 WHERE partner = lv_partner. IF sy-subrc = 0. ls_addr-task = 'U'. ls_addr-data_key-guid = lv_adguid. ELSE. ls_addr-task = lv_task."'I'. ENDIF. ls_addr-data_key-operation = 'XXDFLT'. ls_addr-data-postal-data-extaddressnumber = supplier-is_head-adext. " 旧客商编码 ls_addr-data-postal-data-city = supplier-is_head-city1. ls_addr-data-postal-data-postl_cod1 = supplier-is_head-post_code1. ls_addr-data-postal-data-street = supplier-is_head-street. ls_addr-data-postal-data-country = supplier-is_head-land1. ls_addr-data-postal-data-region = supplier-is_head-bezei. ls_addr-data-postal-data-languiso = supplier-is_head-spras. ls_addr-data-postal-datax-extaddressnumber = abap_true. ls_addr-data-postal-datax-city = abap_true. ls_addr-data-postal-datax-postl_cod1 = abap_true. ls_addr-data-postal-datax-street = abap_true. ls_addr-data-postal-datax-country = abap_true. ls_addr-data-postal-datax-region = abap_true. ls_addr-data-postal-datax-langu_iso = abap_true. ***-------------------Telephone number--------------------------*** REFRESH: lt_phone. CLEAR: lv_tel_del, lv_tel_number1, lv_tel_number3, lv_consnumber1, lv_consnumber3. SELECT SINGLE tel_number consnumber INTO ( lv_tel_number1, lv_consnumber1 ) FROM adr2 WHERE addrnumber = lv_adrnr AND r3_user = '1'. SELECT SINGLE tel_number consnumber INTO ( lv_tel_number3, lv_consnumber3 ) FROM adr2 WHERE addrnumber = lv_adrnr AND r3_user = '3'. IF lv_tel_number1 IS INITIAL AND lv_tel_number3 IS INITIAL. IF supplier-is_head-tel_number <> ''. APPEND INITIAL LINE TO lt_phone ASSIGNING FIELD-SYMBOL(<ls_phone>). <ls_phone>-contact-task = 'I'. <ls_phone>-contact-data-telephone = supplier-is_head-tel_number. <ls_phone>-contact-data-consnumber = '001'. <ls_phone>-contact-data-r_3_user = '1'. <ls_phone>-contact-datax-telephone = abap_true. <ls_phone>-contact-datax-r_3_user = abap_true. <ls_phone>-contact-datax-consnumber = abap_true. UNASSIGN <ls_phone>. ENDIF. IF supplier-is_head-telf2 <> ''. APPEND INITIAL LINE TO lt_phone ASSIGNING <ls_phone>. <ls_phone>-contact-task = 'I'. <ls_phone>-contact-data-telephone = supplier-is_head-telf2. <ls_phone>-contact-data-consnumber = '002'. <ls_phone>-contact-data-r_3_user = '3'. <ls_phone>-contact-datax-telephone = abap_true. <ls_phone>-contact-datax-r_3_user = abap_true. <ls_phone>-contact-datax-consnumber = abap_true. UNASSIGN <ls_phone>. ENDIF. ELSEIF lv_tel_number1 IS NOT INITIAL AND lv_tel_number3 IS NOT INITIAL. IF supplier-is_head-tel_number <> ''. APPEND INITIAL LINE TO lt_phone ASSIGNING <ls_phone>. <ls_phone>-contact-task = 'U'. <ls_phone>-contact-data-telephone = supplier-is_head-tel_number. <ls_phone>-contact-data-consnumber = lv_consnumber1. <ls_phone>-contact-data-r_3_user = '1'. <ls_phone>-contact-datax-telephone = abap_true. <ls_phone>-contact-datax-r_3_user = abap_true. <ls_phone>-contact-datax-consnumber = abap_true. UNASSIGN <ls_phone>. * ELSE. * APPEND INITIAL LINE TO lt_phone ASSIGNING <ls_phone>. * <ls_phone>-contact-task = 'D'. * <ls_phone>-contact-data-consnumber = lv_consnumber1. * <ls_phone>-contact-data-r_3_user = '1'. * * <ls_phone>-contact-datax-r_3_user = abap_true. * <ls_phone>-contact-datax-consnumber = abap_true. * UNASSIGN <ls_phone>. ENDIF. IF supplier-is_head-telf2 <> ''. APPEND INITIAL LINE TO lt_phone ASSIGNING <ls_phone>. <ls_phone>-contact-task = 'U'. <ls_phone>-contact-data-telephone = supplier-is_head-telf2. <ls_phone>-contact-data-consnumber = lv_consnumber3. <ls_phone>-contact-data-r_3_user = '3'. <ls_phone>-contact-datax-telephone = abap_true. <ls_phone>-contact-datax-r_3_user = abap_true. <ls_phone>-contact-datax-consnumber = abap_true. UNASSIGN <ls_phone>. * ELSE. * APPEND INITIAL LINE TO lt_phone ASSIGNING <ls_phone>. * <ls_phone>-contact-task = 'D'. * <ls_phone>-contact-data-consnumber = lv_consnumber3. * <ls_phone>-contact-data-r_3_user = '3'. * * <ls_phone>-contact-datax-r_3_user = abap_true. * <ls_phone>-contact-datax-consnumber = abap_true. * UNASSIGN <ls_phone>. ENDIF. ELSE. ""先删除再重新写入,否则第二个电话 002 写不进去 IF lv_tel_number1 <> ''. APPEND INITIAL LINE TO lt_phone ASSIGNING <ls_phone>. <ls_phone>-contact-task = 'D'. <ls_phone>-contact-data-consnumber = lv_consnumber1. <ls_phone>-contact-data-r_3_user = '1'. <ls_phone>-contact-datax-r_3_user = abap_true. <ls_phone>-contact-datax-consnumber = abap_true. UNASSIGN <ls_phone>. ENDIF. IF lv_tel_number3 <> ''. APPEND INITIAL LINE TO lt_phone ASSIGNING <ls_phone>. <ls_phone>-contact-task = 'D'. <ls_phone>-contact-data-consnumber = lv_consnumber3. <ls_phone>-contact-data-r_3_user = '3'. <ls_phone>-contact-datax-r_3_user = abap_true. <ls_phone>-contact-datax-consnumber = abap_true. UNASSIGN <ls_phone>. ENDIF. IF supplier-is_head-tel_number <> ''. APPEND INITIAL LINE TO lt_phone ASSIGNING <ls_phone>. <ls_phone>-contact-task = 'I'. <ls_phone>-contact-data-telephone = supplier-is_head-tel_number. <ls_phone>-contact-data-consnumber = '001'. <ls_phone>-contact-data-r_3_user = '1'. <ls_phone>-contact-datax-telephone = abap_true. <ls_phone>-contact-datax-r_3_user = abap_true. <ls_phone>-contact-datax-consnumber = abap_true. UNASSIGN <ls_phone>. ENDIF. IF supplier-is_head-telf2 <> ''. APPEND INITIAL LINE TO lt_phone ASSIGNING <ls_phone>. <ls_phone>-contact-task = 'I'. <ls_phone>-contact-data-telephone = supplier-is_head-telf2. <ls_phone>-contact-data-consnumber = '002'. <ls_phone>-contact-data-r_3_user = '3'. <ls_phone>-contact-datax-telephone = abap_true. <ls_phone>-contact-datax-r_3_user = abap_true. <ls_phone>-contact-datax-consnumber = abap_true. UNASSIGN <ls_phone>. ENDIF. ENDIF. ****---------------------- fax number------------------------*** IF supplier-is_head-fax_number IS NOT INITIAL. APPEND INITIAL LINE TO lt_fax ASSIGNING FIELD-SYMBOL(<ls_fax>). SELECT SINGLE telfx FROM lfa1 INTO @DATA(lv_telfx) WHERE lifnr = @lv_partner. IF sy-subrc = 0. <ls_fax>-contact-task = 'U'. ELSE. <ls_fax>-contact-task = 'I'. ENDIF. <ls_fax>-contact-data-fax = supplier-is_head-fax_number. <ls_fax>-contact-data-r_3_user = 'X'. <ls_fax>-contact-datax-fax = abap_true. <ls_fax>-contact-datax-r_3_user = abap_true. <ls_fax>-currently_valid = abap_true. ENDIF. ****--------------------------Email------------------------*** IF supplier-is_head-smtp_addr IS NOT INITIAL. APPEND INITIAL LINE TO lt_email ASSIGNING FIELD-SYMBOL(<ls_email>). SELECT COUNT(*) FROM adr6 WHERE addrnumber = lv_adrnr. IF sy-subrc = 0. <ls_email>-contact-task = 'U'. ELSE. <ls_email>-contact-task = 'I'. ENDIF. <ls_email>-contact-data-e_mail = supplier-is_head-smtp_addr. <ls_email>-contact-datax-e_mail = abap_true. <ls_email>-currently_valid = abap_true. ENDIF. ls_addr-data-communication-phone-phone = lt_phone. ls_addr-data-communication-fax-fax = lt_fax. ls_addr-data-communication-smtp-smtp = lt_email. ls_addr-currently_valid = abap_false. APPEND ls_addr TO ls_data-partner-central_data-address-addresses. **--------------------------Tax----------------------------*** REFRESH: lt_tax. IF supplier-is_head-taxnumxl <> ''. APPEND INITIAL LINE TO lt_tax ASSIGNING FIELD-SYMBOL(<ls_tax>). SELECT SINGLE @abap_true INTO @lv_exist FROM dfkkbptaxnum WHERE partner = @lv_partner AND taxtype = @supplier-is_head-taxtype. IF lv_exist = abap_true. <ls_tax>-task = 'U'. ELSE. <ls_tax>-task = 'I'. ENDIF. <ls_tax>-data_key-taxtype = supplier-is_head-taxtype. "'IN2'. <ls_tax>-data_key-taxnumber = supplier-is_head-taxnumxl. "'12345678956'. <ls_tax>-data_key-taxnumxl = supplier-is_head-taxnumxl. "'12345678956'. ls_data-partner-central_data-taxnumber-taxnumbers = lt_tax. UNASSIGN <ls_tax>. ENDIF. ***--------------------------Ident Number----------------------------*** REFRESH: lt_ident. IF supplier-is_head-type <> '' AND supplier-is_head-idnumber <> ''. APPEND INITIAL LINE TO lt_ident ASSIGNING FIELD-SYMBOL(<ls_ident>). SELECT SINGLE @abap_true INTO @lv_exist FROM but0id WHERE partner = @lv_partner AND type = @supplier-is_head-type." AND idnumber = @supplier-is_head-idnumber. IF lv_exist = abap_true. <ls_ident>-task = 'U'. ELSE. <ls_ident>-task = 'I'. ENDIF. <ls_ident>-data_key-identificationcategory = supplier-is_head-type. "ZBUP01 <ls_ident>-data_key-identificationnumber = supplier-is_head-idnumber. "'12345678956'. ls_data-partner-central_data-ident_number-ident_numbers = lt_ident. UNASSIGN <ls_ident>. ENDIF. ***--------------------------Bank----------------------------*** REFRESH: lt_bank. DATA: lv_bkvid(4) TYPE n. SELECT MAX( bkvid ) FROM but0bk INTO @DATA(lv_bkvid_c) WHERE partner = @lv_partner. IF sy-subrc <> 0. lv_bkvid = 0. ELSE. lv_bkvid = lv_bkvid_c. ENDIF. IF lv_task NE 'U'. LOOP AT supplier-it_bank INTO DATA(ls_bank). IF ls_bank IS INITIAL. CONTINUE. ENDIF. APPEND INITIAL LINE TO lt_bank ASSIGNING FIELD-SYMBOL(<ls_bank>). * SELECT SINGLE bkvid INTO @ls_bank-bkvid FROM but0bk * WHERE partner = @lv_partner AND bankn = @ls_bank-bankn. * IF sy-subrc = 0. * <ls_bank>-task = 'U'. * <ls_bank>-data_key = ls_bank-bkvid. * ELSE. * <ls_bank>-task = 'I'. * lv_bkvid = lv_bkvid + 1. * <ls_bank>-data_key = lv_bkvid. * ENDIF. IF ls_bank-bkvid(1) EQ 'D'. <ls_bank>-task = 'D'. * <ls_bank>-data_key = ls_bank-bkvid+1. <ls_bank>-data_key = ls_bank-bkvid+1(4). ELSE. SELECT SINGLE bkvid INTO @ls_bank-bkvid FROM but0bk WHERE partner = @lv_partner AND bkvid = @ls_bank-bkvid. IF sy-subrc = 0. <ls_bank>-task = 'U'. <ls_bank>-data_key = ls_bank-bkvid. ELSE. <ls_bank>-task = 'I'. lv_bkvid = lv_bkvid + 1. <ls_bank>-data_key = lv_bkvid. ENDIF. ENDIF. <ls_bank>-data-bank_ctry = ls_bank-banks. <ls_bank>-datax-bank_ctry = 'X'. <ls_bank>-data-bank_key = ls_bank-bankl. <ls_bank>-datax-bank_key = 'X'. <ls_bank>-data-bank_acct = ls_bank-bankn. <ls_bank>-datax-bank_acct = 'X'. <ls_bank>-data-bank_ref = ls_bank-bkref. <ls_bank>-datax-bank_ref = 'X'. <ls_bank>-data-accountholder = ls_bank-koinh. <ls_bank>-datax-accountholder = 'X'. <ls_bank>-data-bankaccountname = ls_bank-accname. <ls_bank>-datax-bankaccountname = 'X'. ls_data-partner-central_data-bankdetail-bankdetails = lt_bank. UNASSIGN <ls_bank>. ENDLOOP. ENDIF. ********************* Partner / Central data / role**************** CLEAR: ls_role. SELECT SINGLE mandt INTO @DATA(lv_mandt) FROM but100 WHERE partner = @lv_partner AND rltyp = 'FLVN01'. IF sy-subrc NE 0. ls_role-task = 'I'. ls_role-data_key = 'FLVN01'. ls_role-data-rolecategory = 'FLVN01'. ls_role-data-valid_from = sy-datum. ls_role-data-valid_to = '99991231'. ls_role-currently_valid = abap_true. ls_role-datax-valid_from = abap_true. ls_role-datax-valid_to = abap_true. APPEND ls_role TO ls_data-partner-central_data-role-roles. ls_data-partner-central_data-role-current_state = abap_false. ENDIF. SELECT SINGLE mandt INTO lv_mandt FROM but100 WHERE partner = lv_partner AND rltyp = 'FLVN00'. IF sy-subrc NE 0. CLEAR: ls_role. ls_role-task = 'I'. ls_role-data_key = 'FLVN00'. ls_role-data-rolecategory = 'FLVN00'. ls_role-data-valid_from = sy-datum. ls_role-data-valid_to = '99991231'. ls_role-currently_valid = abap_true. ls_role-datax-valid_from = abap_true. ls_role-datax-valid_to = abap_true. APPEND ls_role TO ls_data-partner-central_data-role-roles. ls_data-partner-central_data-role-current_state = abap_false. ENDIF. * IF supplier-is_head-bu_group = 'Z002'. * SELECT SINGLE mandt INTO lv_mandt FROM but100 * WHERE partner = lv_partner * AND rltyp = 'UKM000'. * IF sy-subrc NE 0. * CLEAR: ls_role. * ls_role-task = 'I'. * ls_role-data_key = 'UKM000'. * ls_role-data-rolecategory = 'UKM000'. * ls_role-data-valid_from = sy-datum. * ls_role-data-valid_to = '99991231'. * ls_role-currently_valid = abap_true. * * ls_role-datax-valid_from = abap_true. * ls_role-datax-valid_to = abap_true. * * APPEND ls_role TO ls_data-partner-central_data-role-roles. * ls_data-partner-central_data-role-current_state = abap_false. * ENDIF. * ENDIF. *******************Partner relation / header ********************** * IF ls_ukm000-partner1 IS NOT INITIAL AND ls_ukm000-dftval IS NOT INITIAL. * CLEAR: ls_relation. * ls_relation-header-object_instance-partner1-bpartnerguid = lv_pguid. * ls_relation-header-object_instance-partner2-bpartner = ls_ukm000-partner1. * ls_relation-header-object_instance-partner2-bpartner = |{ ls_relation-header-object_instance-partner2-bpartner ALPHA = IN }|. * ls_relation-header-object_instance-relat_category = 'UKM001'. * ls_relation-header-object_instance-difftypevalue = ls_ukm000-dftval. * CLEAR: lv_exist. * SELECT SINGLE @abap_true INTO @lv_exist * FROM but050 * WHERE partner1 = @lv_partner * AND partner2 = @ls_ukm000-partner1. * IF lv_exist = abap_true. * ls_relation-header-object_task = 'U'. * ELSE. * ls_relation-header-object_task = 'I'. * ENDIF. * APPEND ls_relation TO ls_data-partner_relation. * ENDIF. ************************* VENDOR / Header *********************** SELECT SINGLE vendor INTO @DATA(lv_lifnr) FROM cvi_vend_link WHERE partner_guid = @lv_pguid. IF sy-subrc = 0. ls_data-vendor-header-object_task = 'U'. ls_data-vendor-header-object_instance-lifnr = lv_lifnr. ELSE. ls_data-vendor-header-object_task = 'I'. ls_data-ensure_create-create_vendor = abap_true. ENDIF. ******************** VENDOR / Company data ********************** LOOP AT supplier-it_company INTO DATA(ls_comp). IF ls_comp IS INITIAL. CONTINUE. ENDIF. CLEAR: ls_company. * SELECT SINGLE @abap_true INTO @lv_exist FROM knb1 WHERE LIFNR = @<fs_data>-LIFNR AND bukrs = @<fs_data>-bukrs. * IF lv_exist = abap_true. * ls_company-task = 'U'. * ELSE. ls_company-task = 'M'. * ENDIF. ls_company-data_key = ls_comp-bukrs. "'6000' . " company code ls_company-data-akont = ls_comp-akont. "'0000031020'. ls_company-data-zterm = ls_comp-zterm. "'0001'. " terms of payment ls_company-data-altkn = ls_comp-altkn. ls_company-data-reprf = ls_comp-reprf. ls_company-data-sperr = ls_comp-sperr. ls_company-datax-akont = abap_true. ls_company-datax-zterm = abap_true. ls_company-datax-altkn = abap_true. ls_company-datax-reprf = abap_true. ls_company-datax-sperr = abap_true. APPEND ls_company TO ls_data-vendor-company_data-company. ENDLOOP. *************PURCHASING ORG AND DIST & DIVISION MANDATORY FIELDS******** CLEAR: ls_purchasing_data. LOOP AT supplier-it_purchase INTO DATA(ls_purchasing). IF ls_purchasing IS INITIAL. CONTINUE. ENDIF. CLEAR: ls_purchasing_data_st. ls_purchasing_data_st-task = 'M'. ls_purchasing_data_st-data_key-ekorg = ls_purchasing-ekorg. "''ZTM1'. ls_purchasing_data_st-data-ekgrp = ls_purchasing-ekgrp. ls_purchasing_data_st-data-waers = ls_purchasing-waers. "'USD'. ls_purchasing_data_st-data-webre = ls_purchasing-webre. ls_purchasing_data_st-data-lfabc = ls_purchasing-lfabc. ls_purchasing_data_st-data-zterm = ls_purchasing-zterm. ls_purchasing_data_st-data-sperm = ls_purchasing-sperm. ls_purchasing_data_st-datax-ekgrp = abap_true. ls_purchasing_data_st-datax-waers = abap_true. ls_purchasing_data_st-datax-webre = abap_true. ls_purchasing_data_st-datax-lfabc = abap_true. ls_purchasing_data_st-datax-zterm = abap_true. ls_purchasing_data_st-datax-sperm = abap_true. ***--------------------------Partner Roles----------------------------*** * IF ls_purchasing-parvw IS NOT INITIAL AND ls_purchasing-kunn2 IS NOT INITIAL. * CLEAR: ls_purchasing_data_st, ls_purchasing_data. * ls_purchasing_data_st-task = 'M'. * ls_purchasing_data_st-data_key-vkorg = ls_purchasing-vkorg. "''ZTM1'. * ls_purchasing_data_st-data_key-vtweg = ls_purchasing-vtweg. "'TM'. * ls_purchasing_data_st-data_key-spart = ls_purchasing-spart. "'TM'. * * CLEAR: ls_functions,ls_functions_st. * REFRESH: ls_functions_t. * ls_functions_st-task = 'I'. * ls_functions_st-data_key-parvw = ls_purchasing-parvw. * ls_functions_st-data-partner = ls_purchasing-kunn2. * ls_functions_st-data-partner = |{ ls_functions_st-data-partner ALPHA = IN }|. * ls_functions_st-datax-partner = abap_true. * APPEND ls_functions_st TO ls_functions_t. * * ls_functions-functions = ls_functions_t. * ENDIF. * ls_purchasing_data_st-functions = ls_functions. APPEND ls_purchasing_data_st TO ls_purchasing_data-purchasing. ENDLOOP. ls_data-vendor-purchasing_data = ls_purchasing_data. *********************** GL Account ledger ************************* * ls_company_code_st-task = 'I'. * APPEND ls_company_code_st TO ls_company_code-company. **********************Account Group Assignemnt ****************** * IF ls_purchasing-taxkd <> ''. * REFRESH: lt_tax1. * APPEND INITIAL LINE TO lt_tax1 ASSIGNING FIELD-SYMBOL(<fs_tax1>). * <fs_tax1>-task = 'M'. * <fs_tax1>-data_key-aland = 'CN'. * <fs_tax1>-data_key-tatyp = 'MWST'. * <fs_tax1>-data-taxkd = ls_purchasing-taxkd. "'1'. * <fs_tax1>-datax-taxkd = abap_true. * ls_data-vendor-central_data-tax_ind-tax_ind = lt_tax1. * UNASSIGN <fs_tax1>. * ENDIF. CLEAR: ls_purchasing_central. ls_purchasing_central-data-zzcczt = supplier-is_head-zzcczt."供应商状态 ls_purchasing_central-datax-zzcczt = abap_true. ls_data-vendor-central_data-central = ls_purchasing_central. ****************************** *********************** End of PURCHASING data ************************* *****************Finally fill the main data structure************** APPEND ls_data TO lt_data. ************************** validating BP data ******************** CALL METHOD cl_md_bp_maintain=>validate_single EXPORTING i_data = ls_data "lt_data * iv_suppress_taxjur_check = 'X' IMPORTING et_return_map = ls_return_map. "lt_return. *****************************Creating BP ************************** IF ls_return_map IS INITIAL. CALL METHOD cl_md_bp_maintain=>maintain EXPORTING i_data = lt_data IMPORTING e_return = lt_return. READ TABLE lt_return INTO ls_return INDEX 1. IF sy-subrc = 0. DATA(lt_mess) = ls_return-object_msg. ENDIF. CLEAR lv_flag. LOOP AT lt_mess INTO DATA(lw_mess) WHERE type CA 'EA'. lv_flag = 'X'. CLEAR: lv_msg. MESSAGE ID lw_mess-id TYPE lw_mess-type NUMBER lw_mess-number WITH lw_mess-message_v1 lw_mess-message_v2 lw_mess-message_v3 lw_mess-message_v4 INTO lv_msg. CONCATENATE lv_mess lv_msg INTO lv_mess. ENDLOOP. IF lv_flag = 'X'. es_return-type = 'E'. es_return-mess = 'Error:' && lv_mess. es_return-partner = lv_partner. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. ELSE. ***************************** Commit BAPI ************************* CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. " Use of Command `COMMIT AND WAIT` "ADD BY ZY 由于银行的问题添加代码 IF lv_partner IS NOT INITIAL AND lv_task EQ 'U'. WAIT UP TO 1 SECONDS. PERFORM craet_bank TABLES supplier-it_bank USING lv_partner. ENDIF. "AD BY ZY es_return-type = 'S'. es_return-mess = 'OK'. es_return-partner = lv_partner. IF lv_partner IS INITIAL. DO 200000 TIMES. SELECT SINGLE b~lifnr FROM but000 AS a JOIN lfa1 AS b ON a~partner = b~lifnr INTO es_return-partner WHERE a~partner_guid = lv_pguid. IF sy-subrc = 0. EXIT. ENDIF. WAIT UP TO 1 SECONDS. ENDDO. ENDIF. * IF supplier-is_head-zzcczt is not INITIAL."供应商状态 * UPDATE lfa1 set zzcczt = supplier-is_head-zzcczt * WHERE lifnr = es_return-partner. * COMMIT WORK. * ENDIF. REFRESH: lt_zmmt001. LOOP AT supplier-it_001 INTO DATA(ls_001). CLEAR: ls_zmmt001. MOVE-CORRESPONDING ls_001 TO ls_zmmt001. SELECT SINGLE zce_name FROM zmmt004 INTO ls_zmmt001-zce_name WHERE zce_num = ls_zmmt001-zce_name. ls_zmmt001-lifnr = es_return-partner. APPEND ls_zmmt001 TO lt_zmmt001. ENDLOOP. IF lt_zmmt001[] IS NOT INITIAL. MODIFY zmmt001 FROM TABLE lt_zmmt001. COMMIT WORK. ENDIF. ENDIF. ELSE. CLEAR: lv_mess. LOOP AT ls_return_map INTO DATA(ls_check_return). lv_flag = 'X'. CONCATENATE lv_mess ls_check_return-message INTO lv_mess. ENDLOOP. IF lv_flag = 'X'. es_return-type = 'E'. es_return-mess = 'Error:' && lv_mess. es_return-partner = lv_partner. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. ENDIF. ENDIF. es_return-partner = |{ es_return-partner ALPHA = OUT }|. CONDENSE es_return-partner NO-GAPS. **optional, you can save a status code and message text for search. /afl/set_status es_return-type es_return-mess. **save logs. It should be always on the bottom of the FUNCTION. /afl/save. ENDFUNCTION.
客户:
FUNCTION z_rfc_sd_customer_maintain. *"---------------------------------------------------------------------- *"*"本地接口: *" IMPORTING *" VALUE(CUSTOMER) TYPE ZZDT_OA_ERP_CUSTOMER_ADD_MOD_6 *" EXPORTING *" VALUE(ES_RETURN) TYPE ZZDT_OA_ERP_CUSTOMER_ADD_MOD_4 *"---------------------------------------------------------------------- **initialize logger. It should be always on the top of the FUNCTION. /afl/log_init. **optional, you can specify at most 3 fields for search. /afl/set_custom_fields customer-is_head-kunnr customer-is_head-name1 customer-is_head-sortl. DATA: l_datum TYPE sy-datum, l_uzeit TYPE sy-uzeit. l_datum = sy-datum. l_uzeit = sy-uzeit. ************************Data Declarations************************** DATA: ls_return_map TYPE mdg_bs_bp_msgmap_t, lt_data TYPE cvis_ei_extern_t, lt_return TYPE bapiretm, ls_return TYPE bapireti, ls_retmsg TYPE LINE OF bapiretct, lv_text TYPE string, lt_errors TYPE STANDARD TABLE OF bapiret2, ls_errors TYPE bapiret2, ls_data_new TYPE REF TO data, lv_flag TYPE char1, lv_mess TYPE string, lv_msg TYPE string. DATA: ls_data LIKE LINE OF lt_data, ls_role TYPE bus_ei_bupa_roles, ls_relation TYPE burs_ei_extern, ls_company TYPE cmds_ei_company, ls_addr TYPE bus_ei_bupa_address, lt_phone TYPE bus_ei_bupa_telephone_t, lt_fax TYPE bus_ei_bupa_fax_t, lt_email TYPE bus_ei_bupa_smtp_t, lt_tax TYPE bus_ei_bupa_taxnumber_t, lt_ident TYPE bus_ei_bupa_identification_t, lt_tax1 TYPE cmds_ei_tax_ind_t, ls_sales_central TYPE cmds_ei_cmd_central, ls_segment TYPE ukm_ei_bp_cms_sgm. DATA: lv_guid TYPE guid_32, lv_pguid TYPE but000-partner_guid, lv_adguid TYPE but020-address_guid, lv_adrnr TYPE but020-addrnumber, lv_partner LIKE ls_data-partner-header-object_instance-bpartner, lv_task TYPE char1, lv_tel_number1 TYPE adr2-tel_number, lv_tel_number3 TYPE adr2-tel_number, lv_consnumber1 TYPE adr2-consnumber, lv_consnumber3 TYPE adr2-consnumber, lv_exist TYPE char1. DATA: lt_role_cat TYPE fsbp_tb003a_tty, lt_cvi_role_cat TYPE cvis_role_category_t, ls_cvi_role_cat TYPE cvis_role_category. DATA: ls_functions_st TYPE cmds_ei_functions, ls_functions_t TYPE cmds_ei_functions_t, ls_functions TYPE cmds_ei_cmd_functions, ls_sales_data_st TYPE cmds_ei_sales, ls_sales_data TYPE cmds_ei_cmd_sales, ls_company_code_st TYPE cmds_ei_company, ls_company_code TYPE cmds_ei_cmd_company. CLEAR: lv_pguid, lv_guid, lv_task, lv_partner. CLEAR: ls_data. REFRESH: lt_data. IF customer-is_head-kunnr IS NOT INITIAL. lv_partner = customer-is_head-kunnr. lv_partner = |{ lv_partner ALPHA = IN }|. SELECT SINGLE partner_guid INTO lv_pguid FROM but000 WHERE partner = lv_partner. IF sy-subrc = 0. lv_task = 'U'. ENDIF. ENDIF. IF customer-is_head-sortl = ''. es_return-type = 'E'. es_return-mess = 'Error: 搜索项 1/2 必填'. es_return-partner = customer-is_head-kunnr. lv_flag = 'X'. ENDIF. IF lv_flag = ''. IF lv_task = 'U'. ls_data-partner-header-object_task = 'U'. ls_data-partner-header-object_instance-bpartner = lv_partner. ls_data-partner-header-object_instance-bpartnerguid = lv_pguid. ELSE. ******************************Guid********************************* CALL METHOD cl_system_uuid=>if_system_uuid_static~create_uuid_c32 RECEIVING uuid = lv_guid. ******************************Create customer********************** ls_data-partner-header-object_task = 'I'. ls_data-partner-header-object_instance-bpartnerguid = lv_guid. lv_pguid = lv_guid. ENDIF. ***************** Partner / Central data / common ***************** ls_data-partner-central_data-common-data-bp_control-category = '2'. "3group "2 Organization ls_data-partner-central_data-common-data-bp_control-grouping = customer-is_head-kukla. "Grouping ls_data-partner-central_data-common-data-bp_centraldata-searchterm1 = customer-is_head-sortl. * ls_data-partner-central_data-common-data-bp_centraldata-title_key = customer-is_head-anred. ls_data-partner-central_data-common-data-bp_centraldata-authorizationgroup = customer-is_head-augrp. ls_data-partner-central_data-common-datax-bp_centraldata-searchterm1 = abap_true. * ls_data-partner-central_data-common-datax-bp_centraldata-title_key = abap_true. ls_data-partner-central_data-common-datax-bp_centraldata-authorizationgroup = abap_true. ls_data-partner-central_data-common-data-bp_organization-name1 = customer-is_head-name1. ls_data-partner-central_data-common-data-bp_organization-name2 = customer-is_head-name2. ls_data-partner-central_data-common-datax-bp_organization-name1 = abap_true. ls_data-partner-central_data-common-datax-bp_organization-name2 = abap_true. *****************Partner / Central data / Address ***************** CLEAR: ls_addr. CLEAR: lv_adguid, lv_adrnr. SELECT SINGLE address_guid addrnumber INTO ( lv_adguid, lv_adrnr ) FROM but020 WHERE partner = lv_partner. IF sy-subrc = 0. ls_addr-task = 'U'. ls_addr-data_key-guid = lv_adguid. ELSE. ls_addr-task = lv_task."'I'. ENDIF. ls_addr-data_key-operation = 'XXDFLT'. ls_addr-data-postal-data-city = customer-is_head-ort01. ls_addr-data-postal-data-postl_cod1 = customer-is_head-pstlz. ls_addr-data-postal-data-street = customer-is_head-stras. ls_addr-data-postal-data-country = customer-is_head-land1. ls_addr-data-postal-data-region = customer-is_head-regio. ls_addr-data-postal-data-languiso = customer-is_head-spras. ls_addr-data-postal-datax-city = abap_true. ls_addr-data-postal-datax-postl_cod1 = abap_true. ls_addr-data-postal-datax-street = abap_true. ls_addr-data-postal-datax-country = abap_true. ls_addr-data-postal-datax-region = abap_true. ls_addr-data-postal-datax-langu_iso = abap_true. ***-------------------Telephone number--------------------------*** * REFRESH: lt_phone. * IF customer-is_head-telf1 <> ''. * APPEND INITIAL LINE TO lt_phone ASSIGNING FIELD-SYMBOL(<ls_phone>). * CLEAR: lv_exist. * SELECT SINGLE @abap_true INTO @lv_exist FROM adr2 WHERE addrnumber = @lv_adrnr AND consnumber = '001'. * IF lv_exist = abap_true. * <ls_phone>-contact-task = 'D'."先删除再重新写入,否则第二个电话 002 写不进去 * <ls_phone>-contact-data-consnumber = '001'. * * <ls_phone>-contact-datax-consnumber = abap_true. * <ls_phone>-currently_valid = abap_false. * UNASSIGN <ls_phone>. * APPEND INITIAL LINE TO lt_phone ASSIGNING <ls_phone>. * ENDIF. * <ls_phone>-contact-task = 'I'. * <ls_phone>-contact-data-telephone = customer-is_head-telf1. * <ls_phone>-contact-data-r_3_user = '1'. * <ls_phone>-contact-data-home_flag = 'X'. * <ls_phone>-contact-data-consnumber = '001'. * * <ls_phone>-contact-datax-telephone = abap_true. * <ls_phone>-contact-datax-r_3_user = abap_true. * <ls_phone>-contact-datax-home_flag = abap_true. * <ls_phone>-contact-datax-consnumber = abap_true. * <ls_phone>-currently_valid = abap_false. * UNASSIGN <ls_phone>. * ENDIF. * IF customer-is_head-telf2 <> ''. * APPEND INITIAL LINE TO lt_phone ASSIGNING <ls_phone>. * CLEAR: lv_exist. * SELECT SINGLE @abap_true INTO @lv_exist FROM adr2 WHERE addrnumber = @lv_adrnr AND consnumber = '002'. * IF lv_exist = abap_true. * <ls_phone>-contact-task = 'D'."先删除再重新写入,否则第二个电话 002 写不进去 * <ls_phone>-contact-data-consnumber = '002'. * * <ls_phone>-contact-datax-consnumber = abap_true. * <ls_phone>-currently_valid = abap_false. * UNASSIGN <ls_phone>. * APPEND INITIAL LINE TO lt_phone ASSIGNING <ls_phone>. * ENDIF. * <ls_phone>-contact-task = 'I'. * <ls_phone>-contact-data-telephone = customer-is_head-telf2. * <ls_phone>-contact-data-r_3_user = '3'. * <ls_phone>-contact-data-consnumber = '002'. * * <ls_phone>-contact-datax-telephone = abap_true. * <ls_phone>-contact-datax-r_3_user = abap_true. * <ls_phone>-contact-datax-consnumber = abap_true. * <ls_phone>-currently_valid = abap_false. * UNASSIGN <ls_phone>. * ENDIF. REFRESH: lt_phone. CLEAR: lv_tel_number1, lv_tel_number3, lv_consnumber1, lv_consnumber3. SELECT SINGLE tel_number consnumber INTO ( lv_tel_number1, lv_consnumber1 ) FROM adr2 WHERE addrnumber = lv_adrnr AND r3_user = '1'. SELECT SINGLE tel_number consnumber INTO ( lv_tel_number3, lv_consnumber3 ) FROM adr2 WHERE addrnumber = lv_adrnr AND r3_user = '3'. IF lv_tel_number1 IS INITIAL AND lv_tel_number3 IS INITIAL. IF customer-is_head-telf1 <> ''. APPEND INITIAL LINE TO lt_phone ASSIGNING FIELD-SYMBOL(<ls_phone>). <ls_phone>-contact-task = 'I'. <ls_phone>-contact-data-telephone = customer-is_head-telf1. <ls_phone>-contact-data-consnumber = '001'. <ls_phone>-contact-data-r_3_user = '1'. <ls_phone>-contact-datax-telephone = abap_true. <ls_phone>-contact-datax-r_3_user = abap_true. <ls_phone>-contact-datax-consnumber = abap_true. UNASSIGN <ls_phone>. ENDIF. IF customer-is_head-telf2 <> ''. APPEND INITIAL LINE TO lt_phone ASSIGNING <ls_phone>. <ls_phone>-contact-task = 'I'. <ls_phone>-contact-data-telephone = customer-is_head-telf2. <ls_phone>-contact-data-consnumber = '002'. <ls_phone>-contact-data-r_3_user = '3'. <ls_phone>-contact-datax-telephone = abap_true. <ls_phone>-contact-datax-r_3_user = abap_true. <ls_phone>-contact-datax-consnumber = abap_true. UNASSIGN <ls_phone>. ENDIF. ELSEIF lv_tel_number1 IS NOT INITIAL AND lv_tel_number3 IS NOT INITIAL. IF customer-is_head-telf1 <> ''. APPEND INITIAL LINE TO lt_phone ASSIGNING <ls_phone>. <ls_phone>-contact-task = 'U'. <ls_phone>-contact-data-telephone = customer-is_head-telf1. <ls_phone>-contact-data-consnumber = lv_consnumber1. <ls_phone>-contact-data-r_3_user = '1'. <ls_phone>-contact-datax-telephone = abap_true. <ls_phone>-contact-datax-r_3_user = abap_true. <ls_phone>-contact-datax-consnumber = abap_true. UNASSIGN <ls_phone>. * ELSE. * APPEND INITIAL LINE TO lt_phone ASSIGNING <ls_phone>. * <ls_phone>-contact-task = 'D'. * <ls_phone>-contact-data-consnumber = lv_consnumber1. * <ls_phone>-contact-data-r_3_user = '1'. * * <ls_phone>-contact-datax-r_3_user = abap_true. * <ls_phone>-contact-datax-consnumber = abap_true. * UNASSIGN <ls_phone>. ENDIF. IF customer-is_head-telf2 <> ''. APPEND INITIAL LINE TO lt_phone ASSIGNING <ls_phone>. <ls_phone>-contact-task = 'U'. <ls_phone>-contact-data-telephone = customer-is_head-telf2. <ls_phone>-contact-data-consnumber = lv_consnumber3. <ls_phone>-contact-data-r_3_user = '3'. <ls_phone>-contact-datax-telephone = abap_true. <ls_phone>-contact-datax-r_3_user = abap_true. <ls_phone>-contact-datax-consnumber = abap_true. UNASSIGN <ls_phone>. * ELSE. * APPEND INITIAL LINE TO lt_phone ASSIGNING <ls_phone>. * <ls_phone>-contact-task = 'D'. * <ls_phone>-contact-data-consnumber = lv_consnumber3. * <ls_phone>-contact-data-r_3_user = '3'. * * <ls_phone>-contact-datax-r_3_user = abap_true. * <ls_phone>-contact-datax-consnumber = abap_true. * UNASSIGN <ls_phone>. ENDIF. ELSE. ""先删除再重新写入,否则第二个电话 002 写不进去 IF lv_tel_number1 <> ''. APPEND INITIAL LINE TO lt_phone ASSIGNING <ls_phone>. <ls_phone>-contact-task = 'D'. <ls_phone>-contact-data-consnumber = lv_consnumber1. <ls_phone>-contact-data-r_3_user = '1'. <ls_phone>-contact-datax-r_3_user = abap_true. <ls_phone>-contact-datax-consnumber = abap_true. UNASSIGN <ls_phone>. ENDIF. IF lv_tel_number3 <> ''. APPEND INITIAL LINE TO lt_phone ASSIGNING <ls_phone>. <ls_phone>-contact-task = 'D'. <ls_phone>-contact-data-consnumber = lv_consnumber3. <ls_phone>-contact-data-r_3_user = '3'. <ls_phone>-contact-datax-r_3_user = abap_true. <ls_phone>-contact-datax-consnumber = abap_true. UNASSIGN <ls_phone>. ENDIF. IF customer-is_head-telf1 <> ''. APPEND INITIAL LINE TO lt_phone ASSIGNING <ls_phone>. <ls_phone>-contact-task = 'I'. <ls_phone>-contact-data-telephone = customer-is_head-telf1. <ls_phone>-contact-data-consnumber = '001'. <ls_phone>-contact-data-r_3_user = '1'. <ls_phone>-contact-datax-telephone = abap_true. <ls_phone>-contact-datax-r_3_user = abap_true. <ls_phone>-contact-datax-consnumber = abap_true. UNASSIGN <ls_phone>. ENDIF. IF customer-is_head-telf2 <> ''. APPEND INITIAL LINE TO lt_phone ASSIGNING <ls_phone>. <ls_phone>-contact-task = 'I'. <ls_phone>-contact-data-telephone = customer-is_head-telf2. <ls_phone>-contact-data-consnumber = '002'. <ls_phone>-contact-data-r_3_user = '3'. <ls_phone>-contact-datax-telephone = abap_true. <ls_phone>-contact-datax-r_3_user = abap_true. <ls_phone>-contact-datax-consnumber = abap_true. UNASSIGN <ls_phone>. ENDIF. ENDIF. ****---------------------- fax number------------------------*** * APPEND INITIAL LINE TO lt_fax ASSIGNING FIELD-SYMBOL(<ls_fax>). * <ls_fax>-contact-task = 'I'. * <ls_fax>-contact-data-fax = <fs_data>-fax. * <ls_fax>-contact-data-country = 'IN'. * <ls_fax>-contact-data-countryiso = '40'. * <ls_fax>-contact-data-r_3_user = 'X'. * <ls_fax>-contact-data-consnumber = '001'. * * <ls_fax>-contact-datax-country = abap_true. * <ls_fax>-contact-datax-fax = abap_true. * <ls_fax>-contact-datax-countryiso = abap_true. * <ls_fax>-contact-datax-r_3_user = abap_true. * <ls_fax>-contact-datax-consnumber = abap_true. * <ls_fax>-currently_valid = abap_true. * ****--------------------------Email------------------------*** * APPEND INITIAL LINE TO lt_email ASSIGNING FIELD-SYMBOL(<ls_email>). * <ls_email>-contact-task = 'I'. * <ls_email>-contact-data-e_mail = <fs_data>-email. * <ls_email>-contact-data-consnumber = '001'. * * <ls_email>-contact-datax-e_mail = abap_true. * <ls_email>-contact-datax-consnumber = abap_true. * <ls_email>-currently_valid = abap_true. ls_addr-data-communication-phone-phone = lt_phone. * ls_addr-data-communication-fax-fax = lt_fax. * ls_addr-data-communication-smtp-smtp = lt_email. ls_addr-currently_valid = abap_false. APPEND ls_addr TO ls_data-partner-central_data-address-addresses. **--------------------------Tax----------------------------*** REFRESH: lt_tax. IF customer-is_head-taxnum <> ''. APPEND INITIAL LINE TO lt_tax ASSIGNING FIELD-SYMBOL(<ls_tax>). SELECT SINGLE @abap_true INTO @lv_exist FROM dfkkbptaxnum WHERE partner = @lv_partner AND taxtype = @customer-is_head-taxtype. IF lv_exist = abap_true. <ls_tax>-task = 'U'. ELSE. <ls_tax>-task = 'I'. ENDIF. <ls_tax>-data_key-taxtype = customer-is_head-taxtype. "'IN2'. <ls_tax>-data_key-taxnumber = customer-is_head-taxnum. "'12345678956'. <ls_tax>-data_key-taxnumxl = customer-is_head-taxnum. "'12345678956'. ls_data-partner-central_data-taxnumber-taxnumbers = lt_tax. UNASSIGN <ls_tax>. ENDIF. ***--------------------------Ident Number----------------------------*** REFRESH: lt_ident. IF customer-is_head-type <> '' AND customer-is_head-idnumber <> ''. APPEND INITIAL LINE TO lt_ident ASSIGNING FIELD-SYMBOL(<ls_ident>). SELECT SINGLE @abap_true INTO @lv_exist FROM but0id WHERE partner = @lv_partner AND type = @customer-is_head-type AND idnumber = @customer-is_head-idnumber. IF lv_exist = abap_true. <ls_ident>-task = 'U'. ELSE. <ls_ident>-task = 'I'. ENDIF. <ls_ident>-data_key-identificationcategory = customer-is_head-type. "ZBUP01 <ls_ident>-data_key-identificationnumber = customer-is_head-idnumber. "'12345678956'. ls_data-partner-central_data-ident_number-ident_numbers = lt_ident. UNASSIGN <ls_ident>. ENDIF. ********************* Partner / Central data / role**************** CLEAR: ls_role. SELECT SINGLE mandt INTO @DATA(lv_mandt) FROM but100 WHERE partner = @lv_partner AND rltyp = 'FLCU01'. IF sy-subrc NE 0. ls_role-task = 'I'. ls_role-data_key = 'FLCU01'. ls_role-data-rolecategory = 'FLCU01'. ls_role-data-valid_from = sy-datum. ls_role-data-valid_to = '99991231'. ls_role-currently_valid = abap_true. ls_role-datax-valid_from = abap_true. ls_role-datax-valid_to = abap_true. APPEND ls_role TO ls_data-partner-central_data-role-roles. ls_data-partner-central_data-role-current_state = abap_false. ENDIF. SELECT SINGLE mandt INTO lv_mandt FROM but100 WHERE partner = lv_partner AND rltyp = 'FLCU00'. IF sy-subrc NE 0. CLEAR: ls_role. ls_role-task = 'I'. ls_role-data_key = 'FLCU00'. ls_role-data-rolecategory = 'FLCU00'. ls_role-data-valid_from = sy-datum. ls_role-data-valid_to = '99991231'. ls_role-currently_valid = abap_true. ls_role-datax-valid_from = abap_true. ls_role-datax-valid_to = abap_true. APPEND ls_role TO ls_data-partner-central_data-role-roles. ls_data-partner-central_data-role-current_state = abap_false. ENDIF. IF customer-is_head-kukla = 'Z002'. SELECT SINGLE mandt INTO lv_mandt FROM but100 WHERE partner = lv_partner AND rltyp = 'UKM000'. IF sy-subrc NE 0. CLEAR: ls_role. ls_role-task = 'I'. ls_role-data_key = 'UKM000'. ls_role-data-rolecategory = 'UKM000'. ls_role-data-valid_from = sy-datum. ls_role-data-valid_to = '99991231'. ls_role-currently_valid = abap_true. ls_role-datax-valid_from = abap_true. ls_role-datax-valid_to = abap_true. APPEND ls_role TO ls_data-partner-central_data-role-roles. ls_data-partner-central_data-role-current_state = abap_false. ENDIF. ENDIF. *******************Partner / UKMBP_DATA ********************** LOOP AT customer-it_ukm000 INTO DATA(ls_ukm000). IF ls_ukm000-limit_rule IS NOT INITIAL. IF sy-tabix = 1. ls_data-partner-ukmbp_data-profile-data-limit_rule = ls_ukm000-limit_rule. ls_data-partner-ukmbp_data-profile-data-check_rule = ls_ukm000-check_rule. ls_data-partner-ukmbp_data-profile-data-risk_class = ls_ukm000-risk_class. ls_data-partner-ukmbp_data-profile-data-credit_group = '1'. ls_data-partner-ukmbp_data-profile-datax-limit_rule = abap_true. ls_data-partner-ukmbp_data-profile-datax-check_rule = abap_true. ls_data-partner-ukmbp_data-profile-datax-risk_class = abap_true. ls_data-partner-ukmbp_data-profile-datax-credit_group = abap_true. ENDIF. CLEAR: ls_segment. CLEAR: lv_exist. SELECT SINGLE @abap_true FROM ukmbp_cms_sgm INTO @lv_exist WHERE partner = @lv_partner AND credit_sgmnt = @ls_ukm000-credit_sgmnt. IF lv_exist = abap_true. ls_segment-task = 'U'. ELSE. ls_segment-task = 'I'. ENDIF. ls_segment-data_key-partner = lv_partner. ls_segment-data_key-credit_sgmnt = ls_ukm000-credit_sgmnt. ls_segment-data-credit_limit = ls_ukm000-credit_limit. ls_segment-datax-credit_limit = abap_true. APPEND ls_segment TO ls_data-partner-ukmbp_data-segments-segments. ENDIF. *******************Partner relation / header ********************** IF ls_ukm000-partner1 IS NOT INITIAL AND ls_ukm000-dftval IS NOT INITIAL. CLEAR: ls_relation. ls_relation-header-object_instance-partner1-bpartnerguid = lv_pguid. ls_relation-header-object_instance-partner2-bpartner = ls_ukm000-partner1. ls_relation-header-object_instance-partner2-bpartner = |{ ls_relation-header-object_instance-partner2-bpartner ALPHA = IN }|. ls_relation-header-object_instance-relat_category = 'UKM001'. ls_relation-header-object_instance-difftypevalue = ls_ukm000-dftval. CLEAR: lv_exist. SELECT SINGLE @abap_true INTO @lv_exist FROM but050 WHERE partner1 = @lv_partner AND partner2 = @ls_ukm000-partner1. IF lv_exist = abap_true. ls_relation-header-object_task = 'U'. ELSE. ls_relation-header-object_task = 'I'. ENDIF. APPEND ls_relation TO ls_data-partner_relation. ENDIF. ENDLOOP. ************************* Customer / Header *********************** SELECT SINGLE customer INTO @DATA(lv_kunnr) FROM cvi_cust_link WHERE partner_guid = @lv_pguid. IF sy-subrc = 0. ls_data-customer-header-object_task = 'U'. ls_data-customer-header-object_instance-kunnr = lv_kunnr. ELSE. ls_data-customer-header-object_task = 'I'. ls_data-ensure_create-create_customer = abap_true. ENDIF. ******************** Customer / Company data ********************** LOOP AT customer-it_company INTO DATA(ls_comp). CLEAR: ls_company. * SELECT SINGLE @abap_true INTO @lv_exist FROM knb1 WHERE kunnr = @<fs_data>-kunnr AND bukrs = @<fs_data>-bukrs. * IF lv_exist = abap_true. * ls_company-task = 'U'. * ELSE. ls_company-task = 'M'. * ENDIF. ls_company-data_key = ls_comp-bukrs. "'6000' . " company code ls_company-data-akont = ls_comp-akont. "'0000031020'. ls_company-data-zterm = ls_comp-zterm. "'0001'. " terms of payment ls_company-data-altkn = ls_comp-altkn. ls_company-datax-akont = abap_true. ls_company-datax-zterm = abap_true. ls_company-datax-altkn = abap_true. APPEND ls_company TO ls_data-customer-company_data-company. ENDLOOP. *************SALES ORG AND DIST & DIVISION MANDATORY FIELDS******** LOOP AT customer-it_sales INTO DATA(ls_sales). CLEAR: ls_sales_data_st, ls_sales_data. ls_sales_data_st-task = 'M'. ls_sales_data_st-data_key-vkorg = ls_sales-vkorg. "''ZTM1'. ls_sales_data_st-data_key-vtweg = ls_sales-vtweg. "'TM'. ls_sales_data_st-data_key-spart = ls_sales-spart. "'TM'. ls_sales_data_st-data-bzirk = ls_sales-bzirk. ls_sales_data_st-data-vkbur = ls_sales-vkbur. ls_sales_data_st-data-vkgrp = ls_sales-vkgrp. ls_sales_data_st-data-inco1 = ls_sales-inco1. "'CIF'. ls_sales_data_st-data-inco2_l = ls_sales-inco2_l. "'Costs,Insurance&Freight'. ls_sales_data_st-data-waers = ls_sales-waers. "'USD'. ls_sales_data_st-data-kalks = ls_sales-kalks. ls_sales_data_st-data-vwerk = ls_sales-vwerk. ls_sales_data_st-data-vsbed = ls_sales-vsbed. ls_sales_data_st-data-zterm = ls_sales-zterm. ls_sales_data_st-data-ktgrd = ls_sales-ktgrd. ls_sales_data_st-datax-bzirk = abap_true. ls_sales_data_st-datax-vkbur = abap_true. ls_sales_data_st-datax-vkgrp = abap_true. ls_sales_data_st-datax-inco1 = abap_true. ls_sales_data_st-datax-inco2_l = abap_true. ls_sales_data_st-datax-waers = abap_true. ls_sales_data_st-datax-kalks = abap_true. ls_sales_data_st-datax-vwerk = abap_true. ls_sales_data_st-datax-vsbed = abap_true. ls_sales_data_st-datax-zterm = abap_true. ls_sales_data_st-datax-ktgrd = abap_true. **--------------------------Partner Roles----------------------------*** REFRESH: ls_functions_t. LOOP AT ls_sales-knvp INTO DATA(ls_knvp). CLEAR: ls_functions,ls_functions_st. ls_functions_st-task = 'M'. ls_functions_st-data_key-parvw = ls_knvp-parvw. CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT' EXPORTING input = ls_knvp-parvw IMPORTING output = ls_functions_st-data_key-parvw. ls_functions_st-data-partner = ls_knvp-kunn2. ls_functions_st-data-partner = |{ ls_functions_st-data-partner ALPHA = IN }|. ls_functions_st-datax-partner = abap_true. APPEND ls_functions_st TO ls_functions_t. ENDLOOP. ls_functions-functions = ls_functions_t. ls_sales_data_st-functions = ls_functions. APPEND ls_sales_data_st TO ls_sales_data-sales. ENDLOOP. ls_data-customer-sales_data = ls_sales_data. *********************** GL Account ledger ************************* * ls_company_code_st-task = 'I'. * APPEND ls_company_code_st TO ls_company_code-company. **********************Account Group Assignemnt ****************** IF ls_sales-taxkd <> ''. REFRESH: lt_tax1. APPEND INITIAL LINE TO lt_tax1 ASSIGNING FIELD-SYMBOL(<fs_tax1>). <fs_tax1>-task = 'M'. <fs_tax1>-data_key-aland = 'CN'. <fs_tax1>-data_key-tatyp = 'MWST'. <fs_tax1>-data-taxkd = ls_sales-taxkd. "'1'. <fs_tax1>-datax-taxkd = abap_true. ls_data-customer-central_data-tax_ind-tax_ind = lt_tax1. UNASSIGN <fs_tax1>. ENDIF. CLEAR: ls_sales_central. * ls_sales_central-data-zzu8bm = customer-is_head-zzu8bm. ls_sales_central-data-zzjkhbm = customer-is_head-zzjkhbm. ls_sales_central-data-zzbasj = customer-is_head-zzbasj. ls_sales_central-data-zzkhlx = customer-is_head-zzkhlx. ls_sales_central-data-zzkhdj = customer-is_head-zzkhdj. ls_sales_central-data-zzzyss = customer-is_head-zzzyss. ls_sales_central-data-zzgszt = customer-is_head-zzgszt. ls_sales_central-data-zzkplx = customer-is_head-zzkplx. ls_sales_central-data-zzkpmc = customer-is_head-zzkpmc. ls_sales_central-data-zzkpsh = customer-is_head-zzkpsh. ls_sales_central-data-zzkpdz = customer-is_head-zzkpdz. ls_sales_central-data-zzkpdh = customer-is_head-zzkpdh. ls_sales_central-data-zzkpkhh = customer-is_head-zzkpkhh. ls_sales_central-data-zzkpzh = customer-is_head-zzkpzh. * ls_sales_central-datax-zzu8bm = abap_true. ls_sales_central-datax-zzjkhbm = abap_true. ls_sales_central-datax-zzbasj = abap_true. ls_sales_central-datax-zzkhlx = abap_true. ls_sales_central-datax-zzkhdj = abap_true. ls_sales_central-datax-zzzyss = abap_true. ls_sales_central-datax-zzgszt = abap_true. ls_sales_central-datax-zzkplx = abap_true. ls_sales_central-datax-zzkpmc = abap_true. ls_sales_central-datax-zzkpsh = abap_true. ls_sales_central-datax-zzkpdz = abap_true. ls_sales_central-datax-zzkpdh = abap_true. ls_sales_central-datax-zzkpkhh = abap_true. ls_sales_central-datax-zzkpzh = abap_true. ls_data-customer-central_data-central = ls_sales_central. *********************** End of sales data ************************* *****************Finally fill the main data structure************** APPEND ls_data TO lt_data. ************************** validating BP data ******************** CALL METHOD cl_md_bp_maintain=>validate_single EXPORTING i_data = ls_data "lt_data * iv_suppress_taxjur_check = 'X' IMPORTING et_return_map = ls_return_map. "lt_return. *****************************Creating BP ************************** IF ls_return_map IS INITIAL. CALL METHOD cl_md_bp_maintain=>maintain EXPORTING i_data = lt_data IMPORTING e_return = lt_return. READ TABLE lt_return INTO ls_return INDEX 1. IF sy-subrc = 0. DATA(lt_mess) = ls_return-object_msg. ENDIF. CLEAR lv_flag. LOOP AT lt_mess INTO DATA(lw_mess) WHERE type CA 'EA'. lv_flag = 'X'. CLEAR: lv_msg. MESSAGE ID lw_mess-id TYPE lw_mess-type NUMBER lw_mess-number WITH lw_mess-message_v1 lw_mess-message_v2 lw_mess-message_v3 lw_mess-message_v4 INTO lv_msg. CONCATENATE lv_mess lv_msg INTO lv_mess. ENDLOOP. IF lv_flag = 'X'. es_return-type = 'E'. es_return-mess = 'Error:' && lv_mess. es_return-partner = lv_partner. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. ELSE. ***************************** Commit BAPI ************************* CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. " Use of Command `COMMIT AND WAIT` es_return-type = 'S'. es_return-mess = 'OK'. es_return-partner = lv_partner. IF lv_partner IS INITIAL. DO 200000 TIMES. SELECT SINGLE b~kunnr FROM but000 AS a JOIN kna1 AS b ON a~partner = b~kunnr INTO es_return-partner WHERE a~partner_guid = lv_pguid. IF sy-subrc = 0. EXIT. ENDIF. WAIT UP TO 1 SECONDS. ENDDO. ENDIF. ENDIF. ELSE. CLEAR: lv_mess. LOOP AT ls_return_map INTO DATA(ls_check_return). lv_flag = 'X'. CONCATENATE lv_mess ls_check_return-message INTO lv_mess. ENDLOOP. IF lv_flag = 'X'. es_return-type = 'E'. es_return-mess = 'Error:' && lv_mess. es_return-partner = lv_partner. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. ENDIF. ENDIF. ENDIF. es_return-partner = |{ es_return-partner ALPHA = OUT }|. CONDENSE es_return-partner NO-GAPS. **optional, you can save a status code and message text for search. /afl/set_status es_return-type es_return-mess. **save logs. It should be always on the bottom of the FUNCTION. /afl/save. ENDFUNCTION.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)