导语:分享一个客户主数据批导的程序,调用函数CVI_EI_INBOUND_MAIN导入到BP中,内表gs_upload前部分字段是EXCEL模板,直接贴代码了,就不做解释了,懒。
*&---------------------------------------------------------------------*
*& Report ZSDR041
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zsdr041.
TABLES:sscrfields.
*-->ALV Define
DATA: gt_fieldcat TYPE lvc_t_fcat ."字段属性得定义
DATA: gs_fieldcat TYPE lvc_s_fcat ."字段属性定义
DATA: gs_layout TYPE lvc_s_layo ."layout 格式定义
CONSTANTS:c_green LIKE dv70a-statusicon VALUE '@08@',
c_yellow LIKE dv70a-statusicon VALUE '@09@',
c_red LIKE dv70a-statusicon VALUE '@0A@'.
*工具栏上排除的按钮
DATA:gt_exclude TYPE ui_functions.
*-->Other Define.
DATA:ok_code LIKE sy-ucomm.
DATA:functxt TYPE smp_dyntxt.
DATA:g_file TYPE sapb-sappfad.
DATA:gv_error TYPE c.
*-->内表定义
DATA : BEGIN OF gs_upload,
kunnr TYPE kunnr, "客户编号
name1 TYPE name1, "名称1(必输)
name2 TYPE name2, "名称2
sort1 TYPE ad_sort1, "搜索条件1(必输)
sort2 TYPE ad_sort2, "搜索条件2(必输)
street TYPE ad_street, "街道(送货地址)(必输)"
land1 TYPE land1, "国家(必输)
region TYPE regio, "地区
pstlz TYPE pstlz, "邮政编码
langu TYPE spras, "语言(必输)
telf1 TYPE telf1, "电话号码(必输)
telf2 TYPE telf2, "移动电话
fax_number TYPE ad_fxnmbr1, "传真
taxnumxl TYPE bptaxnumxl, "增值税登记号
banks TYPE banks, "银行国家
bankl TYPE bankl, "银行描述
bankn TYPE bankk, "银行账户
bkref TYPE bkref, "参考明细
vkorg TYPE vkorg, "销售组织(必输)
vtweg TYPE vtweg, "分销渠道(必输)
spart TYPE spart, "产品组(必输)
rltyp TYPE char12, "BP Role(必输)
bu_group TYPE bu_group, "分组(必输)
bzirk TYPE bzirk, "销售区域(必输)
vkbur TYPE vkbur, "销售办公室(必输)
vkgrp TYPE vkgrp, "销售小组(必输)
user1 TYPE char12, "员工编号1(必输)
user2 TYPE char12, "员工编号2
waers TYPE waers, "币别(必输)
kurst TYPE knvv-kurst, "汇率类型(必输)
inco1 TYPE inco1, "国际贸易条款(必输)
inco2_l TYPE inco2_l, "国际贸易条款位置 1(必输)
zterm TYPE dzterm, "付款条件(必输)
ktgrd TYPE knvv-ktgrd, "科目指派群(必输)
taxkd1 TYPE takld, "客户税分类-CN(必输)
pltyp TYPE pltyp, "价格清单(必输)
bukrs TYPE bukrs, "公司代码(必输)
akont TYPE akont, "统驭科目(必输)
zterm2 TYPE dzterm, "付款条件(必输)
str_suppl1 TYPE ad_strspp1, "街道2
str_suppl2 TYPE ad_strspp2, "街道3
str_suppl3 TYPE ad_strspp3, "街道4
location TYPE ad_lctn, "街道5
"辅助字段
sel,
deng TYPE char4,
message TYPE char40,
END OF gs_upload.
DATA : gt_upload LIKE TABLE OF gs_upload.
*-->SELECTION-SCREEN
SELECTION-SCREEN BEGIN OF BLOCK blc_001 WITH FRAME TITLE TEXT-001.
PARAMETERS : p_file LIKE rlgrap-filename MODIF ID r1.
SELECTION-SCREEN END OF BLOCK blc_001.
SELECTION-SCREEN: FUNCTION KEY 1.
INITIALIZATION.
PERFORM frm_sub_button. "模板按钮
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file. "data declaration must be front of this statement
PERFORM select_file.
AT SELECTION-SCREEN.
PERFORM frm_download_mod."选择屏幕按钮
START-OF-SELECTION.
PERFORM frm_upload_data. "导入数据
PERFORM frm_check_data. "检查必输数据
PERFORM frm_alv_output. "ALV输出
*&---------------------------------------------------------------------*
*& Form frm_sub_button
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_sub_button .
CLEAR functxt.
functxt-icon_id = icon_export."icon_view_form
functxt-icon_text = '下载批导模板'.
sscrfields-functxt_01 = functxt.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form select_file
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM select_file .
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_path = ''
mask = ',*.*,*.*.'(101)
title = 'Select File'(100)
IMPORTING
filename = p_file
EXCEPTIONS
inv_winsys = 1
no_batch = 2
selection_cancel = 3
selection_error = 4
OTHERS = 5.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_upload_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_upload_data .
DATA: lt_excel TYPE TABLE OF alsmex_tabline WITH HEADER LINE.
FIELD-SYMBOLS: <fs_val>.
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
filename = p_file
i_begin_col = '1' "从第一列开始
i_begin_row = '4' "从第四行开始
i_end_col = '50'
i_end_row = '50000'
TABLES
intern = lt_excel
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 2
OTHERS = 3.
LOOP AT lt_excel.
CONDENSE lt_excel-value.
ASSIGN COMPONENT lt_excel-col OF STRUCTURE gs_upload TO <fs_val>.
<fs_val> = lt_excel-value.
AT END OF row.
APPEND gs_upload TO gt_upload.
CLEAR gs_upload.
ENDAT.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_check_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_check_data .
LOOP AT gt_upload ASSIGNING FIELD-SYMBOL(<fs_upload>).
"必输检查
IF <fs_upload>-name1 IS INITIAL
OR <fs_upload>-sort1 IS INITIAL
OR <fs_upload>-street IS INITIAL
OR <fs_upload>-land1 IS INITIAL
OR <fs_upload>-langu IS INITIAL
OR <fs_upload>-pstlz IS INITIAL
OR <fs_upload>-telf1 IS INITIAL
OR <fs_upload>-vkorg IS INITIAL
OR <fs_upload>-vtweg IS INITIAL
OR <fs_upload>-spart IS INITIAL
* OR <fs_upload>-bu_group IS INITIAL
* OR <fs_upload>-bzirk IS INITIAL
OR <fs_upload>-vkbur IS INITIAL
OR <fs_upload>-vkgrp IS INITIAL
OR <fs_upload>-waers IS INITIAL
OR <fs_upload>-kurst IS INITIAL "汇率类型
* OR <fs_upload>-inco1 IS INITIAL
* OR <fs_upload>-inco2_l IS INITIAL
OR <fs_upload>-zterm IS INITIAL
OR <fs_upload>-ktgrd IS INITIAL "科目指派群
OR <fs_upload>-taxkd1 IS INITIAL
OR <fs_upload>-pltyp IS INITIAL
OR <fs_upload>-bukrs IS INITIAL
OR <fs_upload>-akont IS INITIAL
OR <fs_upload>-user1 IS INITIAL
OR <fs_upload>-user2 IS INITIAL
OR <fs_upload>-zterm IS INITIAL.
<fs_upload>-deng = c_red.
<fs_upload>-message = '存在必输字段未给值,请检查导入模板!'.
gv_error = 'X'.
ELSE.
<fs_upload>-sel = 'X'.
<fs_upload>-deng = c_yellow.
IF <fs_upload>-bankl IS NOT INITIAL OR <fs_upload>-banks IS NOT INITIAL.
SELECT COUNT(*) FROM bnka WHERE bankl = <fs_upload>-bankl
AND banks = <fs_upload>-banks.
IF sy-subrc <> 0.
<fs_upload>-deng = c_red.
<fs_upload>-message = '银行信息在SAP不存在,请检查模板!'.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_alv_output
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_alv_output .
PERFORM fill_fieldcat. "字段属性定义
PERFORM fill_layout. "格式定义
PERFORM alv_display.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form fill_fieldcat
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM fill_fieldcat .
DEFINE add_fieldcat.
CLEAR gs_fieldcat.
gs_fieldcat-fieldname = &1.
gs_fieldcat-reptext = &2.
gs_fieldcat-edit = &3.
gs_fieldcat-col_pos = &4.
gs_fieldcat-just = &5.
gs_fieldcat-outputlen = &6.
gs_fieldcat-fix_column = &7.
CASE &1 .
WHEN 'SEL'.
gs_fieldcat-checkbox = 'X'.
ENDCASE.
APPEND gs_fieldcat TO gt_fieldcat.
END-OF-DEFINITION.
CLEAR gt_fieldcat.
REFRESH gt_fieldcat.
add_fieldcat 'SEL' '选择' 'X' '' '' '' ''.
add_fieldcat 'DENG' '状态' '' '' '' '' ''.
add_fieldcat 'MESSAGE' '消息' '' '' '' '' ''.
add_fieldcat 'KUNNR' '客户编号' '' '' '' '' ''.
add_fieldcat 'NAME1' '名称1' '' '' '' '' ''.
add_fieldcat 'NAME2' '名称2' '' '' '' '' ''.
add_fieldcat 'SORT1' '搜索条件1' '' '' '' '' ''.
add_fieldcat 'SORT2' '搜索条件2' '' '' '' '' ''.
add_fieldcat 'STREET' '街道(送货地址)' '' '' '' '' ''.
add_fieldcat 'LAND1' '国家' '' '' '' '' ''.
add_fieldcat 'REGION' '地区' '' '' '' '' ''.
add_fieldcat 'PSTLZ' '邮政编码' '' '' '' '' ''.
add_fieldcat 'LANGU' '语言' '' '' '' '' ''.
add_fieldcat 'TELF1' '电话号码' '' '' '' '' ''.
add_fieldcat 'TELF2' '移动电话' '' '' '' '' ''.
add_fieldcat 'FAX_NUMBER' '传真' '' '' '' '' ''.
add_fieldcat 'TAXNUMXL' '增值税登记号' '' '' '' '' ''.
add_fieldcat 'BANKS' '银行国家' '' '' '' '' ''.
add_fieldcat 'BANKL' '银行描述' '' '' '' '' ''.
add_fieldcat 'BANKN' '银行账户' '' '' '' '' ''.
add_fieldcat 'BKREF' '参考明细' '' '' '' '' ''.
add_fieldcat 'VKORG' '销售组织' '' '' '' '' ''.
add_fieldcat 'VTWEG' '分销渠道' '' '' '' '' ''.
add_fieldcat 'SPART' '产品组' '' '' '' '' ''.
add_fieldcat 'RLTYP' 'BP角色' '' '' '' '' ''.
add_fieldcat 'BU_GROUP' '分组' '' '' '' '' ''.
add_fieldcat 'BZIRK' '销售区域' '' '' '' '' ''.
add_fieldcat 'VKBUR' '销售办公室' '' '' '' '' ''.
add_fieldcat 'VKGRP' '销售小组' '' '' '' '' ''.
add_fieldcat 'USER1' '员工编号1' '' '' '' '' ''.
add_fieldcat 'USER2' '员工编号2' '' '' '' '' ''.
add_fieldcat 'WAERS' '币别' '' '' '' '' ''.
add_fieldcat 'KURST' '汇率类型' '' '' '' '' ''.
add_fieldcat 'INCO1' '国际贸易条款' '' '' '' '' ''.
add_fieldcat 'INCO2_L' '国际贸易条款位置 ' '' '' '' '' ''.
add_fieldcat 'ZTERM' '付款条件' '' '' '' '' ''.
add_fieldcat 'KTGRD' '科目指派群' '' '' '' '' ''.
add_fieldcat 'TAXKD1' '客户税分类-CN' '' '' '' '' ''.
add_fieldcat 'PLTYP' '价格清单' '' '' '' '' ''.
add_fieldcat 'BUKRS' '公司代码' '' '' '' '' ''.
add_fieldcat 'AKONT' '统驭科目' '' '' '' '' ''.
add_fieldcat 'ZTERM2' '付款条件' '' '' '' '' ''.
add_fieldcat 'STR_SUPPL1' '街道2' '' '' '' '' ''.
add_fieldcat 'STR_SUPPL2' '街道3' '' '' '' '' ''.
add_fieldcat 'STR_SUPPL3' '街道4' '' '' '' '' ''.
add_fieldcat 'LOCATION' '街道5' '' '' '' '' ''.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form fill_layout
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM fill_layout .
* 定义列自动宽度优化
gs_layout-cwidth_opt = 'X'.
gs_layout-sel_mode = 'A'.
* gs_layout-no_rowmark = 'X'.
* 定义条纹显示
gs_layout-zebra = 'X'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form alv_display
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM alv_display .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid
i_callback_pf_status_set = 'STATUS' "GUI状态
i_callback_user_command = 'USER_COMMAND' "按钮事件
is_layout_lvc = gs_layout
it_fieldcat_lvc = gt_fieldcat
TABLES
t_outtab = gt_upload
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 DISPLAY LIKE 'E'.
ENDIF.
ENDFORM.
FORM status USING rt_extab TYPE slis_t_extab.
SET PF-STATUS 'STATUS'.
ENDFORM.
FORM user_command USING u_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
DATA: lo_grid TYPE REF TO cl_gui_alv_grid,
lv_code LIKE sy-ucomm.
DATA: ls_stable TYPE lvc_s_stbl.
" 刷新alv屏幕数据
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = lo_grid.
CALL METHOD lo_grid->check_changed_data.
CASE u_ucomm.
WHEN '&F03' OR '&F12' OR '&F15'.
LEAVE TO SCREEN 0.
WHEN 'UPLOAD'.
PERFORM frm_process.
ENDCASE.
rs_selfield-refresh = 'X'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_process
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_process .
CONSTANTS : c_parvw1 TYPE parvw VALUE 'SP', "售达方
c_parvw2 TYPE parvw VALUE 'BP', "收票方
c_parvw3 TYPE parvw VALUE 'PY', "付款方
c_parvw4 TYPE parvw VALUE 'SH', "送达方
c_parvw5 TYPE parvw VALUE 'VM', "业务员
c_parvw6 TYPE parvw VALUE 'VN'. "业务助理
DATA : lt_roles TYPE bus_ei_bupa_roles_t, "Role Data
ls_roles TYPE bus_ei_bupa_roles.
DATA : lt_addresses TYPE bus_ei_bupa_address_t,
ls_addresses TYPE bus_ei_bupa_address.
DATA : lt_phone TYPE bus_ei_bupa_telephone_t,
ls_phone TYPE bus_ei_bupa_telephone.
DATA : lt_tel TYPE TABLE OF bapiadtel,
ls_tel TYPE bapiadtel,
lt_telx TYPE TABLE OF bapiadtelx,
ls_telx TYPE bapiadtelx.
DATA : lt_fax TYPE bus_ei_bupa_fax_t, "传真
ls_fax TYPE bus_ei_bupa_fax.
DATA : lt_remark TYPE bus_ei_bupa_addressremark_t,
ls_remark TYPE bus_ei_bupa_addressremark.
DATA : lt_tax TYPE bus_ei_bupa_taxnumber_t,
ls_tax TYPE bus_ei_bupa_taxnumber.
DATA : lt_id TYPE bus_ei_bupa_identification_t,
ls_id TYPE bus_ei_bupa_identification.
DATA : lt_company TYPE cmds_ei_company_t,
ls_company TYPE cmds_ei_company.
DATA : lt_text TYPE cvis_ei_text_t,
ls_text TYPE cvis_ei_text.
DATA : lt_lines TYPE tline_tab,
ls_lines TYPE tline.
DATA : lt_tax_ind TYPE cmds_ei_tax_ind_t,
ls_tax_ind TYPE cmds_ei_tax_ind.
DATA : lt_sales TYPE cmds_ei_sales_t,
ls_sales TYPE cmds_ei_sales.
DATA : lt_functions TYPE cmds_ei_functions_t,
ls_functions TYPE cmds_ei_functions.
DATA : lt_data TYPE cvis_ei_extern_t,
ls_data TYPE cvis_ei_extern.
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 : lt_return TYPE bapiretm,
ls_return TYPE bapireti.
* DATA : lt_zsd_sales TYPE STANDARD TABLE OF zsd_bp_sales_data.
DATA : ls_bank_data TYPE bus_ei_bupa_bankdetail.
DATA : ls_partner TYPE bus_ei_extern,
ls_customer TYPE cmds_ei_extern.
* DATA : ls_company_view_data TYPE zsd_bp_company_data,
* ls_sales_view_data TYPE zsd_bp_sales_data,
DATA : ls_msg TYPE bapiretc.
DATA : lt_master_data TYPE cmds_ei_main,
ls_master_data TYPE cmds_ei_extern.
DATA : lt_error_mess TYPE cvis_message,
ls_error_mess TYPE bapiret2.
DATA : ls_basic TYPE cmds_ei_cmd_central.
DATA : lv_bpartnerguid TYPE bu_partner_guid_bapi,
lv_banky TYPE but0bk-bankl.
DATA : lt_return_tel TYPE STANDARD TABLE OF bapiret2,
ls_return_tel TYPE bapiret2.
DATA : c_message TYPE char255.
DATA : lv_error.
IF gv_error = 'X'.
MESSAGE '存在错误数据,不能导入!' TYPE 'E'.
EXIT.
ENDIF.
LOOP AT gt_upload INTO gs_upload WHERE kunnr IS NOT INITIAL AND sel = 'X'.
lv_error = 'X'.
ENDLOOP.
IF lv_error = 'X'.
MESSAGE '存在已经创建成功的客户,不能再次导入!' TYPE 'E'.
EXIT.
ENDIF.
LOOP AT gt_upload INTO gs_upload WHERE sel = 'X'.
CLEAR : ls_partner.
CLEAR : lv_bpartnerguid.
CLEAR : lt_data.
TRY.
lv_bpartnerguid = cl_uuid_factory=>create_system_uuid( )->create_uuid_x16( ).
CATCH cx_uuid_error.
"返回消息
ENDTRY.
**********************************************************************
* Role
**********************************************************************
CLEAR : lt_roles, ls_roles.
ls_roles-task = 'I'.
ls_roles-data_key = 'ZSD001'. "客户财务视图
APPEND ls_roles TO lt_roles.
ls_roles-task = 'I'.
ls_roles-data_key = 'ZSD002'. "客户销售视图
APPEND ls_roles TO lt_roles.
ls_partner-central_data-role-roles = lt_roles.
**********************************************************************
* 基础数据
**********************************************************************
CHECK lv_bpartnerguid IS NOT INITIAL.
ls_partner-header-object_task = 'I'.
ls_partner-header-object_instance-bpartnerguid = lv_bpartnerguid.
ls_partner-central_data-common-data-bp_control-category = 2. "业务伙伴类别(组织)
ls_partner-central_data-common-data-bp_control-grouping = gs_upload-bu_group. "科目组
ls_partner-central_data-common-data-bp_centraldata-title_key = '0003'. " 称谓
ls_partner-central_data-common-data-bp_organization-name1 = gs_upload-name1. "名称1
ls_partner-central_data-common-data-bp_organization-name2 = gs_upload-name2. "名称2
ls_partner-central_data-common-data-bp_centraldata-searchterm1 = gs_upload-sort1. "搜索项1
ls_partner-central_data-common-data-bp_centraldata-searchterm2 = gs_upload-sort2. "搜索项2
ls_partner-central_data-common-datax-bp_centraldata-title_key = 'X'.
ls_partner-central_data-common-datax-bp_organization-name1 = 'X'.
ls_partner-central_data-common-datax-bp_organization-name2 = 'X'.
ls_partner-central_data-common-datax-bp_centraldata-searchterm1 = 'X'.
ls_partner-central_data-common-datax-bp_centraldata-searchterm2 = 'X'.
*---> Fullfill address 填充地址数据
CLEAR : lt_addresses, ls_addresses.
ls_addresses-task = 'I'.
* ls_addresses-data-postal-data-c_o_name = is_data1-zreceiver. "收票人
ls_addresses-data-postal-data-postl_cod1 = gs_upload-pstlz. "邮政编码
ls_addresses-data-postal-data-street = gs_upload-street. "开票街道
ls_addresses-data-postal-data-str_suppl1 = gs_upload-str_suppl1. "收票地址2
ls_addresses-data-postal-data-str_suppl2 = gs_upload-str_suppl2. "收票地址3
ls_addresses-data-postal-data-str_suppl3 = gs_upload-str_suppl3. "开票街道4
ls_addresses-data-postal-data-location = gs_upload-location. "开票街道5
ls_addresses-data-postal-data-country = gs_upload-land1. "国家代码
ls_addresses-data-postal-data-region = gs_upload-region. "地区代码
* ls_addresses-data-postal-data-city = is_data1-city1. "城市
ls_addresses-data-postal-data-langu = gs_upload-langu. "语言
* ls_addresses-data-postal-data-languiso = is_data1-langu. "语言
* ls_addresses-data-postal-datax-c_o_name = 'X'. "收票人
ls_addresses-data-postal-datax-postl_cod1 = 'X'. "邮政编码
ls_addresses-data-postal-datax-street = 'X'. "开票街道
ls_addresses-data-postal-datax-str_suppl1 = 'X'. "地址:2
ls_addresses-data-postal-datax-str_suppl2 = 'X'. "地址:3
ls_addresses-data-postal-datax-str_suppl3 = 'X'. "开票街道4
ls_addresses-data-postal-datax-location = 'X'. "开票街道5
ls_addresses-data-postal-datax-country = 'X'. "国家代码
ls_addresses-data-postal-datax-region = 'X'. "地区代码
* ls_addresses-data-postal-datax-city = 'X'. "城市
ls_addresses-data-postal-datax-langu = 'X'. "语言
* ls_addresses-data-postal-datax-langu_iso = 'X'. "语言
*--> 电话
CLEAR : ls_phone, lt_phone.
ls_phone-contact-task = 'I'.
ls_phone-contact-data-telephone = gs_upload-telf1. "电话
ls_phone-contact-datax-telephone = 'X'.
APPEND ls_phone TO lt_phone.
ls_phone-contact-task = 'I'.
ls_phone-contact-data-telephone = gs_upload-telf2. "电话
ls_phone-contact-datax-telephone = 'X'.
APPEND ls_phone TO lt_phone.
ls_addresses-data-communication-phone-phone = lt_phone.
APPEND ls_addresses TO lt_addresses.
ls_partner-central_data-address-addresses = lt_addresses.
*-->增值税信息
ls_tax-task = 'I'.
ls_tax-data_key-taxtype = 'CN0'.
ls_tax-data_key-taxnumber = gs_upload-taxnumxl.
ls_tax-data_key-taxnumxl = gs_upload-taxnumxl.
APPEND ls_tax TO lt_tax.
ls_partner-central_data-taxnumber-taxnumbers = lt_tax.
*-->银行信息
IF gs_upload-banks <> '' OR gs_upload-bankl <> '' OR gs_upload-bankn <> '' OR gs_upload-bkref IS NOT INITIAL.
ls_bank_data-task = 'I'.
ls_bank_data-data-bank_ctry = gs_upload-banks. "银行国家代码
ls_bank_data-data-bank_key = gs_upload-bankl. "银行代码
ls_bank_data-data-bank_acct = gs_upload-bankn. "银行帐户号码
ls_bank_data-data-bank_ref = gs_upload-bkref.
* ls_bank_data-data-accountholder = p_basic_data-koinh. "账户持有人
ls_bank_data-datax-bank_ctry = 'X'. "银行国家代码
ls_bank_data-datax-bank_key = 'X'. "银行代码
ls_bank_data-datax-bank_acct = 'X'. "银行帐户号码
ls_bank_data-datax-bank_ref = 'X'.
* ls_bank_data-datax-accountholder = 'X'. "账户持有人
APPEND ls_bank_data TO ls_partner-central_data-bankdetail-bankdetails.
ENDIF.
CLEAR ls_customer.
**********************************************************************
* 客户中心数据
**********************************************************************
* 客户数据表头
ls_customer-header-object_task = 'I'.
ls_tax_ind-task = 'I'.
ls_tax_ind-data_key-aland = 'CN'.
ls_tax_ind-data_key-tatyp = 'MWST'.
ls_tax_ind-data-taxkd = gs_upload-taxkd1. "客户税分类
ls_tax_ind-datax-taxkd = 'X'.
APPEND ls_tax_ind TO lt_tax_ind.
ls_customer-central_data-tax_ind-tax_ind = lt_tax_ind.
**********************************************************************
* 客户销售视图
**********************************************************************
CLEAR : lt_sales.
CLEAR : lt_functions.
ls_sales-task = 'I'.
ls_sales-data_key-vkorg = gs_upload-vkorg. "销售组织
ls_sales-data_key-vtweg = gs_upload-vtweg. "分销渠道
ls_sales-data_key-spart = gs_upload-spart. "产品组
ls_sales-data-vkbur = gs_upload-vkbur. "销售办公室
ls_sales-data-vkgrp = gs_upload-vkgrp. "销售组
* ls_sales-data-kdgrp = is_data1-kdgrp. "客户组
ls_sales-data-waers = gs_upload-waers. "货币
ls_sales-data-kalks = '1'. "客户定价过程
ls_sales-data-vsbed = '01'. "装运条件
ls_sales-data-pltyp = gs_upload-pltyp. "价格清单类型
* ls_sales-data-incov = is_data1-incov. "国际贸易条款版本
ls_sales-data-inco1 = gs_upload-inco1. "国际贸易条款
ls_sales-data-inco2_l = gs_upload-inco2_l. "国际贸易条款位置 1
* ls_sales-data-inco3_l = is_data1-inco3_l. "国际贸易条款位置 2
ls_sales-data-ktgrd = gs_upload-ktgrd. "科目分配组
ls_sales-data-zterm = gs_upload-zterm. "付款条件
ls_sales-data-kzazu = 'X'.
ls_sales-datax-vkbur = 'X'. "销售办公室
ls_sales-datax-vkgrp = 'X'. "销售组
* ls_sales-datax-kdgrp = 'X'. "客户组
ls_sales-datax-waers = 'X'. "货币
ls_sales-datax-kalks = 'X'. "客户定价过程
ls_sales-datax-vsbed = 'X'. "装运条件
ls_sales-datax-pltyp = 'X'. "价格清单类型
* ls_sales-datax-incov = 'X'. "国际贸易条款版本
ls_sales-datax-inco1 = 'X'. "国际贸易条款
ls_sales-datax-inco2_l = 'X'. "国际贸易条款位置 1
* ls_sales-datax-inco3_l = 'X'. "国际贸易条款位置 2
ls_sales-datax-ktgrd = 'X'. "科目分配组
ls_sales-datax-zterm = 'X'. "付款条件
ls_sales-datax-kzazu = 'X'.
CLEAR : ls_functions.
ls_functions-task = 'I'.
CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT'
EXPORTING
input = c_parvw1 "售达方
IMPORTING
output = ls_functions-data_key-parvw.
APPEND ls_functions TO lt_functions.
CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT'
EXPORTING
input = c_parvw2 "收票方
IMPORTING
output = ls_functions-data_key-parvw.
APPEND ls_functions TO lt_functions.
CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT'
EXPORTING
input = c_parvw3 "付款方
IMPORTING
output = ls_functions-data_key-parvw.
APPEND ls_functions TO lt_functions.
CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT'
EXPORTING
input = c_parvw4 "送达方
IMPORTING
output = ls_functions-data_key-parvw.
APPEND ls_functions TO lt_functions.
CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT'
EXPORTING
input = c_parvw5 "业务员
IMPORTING
output = ls_functions-data_key-parvw.
ls_functions-data-partner = gs_upload-user1.
ls_functions-datax-partner = 'X'.
APPEND ls_functions TO lt_functions.
CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT'
EXPORTING
input = c_parvw6 "业务助理
IMPORTING
output = ls_functions-data_key-parvw.
ls_functions-data-partner = gs_upload-user2.
ls_functions-datax-partner = 'X'.
APPEND ls_functions TO lt_functions.
ls_sales-functions-functions = lt_functions.
APPEND ls_sales TO lt_sales.
ls_customer-sales_data-sales = lt_sales.
**********************************************************************
* 客户公司代码视图
**********************************************************************
CLEAR : lt_company.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' " 统驭科目补零
EXPORTING
input = gs_upload-akont
IMPORTING
output = gs_upload-akont.
ls_company-task = 'I'.
ls_company-data_key-bukrs = gs_upload-bukrs. " 公司代码
ls_company-data-akont = gs_upload-akont. " 统驭科目
ls_company-data-zterm = gs_upload-zterm2. " 付款条件
ls_company-datax-akont = 'X'.
ls_company-datax-zterm = 'X'.
APPEND ls_company TO lt_company.
ls_customer-company_data-company = lt_company.
*--> 创建BP以及员工
CLEAR : lt_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
* I_EXT_DATA =
IMPORTING
e_return = lt_return.
CLEAR c_message.
LOOP AT lt_return INTO ls_return.
LOOP AT ls_return-object_msg INTO ls_msg WHERE type = 'E' OR type = 'A'.
CONCATENATE c_message ls_msg-message INTO c_message.
ENDLOOP.
ENDLOOP.
IF c_message EQ ''.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = abap_true.
SELECT SINGLE partner FROM but000 INTO gs_upload-kunnr WHERE partner_guid = ls_return-object_key.
gs_upload-deng = c_green.
gs_upload-message = '创建成功!'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
gs_upload-deng = c_red.
gs_upload-message = c_message.
ENDIF.
MODIFY gt_upload FROM gs_upload.
CLEAR :lt_return,c_message.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_download_mod
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_download_mod .
DATA:l_temp TYPE c,
l_str TYPE string.
CASE sscrfields-ucomm.
WHEN 'FC01'.
CLEAR:g_file,l_temp,l_str.
"获取文件路径
CONCATENATE '客户主数据导入模板-' sy-datum INTO l_str.
l_temp = '1'.
PERFORM frm_get_filepath USING l_str CHANGING g_file.
"下载模板
CHECK sy-subrc = 0 AND NOT g_file IS INITIAL.
PERFORM frm_download_excel_fromserver USING g_file l_temp.
ENDCASE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_GET_FILEPATH
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_G_FILE text
*----------------------------------------------------------------------*
FORM frm_get_filepath USING p_l_str CHANGING p_file.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_filename = p_l_str "
def_path = p_file
mask = ',*.xls,*.xls,*.xlsx,*.xlsx.'
mode = 'S'
title = '保存路径'
IMPORTING
filename = p_file
EXCEPTIONS
inv_winsys = 1
no_batch = 2
selection_cancel = 3
selection_error = 4
OTHERS = 5.
ENDFORM. "FRM_GET_FILEPATH
*&---------------------------------------------------------------------*
*& Form FRM_DOWNLOAD_EXCEL_FROMSERVER
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_L_TEMP text
* -->P_P_FILE text
* <--P_L_ERROR text
*----------------------------------------------------------------------*
FORM frm_download_excel_fromserver USING p_file LIKE sapb-sappfad
p_temp.
DATA:l_temp TYPE wwwdatatab-objid,
lo_objdata LIKE wwwdatatab,
lo_mime LIKE w3mime,
ls_destination LIKE rlgrap-filename,
ls_objnam TYPE string,
li_rc LIKE sy-subrc,
ls_errtxt TYPE string,
l_error TYPE char255.
CLEAR:l_temp,l_error,lo_objdata,ls_objnam.
IF p_temp = '1'.
l_temp = 'ZSDR041'.
ENDIF.
CONCATENATE l_temp '.XLS' INTO ls_objnam.
SELECT SINGLE relid objid FROM wwwdata
INTO CORRESPONDING FIELDS OF lo_objdata
WHERE srtf2 = 0
AND relid = 'MI'
AND objid = l_temp.
IF sy-subrc NE 0 OR lo_objdata-objid EQ space.
CONCATENATE '模板文件:' ls_objnam '不存在,请用TCODE:SMW0进行加载' INTO l_error.
MESSAGE e000(zre) WITH l_error.
ENDIF.
ls_destination = p_file.
CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
EXPORTING
key = lo_objdata
destination = ls_destination
IMPORTING
rc = li_rc.
IF li_rc NE 0.
CONCATENATE '模板文件:' ls_objnam '下载失败' INTO l_error.
MESSAGE e000(zre) WITH l_error.
ENDIF.
ENDFORM. " FRM_DOWNLOAD_EXCEL_FROMSERVER
作者:小飞猪猪猪猪猪猪猪–CSDN