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_inCHANGING 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 parametersDATA: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 typeDATA:ls_partner TYPE bus_ei_extern,ls_customer TYPE cmds_ei_extern,ls_vendor TYPE vmds_ei_extern. * Partner basic dataDATA:ls_header TYPE bus_ei_header,ls_central_data TYPE bus_ei_central_data. * Partner basic data detailsDATA:ls_common TYPE bus_ei_bupa_central,ls_communication TYPE bus_ei_communication, * Roles datals_role TYPE bus_ei_roles,lt_roles TYPE bus_ei_bupa_roles_t,ls_roles TYPE bus_ei_bupa_roles, * Address datals_address TYPE bus_ei_address,lt_bupa_address TYPE bus_ei_bupa_address_t,ls_bupa_address TYPE bus_ei_bupa_address, * Bank datals_bankdetail TYPE bus_ei_bankdetail,lt_bupa_bankdetail TYPE bus_ei_bupa_bankdetail_t,ls_bupa_bankdetail TYPE bus_ei_bupa_bankdetail, * Tax datals_taxnumber TYPE bus_ei_taxnumber,lt_bupa_taxnumber TYPE bus_ei_bupa_taxnumber_t,ls_bupa_taxnumber TYPE bus_ei_bupa_taxnumber, * Phone datals_phone TYPE bus_ei_tel_data,lt_bupa_phone TYPE bus_ei_bupa_telephone_t,ls_bupa_phone TYPE bus_ei_bupa_telephone, * Remark datals_remark TYPE bus_ei_comrem,lt_bupa_remarks TYPE bus_ei_bupa_comrem_t,ls_bupa_remarks TYPE bus_ei_bupa_comrem, * Fax datals_fax TYPE bus_ei_fax_data,lt_bupa_fax TYPE bus_ei_bupa_fax_t,ls_bupa_fax TYPE bus_ei_bupa_fax, * Telex datals_ttx TYPE bus_ei_ttx_data,lt_bupa_ttx TYPE bus_ei_bupa_ttx_t,ls_bupa_ttx TYPE bus_ei_bupa_ttx, * Telex datals_tlx TYPE bus_ei_tlx_data,lt_bupa_tlx TYPE bus_ei_bupa_tlx_t,ls_bupa_tlx TYPE bus_ei_bupa_tlx, * SMTP datals_smtp TYPE bus_ei_smtp_data,lt_bupa_smtp TYPE bus_ei_bupa_smtp_t,ls_bupa_smtp TYPE bus_ei_bupa_smtp. * Vendor dataDATA: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 detailsDATA: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 dataDATA: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 detailsDATA: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 parametersDATA: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 datals_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 dataDELETE lt_bank_in WHERE bkvid IS INITIALOR banks IS INITIALOR bankl IS INITIALOR 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 INITIALOR vtweg IS INITIALOR spart IS INITIAL.DELETE lt_company_cus_in WHERE bukrsk IS INITIAL. * Check partner existSELECT SINGLEpartner_guid "Partner UUIDINTO lv_partner_guidFROM but000WHERE partner = ls_bpdata_in-partner.IF lv_partner_guid IS INITIAL.lv_task = lc_task_i. * Generate UUID for create business partnerTRY .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 Categoryls_common-data-bp_control-grouping = us_req-bu_group. "Business Partner GroupingIF ls_bpdata_in-title IS NOT INITIAL.ls_common-data-bp_centraldata-title_key = ls_bpdata_in-title. "Form-of-Address Keyls_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 organizationls_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 organizationls_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 organizationls_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 Partnerls_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 Partnerls_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 Systemls_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."Salutationls_common-datax-bp_centraldata-titleletter = abap_true.ENDIF.ls_central_data-common = ls_common. ********************************************************************** * Roles data part ********************************************************************** * Get exists rolesSELECT partner, "Partner numberrltyp "RolesINTO TABLE @DATA(lt_but100)FROM but100WHERE partner = @ls_bpdata_in-partnerAND rltyp IN ( @lc_roles_zflvn0,@lc_roles_zflvn1,@lc_roles_zflcu1,@lc_roles_zflcu0 ).SORT lt_but100 BY partner ASCENDINGrltyp ASCENDING.IF lt_company_in IS NOT INITIAL.READ TABLE lt_but100 TRANSPORTING NO FIELDSWITH KEY partner = ls_bpdata_in-partnerrltyp = lc_roles_zflvn0BINARY SEARCH.IF sy-subrc <> 0.ls_roles-task = lc_task_i.ls_roles-data_key = lc_roles_zflvn0. "Role:ZFLVN0APPEND ls_roles TO lt_roles.CLEAR ls_roles.ENDIF.ENDIF.IF lt_purchase_in IS NOT INITIAL.READ TABLE lt_but100 TRANSPORTING NO FIELDSWITH KEY partner = ls_bpdata_in-partnerrltyp = lc_roles_zflvn1BINARY SEARCH.IF sy-subrc <> 0.ls_roles-task = lc_task_i.ls_roles-data_key = lc_roles_zflvn1. "Role:ZFLVN1APPEND ls_roles TO lt_roles.CLEAR ls_roles.ENDIF.ENDIF.IF lt_company_cus_in IS NOT INITIAL.READ TABLE lt_but100 TRANSPORTING NO FIELDSWITH KEY partner = ls_bpdata_in-partnerrltyp = lc_roles_zflcu0BINARY SEARCH.IF sy-subrc <> 0.ls_roles-task = lc_task_i.ls_roles-data_key = lc_roles_zflcu0. "Role:ZFLCU0APPEND ls_roles TO lt_roles.CLEAR ls_roles.ENDIF.ENDIF.IF lt_sales_in IS NOT INITIAL.READ TABLE lt_but100 TRANSPORTING NO FIELDSWITH KEY partner = ls_bpdata_in-partnerrltyp = lc_roles_zflcu1BINARY SEARCH.IF sy-subrc <> 0.ls_roles-task = lc_task_i. "Role:ZFLCU1ls_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 guidSELECT SINGLE address_guidINTO @DATA(lv_addr_guid)FROM but020WHERE partner = @ls_bpdata_in-partner.ls_bupa_address-data_key-guid = lv_addr_guid. "Address guidENDIF.IF ls_bpdata_in-postl_cod1 IS NOT INITIAL.ls_bupa_address-data-postal-data-postl_cod1 = ls_bpdata_in-postl_cod1. "City postal codels_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. "Cityls_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. "Streetls_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 2ls_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 3ls_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 Keyls_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 Codels_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. "Districtls_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 typeENDIF.IF ls_bpdata_in-taxnum IS NOT INITIAL.ls_bupa_taxnumber-data_key-taxnumber = ls_bpdata_in-taxnum. "Tax numberENDIF.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 detailsSELECT a~partner,a~addrcomm,b~persnumber,b~date_from,b~consnumber,b~tel_number,b~r3_userINTO TABLE @DATA(lt_adr2)FROM but000 AS aINNER JOIN adr2 AS bON a~addrcomm = b~addrnumberWHERE a~partner = @ls_bpdata_in-partner.SORT lt_adr2 BY partner ASCENDINGr3_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+numberls_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.: Extensionls_bupa_phone-contact-datax-extension = abap_true.ENDIF.ls_bupa_phone-contact-data-r_3_user = lc_phone_type_1. "Telephone is Landline Telephonels_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 notesls_bupa_remarks-datax-comm_notes = abap_true.ls_bupa_remarks-data-langu = sy-langu. "Language Keyls_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_adr2WITH 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 Telephonels_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+numberls_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.: Extensionls_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 Addressls_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. "Phonels_central_data-communication-fax = ls_fax. "Faxls_central_data-communication-smtp = ls_smtp. "SMTP ********************************************************************** * Bank data part **********************************************************************IF lt_bank_in IS NOT INITIAL. * Get exists Bank details IDSELECT partner,bkvidINTO TABLE @DATA(lt_but0bk)FROM but0bkFOR ALL ENTRIES IN @lt_bank_inWHERE partner = @ls_bpdata_in-partnerAND bkvid = @lt_bank_in-bkvid.SORT lt_but0bk BY partner ASCENDINGbkvid ASCENDING.LOOP AT lt_bank_in INTO DATA(ls_bank_in).READ TABLE lt_but0bk TRANSPORTING NO FIELDSWITH 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 IDIF ls_bank_in-banks IS NOT INITIAL.ls_bupa_bankdetail-data-bank_ctry = ls_bank_in-banks. "Bank Country Keyls_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 Numberls_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 Detailsls_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 Keyls_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 Namels_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 lifnrINTO @DATA(lv_lfa1_lifnr)FROM lfa1WHERE 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 detailsSELECT lifnr,banks,bankl,banknINTO TABLE @DATA(lt_lfbk)FROM lfbkFOR ALL ENTRIES IN @lt_bank_inWHERE lifnr = @ls_bpdata_in-partnerAND banks = @lt_bank_in-banksAND bankl = @lt_bank_in-banklAND bankn = @lt_bank_in-bankn.SORT lt_lfbk BY lifnr ASCENDINGbanks ASCENDINGbankl ASCENDINGbankn ASCENDING.LOOP AT lt_bank_in INTO ls_bank_in.READ TABLE lt_lfbk TRANSPORTING NO FIELDSWITH KEY banks = ls_bank_in-banksbankl = ls_bank_in-banklbankn = ls_bank_in-banknBINARY 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 Keyls_bankdetails_vmd-data_key-bankl = ls_bank_in-bankl. "Bank Keyls_bankdetails_vmd-data_key-bankn = ls_bank_in-bankn. "Bank Account NumberIF ls_bank_in-bkref IS NOT INITIAL.ls_bankdetails_vmd-data-bkref = ls_bank_in-bkref. "Reference Details for Bank Detailsls_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 Namels_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 dataSELECT lifnr,bukrsINTO TABLE @DATA(lt_lfb1)FROM lfb1FOR ALL ENTRIES IN @lt_company_inWHERE lifnr = @ls_bpdata_in-partnerAND bukrs = @lt_company_in-bukrs.SORT lt_lfb1 BY lifnr ASCENDINGbukrs ASCENDING.LOOP AT lt_company_in INTO DATA(ls_company_in).READ TABLE lt_lfb1 TRANSPORTING NO FIELDSWITH 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 codeIF ls_company_in-akont IS NOT INITIAL.ls_company_vmd-data-akont = ls_company_in-akont. "Reconciliation Account in General Ledgerls_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 numbersls_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 keyls_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 Memosls_company_vmd-datax-reprf = abap_true.ELSE.ls_company_vmd-data-reprf = ls_company_in-reprf. "Check Flag for Double Invoices or Credit Memosls_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 Methodsls_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 Numberls_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 typels_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 tablels_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 fundls_company_vmd-datax-zcapitalist = abap_true.ENDIF.IF ls_company_in-zcurrency IS NOT INITIAL.ls_company_vmd-data-zcurrency = ls_company_in-zcurrency. "Currencyls_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 requiredls_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 codels_company_vmd-datax-sperr = abap_true.ELSE.ls_company_vmd-data-sperr = ls_company_in-sperr. "Posting block for company codels_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 Verificationls_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 dataSELECT lifnr,ekorgINTO TABLE @DATA(lt_lfm1)FROM lfm1FOR ALL ENTRIES IN @lt_purchase_inWHERE lifnr = @ls_bpdata_in-partnerAND ekorg = @lt_purchase_in-ekorg.SORT lt_lfm1 BY lifnr ASCENDINGekorg ASCENDING.LOOP AT lt_purchase_in INTO DATA(ls_purchase_in).READ TABLE lt_lfm1 TRANSPORTING NO FIELDSWITH 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 organizationIF ls_purchase_in-waers IS NOT INITIAL.ls_purchasing_vmd-data-waers = ls_purchase_in-waers. "Purchase order currencyls_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 Verificationls_purchasing_vmd-datax-webre = abap_true.ELSE.ls_purchasing_vmd-data-webre = ls_purchase_in-webre. "Indicator: GR-Based Invoice Verificationls_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 keyls_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 Groupls_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 Numberls_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 levells_purchasing_vmd-datax-sperm = abap_true.ELSE.ls_purchasing_vmd-data-sperm = ls_purchase_in-sperm. "Purchasing block at purchasing organization levells_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 Officels_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 indicatorls_purchasing_vmd-datax-lfabc = abap_true.ELSE.ls_purchasing_vmd-data-lfabc = ls_purchase_in-lfabc. "ABC indicatorls_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 1ls_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 Conditionsls_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 Daysls_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 Controlls_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 PartyCALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT'EXPORTINGinput = lc_parvw_piIMPORTINGoutput = ls_functions_vmd-data_key-parvw.APPEND ls_functions_vmd TO lt_functions_vmd. * Ordering addressCALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT'EXPORTINGinput = lc_parvw_oaIMPORTINGoutput = ls_functions_vmd-data_key-parvw.APPEND ls_functions_vmd TO lt_functions_vmd. * VendorCALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT'EXPORTINGinput = lc_parvw_vnIMPORTINGoutput = 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 kunnrINTO @DATA(lv_kna1_kunnr)FROM kna1WHERE 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 detailsSELECT kunnr,banks,bankl,banknINTO TABLE @DATA(lt_knbk)FROM knbkFOR ALL ENTRIES IN @lt_bank_inWHERE kunnr = @ls_bpdata_in-partnerAND banks = @lt_bank_in-banksAND bankl = @lt_bank_in-banklAND bankn = @lt_bank_in-bankn.SORT lt_knbk BY kunnr ASCENDINGbanks ASCENDINGbankl ASCENDINGbankn ASCENDING.LOOP AT lt_bank_in INTO ls_bank_in.READ TABLE lt_knbk TRANSPORTING NO FIELDSWITH KEY banks = ls_bank_in-banksbankl = ls_bank_in-banklbankn = ls_bank_in-banknBINARY 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 Keyls_bankdetails_cmd-data_key-bankl = ls_bank_in-bankl. "Bank Keyls_bankdetails_cmd-data_key-bankn = ls_bank_in-bankn. "Bank Account NumberIF ls_bank_in-bkref IS NOT INITIAL.ls_bankdetails_cmd-data-bkref = ls_bank_in-bkref. "Reference Details for Bank Detailsls_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 Namels_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 dataSELECT kunnr,bukrsINTO TABLE @DATA(lt_knb1)FROM knb1FOR ALL ENTRIES IN @lt_company_cus_inWHERE kunnr = @ls_bpdata_in-partnerAND bukrs = @lt_company_cus_in-bukrsk.SORT lt_knb1 BY kunnr ASCENDINGbukrs ASCENDING.LOOP AT lt_company_cus_in INTO DATA(ls_company_cus_in).READ TABLE lt_knb1 TRANSPORTING NO FIELDSWITH 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 codeIF ls_company_cus_in-akontk IS NOT INITIAL.ls_company_cmd-data-akont = ls_company_cus_in-akontk. "Reconciliation Account in General Ledgerls_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 numbersls_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 keyls_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 Methodsls_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 Numberls_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 codels_company_cmd-datax-sperr = abap_true.ELSE.ls_company_cmd-data-sperr = ls_company_cus_in-sperrk. "Posting block for company codels_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 Verificationls_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 dataSELECT kunnr,vkorg,vtweg,spartINTO TABLE @DATA(lt_knvv)FROM knvvFOR ALL ENTRIES IN @lt_sales_inWHERE kunnr = @ls_bpdata_in-partnerAND vkorg = @lt_sales_in-vkorgAND vtweg = @lt_sales_in-vtwegAND spart = @lt_sales_in-spart. * Get exists tax dataSELECT kunnr,aland,tatyp,taxkdINTO TABLE @DATA(lt_knvi)FROM knviWHERE kunnr = @ls_bpdata_in-partner.SORT lt_knvv BY kunnr ASCENDINGvkorg ASCENDINGvtweg ASCENDINGspart ASCENDING.SORT lt_knvi BY kunnr ASCENDINGaland ASCENDINGtatyp ASCENDINGtaxkd ASCENDING.LOOP AT lt_sales_in INTO DATA(ls_sales_in).READ TABLE lt_knvv TRANSPORTING NO FIELDSWITH KEY vkorg = ls_sales_in-vkorgvtweg = ls_sales_in-vtwegspart = ls_sales_in-spartBINARY 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 Organizationls_sales_cmd-data_key-vtweg = ls_sales_in-vtweg. "Distribution Channells_sales_cmd-data_key-spart = ls_sales_in-spart. "DivisionIF ls_sales_in-bzirk IS NOT INITIAL.ls_sales_cmd-data-bzirk = ls_sales_in-bzirk. "Sales Districtls_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 Determinationls_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 Groupls_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 Conditionsls_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 customerls_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 officels_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 groupls_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 Groupls_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 Groupls_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 areals_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 1ls_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 keyls_sales_cmd-datax-zterm = abap_true.ENDIF.IF ls_sales_in-waersk IS NOT INITIAL.ls_sales_cmd-data-waers = ls_sales_in-waersk. "Currencyls_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 1ls_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 Indicatorls_sales_cmd-datax-kzazu = abap_true.ELSE.ls_sales_cmd-data-kzazu = ls_sales_in-kzazu. "Order Combination Indicatorls_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 partyCALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT'EXPORTINGinput = lc_parvw_spIMPORTINGoutput = ls_functions_cmd-data_key-parvw.APPEND ls_functions_cmd TO lt_functions_cmd. * Bill-to partyCALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT'EXPORTINGinput = lc_parvw_bpIMPORTINGoutput = ls_functions_cmd-data_key-parvw.APPEND ls_functions_cmd TO lt_functions_cmd. * PayerCALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT'EXPORTINGinput = lc_parvw_pyIMPORTINGoutput = ls_functions_cmd-data_key-parvw.APPEND ls_functions_cmd TO lt_functions_cmd. * Ship-to partyCALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT'EXPORTINGinput = lc_parvw_shIMPORTINGoutput = 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 ANDls_sales_in-taxkd IS NOT INITIAL ANDls_sales_in-aland IS NOT INITIAL.READ TABLE lt_knvi INTO DATA(ls_knvi)WITH KEY aland = ls_sales_in-alandtatyp = ls_sales_in-tatypBINARY 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 customerls_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 partnersCALL FUNCTION 'CVI_EI_INBOUND_MAIN'EXPORTINGi_data = lt_dataIMPORTINGe_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'EXPORTINGwait = abap_true.lv_guid_32 = lv_partner_guid. * Get business partner numberCALL FUNCTION 'BAPI_BUPA_GET_NUMBERS'EXPORTINGbusinesspartnerguid = lv_guid_32IMPORTINGbusinesspartnerout = 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.
以上。