S4 BP客户主数据创建
" 固定的参数
CONSTANTS : c_parvw1 TYPE parvw VALUE 'SP', " 售达方
c_parvw2 TYPE parvw VALUE 'BP', " 收票方
c_parvw3 TYPE parvw VALUE 'PY', " 付款方
c_parvw5 TYPE parvw VALUE 'SH'. " 送达方
CONSTANTS: lc_insert TYPE c VALUE 'I',
lc_update TYPE c VALUE 'U',
lc_modify TYPE c VALUE 'M'.
DATA : lv_bpartnerguid TYPE bu_partner_guid_bapi.
DATA : lt_data TYPE cvis_ei_extern_t,
ls_data TYPE cvis_ei_extern,
lt_return TYPE bapiretm,
ls_return TYPE bapireti,
ls_msg TYPE bapiretc.
DATA : lv_msg TYPE string.
DATA : ls_partner TYPE bus_ei_extern,
ls_customer TYPE cmds_ei_extern.
DATA : lt_roles TYPE bus_ei_bupa_roles_t,
ls_roles TYPE bus_ei_bupa_roles,
lt_banks TYPE bus_ei_bupa_bankdetail_t,
ls_banks TYPE bus_ei_bupa_bankdetail,
lt_taxs TYPE bus_ei_bupa_taxnumber_t,
ls_taxs TYPE bus_ei_bupa_taxnumber,
lt_ident_numbers TYPE bus_ei_bupa_identification_t,
ls_ident_numbers TYPE bus_ei_bupa_identification,
lt_addresses TYPE bus_ei_bupa_address_t,
ls_addresses TYPE bus_ei_bupa_address,
lt_phone TYPE bus_ei_bupa_telephone_t,
ls_phone TYPE bus_ei_bupa_telephone,
lt_fax TYPE bus_ei_bupa_fax_t,
ls_fax TYPE bus_ei_bupa_fax,
lt_smtp TYPE bus_ei_bupa_smtp_t,
ls_smtp TYPE bus_ei_bupa_smtp,
ls_central TYPE cmds_ei_cmd_central,
lt_company TYPE cmds_ei_company_t,
ls_company TYPE cmds_ei_company,
lt_sales TYPE cmds_ei_sales_t,
ls_sales TYPE cmds_ei_sales,
lt_functions TYPE cmds_ei_functions_t,
ls_functions TYPE cmds_ei_functions,
lt_texts TYPE cvis_ei_text_t,
ls_texts TYPE cvis_ei_text,
lt_tab TYPE tline_tab,
ls_tab TYPE tline,
lt_tax_ind TYPE cmds_ei_tax_ind_t,
ls_tax_ind TYPE cmds_ei_tax_ind,
ls_remarks TYPE bus_ei_bupa_comrem,
lt_remarks TYPE bus_ei_bupa_comrem_t.
DATA : lt_partnerguid_list TYPE bu_partner_guid_t,
ls_partnerguid_list LIKE LINE OF lt_partnerguid_list.
DATA : lt_customer_list TYPE cvis_cust_link_t,
ls_customer_list TYPE cvi_cust_link.
DATA : ls_header TYPE cmds_ei_header,
ls_central_data TYPE cmds_ei_central_data,
ls_company_data TYPE cmds_ei_cmd_company,
ls_sales_data TYPE cmds_ei_cmd_sales.
DATA : lv_guid TYPE but000-partner_guid.
DATA: lv_object_task TYPE c.
DATA: lv_task TYPE c.
DATA: lv_functions_task TYPE c.
CLEAR: lv_object_task,
lv_guid.
" 转换程内码 补前导零
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = ps_tab-partner
IMPORTING
output = ps_tab-partner.
" 根据传入的处理类型 进行判断 I 新增 U 修改
CASE ps_tab-zczlx.
WHEN 'I'." 新增
" 新增的时候获取 GUID
TRY .
CLEAR lv_bpartnerguid.
lv_bpartnerguid = cl_uuid_factory=>create_system_uuid( )->create_uuid_x16( ).
CATCH cx_uuid_error.
"返回消息
ENDTRY.
lv_object_task = lc_insert." 新增
lv_task = lc_insert." 新增
lv_functions_task = lc_insert.
WHEN 'U'." 修改
" 修改的时候已经有GUID了需要获取已有的GUID
CLEAR lv_guid.
SELECT SINGLE partner_guid INTO lv_guid
FROM but000 WHERE partner = ps_tab-partner.
lv_bpartnerguid = lv_guid.
lv_object_task = lc_update." 修改
lv_task = lc_update." 修改
lv_functions_task = lc_update.
WHEN OTHERS.
ENDCASE.
CLEAR: ls_partner.
ls_partner-header-object_task = lv_object_task." 更新标识
ls_partner-header-object_instance-bpartnerguid = lv_bpartnerguid." GUID
ls_partner-header-object_instance-bpartner = ps_tab-partner." 客户编码
ls_partner-central_data-common-data-bp_control-category = '2'. "业务伙伴类别(1代表人员,2代表组织,3代表组)
ls_partner-central_data-common-data-bp_control-grouping = ps_tab-bu_group. "业务伙伴分组 账户组
ls_partner-central_data-common-data-bp_centraldata-title_key = ps_tab-title. "称谓
ls_partner-central_data-common-data-bp_centraldata-searchterm1 = ps_tab-bu_sort1. "检索项1
ls_partner-central_data-common-data-bp_organization-name1 = ps_tab-name_org1. "名称1
ls_partner-central_data-common-datax-bp_centraldata-title_key = abap_true.
ls_partner-central_data-common-datax-bp_centraldata-searchterm1 = abap_true.
ls_partner-central_data-common-datax-bp_organization-name1 = abap_true.
CLEAR lt_roles[].
CLEAR:ls_roles.
ls_roles-task = lv_task.
ls_roles-data_key = 'FLCU01'. "销售角色
APPEND ls_roles TO lt_roles.
CLEAR:ls_roles.
ls_roles-task = lv_task.
ls_roles-data_key = 'FLCU00'. "公司角色
APPEND ls_roles TO lt_roles.
ls_partner-central_data-role-roles = lt_roles.
" 银行数据
CLEAR: lt_banks[].
CLEAR: ls_banks.
ls_banks-task = lv_task.
ls_banks-data-bank_ctry = ps_tab-banks. "银行国家代码
ls_banks-data-bank_key = ps_tab-bankl. "银行代码
ls_banks-data-bank_acct = ps_tab-bankn. "银行帐户号码
ls_banks-data-bankaccountname = ps_tab-banka. "开户行
ls_banks-data-accountholder = ps_tab-koinh. "银行户主
ls_banks-datax-bank_ctry = 'X'.
ls_banks-datax-bank_key = 'X'.
ls_banks-datax-bank_acct = 'X'.
ls_banks-datax-bankaccountname = 'X'.
ls_banks-datax-accountholder = 'X'.
APPEND ls_banks TO lt_banks.
ls_partner-central_data-bankdetail-bankdetails = lt_banks.
" 地址基础信息
CLEAR: lt_addresses[].
CLEAR: ls_addresses.
SELECT SINGLE *
INTO @DATA(ls_020)
FROM but020
WHERE partner = @ps_tab-partner.
IF sy-subrc = 0.
ls_addresses-data_key-guid = ls_020-address_guid.
ENDIF.
ls_addresses-task = lv_task." 更新标识
CALL FUNCTION 'CONVERSION_EXIT_ISOLA_INPUT'
EXPORTING
input = ps_tab-spras
IMPORTING
output = ls_addresses-data-postal-data-langu " 语言
EXCEPTIONS
unknown_language = 1.
ls_addresses-data-postal-data-languiso = ps_tab-spras. " 语言
ls_addresses-data-postal-data-street = ps_tab-stras. " 街道
ls_addresses-data-postal-data-city = ps_tab-ort01. " 城市
ls_addresses-data-postal-data-district = ps_tab-city2. " 区域
ls_addresses-data-postal-data-postl_cod1 = ps_tab-pstlz. " 邮政编码
ls_addresses-data-postal-data-country = ps_tab-land1. " 国家代码
ls_addresses-data-postal-data-region = ps_tab-regio. " 地区代码
ls_addresses-data-postal-data-c_o_name = ps_tab-name_co." 代收人
ls_addresses-data-postal-datax-langu_iso = abap_true. " 语言
ls_addresses-data-postal-datax-langu = abap_true. " 语言
ls_addresses-data-postal-datax-street = abap_true. " 街道
ls_addresses-data-postal-datax-city = abap_true. " 城市
ls_addresses-data-postal-datax-district = abap_true. " 区域
ls_addresses-data-postal-datax-postl_cod1 = abap_true. " 邮政编码
ls_addresses-data-postal-datax-country = abap_true. " 国家代码
ls_addresses-data-postal-datax-region = abap_true. " 地区代码
ls_addresses-data-postal-datax-c_o_name = abap_true. " 代收人
" 电话
CLEAR:ls_phone,lt_phone[].
ls_phone-contact-task = lv_task.
ls_phone-contact-data-telephone = ps_tab-tel_number2. "电话1
ls_phone-contact-data-country = ps_tab-land1.
ls_phone-contact-data-consnumber = '001'.
ls_phone-contact-data-r_3_user = '1'.
ls_phone-contact-datax-telephone = abap_true.
ls_phone-contact-datax-country = abap_true.
ls_phone-contact-datax-consnumber = abap_true.
ls_phone-contact-datax-r_3_user = abap_true.
APPEND ls_phone TO lt_phone.
CLEAR:ls_phone.
ls_phone-contact-task = lv_task.
ls_phone-contact-data-telephone = ps_tab-tel_number."手机1
ls_phone-contact-data-country = ps_tab-land1.
ls_phone-contact-data-consnumber = '002'.
ls_phone-contact-data-r_3_user = '3'. "3表示移动电话
ls_phone-contact-datax-telephone = abap_true.
ls_phone-contact-datax-country = abap_true.
ls_phone-contact-datax-consnumber = abap_true.
ls_phone-contact-datax-r_3_user = abap_true.
APPEND ls_phone TO lt_phone.
ls_addresses-data-communication-phone-phone = lt_phone.
"传真1
CLEAR:lt_fax.
CLEAR:ls_fax.
ls_fax-contact-task = lv_task.
ls_fax-contact-data-fax = ps_tab-fax_number. "传真号
ls_fax-contact-datax-fax = abap_true.
APPEND ls_fax TO lt_fax.
ls_addresses-data-communication-fax-fax = lt_fax.
"邮件1
CLEAR:lt_smtp.
CLEAR:ls_smtp.
ls_smtp-contact-task = lv_task.
ls_smtp-contact-data-e_mail = ps_tab-email. "邮件
ls_smtp-contact-datax-e_mail = abap_true.
APPEND ls_smtp TO lt_smtp.
ls_addresses-data-communication-smtp-smtp = lt_smtp.
APPEND ls_addresses TO lt_addresses.
ls_partner-central_data-address-addresses = lt_addresses.
"
CLEAR: ls_header,
ls_customer,
ls_central,
ls_central_data.
ls_header-object_task = lv_object_task.
ls_header-object_instance-kunnr = ps_tab-partner.
ls_customer-header = ls_header.
ls_central-data-stcd5 = ps_tab-stceg. "增值税登记号
ls_central-datax-stcd5 = abap_true.
ls_central-data-kukla = ps_tab-kukla. "客户分类
ls_central-datax-kukla = abap_true.
ls_central-data-vbund = ps_tab-vbund. "贸易伙伴(6)
ls_central-datax-vbund = abap_true.
CLEAR:ls_tax_ind,lt_tax_ind[].
ls_tax_ind-task = lv_task.
ls_tax_ind-data_key-aland = 'CN'.
ls_tax_ind-data_key-tatyp = 'MWST'.
ls_tax_ind-data-taxkd = ps_tab-taxkd.
ls_tax_ind-datax-taxkd = abap_true.
APPEND ls_tax_ind TO lt_tax_ind.
ls_central_data-tax_ind-tax_ind = lt_tax_ind.
ls_central_data-central = ls_central.
ls_customer-central_data = ls_central_data.
CLEAR: lt_company[],
ls_company.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' " 统驭科目补零
EXPORTING
input = ps_tab-hkont
IMPORTING
output = ps_tab-hkont.
ls_company-task = lv_task.
ls_company-data_key-bukrs = ps_tab-bukrs. "公司代码
ls_company-data-akont = ps_tab-hkont. "统驭科目
ls_company-data-zterm = ps_tab-zterm. "付款条件
ls_company-datax-akont = abap_true.
ls_company-datax-zterm = abap_true.
APPEND ls_company TO lt_company.
ls_company_data-company = lt_company.
ls_customer-company_data = ls_company_data.
" 销售数据
CLEAR: lt_sales[],
ls_sales.
ls_sales-task = lv_task.
ls_sales-data_key-vkorg = ps_tab-vkorg."销售组织
ls_sales-data_key-vtweg = ps_tab-vtweg."分销渠道
ls_sales-data_key-spart = ps_tab-spart."产品组
ls_sales-data-vkbur = ps_tab-vkbur."销售部门
ls_sales-data-vkgrp = ps_tab-vkgrp."销售组
ls_sales-data-waers = ps_tab-waers."货币
ls_sales-data-kalks = ps_tab-kalks."定价过程
ls_sales-data-vwerk = ps_tab-werks."工厂
ls_sales-data-vsbed = ps_tab-vsbed."装运条件
ls_sales-data-inco1 = ps_tab-inco1."国际贸易条款1
ls_sales-data-inco2 = ps_tab-inco2."国际贸易条款2
ls_sales-data-ktgrd = ps_tab-ktgrd."账户分配组
ls_sales-data-kdgrp = ps_tab-kdgrp."客户组
ls_sales-data-zterm = ps_tab-zterm."付款条件
ls_sales-datax-vkbur = abap_true."销售部门
ls_sales-datax-vkgrp = abap_true."销售组
ls_sales-datax-waers = abap_true."货币
ls_sales-datax-kalks = abap_true."定价过程
ls_sales-datax-vwerk = abap_true."工厂
ls_sales-datax-vsbed = abap_true."装运条件
ls_sales-datax-inco1 = abap_true."国际贸易条款1
ls_sales-datax-inco2 = abap_true."国际贸易条款2
ls_sales-datax-zterm = abap_true."账户分配组
ls_sales-datax-ktgrd = abap_true."客户组
ls_sales-datax-zterm = abap_true."付款条件
"Function伙伴功能
CLEAR ls_functions.
ls_functions-task = lv_functions_task.
CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT'
EXPORTING
input = c_parvw1 "SP 售达方
IMPORTING
output = ls_functions-data_key-parvw.
APPEND ls_functions TO lt_functions.
CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT'
EXPORTING
input = c_parvw2 "BP 收票方
IMPORTING
output = ls_functions-data_key-parvw.
APPEND ls_functions TO lt_functions.
CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT'
EXPORTING
input = c_parvw5 "PY 付款方
IMPORTING
output = ls_functions-data_key-parvw.
APPEND ls_functions TO lt_functions.
CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT'
EXPORTING
input = c_parvw3 "SH 送达方
IMPORTING
output = ls_functions-data_key-parvw.
APPEND ls_functions TO lt_functions.
ls_sales-functions-functions = lt_functions.
APPEND ls_sales TO lt_sales.
ls_sales_data-sales = lt_sales.
ls_customer-sales_data = ls_sales_data.
ls_data-partner = ls_partner.
ls_data-customer = ls_customer.
APPEND ls_data TO lt_data.
CALL FUNCTION 'CVI_EI_INBOUND_MAIN'
EXPORTING
i_data = lt_data
IMPORTING
e_return = lt_return.
根据伙伴guid取出客户编号
ls_partnerguid_list = ls_partner-header-object_instance-bpartnerguid.
APPEND ls_partnerguid_list TO lt_partnerguid_list.
lt_customer_list = cvi_mapper=>get_instance( )->get_assigned_customers_for_bps(
i_partner_guids = lt_partnerguid_list ).
" 增值税登记号
DATA :lt_taxr TYPE TABLE OF bapiret2 WITH HEADER LINE.
DATA :lv_taxmsg TYPE char100.
DATA: iv_taxtype TYPE bapibus1006tax-taxtype,
iv_taxnumber TYPE bapibus1006tax-taxnumber.
iv_taxtype = 'CN0'.
iv_taxnumber = ps_tab-stceg.
IF ps_tab-zczlx = 'I'.
CALL FUNCTION 'BAPI_BUPA_TAX_ADD'
EXPORTING
businesspartner = ps_tab-partner
taxtype = iv_taxtype
taxnumber = iv_taxnumber
TABLES
return = lt_taxr.