SAP BP主数据维护BAPI CVI_EI_INBOUND_MAIN(转)
SAP BP主数据维护BAPI CVI_EI_INBOUND_MAIN_sap bp bapi-CSDN博客
近期有创建BP供应商主数据的需求,想起上次写这个批导还是2018年,当时的我面对这个BAPI还是抗拒的,因为算是相对来说比较复杂的一类BAPI了,当时网上各种搜索,缝缝补补,勉强实现了当时的功能,后来再也没碰到过这个批导的需求,直到最近,于是想偷懒找一些参考代码拿过来改一改,不过发现找到的代码都不太能满足我的需求,要么或多或少都有一些问题,要么写法不规范,要么调用了一些额外的不需要的函数,于是自己从头开始写了一次调用函数。
在此之前,先分享一下目前可以创建供应商客户的一些方式:
- RFC_CVI_EI_INBOUND_MAIN
SAP已不推荐使用,已经成为过时函数,虽然还可以使用,但是风险需要自行承担。
- BAPI_BUPA_CREATE_FROM_DATA
其他信息都要调用对应的BAPI进行更新,不够便捷。
- CMD_EI_API=>MAINTAIN_BAPI
只能创建客户。
- VMD_EI_API=>MAINTAIN_BAPI
只能创建供应商。
- CL_MD_BP_MAINTAIN=>MAINTAIN
SAP推荐使用的封装类。
- CVI_EI_INBOUND_MAIN
SAP推荐使用的函数模块。

