近期有创建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.
以上。