本例使用的参考代码为使用的方式为:CVI_EI_INBOUND_MAIN,封装类的参数和该函数类似。
以下代码可以同时进行以下功能:
供应商创建及变更
- 供应商公司代码视图创建修改及扩充
- 供应商采购组织视图创建修改及扩充
- 供应商税码创建修改及扩充
- 客户创建及变更
- 客户公司代码视图创建修改及扩充
- 客户销售组织视图创建修改及扩充
- 客户销项税创建修改及扩充
未实现的功能可以自己参照代码进行补充,基本上前台的所有信息都可以一次性通过该函数进行维护,不需要额外调用BAPI去补充一些信息。
完整源码如下:
*&---------------------------------------------------------------------* *& Form frm_bapi_vendor_bp *&---------------------------------------------------------------------* *& Call BAPI to maintain Business Partners *&---------------------------------------------------------------------* *& --> us_req *& <-- cs_resp *&---------------------------------------------------------------------* FORM frm_bapi_vendor_bp USING us_req TYPE zprmmsbpi001_in CHANGING cs_resp TYPE zprbcsrest_out. CONSTANTS: lc_task_i TYPE bus_ei_object_task VALUE 'I', lc_task_u TYPE bus_ei_object_task VALUE 'U', lc_task_m TYPE bus_ei_object_task VALUE 'M', lc_roles_zflvn0 TYPE bu_partnerrole VALUE 'ZFLVN0', lc_roles_zflvn1 TYPE bu_partnerrole VALUE 'ZFLVN1', lc_roles_zflcu0 TYPE bu_partnerrole VALUE 'ZFLCU0', lc_roles_zflcu1 TYPE bu_partnerrole VALUE 'ZFLCU1', lc_phone_type_3 TYPE ad_flgmob VALUE '3', lc_phone_type_1 TYPE ad_flgmob VALUE '1', lc_na TYPE char2 VALUE 'N', lc_err_type TYPE char3 VALUE 'EAX', lc_colon TYPE char1 VALUE ':'. CONSTANTS: lc_parvw_pi TYPE parvw VALUE 'PI', lc_parvw_oa TYPE parvw VALUE 'OA', lc_parvw_vn TYPE parvw VALUE 'VN', lc_parvw_sp TYPE parvw VALUE 'SP', lc_parvw_bp TYPE parvw VALUE 'BP', lc_parvw_py TYPE parvw VALUE 'PY', lc_parvw_sh TYPE parvw VALUE 'SH'. * Bapi parameters DATA: lt_data TYPE cvis_ei_extern_t, ls_data TYPE cvis_ei_extern, lt_return TYPE bapiretm, ls_return TYPE bapireti, lv_partnerno TYPE but000-partner. * Business partner type DATA: ls_partner TYPE bus_ei_extern, ls_customer TYPE cmds_ei_extern, ls_vendor TYPE vmds_ei_extern. * Partner basic data DATA: ls_header TYPE bus_ei_header, ls_central_data TYPE bus_ei_central_data. * Partner basic data details DATA: ls_common TYPE bus_ei_bupa_central, ls_communication TYPE bus_ei_communication, * Roles data ls_role TYPE bus_ei_roles, lt_roles TYPE bus_ei_bupa_roles_t, ls_roles TYPE bus_ei_bupa_roles, * Address data ls_address TYPE bus_ei_address, lt_bupa_address TYPE bus_ei_bupa_address_t, ls_bupa_address TYPE bus_ei_bupa_address, * Bank data ls_bankdetail TYPE bus_ei_bankdetail, lt_bupa_bankdetail TYPE bus_ei_bupa_bankdetail_t, ls_bupa_bankdetail TYPE bus_ei_bupa_bankdetail, * Tax data ls_taxnumber TYPE bus_ei_taxnumber, lt_bupa_taxnumber TYPE bus_ei_bupa_taxnumber_t, ls_bupa_taxnumber TYPE bus_ei_bupa_taxnumber, * Phone data ls_phone TYPE bus_ei_tel_data, lt_bupa_phone TYPE bus_ei_bupa_telephone_t, ls_bupa_phone TYPE bus_ei_bupa_telephone, * Remark data ls_remark TYPE bus_ei_comrem, lt_bupa_remarks TYPE bus_ei_bupa_comrem_t, ls_bupa_remarks TYPE bus_ei_bupa_comrem, * Fax data ls_fax TYPE bus_ei_fax_data, lt_bupa_fax TYPE bus_ei_bupa_fax_t, ls_bupa_fax TYPE bus_ei_bupa_fax, * Telex data ls_ttx TYPE bus_ei_ttx_data, lt_bupa_ttx TYPE bus_ei_bupa_ttx_t, ls_bupa_ttx TYPE bus_ei_bupa_ttx, * Telex data ls_tlx TYPE bus_ei_tlx_data, lt_bupa_tlx TYPE bus_ei_bupa_tlx_t, ls_bupa_tlx TYPE bus_ei_bupa_tlx, * SMTP data ls_smtp TYPE bus_ei_smtp_data, lt_bupa_smtp TYPE bus_ei_bupa_smtp_t, ls_bupa_smtp TYPE bus_ei_bupa_smtp. * Vendor data DATA: ls_header_vmd TYPE vmds_ei_header, ls_central_data_vmd TYPE vmds_ei_central_data, ls_company_data_vmd TYPE vmds_ei_vmd_company, ls_purchasing_data_vmd TYPE vmds_ei_vmd_purchasing. * Vendor data details DATA: ls_central_vmd TYPE vmds_ei_vmd_central, lt_company_vmd TYPE vmds_ei_company_t, ls_company_vmd TYPE vmds_ei_company, lt_purchasing_vmd TYPE vmds_ei_purchasing_t, ls_purchasing_vmd TYPE vmds_ei_purchasing, ls_function_vmd TYPE vmds_ei_vmd_functions, lt_functions_vmd TYPE vmds_ei_functions_t, ls_functions_vmd TYPE vmds_ei_functions, ls_bankdetail_vmd TYPE cvis_ei_bankdetail, lt_bankdetails_vmd TYPE cvis_ei_bankdetail_t, ls_bankdetails_vmd TYPE cvis_ei_cvi_bankdetail. * Customer data DATA: ls_header_cmd TYPE cmds_ei_header, ls_central_data_cmd TYPE cmds_ei_central_data, ls_company_data_cmd TYPE cmds_ei_cmd_company, ls_sales_data_cmd TYPE cmds_ei_cmd_sales. * Customer data details DATA: ls_central_cmd TYPE cmds_ei_cmd_central, lt_company_cmd TYPE cmds_ei_company_t, ls_company_cmd TYPE cmds_ei_company, lt_sales_cmd TYPE cmds_ei_sales_t, ls_sales_cmd TYPE cmds_ei_sales, ls_function_cmd TYPE cmds_ei_cmd_functions, lt_functions_cmd TYPE cmds_ei_functions_t, ls_functions_cmd TYPE cmds_ei_functions, ls_tax_id_cmd TYPE cmds_ei_cmd_tax_ind, lt_tax_ids_cmd TYPE cmds_ei_tax_ind_t, ls_tax_ids_cmd TYPE cmds_ei_tax_ind, ls_bankdetail_cmd TYPE cvis_ei_bankdetail, lt_bankdetails_cmd TYPE cvis_ei_bankdetail_t, ls_bankdetails_cmd TYPE cvis_ei_cvi_bankdetail. DATA: lv_task TYPE bus_ei_object_task, lv_partner_guid TYPE bu_partner_guid, lv_guid_32 TYPE bu_partner_guid_bapi. * Custom parameters DATA: ls_bpdata_in TYPE zprmmsbp_data, lt_bank_in TYPE zprmmtbp_bank, lt_company_in TYPE zprmmtbp_company, lt_purchase_in TYPE zprmmtbp_purchase, lt_sales_in TYPE zprmmtbp_sales, lt_company_cus_in TYPE zprsdtcustom_company. * Get input data ls_bpdata_in = us_req-bpdata. lt_bank_in = us_req-bpdata-zbank. lt_company_in = us_req-bpdata-zbukrs. lt_purchase_in = us_req-bpdata-zekorg. lt_sales_in = us_req-bpdata-zvkorg. lt_company_cus_in = us_req-bpdata-zbukrs_cus. * Delete invalid data DELETE lt_bank_in WHERE bkvid IS INITIAL OR banks IS INITIAL OR bankl IS INITIAL OR bankn IS INITIAL. DELETE lt_company_in WHERE bukrs IS INITIAL. DELETE lt_purchase_in WHERE ekorg IS INITIAL. DELETE lt_sales_in WHERE vkorg IS INITIAL OR vtweg IS INITIAL OR spart IS INITIAL. DELETE lt_company_cus_in WHERE bukrsk IS INITIAL. * Check partner exist SELECT SINGLE partner_guid "Partner UUID INTO lv_partner_guid FROM but000 WHERE partner = ls_bpdata_in-partner. IF lv_partner_guid IS INITIAL. lv_task = lc_task_i. * Generate UUID for create business partner TRY . lv_partner_guid = cl_uuid_factory=>create_system_uuid( )->create_uuid_x16( ). CATCH cx_uuid_error. ENDTRY. ELSE. lv_task = lc_task_u. ENDIF. ********************************************************************** * Basic data part. ********************************************************************** ls_header-object_task = lv_task. ls_header-object_instance-bpartner = ls_bpdata_in-partner. ls_header-object_instance-bpartnerguid = lv_partner_guid. ls_common-data-bp_control-category = us_req-type. "Business Partner Category ls_common-data-bp_control-grouping = us_req-bu_group. "Business Partner Grouping IF ls_bpdata_in-title IS NOT INITIAL. ls_common-data-bp_centraldata-title_key = ls_bpdata_in-title. "Form-of-Address Key ls_common-datax-bp_centraldata-title_key = abap_true. ENDIF. IF ls_bpdata_in-name1 IS NOT INITIAL. ls_common-data-bp_organization-name1 = ls_bpdata_in-name1. "Name 1 of organization ls_common-datax-bp_organization-name1 = abap_true. ENDIF. IF ls_bpdata_in-name2 IS NOT INITIAL. ls_common-data-bp_organization-name2 = ls_bpdata_in-name2. "Name 2 of organization ls_common-datax-bp_organization-name2 = abap_true. ENDIF. IF ls_bpdata_in-name3 IS NOT INITIAL. ls_common-data-bp_organization-name3 = ls_bpdata_in-name3. "Name 3 of organization ls_common-datax-bp_organization-name3 = abap_true. ENDIF. IF ls_bpdata_in-sort1 IS NOT INITIAL. ls_common-data-bp_centraldata-searchterm1 = ls_bpdata_in-sort1. "Search Term 1 for Business Partner ls_common-datax-bp_centraldata-searchterm1 = abap_true. ENDIF. IF ls_bpdata_in-sort2 IS NOT INITIAL. ls_common-data-bp_centraldata-searchterm2 = ls_bpdata_in-sort2. "Search Term 2 for Business Partner ls_common-datax-bp_centraldata-searchterm2 = abap_true. ENDIF. IF ls_bpdata_in-bpext IS NOT INITIAL. ls_common-data-bp_centraldata-partnerexternal = ls_bpdata_in-bpext."Business Partner Number in External System ls_common-datax-bp_centraldata-partnerexternal = abap_true. ENDIF. IF ls_bpdata_in-title_let IS NOT INITIAL. ls_common-data-bp_centraldata-titleletter = ls_bpdata_in-title_let."Salutation ls_common-datax-bp_centraldata-titleletter = abap_true. ENDIF. ls_central_data-common = ls_common. ********************************************************************** * Roles data part ********************************************************************** * Get exists roles SELECT partner, "Partner number rltyp "Roles INTO TABLE @DATA(lt_but100) FROM but100 WHERE partner = @ls_bpdata_in-partner AND rltyp IN ( @lc_roles_zflvn0,@lc_roles_zflvn1,@lc_roles_zflcu1,@lc_roles_zflcu0 ). SORT lt_but100 BY partner ASCENDING rltyp ASCENDING. IF lt_company_in IS NOT INITIAL. READ TABLE lt_but100 TRANSPORTING NO FIELDS WITH KEY partner = ls_bpdata_in-partner rltyp = lc_roles_zflvn0 BINARY SEARCH. IF sy-subrc <> 0. ls_roles-task = lc_task_i. ls_roles-data_key = lc_roles_zflvn0. "Role:ZFLVN0 APPEND ls_roles TO lt_roles. CLEAR ls_roles. ENDIF. ENDIF. IF lt_purchase_in IS NOT INITIAL. READ TABLE lt_but100 TRANSPORTING NO FIELDS WITH KEY partner = ls_bpdata_in-partner rltyp = lc_roles_zflvn1 BINARY SEARCH. IF sy-subrc <> 0. ls_roles-task = lc_task_i. ls_roles-data_key = lc_roles_zflvn1. "Role:ZFLVN1 APPEND ls_roles TO lt_roles. CLEAR ls_roles. ENDIF. ENDIF. IF lt_company_cus_in IS NOT INITIAL. READ TABLE lt_but100 TRANSPORTING NO FIELDS WITH KEY partner = ls_bpdata_in-partner rltyp = lc_roles_zflcu0 BINARY SEARCH. IF sy-subrc <> 0. ls_roles-task = lc_task_i. ls_roles-data_key = lc_roles_zflcu0. "Role:ZFLCU0 APPEND ls_roles TO lt_roles. CLEAR ls_roles. ENDIF. ENDIF. IF lt_sales_in IS NOT INITIAL. READ TABLE lt_but100 TRANSPORTING NO FIELDS WITH KEY partner = ls_bpdata_in-partner rltyp = lc_roles_zflcu1 BINARY SEARCH. IF sy-subrc <> 0. ls_roles-task = lc_task_i. "Role:ZFLCU1 ls_roles-data_key = lc_roles_zflcu1. APPEND ls_roles TO lt_roles. CLEAR ls_roles. ENDIF. ENDIF. ls_role-roles = lt_roles. ls_central_data-role = ls_role. ********************************************************************** * Address data part ********************************************************************** ls_bupa_address-task = lv_task. IF lv_task = lc_task_u. * Get address guid SELECT SINGLE address_guid INTO @DATA(lv_addr_guid) FROM but020 WHERE partner = @ls_bpdata_in-partner. ls_bupa_address-data_key-guid = lv_addr_guid. "Address guid ENDIF. IF ls_bpdata_in-postl_cod1 IS NOT INITIAL. ls_bupa_address-data-postal-data-postl_cod1 = ls_bpdata_in-postl_cod1. "City postal code ls_bupa_address-data-postal-datax-postl_cod1 = abap_true. ENDIF. IF ls_bpdata_in-city IS NOT INITIAL. ls_bupa_address-data-postal-data-city = ls_bpdata_in-city. "City ls_bupa_address-data-postal-datax-city = abap_true. ENDIF. IF ls_bpdata_in-street IS NOT INITIAL. ls_bupa_address-data-postal-data-street = ls_bpdata_in-street. "Street ls_bupa_address-data-postal-datax-street = abap_true. ENDIF. IF ls_bpdata_in-str_suppl1 IS NOT INITIAL. ls_bupa_address-data-postal-data-str_suppl1 = ls_bpdata_in-str_suppl1. "Street 2 ls_bupa_address-data-postal-datax-str_suppl1 = abap_true. ENDIF. IF ls_bpdata_in-str_suppl2 IS NOT INITIAL. ls_bupa_address-data-postal-data-str_suppl2 = ls_bpdata_in-str_suppl2. "Street 3 ls_bupa_address-data-postal-datax-str_suppl2 = abap_true. ENDIF. IF ls_bpdata_in-regio IS NOT INITIAL. ls_bupa_address-data-postal-data-region = ls_bpdata_in-regio. "Region (State, Province, County) ls_bupa_address-data-postal-datax-region = abap_true. ENDIF. IF ls_bpdata_in-country IS NOT INITIAL. ls_bupa_address-data-postal-data-country = ls_bpdata_in-country. "Country Key ls_bupa_address-data-postal-datax-country = abap_true. ENDIF. IF ls_bpdata_in-languiso IS NOT INITIAL. ls_bupa_address-data-postal-data-languiso = ls_bpdata_in-languiso."2-Character SAP Language Code ls_bupa_address-data-postal-datax-langu_iso = abap_true. ENDIF. IF ls_bpdata_in-district IS NOT INITIAL. ls_bupa_address-data-postal-data-district = ls_bpdata_in-district. "District ls_bupa_address-data-postal-datax-district = abap_true. ENDIF. APPEND ls_bupa_address TO lt_bupa_address. CLEAR ls_bupa_address. ls_address-addresses = lt_bupa_address. ls_central_data-address = ls_address. ********************************************************************** * Tax data part ********************************************************************** IF ls_bpdata_in-taxtype IS NOT INITIAL OR ls_bpdata_in-taxnum IS NOT INITIAL. ls_bupa_taxnumber-task = lv_task. IF ls_bpdata_in-taxtype IS NOT INITIAL. ls_bupa_taxnumber-data_key-taxtype = ls_bpdata_in-taxtype. "Tax type ENDIF. IF ls_bpdata_in-taxnum IS NOT INITIAL. ls_bupa_taxnumber-data_key-taxnumber = ls_bpdata_in-taxnum. "Tax number ENDIF. APPEND ls_bupa_taxnumber TO lt_bupa_taxnumber. CLEAR ls_bupa_taxnumber. ENDIF. ls_taxnumber-taxnumbers = lt_bupa_taxnumber. ls_central_data-taxnumber = ls_taxnumber. ********************************************************************** * Phone data part ********************************************************************** * Get exists phone details SELECT a~partner, a~addrcomm, b~persnumber, b~date_from, b~consnumber, b~tel_number, b~r3_user INTO TABLE @DATA(lt_adr2) FROM but000 AS a INNER JOIN adr2 AS b ON a~addrcomm = b~addrnumber WHERE a~partner = @ls_bpdata_in-partner. SORT lt_adr2 BY partner ASCENDING r3_user ASCENDING. *--------------------------------------------------------------------* * If there are multiple phone numbers, you should add multiple records * to the phone table,and then the records will be saved in adr2 table. *--------------------------------------------------------------------* IF ls_bpdata_in-telf1 IS NOT INITIAL. READ TABLE lt_adr2 INTO DATA(ls_adr2) WITH KEY r3_user = lc_phone_type_1 BINARY SEARCH. IF ls_adr2-tel_number IS INITIAL. ls_bupa_phone-contact-task = lc_task_i. ELSE. ls_bupa_phone-contact-task = lc_task_u. ENDIF. ls_bupa_phone-contact-data-telephone = ls_bpdata_in-telf1. "Telephone no.: dialling code+number ls_bupa_phone-contact-datax-telephone = abap_true. IF ls_bpdata_in-te_exten IS NOT INITIAL. ls_bupa_phone-contact-data-extension = ls_bpdata_in-te_exten. "Telephone no.: Extension ls_bupa_phone-contact-datax-extension = abap_true. ENDIF. ls_bupa_phone-contact-data-r_3_user = lc_phone_type_1. "Telephone is Landline Telephone ls_bupa_phone-contact-datax-r_3_user = abap_true. IF ls_bpdata_in-remark IS NOT INITIAL. ls_bupa_remarks-task = lv_task. ls_bupa_remarks-data-comm_notes = ls_bpdata_in-remark. "Communication link notes ls_bupa_remarks-datax-comm_notes = abap_true. ls_bupa_remarks-data-langu = sy-langu. "Language Key ls_bupa_remarks-datax-langu = abap_true. APPEND ls_bupa_remarks TO lt_bupa_remarks. CLEAR ls_bupa_remarks. ls_remark-remarks = lt_bupa_remarks. ls_bupa_phone-remark = ls_remark. ENDIF. APPEND ls_bupa_phone TO lt_bupa_phone. CLEAR ls_bupa_phone. ENDIF. IF ls_bpdata_in-telf2 IS NOT INITIAL. CLEAR ls_adr2. READ TABLE lt_adr2 INTO ls_adr2 WITH KEY r3_user = lc_phone_type_3 BINARY SEARCH. IF ls_adr2-tel_number IS INITIAL. ls_bupa_phone-contact-task = lc_task_i. ELSE. ls_bupa_phone-contact-task = lc_task_u. ENDIF. ls_bupa_phone-contact-data-telephone = ls_bpdata_in-telf2. ls_bupa_phone-contact-datax-telephone = abap_true. ls_bupa_phone-contact-data-r_3_user = lc_phone_type_3. "Telephone is Default Mobile Telephone ls_bupa_phone-contact-datax-r_3_user = abap_true. APPEND ls_bupa_phone TO lt_bupa_phone. CLEAR ls_bupa_phone. ENDIF. *--------------------------------------------------------------------* * Ensure that the inserted entry 'I' must be entered after the updated entry 'U' in the table. * You can get more infomations in note 2437000 *--------------------------------------------------------------------* SORT lt_bupa_phone BY contact-task DESCENDING. ls_phone-phone = lt_bupa_phone. ********************************************************************** ls_bupa_fax-contact-task = lv_task. IF ls_bpdata_in-telfx IS NOT INITIAL. ls_bupa_fax-contact-data-fax = ls_bpdata_in-telfx. "Fax number: dialling code+number ls_bupa_fax-contact-datax-fax = abap_true. ENDIF. IF ls_bpdata_in-fx_exten IS NOT INITIAL. ls_bupa_fax-contact-data-extension = ls_bpdata_in-fx_exten. "Fax no.: Extension ls_bupa_fax-contact-datax-extension = abap_true. ENDIF. APPEND ls_bupa_fax TO lt_bupa_fax. CLEAR ls_bupa_fax. ls_fax-fax = lt_bupa_fax. ********************************************************************** ls_bupa_smtp-contact-task = lv_task. IF ls_bpdata_in-smtp_addr IS NOT INITIAL. ls_bupa_smtp-contact-data-e_mail = ls_bpdata_in-smtp_addr. "E-Mail Address ls_bupa_smtp-contact-datax-e_mail = abap_true. ENDIF. APPEND ls_bupa_smtp TO lt_bupa_smtp. CLEAR ls_bupa_smtp. ls_smtp-smtp = lt_bupa_smtp. ls_central_data-communication-phone = ls_phone. "Phone ls_central_data-communication-fax = ls_fax. "Fax ls_central_data-communication-smtp = ls_smtp. "SMTP ********************************************************************** * Bank data part ********************************************************************** IF lt_bank_in IS NOT INITIAL. * Get exists Bank details ID SELECT partner, bkvid INTO TABLE @DATA(lt_but0bk) FROM but0bk FOR ALL ENTRIES IN @lt_bank_in WHERE partner = @ls_bpdata_in-partner AND bkvid = @lt_bank_in-bkvid. SORT lt_but0bk BY partner ASCENDING bkvid ASCENDING. LOOP AT lt_bank_in INTO DATA(ls_bank_in). READ TABLE lt_but0bk TRANSPORTING NO FIELDS WITH KEY bkvid = ls_bank_in-bkvid BINARY SEARCH. IF sy-subrc = 0. ls_bupa_bankdetail-task = lc_task_u. ELSE. ls_bupa_bankdetail-task = lc_task_i. ENDIF. ls_bupa_bankdetail-data_key = ls_bank_in-bkvid. "Bank details ID IF ls_bank_in-banks IS NOT INITIAL. ls_bupa_bankdetail-data-bank_ctry = ls_bank_in-banks. "Bank Country Key ls_bupa_bankdetail-datax-bank_ctry = abap_true. ENDIF. IF ls_bank_in-bankn IS NOT INITIAL. ls_bupa_bankdetail-data-bank_acct = ls_bank_in-bankn. "Bank Account Number ls_bupa_bankdetail-datax-bank_acct = abap_true. ENDIF. IF ls_bank_in-bkref IS NOT INITIAL. ls_bupa_bankdetail-data-bank_ref = ls_bank_in-bkref. "Reference Details for Bank Details ls_bupa_bankdetail-datax-bank_ref = abap_true. ENDIF. IF ls_bank_in-bankl IS NOT INITIAL. ls_bupa_bankdetail-data-bank_key = ls_bank_in-bankl. "Bank Key ls_bupa_bankdetail-datax-bank_key = abap_true. ENDIF. IF ls_bank_in-koinh IS NOT INITIAL. ls_bupa_bankdetail-data-accountholder = ls_bank_in-koinh. "Account Holder Name ls_bupa_bankdetail-datax-accountholder = abap_true. ENDIF. APPEND ls_bupa_bankdetail TO lt_bupa_bankdetail. CLEAR ls_bupa_bankdetail. ENDLOOP. ls_bankdetail-bankdetails = lt_bupa_bankdetail. ls_central_data-bankdetail = ls_bankdetail. ENDIF. ********************************************************************** * Vendor data part ********************************************************************** SELECT SINGLE lifnr INTO @DATA(lv_lfa1_lifnr) FROM lfa1 WHERE lifnr = @ls_bpdata_in-partner. IF lv_lfa1_lifnr IS INITIAL. ls_header_vmd-object_task = lc_task_i. ELSE. ls_header_vmd-object_task = lc_task_u. ENDIF. ls_header_vmd-object_instance-lifnr = ls_bpdata_in-partner. ********************************************************************** * Copy bank data to LFBK ********************************************************************** * Get exists Bank details SELECT lifnr, banks, bankl, bankn INTO TABLE @DATA(lt_lfbk) FROM lfbk FOR ALL ENTRIES IN @lt_bank_in WHERE lifnr = @ls_bpdata_in-partner AND banks = @lt_bank_in-banks AND bankl = @lt_bank_in-bankl AND bankn = @lt_bank_in-bankn. SORT lt_lfbk BY lifnr ASCENDING banks ASCENDING bankl ASCENDING bankn ASCENDING. LOOP AT lt_bank_in INTO ls_bank_in. READ TABLE lt_lfbk TRANSPORTING NO FIELDS WITH KEY banks = ls_bank_in-banks bankl = ls_bank_in-bankl bankn = ls_bank_in-bankn BINARY SEARCH. IF sy-subrc = 0. ls_bankdetails_vmd-task = lc_task_u. ELSE. ls_bankdetails_vmd-task = lc_task_i. ENDIF. ls_bankdetails_vmd-data_key-banks = ls_bank_in-banks. "Bank Country Key ls_bankdetails_vmd-data_key-bankl = ls_bank_in-bankl. "Bank Key ls_bankdetails_vmd-data_key-bankn = ls_bank_in-bankn. "Bank Account Number IF ls_bank_in-bkref IS NOT INITIAL. ls_bankdetails_vmd-data-bkref = ls_bank_in-bkref. "Reference Details for Bank Details ls_bankdetails_vmd-datax-bkref = abap_true. ENDIF. IF ls_bank_in-koinh IS NOT INITIAL. ls_bankdetails_vmd-data-koinh = ls_bank_in-koinh. "Account Holder Name ls_bankdetails_vmd-datax-koinh = abap_true. ENDIF. APPEND ls_bankdetails_vmd TO lt_bankdetails_vmd. CLEAR ls_bankdetails_vmd. ENDLOOP. ls_bankdetail_vmd-bankdetails = lt_bankdetails_vmd. ls_central_data_vmd-bankdetail = ls_bankdetail_vmd. ********************************************************************** * Vendor Company code data ********************************************************************** IF lt_company_in IS NOT INITIAL. * Get exists company code data SELECT lifnr, bukrs INTO TABLE @DATA(lt_lfb1) FROM lfb1 FOR ALL ENTRIES IN @lt_company_in WHERE lifnr = @ls_bpdata_in-partner AND bukrs = @lt_company_in-bukrs. SORT lt_lfb1 BY lifnr ASCENDING bukrs ASCENDING. LOOP AT lt_company_in INTO DATA(ls_company_in). READ TABLE lt_lfb1 TRANSPORTING NO FIELDS WITH KEY bukrs = ls_company_in-bukrs BINARY SEARCH. IF sy-subrc = 0. ls_company_vmd-task = lc_task_u. ELSE. ls_company_vmd-task = lc_task_i. ENDIF. ls_company_vmd-data_key-bukrs = ls_company_in-bukrs. "Company code IF ls_company_in-akont IS NOT INITIAL. ls_company_vmd-data-akont = ls_company_in-akont. "Reconciliation Account in General Ledger ls_company_vmd-datax-akont = abap_true. ENDIF. IF ls_company_in-zuawa IS NOT INITIAL. ls_company_vmd-data-zuawa = ls_company_in-zuawa. "Key for sorting according to assignment numbers ls_company_vmd-datax-zuawa = abap_true. ENDIF. IF ls_company_in-zterm IS NOT INITIAL. ls_company_vmd-data-zterm = ls_company_in-zterm. "Terms of payment key ls_company_vmd-datax-zterm = abap_true. ENDIF. IF ls_company_in-reprf IS NOT INITIAL. IF ls_company_in-reprf = lc_na. ls_company_vmd-data-reprf = space. "Check Flag for Double Invoices or Credit Memos ls_company_vmd-datax-reprf = abap_true. ELSE. ls_company_vmd-data-reprf = ls_company_in-reprf. "Check Flag for Double Invoices or Credit Memos ls_company_vmd-datax-reprf = abap_true. ENDIF. ENDIF. IF ls_company_in-zwels IS NOT INITIAL. ls_company_vmd-data-zwels = ls_company_in-zwels. "List of Respected Payment Methods ls_company_vmd-datax-zwels = abap_true. ENDIF. IF ls_company_in-altkn IS NOT INITIAL. ls_company_vmd-data-altkn = ls_company_in-altkn. "Previous Master Record Number ls_company_vmd-datax-altkn = abap_true. ENDIF. IF ls_company_in-zobject IS NOT INITIAL. ls_company_vmd-data-zobject = ls_company_in-zobject. "Delegate object type ls_company_vmd-datax-zobject = abap_true. ENDIF. IF ls_company_in-zdecision IS NOT INITIAL. ls_company_vmd-data-zdecision = ls_company_in-zdecision. "Decision table ls_company_vmd-datax-zdecision = abap_true. ENDIF. IF ls_company_in-zcapitalist IS NOT INITIAL. ls_company_vmd-data-zcapitalist = ls_company_in-zcapitalist. "Capital fund ls_company_vmd-datax-zcapitalist = abap_true. ENDIF. IF ls_company_in-zcurrency IS NOT INITIAL. ls_company_vmd-data-zcurrency = ls_company_in-zcurrency. "Currency ls_company_vmd-datax-zcurrency = abap_true. ENDIF. IF ls_company_in-zbankde IS NOT INITIAL. ls_company_vmd-data-zbankde = ls_company_in-zbankde. "Payment details required ls_company_vmd-datax-zbankde = abap_true. ENDIF. IF ls_company_in-sperr IS NOT INITIAL. IF ls_company_in-sperr = lc_na. ls_company_vmd-data-sperr = space. "Posting block for company code ls_company_vmd-datax-sperr = abap_true. ELSE. ls_company_vmd-data-sperr = ls_company_in-sperr. "Posting block for company code ls_company_vmd-datax-sperr = abap_true. ENDIF. ENDIF. IF ls_company_in-togrr IS NOT INITIAL. ls_company_vmd-data-togrr = ls_company_in-togrr. "Tolerance Group in Invoice Verification ls_company_vmd-datax-togrr = abap_true. ENDIF. IF ls_company_in-loevm IS NOT INITIAL. IF ls_company_in-loevm = lc_na. ls_company_vmd-data-loevm = space. "Deletion Flag for Master Record (Company Code Level) ls_company_vmd-datax-loevm = abap_true. ELSE. ls_company_vmd-data-loevm = ls_company_in-loevm. "Deletion Flag for Master Record (Company Code Level) ls_company_vmd-datax-loevm = abap_true. ENDIF. ENDIF. APPEND ls_company_vmd TO lt_company_vmd. CLEAR ls_company_vmd. ENDLOOP. ls_company_data_vmd-company = lt_company_vmd. ENDIF. ********************************************************************** * Vendor Purchasing data ********************************************************************** IF lt_purchase_in IS NOT INITIAL. * Get exists purchasing data SELECT lifnr, ekorg INTO TABLE @DATA(lt_lfm1) FROM lfm1 FOR ALL ENTRIES IN @lt_purchase_in WHERE lifnr = @ls_bpdata_in-partner AND ekorg = @lt_purchase_in-ekorg. SORT lt_lfm1 BY lifnr ASCENDING ekorg ASCENDING. LOOP AT lt_purchase_in INTO DATA(ls_purchase_in). READ TABLE lt_lfm1 TRANSPORTING NO FIELDS WITH KEY ekorg = ls_purchase_in-ekorg BINARY SEARCH. IF sy-subrc = 0. ls_purchasing_vmd-task = lc_task_u. ELSE. ls_purchasing_vmd-task = lc_task_i. ENDIF. ls_purchasing_vmd-data_key-ekorg = ls_purchase_in-ekorg. "Purchasing organization IF ls_purchase_in-waers IS NOT INITIAL. ls_purchasing_vmd-data-waers = ls_purchase_in-waers. "Purchase order currency ls_purchasing_vmd-datax-waers = abap_true. ENDIF. IF ls_purchase_in-webre IS NOT INITIAL. IF ls_purchase_in-webre = lc_na. ls_purchasing_vmd-data-webre = space. "Indicator: GR-Based Invoice Verification ls_purchasing_vmd-datax-webre = abap_true. ELSE. ls_purchasing_vmd-data-webre = ls_purchase_in-webre. "Indicator: GR-Based Invoice Verification ls_purchasing_vmd-datax-webre = abap_true. ENDIF. ENDIF. IF ls_purchase_in-ztermc IS NOT INITIAL. ls_purchasing_vmd-data-zterm = ls_purchase_in-ztermc. "Terms of payment key ls_purchasing_vmd-datax-zterm = abap_true. ENDIF. IF ls_purchase_in-ekgrp IS NOT INITIAL. ls_purchasing_vmd-data-ekgrp = ls_purchase_in-ekgrp. "Purchasing Group ls_purchasing_vmd-datax-ekgrp = abap_true. ENDIF. IF ls_purchase_in-telf1c IS NOT INITIAL. ls_purchasing_vmd-data-telf1 = ls_purchase_in-telf1c. "Supplier's Telephone Number ls_purchasing_vmd-datax-telf1 = abap_true. ENDIF. IF ls_purchase_in-sperm IS NOT INITIAL. IF ls_purchase_in-sperm = lc_na. ls_purchasing_vmd-data-sperm = space. "Purchasing block at purchasing organization level ls_purchasing_vmd-datax-sperm = abap_true. ELSE. ls_purchasing_vmd-data-sperm = ls_purchase_in-sperm. "Purchasing block at purchasing organization level ls_purchasing_vmd-datax-sperm = abap_true. ENDIF. ENDIF. IF ls_purchase_in-verkf IS NOT INITIAL. ls_purchasing_vmd-data-verkf = ls_purchase_in-verkf. "Responsible Salesperson at Supplier's Office ls_purchasing_vmd-datax-verkf = abap_true. ENDIF. IF ls_purchase_in-lfabc IS NOT INITIAL. IF ls_purchase_in-lfabc = lc_na. ls_purchasing_vmd-data-lfabc = space. "ABC indicator ls_purchasing_vmd-datax-lfabc = abap_true. ELSE. ls_purchasing_vmd-data-lfabc = ls_purchase_in-lfabc. "ABC indicator ls_purchasing_vmd-datax-lfabc = abap_true. ENDIF. ENDIF. IF ls_purchase_in-kalsk IS NOT INITIAL. ls_purchasing_vmd-data-kalsk = ls_purchase_in-kalsk. "Group for Calculation Schema (Supplier) ls_purchasing_vmd-datax-kalsk = abap_true. ENDIF. IF ls_purchase_in-inco1 IS NOT INITIAL. ls_purchasing_vmd-data-inco1 = ls_purchase_in-inco1. "Incoterms (Part 1) ls_purchasing_vmd-datax-inco1 = abap_true. ENDIF. IF ls_purchase_in-inco2_l IS NOT INITIAL. ls_purchasing_vmd-data-inco2_l = ls_purchase_in-inco2_l. "Incoterms Location 1 ls_purchasing_vmd-datax-inco2_l = abap_true. ENDIF. IF ls_purchase_in-vsbed IS NOT INITIAL. ls_purchasing_vmd-data-vsbed = ls_purchase_in-vsbed. "Shipping Conditions ls_purchasing_vmd-datax-vsbed = abap_true. ENDIF. IF ls_purchase_in-plifz IS NOT INITIAL. ls_purchasing_vmd-data-plifz = ls_purchase_in-plifz. "Planned Delivery Time in Days ls_purchasing_vmd-datax-plifz = abap_true. ENDIF. IF ls_purchase_in-meprf IS NOT INITIAL. ls_purchasing_vmd-data-meprf = ls_purchase_in-meprf. "Price Determination (Pricing) Date Control ls_purchasing_vmd-datax-meprf = abap_true. ENDIF. IF ls_purchase_in-xersy IS NOT INITIAL. IF ls_purchase_in-xersy = lc_na. ls_purchasing_vmd-data-xersy = space. "Evaluated Receipt Settlement (ERS) ls_purchasing_vmd-datax-xersy = abap_true. ELSE. ls_purchasing_vmd-data-xersy = ls_purchase_in-xersy. "Evaluated Receipt Settlement (ERS) ls_purchasing_vmd-datax-xersy = abap_true. ENDIF. ENDIF. IF ls_purchasing_vmd-task = lc_task_i. ls_functions_vmd-task = lc_task_m. * Invoicing Party CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT' EXPORTING input = lc_parvw_pi IMPORTING output = ls_functions_vmd-data_key-parvw. APPEND ls_functions_vmd TO lt_functions_vmd. * Ordering address CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT' EXPORTING input = lc_parvw_oa IMPORTING output = ls_functions_vmd-data_key-parvw. APPEND ls_functions_vmd TO lt_functions_vmd. * Vendor CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT' EXPORTING input = lc_parvw_vn IMPORTING output = ls_functions_vmd-data_key-parvw. APPEND ls_functions_vmd TO lt_functions_vmd. CLEAR ls_functions_vmd. ls_function_vmd-functions = lt_functions_vmd. ls_purchasing_vmd-functions = ls_function_vmd. ENDIF. APPEND ls_purchasing_vmd TO lt_purchasing_vmd. CLEAR ls_purchasing_vmd. ENDLOOP. ls_purchasing_data_vmd-purchasing = lt_purchasing_vmd. ENDIF. ********************************************************************** * Customer data part ********************************************************************** SELECT SINGLE kunnr INTO @DATA(lv_kna1_kunnr) FROM kna1 WHERE kunnr = @ls_bpdata_in-partner. IF lv_kna1_kunnr IS INITIAL. ls_header_cmd-object_task = lc_task_i. ELSE. ls_header_cmd-object_task = lc_task_u. ENDIF. ls_header_cmd-object_instance-kunnr = ls_bpdata_in-partner. ********************************************************************** * Copy bank data to KNBK ********************************************************************** * Get exists Bank details SELECT kunnr, banks, bankl, bankn INTO TABLE @DATA(lt_knbk) FROM knbk FOR ALL ENTRIES IN @lt_bank_in WHERE kunnr = @ls_bpdata_in-partner AND banks = @lt_bank_in-banks AND bankl = @lt_bank_in-bankl AND bankn = @lt_bank_in-bankn. SORT lt_knbk BY kunnr ASCENDING banks ASCENDING bankl ASCENDING bankn ASCENDING. LOOP AT lt_bank_in INTO ls_bank_in. READ TABLE lt_knbk TRANSPORTING NO FIELDS WITH KEY banks = ls_bank_in-banks bankl = ls_bank_in-bankl bankn = ls_bank_in-bankn BINARY SEARCH. IF sy-subrc = 0. ls_bankdetails_cmd-task = lc_task_u. ELSE. ls_bankdetails_cmd-task = lc_task_i. ENDIF. ls_bankdetails_cmd-data_key-banks = ls_bank_in-banks. "Bank Country Key ls_bankdetails_cmd-data_key-bankl = ls_bank_in-bankl. "Bank Key ls_bankdetails_cmd-data_key-bankn = ls_bank_in-bankn. "Bank Account Number IF ls_bank_in-bkref IS NOT INITIAL. ls_bankdetails_cmd-data-bkref = ls_bank_in-bkref. "Reference Details for Bank Details ls_bankdetails_cmd-datax-bkref = abap_true. ENDIF. IF ls_bank_in-koinh IS NOT INITIAL. ls_bankdetails_cmd-data-koinh = ls_bank_in-koinh. "Account Holder Name ls_bankdetails_cmd-datax-koinh = abap_true. ENDIF. APPEND ls_bankdetails_cmd TO lt_bankdetails_cmd. CLEAR ls_bankdetails_cmd. ENDLOOP. ls_bankdetail_cmd-bankdetails = lt_bankdetails_cmd. ls_central_data_cmd-bankdetail = ls_bankdetail_cmd. ********************************************************************** * Customer Company code part ********************************************************************** IF lt_company_cus_in IS NOT INITIAL. * Get exists company code data SELECT kunnr, bukrs INTO TABLE @DATA(lt_knb1) FROM knb1 FOR ALL ENTRIES IN @lt_company_cus_in WHERE kunnr = @ls_bpdata_in-partner AND bukrs = @lt_company_cus_in-bukrsk. SORT lt_knb1 BY kunnr ASCENDING bukrs ASCENDING. LOOP AT lt_company_cus_in INTO DATA(ls_company_cus_in). READ TABLE lt_knb1 TRANSPORTING NO FIELDS WITH KEY bukrs = ls_company_cus_in-bukrsk BINARY SEARCH. IF sy-subrc = 0. ls_company_cmd-task = lc_task_u. ELSE. ls_company_cmd-task = lc_task_i. ENDIF. ls_company_cmd-data_key-bukrs = ls_company_cus_in-bukrsk. "Company code IF ls_company_cus_in-akontk IS NOT INITIAL. ls_company_cmd-data-akont = ls_company_cus_in-akontk. "Reconciliation Account in General Ledger ls_company_cmd-datax-akont = abap_true. ENDIF. IF ls_company_cus_in-zuawak IS NOT INITIAL. ls_company_cmd-data-zuawa = ls_company_cus_in-zuawak. "Key for sorting according to assignment numbers ls_company_cmd-datax-zuawa = abap_true. ENDIF. IF ls_company_cus_in-ztermk IS NOT INITIAL. ls_company_cmd-data-zterm = ls_company_cus_in-ztermk. "Terms of payment key ls_company_cmd-datax-zterm = abap_true. ENDIF. IF ls_company_cus_in-zwelsk IS NOT INITIAL. ls_company_cmd-data-zwels = ls_company_cus_in-zwelsk. "List of Respected Payment Methods ls_company_cmd-datax-zwels = abap_true. ENDIF. IF ls_company_cus_in-altknk IS NOT INITIAL. ls_company_cmd-data-altkn = ls_company_cus_in-altknk. "Previous Master Record Number ls_company_cmd-datax-altkn = abap_true. ENDIF. IF ls_company_cus_in-sperrk IS NOT INITIAL. IF ls_company_cus_in-sperrk = lc_na. ls_company_cmd-data-sperr = space. "Posting block for company code ls_company_cmd-datax-sperr = abap_true. ELSE. ls_company_cmd-data-sperr = ls_company_cus_in-sperrk. "Posting block for company code ls_company_cmd-datax-sperr = abap_true. ENDIF. ENDIF. IF ls_company_cus_in-togru IS NOT INITIAL. ls_company_cmd-data-togru = ls_company_cus_in-togru. "Tolerance Group in Invoice Verification ls_company_cmd-datax-togru = abap_true. ENDIF. IF ls_company_cus_in-loevmk IS NOT INITIAL. IF ls_company_cus_in-loevmk = lc_na. ls_company_cmd-data-loevm = space. "Deletion Flag for Master Record (Company Code Level) ls_company_cmd-datax-loevm = abap_true. ELSE. ls_company_cmd-data-loevm = ls_company_cus_in-loevmk. "Deletion Flag for Master Record (Company Code Level) ls_company_cmd-datax-loevm = abap_true. ENDIF. ENDIF. APPEND ls_company_cmd TO lt_company_cmd. CLEAR ls_company_cmd. ENDLOOP. ls_company_data_cmd-company = lt_company_cmd. ENDIF. ********************************************************************** * Customer Sales data part ********************************************************************** IF lt_sales_in IS NOT INITIAL. * Get exists sales org data SELECT kunnr, vkorg, vtweg, spart INTO TABLE @DATA(lt_knvv) FROM knvv FOR ALL ENTRIES IN @lt_sales_in WHERE kunnr = @ls_bpdata_in-partner AND vkorg = @lt_sales_in-vkorg AND vtweg = @lt_sales_in-vtweg AND spart = @lt_sales_in-spart. * Get exists tax data SELECT kunnr, aland, tatyp, taxkd INTO TABLE @DATA(lt_knvi) FROM knvi WHERE kunnr = @ls_bpdata_in-partner. SORT lt_knvv BY kunnr ASCENDING vkorg ASCENDING vtweg ASCENDING spart ASCENDING. SORT lt_knvi BY kunnr ASCENDING aland ASCENDING tatyp ASCENDING taxkd ASCENDING. LOOP AT lt_sales_in INTO DATA(ls_sales_in). READ TABLE lt_knvv TRANSPORTING NO FIELDS WITH KEY vkorg = ls_sales_in-vkorg vtweg = ls_sales_in-vtweg spart = ls_sales_in-spart BINARY SEARCH. IF sy-subrc = 0. ls_sales_cmd-task = lc_task_u. ELSE. ls_sales_cmd-task = lc_task_i. ENDIF. ls_sales_cmd-data_key-vkorg = ls_sales_in-vkorg. "Sales Organization ls_sales_cmd-data_key-vtweg = ls_sales_in-vtweg. "Distribution Channel ls_sales_cmd-data_key-spart = ls_sales_in-spart. "Division IF ls_sales_in-bzirk IS NOT INITIAL. ls_sales_cmd-data-bzirk = ls_sales_in-bzirk. "Sales District ls_sales_cmd-datax-bzirk = abap_true. ENDIF. IF ls_sales_in-kalks IS NOT INITIAL. ls_sales_cmd-data-kalks = ls_sales_in-kalks. "Customer Classification for Pricing Procedure Determination ls_sales_cmd-datax-kalks = abap_true. ENDIF. IF ls_sales_in-versg IS NOT INITIAL. ls_sales_cmd-data-versg = ls_sales_in-versg. "Customer Statistics Group ls_sales_cmd-datax-versg = abap_true. ENDIF. IF ls_sales_in-vsbedv IS NOT INITIAL. ls_sales_cmd-data-vsbed = ls_sales_in-vsbedv. "Shipping Conditions ls_sales_cmd-datax-vsbed = abap_true. ENDIF. IF ls_sales_in-ktgrd IS NOT INITIAL. ls_sales_cmd-data-ktgrd = ls_sales_in-ktgrd. "Account Assignment Group for this customer ls_sales_cmd-datax-ktgrd = abap_true. ENDIF. IF ls_sales_in-vkbur IS NOT INITIAL. ls_sales_cmd-data-vkbur = ls_sales_in-vkbur. "Sales office ls_sales_cmd-datax-vkbur = abap_true. ENDIF. IF ls_sales_in-vkgrp IS NOT INITIAL. ls_sales_cmd-data-vkgrp = ls_sales_in-vkgrp. "Sales group ls_sales_cmd-datax-vkgrp = abap_true. ENDIF. IF ls_sales_in-kdgrp IS NOT INITIAL. ls_sales_cmd-data-kdgrp = ls_sales_in-kdgrp. "Customer Group ls_sales_cmd-datax-kdgrp = abap_true. ENDIF. IF ls_sales_in-konda IS NOT INITIAL. ls_sales_cmd-data-konda = ls_sales_in-konda. "Customer Price Group ls_sales_cmd-datax-konda = abap_true. ENDIF. IF ls_sales_in-kkber IS NOT INITIAL. ls_sales_cmd-data-kkber = ls_sales_in-kkber. "Credit control area ls_sales_cmd-datax-kkber = abap_true. ENDIF. IF ls_sales_in-kvgr1 IS NOT INITIAL. ls_sales_cmd-data-kvgr1 = ls_sales_in-kvgr1. "Customer group 1 ls_sales_cmd-datax-kvgr1 = abap_true. ENDIF. IF ls_sales_in-vwerk IS NOT INITIAL. ls_sales_cmd-data-vwerk = ls_sales_in-vwerk. "Delivering Plant (Own or External) ls_sales_cmd-datax-vwerk = abap_true. ENDIF. IF ls_sales_in-ztermk_s IS NOT INITIAL. ls_sales_cmd-data-zterm = ls_sales_in-ztermk_s. "Terms of payment key ls_sales_cmd-datax-zterm = abap_true. ENDIF. IF ls_sales_in-waersk IS NOT INITIAL. ls_sales_cmd-data-waers = ls_sales_in-waersk. "Currency ls_sales_cmd-datax-waers = abap_true. ENDIF. IF ls_sales_in-loevmk_s IS NOT INITIAL. IF ls_sales_in-loevmk_s = lc_na. ls_sales_cmd-data-loevm = space. "Deletion flag for customer (sales level) ls_sales_cmd-datax-loevm = abap_true. ELSE. ls_sales_cmd-data-loevm = ls_sales_in-loevmk_s. "Deletion flag for customer (sales level) ls_sales_cmd-datax-loevm = abap_true. ENDIF. ENDIF. IF ls_sales_in-aufsdk IS NOT INITIAL. ls_sales_cmd-data-aufsd = ls_sales_in-aufsdk. "Customer order block (sales area) ls_sales_cmd-datax-aufsd = abap_true. ENDIF. IF ls_sales_in-lifsdk IS NOT INITIAL. ls_sales_cmd-data-lifsd = ls_sales_in-lifsdk. "Customer delivery block (sales area) ls_sales_cmd-datax-lifsd = abap_true. ENDIF. IF ls_sales_in-faksdk IS NOT INITIAL. ls_sales_cmd-data-faksd = ls_sales_in-faksdk. "Billing block for customer (sales and distribution) ls_sales_cmd-datax-faksd = abap_true. ENDIF. IF ls_sales_in-inco1k IS NOT INITIAL. ls_sales_cmd-data-inco1 = ls_sales_in-inco1k. "Incoterms (Part 1) ls_sales_cmd-datax-inco1 = abap_true. ENDIF. IF ls_sales_in-inco2_lk IS NOT INITIAL. ls_sales_cmd-data-inco2_l = ls_sales_in-inco2_lk. "Incoterms Location 1 ls_sales_cmd-datax-inco2_l = abap_true. ENDIF. IF ls_sales_in-kzazu IS NOT INITIAL. IF ls_sales_in-kzazu = lc_na. ls_sales_cmd-data-kzazu = space. "Order Combination Indicator ls_sales_cmd-datax-kzazu = abap_true. ELSE. ls_sales_cmd-data-kzazu = ls_sales_in-kzazu. "Order Combination Indicator ls_sales_cmd-datax-kzazu = abap_true. ENDIF. ENDIF. IF ls_sales_cmd-task = lc_task_i. ls_functions_cmd-task = lc_task_m. * Sold-to party CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT' EXPORTING input = lc_parvw_sp IMPORTING output = ls_functions_cmd-data_key-parvw. APPEND ls_functions_cmd TO lt_functions_cmd. * Bill-to party CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT' EXPORTING input = lc_parvw_bp IMPORTING output = ls_functions_cmd-data_key-parvw. APPEND ls_functions_cmd TO lt_functions_cmd. * Payer CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT' EXPORTING input = lc_parvw_py IMPORTING output = ls_functions_cmd-data_key-parvw. APPEND ls_functions_cmd TO lt_functions_cmd. * Ship-to party CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT' EXPORTING input = lc_parvw_sh IMPORTING output = ls_functions_cmd-data_key-parvw. APPEND ls_functions_cmd TO lt_functions_cmd. CLEAR ls_functions_cmd. ls_function_cmd-functions = lt_functions_cmd. ls_sales_cmd-functions = ls_function_cmd. ENDIF. APPEND ls_sales_cmd TO lt_sales_cmd. CLEAR ls_sales_cmd. IF ls_sales_in-tatyp IS NOT INITIAL AND ls_sales_in-taxkd IS NOT INITIAL AND ls_sales_in-aland IS NOT INITIAL. READ TABLE lt_knvi INTO DATA(ls_knvi) WITH KEY aland = ls_sales_in-aland tatyp = ls_sales_in-tatyp BINARY SEARCH. IF sy-subrc <> 0. ls_tax_ids_cmd-task = lc_task_i. ELSE. ls_tax_ids_cmd-task = lc_task_u. ENDIF. ls_tax_ids_cmd-data_key-aland = ls_sales_in-aland. "Departure country (country from which the goods are sent) ls_tax_ids_cmd-data_key-tatyp = ls_sales_in-tatyp. "Tax category (sales tax, federal sales tax,...) ls_tax_ids_cmd-data-taxkd = ls_sales_in-taxkd. "Tax classification for customer ls_tax_ids_cmd-datax-taxkd = abap_true. APPEND ls_tax_ids_cmd TO lt_tax_ids_cmd. CLEAR ls_tax_ids_cmd. ENDIF. ENDLOOP. ls_sales_data_cmd-sales = lt_sales_cmd. ls_tax_id_cmd-tax_ind = lt_tax_ids_cmd. ls_central_data_cmd-tax_ind = ls_tax_id_cmd. ENDIF. ********************************************************************** * Collect all data ********************************************************************** ls_partner-header = ls_header. ls_partner-central_data = ls_central_data. ls_vendor-header = ls_header_vmd. ls_vendor-central_data = ls_central_data_vmd. ls_vendor-company_data = ls_company_data_vmd. ls_vendor-purchasing_data = ls_purchasing_data_vmd. ls_customer-header = ls_header_cmd. ls_customer-central_data = ls_central_data_cmd. ls_customer-company_data = ls_company_data_cmd. ls_customer-sales_data = ls_sales_data_cmd. ls_data-partner = ls_partner. ls_data-vendor = ls_vendor. ls_data-customer = ls_customer. APPEND ls_data TO lt_data. * Call bapi maintain business partners CALL FUNCTION 'CVI_EI_INBOUND_MAIN' EXPORTING i_data = lt_data IMPORTING e_return = lt_return. LOOP AT lt_return INTO ls_return. LOOP AT ls_return-object_msg INTO DATA(ls_return_detail) WHERE type CA lc_err_type. cs_resp-msgty = gc_msgty_e. CONCATENATE cs_resp-msgtx ls_return_detail-message INTO cs_resp-msgtx. ENDLOOP. ENDLOOP. IF cs_resp-msgtx IS INITIAL. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = abap_true. lv_guid_32 = lv_partner_guid. * Get business partner number CALL FUNCTION 'BAPI_BUPA_GET_NUMBERS' EXPORTING businesspartnerguid = lv_guid_32 IMPORTING businesspartnerout = lv_partnerno. cs_resp-msgty = gc_msgty_s. * Changes have been saved. MESSAGE s131(bupa_dialog_joel) INTO cs_resp-msgtx. cs_resp-msgtx = lv_partnerno && lc_colon && cs_resp-msgtx. cs_resp-sapnum = lv_partnerno. ELSE. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. ENDIF. ENDFORM.
以上。

浙公网安备 33010602011771号