一、功能逻辑






二、批导界面





三、功能代码
*&———————————————————————*
*& Report ZRPFICO_0007
*&———————————————————————*
*& 程序名:ZRPFICO_0007
*& 创建者(公司)/日期:
*& 程序描述:供应商批量导入
*&———————————————————————*
*& 版本/修改者(公司)/日期/修改描述
*&
*&———————————————————————*
REPORT zrpmm_0001 MESSAGE-ID zmm01.
************************************************************************
* 表参考 *
************************************************************************
TABLES:sscrfields.
************************************************************************
* 类型定义 *
************************************************************************
TYPES:BEGIN OF ty_sheet,”用于多sheet导入
name(50) TYPE c,
END OF ty_sheet.
TYPES:BEGIN OF ty_data,
col1(10), “在多个表导入的情况下第一个字段共用
col2(60),
col3(60),
col4(60),
col5(60),
col6(60),
col7(60),
col8(60),
col9(60),
col10(60),
col11(60),
col12(250),
col13(60),
col14(60),
col15(60),
col16(60),
col17(60),
col18(60),
col19(60),
col20(60),
col21(60),
col22(60),
col23(60),
col24(60),
col25(60),
col26(60),
col27(60),
col28(60),
col29(60),
col30(60),
col31(60),
col32(60),
col33(60),
col34(60),
col35(60),
col36(60),
col37(60),
col38(60),
col39(60),
col40(60),
col41(60),
col42(60),
col43(60),
icon TYPE icon_d,
message TYPE char200,
END OF ty_data.
************************************************************************
* 内表工作区定义 *
************************************************************************
DATA:gt_sheet TYPE TABLE OF ty_sheet,
gt_data1 TYPE TABLE OF ty_data,
gt_data2 TYPE TABLE OF ty_data,
gt_data3 TYPE TABLE OF ty_data,
gt_data4 TYPE TABLE OF ty_data,
gw_data TYPE ty_data.
DATA:gt_excel1 TYPE TABLE OF zalsmex_tabline,
gt_excel2 TYPE TABLE OF zalsmex_tabline,
gt_excel3 TYPE TABLE OF zalsmex_tabline,
gt_excel4 TYPE TABLE OF zalsmex_tabline.
“创建供应商主数据BAPI 参数内表
DATA:gt_data TYPE cvis_ei_extern_t,
gs_data TYPE cvis_ei_extern,
gt_return TYPE bapiretm,
gt_address TYPE bus_ei_bupa_address_t,
gs_address TYPE bus_ei_bupa_address,
gt_smtp TYPE bus_ei_bupa_smtp_t,
gs_smtp TYPE bus_ei_bupa_smtp,
gt_tax TYPE bus_ei_bupa_taxnumber_t,
gs_tax TYPE bus_ei_bupa_taxnumber,
gt_bank TYPE bus_ei_bupa_bankdetail_t,
gs_bank TYPE bus_ei_bupa_bankdetail,
gs_vendor TYPE vmds_ei_extern,
gt_roles TYPE bus_ei_bupa_roles_t,
gs_roles TYPE bus_ei_bupa_roles,
gt_company TYPE vmds_ei_company_t,
gs_company TYPE vmds_ei_company,
gt_purchasing TYPE vmds_ei_purchasing_t,
gs_purchasing TYPE vmds_ei_purchasing,
gt_purchasing2 TYPE vmds_ei_purchasing2_t,
gs_purchasing2 TYPE vmds_ei_purchasing2, “供应商子范围
gs_functions TYPE vmds_ei_functions,
gt_functions TYPE vmds_ei_functions_t, “供应商子范围角色
gt_subrange TYPE vmds_ei_subrange_t,
gs_subrange TYPE vmds_ei_subrange, “供应商子范围
gs_descri TYPE vmds_ei_subrange_descri,
gt_descri TYPE vmds_ei_subrange_descri_t. “供应商子范围描述
DATA:gs_object_instance TYPE bus_ei_instance. “业务合作伙伴的标识和 GUID
***********
*常量定义 *
************************************************************************
************************************************************************
* ALV 相关变量定义 *
************************************************************************
DATA:gt_fieldcat TYPE lvc_t_fcat.
DATA:gw_fieldcat LIKE LINE OF gt_fieldcat.
DATA:gw_layout TYPE lvc_s_layo.
DATA:gt_sort TYPE lvc_t_sort WITH HEADER LINE.
DATA:go_grid TYPE REF TO cl_gui_alv_grid, “”object
gs_stbl TYPE lvc_s_stbl. “”稳定刷新
************************************************************************
* 宏定义
************************************************************************
DEFINE def_fieldcat.
CLEAR gw_fieldcat.
gw_fieldcat-fieldname = &1.
gw_fieldcat-ref_table = &2.
gw_fieldcat-ref_field = &3.
gw_fieldcat-reptext = &4.
gw_fieldcat-coltext = &4.
gw_fieldcat-scrtext_l = &4.
gw_fieldcat-scrtext_m = &4.
gw_fieldcat-scrtext_s = &4.
gw_fieldcat-no_zero = &5.
gw_fieldcat-edit = &6.
gw_fieldcat-outputlen = &7.
gw_fieldcat-checkbox = &8.
gw_fieldcat-do_sum = &9.
APPEND gw_fieldcat TO gt_fieldcat.
END-OF-DEFINITION.
***********************************************************************
* 选择屏幕定义*
************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK a WITH FRAME TITLE TEXT-t01.
PARAMETERS p_file TYPE rlgrap-filename.
SELECTION-SCREEN END OF BLOCK a.
SELECTION-SCREEN BEGIN OF BLOCK b WITH FRAME TITLE TEXT-t02.
PARAMETERS:r_1 RADIOBUTTON GROUP grp1 DEFAULT 'X',
r_2 RADIOBUTTON GROUP grp1,
r_3 RADIOBUTTON GROUP grp1,
r_4 RADIOBUTTON GROUP grp1.
SELECTION-SCREEN END OF BLOCK b.
SELECTION-SCREEN FUNCTION KEY 1.
***********************************************************************
* 在这里可以初始一些数据*
************************************************************************
INITIALIZATION.
PERFORM frm_init_data.
***********************************************************************
* 在这里可以在选择屏幕PBO时做一些处理*
************************************************************************
AT SELECTION-SCREEN OUTPUT.
PERFORM frm_screen_pbo.
AT SELECTION-SCREEN.
CASE sscrfields-ucomm.
* WHEN 'FC01'.
* PERFORM FRM_DOWNLOAD_TEMP_1.
WHEN 'FC01'.
PERFORM frm_download_temp.
WHEN OTHERS.
ENDCASE.
***********************************************************************
* F4帮助
************************************************************************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file. “F4帮助
PERFORM frm_get_path.”获取文件路径
***********************************************************************
* 开始数据获取
************************************************************************
START-OF-SELECTION.
PERFORM frm_upload_file USING p_file.
PERFORM frm_check_data .
END-OF-SELECTION.
***********************************************************************
* 显示ALV
************************************************************************
PERFORM frm_alv_data.””展示
*&———————————————————————*
*& 在这里可以初始一些数据
*&———————————————————————*
FORM frm_init_data .
“刷新参数赋值
gs_stbl-row = 'X'.
gs_stbl-col = 'X'.
DATA: ls_functxt TYPE smp_dyntxt.
ls_functxt-icon_id = icon_export.
ls_functxt-quickinfo = '下载模板_供应商批量导入'.
ls_functxt-icon_text = '下载模板_供应商批量导入'.
sscrfields-functxt_01 = ls_functxt.
* sscrfields-ucomm = 'FC01'.
gt_sheet[] = VALUE #(
( name = '供应商主数据导入' )
( name = '公司代码层数据导入' )
( name = '采购组织层数据导入' )
( name = '供应商子范围导入' ) ).
ENDFORM.
*&———————————————————————*
*& 在这里可以在选择屏幕PBO时做一些处理
*&———————————————————————*
FORM frm_screen_pbo .
ENDFORM.
*&———————————————————————*
*& 检查屏幕数据和权限
*&———————————————————————*
FORM frm_check_screen .
ENDFORM.
*&———————————————————————*
*& 获取数据
*&———————————————————————*
FORM frm_get_data .
ENDFORM.
*&———————————————————————*
*& 处理数据
*&———————————————————————*
FORM frm_processing_data .
ENDFORM.
*&———————————————————————*
*& Form frm_alv_data
*&———————————————————————*
*& 展示
*&———————————————————————*
FORM frm_alv_data .
PERFORM frm_fill_fieldcat.””填充字段目錄
PERFORM frm_set_layout.””設置佈局參數
CASE abap_true.
WHEN r_1.
PERFORM frm_alv_create TABLES gt_data1.””展示ALV
WHEN r_2.
PERFORM frm_alv_create TABLES gt_data2.””展示ALV
WHEN r_3.
PERFORM frm_alv_create TABLES gt_data3.””展示ALV
WHEN r_4.
PERFORM frm_alv_create TABLES gt_data4.””展示ALV
WHEN OTHERS.
ENDCASE.
ENDFORM.
*&———————————————————————*
*& 填充字段目錄,设置fieldcat属性
*&———————————————————————*
FORM frm_fill_fieldcat .
CASE abap_true.
WHEN r_1.
def_fieldcat: 'ICON' '' '' '指示灯' '' '' '' '' '',
'MESSAGE' '' '' '异常消息' '' '' '' '' '',
'COL1' '' '' TEXT-001 '' '' '' '' '',
'COL2' '' '' TEXT-002 '' '' '' '' '',
'COL3' '' '' TEXT-003 '' '' '' '' '',
'COL4' '' '' TEXT-004 '' '' '' '' '',
'COL5' '' '' TEXT-005 '' '' '' '' '',
'COL6' '' '' TEXT-006 '' '' '' '' '',
'COL7' '' '' TEXT-007 '' '' '' '' '',
'COL8' '' '' TEXT-008 '' '' '' '' '',
'COL9' '' '' TEXT-009 '' '' '' '' '',
'COL10' '' '' TEXT-010 '' '' '' '' '',
'COL11' '' '' TEXT-011 '' '' '' '' '',
'COL12' '' '' TEXT-012 '' '' '' '' '',
'COL13' '' '' TEXT-013 '' '' '' '' '',
'COL14' '' '' TEXT-014 '' '' '' '' '',
'COL15' '' '' TEXT-015 '' '' '' '' '',
'COL16' '' '' TEXT-016 '' '' '' '' '',
'COL17' '' '' TEXT-037 '' '' '' '' '',
'COL18' '' '' TEXT-017 '' '' '' '' '',
'COL19' '' '' TEXT-018 '' '' '' '' '',
'COL20' '' '' TEXT-019 '' '' '' '' '',
'COL21' '' '' TEXT-020 '' '' '' '' '',
'COL22' '' '' TEXT-021 '' '' '' '' '',
'COL23' '' '' TEXT-022 '' '' '' '' '',
'COL24' '' '' TEXT-023 '' '' '' '' '',
'COL25' '' '' TEXT-024 '' '' '' '' '',
'COL26' '' '' TEXT-025 '' '' '' '' '',
'COL27' '' '' TEXT-041 '' '' '' '' '',
'COL28' '' '' TEXT-042 '' '' '' '' '',
'COL29' '' '' TEXT-043 '' '' '' '' '',
'COL30' '' '' TEXT-026 '' '' '' '' '',
'COL31' '' '' TEXT-027 '' '' '' '' '',
'COL32' '' '' TEXT-028 '' '' '' '' '',
'COL33' '' '' TEXT-038 '' '' '' '' '',
'COL34' '' '' TEXT-039 '' '' '' '' '',
'COL35' '' '' TEXT-040 '' '' '' '' '',
'COL36' '' '' TEXT-029 '' '' '' '' '',
'COL37' '' '' TEXT-030 '' '' '' '' '',
'COL38' '' '' TEXT-031 '' '' '' '' '',
'COL39' '' '' TEXT-032 '' '' '' '' '',
'COL40' '' '' TEXT-033 '' '' '' '' '',
'COL41' '' '' TEXT-034 '' '' '' '' '',
'COL42' '' '' TEXT-035 '' '' '' '' '',
'COL43' '' '' TEXT-036 '' '' '' '' ''.
WHEN r_2.
def_fieldcat: 'ICON' '' '' '指示灯' '' '' '' '' '',
'MESSAGE' '' '' '异常消息' '' '' '' '' '',
'COL1' '' '' TEXT-001 '' '' '' '' '',
'COL2' '' '' TEXT-018 '' '' '' '' '',
'COL3' '' '' TEXT-019 '' '' '' '' '',
'COL4' '' '' TEXT-020 '' '' '' '' '',
'COL5' '' '' TEXT-021 '' '' '' '' ''.
WHEN r_3.
def_fieldcat: 'ICON' '' '' '指示灯' '' '' '' '' '',
'MESSAGE' '' '' '异常消息' '' '' '' '' '',
'COL1' '' '' TEXT-001 '' '' '' '' '',
'COL2' '' '' TEXT-022 '' '' '' '' '',
'COL3' '' '' TEXT-023 '' '' '' '' '',
'COL4' '' '' TEXT-024 '' '' '' '' '',
'COL5' '' '' TEXT-025 '' '' '' '' '',
'COL6' '' '' TEXT-041 '' '' '' '' '',
'COL7' '' '' TEXT-042 '' '' '' '' '',
'COL8' '' '' TEXT-043 '' '' '' '' '',
'COL9' '' '' TEXT-026 '' '' '' '' '',
'COL10' '' '' TEXT-027 '' '' '' '' '',
'COL11' '' '' TEXT-028 '' '' '' '' '',
'COL12' '' '' TEXT-038 '' '' '' '' '',
'COL13' '' '' TEXT-039 '' '' '' '' '',
'COL14' '' '' TEXT-040 '' '' '' '' ''.
WHEN r_4.
def_fieldcat: 'ICON' '' '' '指示灯' '' '' '' '' '',
'MESSAGE' '' '' '异常消息' '' '' '' '' '',
'COL1' '' '' TEXT-001 '' '' '' '' '',
'COL2' '' '' TEXT-029 '' '' '' '' '',
'COL3' '' '' TEXT-030 '' '' '' '' '',
'COL4' '' '' TEXT-031 '' '' '' '' '',
'COL5' '' '' TEXT-032 '' '' '' '' '',
'COL6' '' '' TEXT-033 '' '' '' '' '',
'COL7' '' '' TEXT-034 '' '' '' '' '',
'COL8' '' '' TEXT-035 '' '' '' '' '',
'COL9' '' '' TEXT-036 '' '' '' '' ''.
WHEN OTHERS.
ENDCASE.
ENDFORM.
*&———————————————————————*
*& 設置佈局參數,设置layout属性
*&———————————————————————*
FORM frm_set_layout .
CLEAR:gw_layout.
gw_layout-cwidth_opt = 'X'.
gw_layout-no_rowmark = 'X'.
“gw_layout-box_fname = 'SEL'.
gw_layout-sel_mode = 'A'.
gw_layout-no_toolbar = 'X'.
ENDFORM.
*&———————————————————————*
*& 展示ALV,调用显示函数
*&———————————————————————*
FORM frm_alv_create TABLES p_table.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid
is_layout_lvc = gw_layout
it_fieldcat_lvc = gt_fieldcat
i_default = 'X'
i_save = 'A'
it_sort_lvc = gt_sort[]
i_callback_user_command = 'FRM_USER_COMMAND'
i_callback_pf_status_set = 'SET_PF_STATUS'
TABLES
t_outtab = p_table
EXCEPTIONS
program_error = 1
OTHERS = 2.
ENDFORM.
*&———————————————————————*
*& 状态栏设置
*&———————————————————————*
FORM set_pf_status USING rt_extab TYPE slis_t_extab.
SET PF-STATUS 'STATUS_001'.
“绑定ALV控件
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = go_grid.
ENDFORM.
*&———————————————————————*
*& 按钮事件处理
*&———————————————————————*
FORM frm_user_command USING r_ucomm LIKE sy-ucomm”功能代码
rs_selfield TYPE slis_selfield.
CASE r_ucomm.
WHEN '&POST'.
CASE abap_true.
WHEN r_1.
PERFORM frm_import1.
WHEN r_2.
PERFORM frm_import2.
WHEN r_3.
PERFORM frm_import3.
WHEN r_4.
PERFORM frm_import4.
WHEN OTHERS.
ENDCASE.
ENDCASE.
PERFORM frm_set_layout.
go_grid->set_frontend_layout( EXPORTING is_layout = gw_layout ).
go_grid->refresh_table_display( EXPORTING is_stable = gs_stbl i_soft_refresh = '' ).
ENDFORM.
*&———————————————————————*
*& Form FRM_UPLOAD_FILE
*&———————————————————————*
*& text
*&———————————————————————*
*& –> P_FILE
*&———————————————————————*
FORM frm_upload_file USING u_file.
DATA: lv_begin_row TYPE i , “开始行
lv_begin_col TYPE i , “开始列
lv_end_row TYPE i , “结束行
lv_end_col TYPE i . “结束列
DATA:lv_table(10) TYPE c.
* 文件必输校验
IF u_file IS INITIAL.
MESSAGE '请选择导入的文件' TYPE 'S' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
DATA BEGIN OF i_excel OCCURS 0.
INCLUDE STRUCTURE zalsmex_tabline.
DATA:END OF i_excel.
DATA l_column TYPE i.
FIELD-SYMBOLS:<fs> .
DATA l_pathname LIKE rlgrap-filename .
*———–提示消息:读取信息
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
text = '数据导入中…'.
MOVE u_file TO l_pathname .
LOOP AT gt_sheet INTO DATA(ls_sheet).
l_column = l_column + 1.
lv_begin_col = 1.
lv_end_row = 50000.
CASE ls_sheet-name.
WHEN '供应商主数据导入' .
IF r_1 NE abap_true.
CONTINUE.
ENDIF.
lv_begin_row = 4.
lv_end_col = 40.
WHEN '公司代码层数据导入'.
IF r_2 NE abap_true.
CONTINUE.
ENDIF.
lv_begin_row = 3.
lv_end_col = 5.
WHEN '采购组织层数据导入'.
IF r_3 NE abap_true.
CONTINUE.
ENDIF.
lv_begin_row = 3.
lv_end_col = 11.
WHEN '供应商子范围导入'.
IF r_4 NE abap_true.
CONTINUE.
ENDIF.
lv_begin_row = 3.
lv_end_col = 9.
WHEN OTHERS.
ENDCASE.
CALL FUNCTION 'ZALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
filename = l_pathname
i_begin_col = lv_begin_col
i_begin_row = lv_begin_row
i_end_col = lv_end_col
i_end_row = lv_end_row
i_sheetname = ls_sheet-name
TABLES
intern = i_excel
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE s000 WITH 'excel上传失败' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ELSE.
IF i_excel[] IS INITIAL.
MESSAGE s000 WITH 'excel无数据' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
lv_table = 'GT_EXCEL' && l_column.
ASSIGN (lv_table) TO FIELD-SYMBOL(<fs_table>).
IF <fs_table> IS ASSIGNED.
<fs_table> = i_excel[].
ENDIF.
CLEAR:i_excel[].
ENDIF.
ENDLOOP.
ENDFORM.
*&———————————————————————*
*& Form frm_check_data
*&———————————————————————*
*& text
*&———————————————————————*
*& –> p1 text
*& <– p2 text
*&———————————————————————*
DEFINE %add_message.
IF &1 IS INITIAL.
&2 = icon_led_red.
CONCATENATE &3 &4 INTO &4 SEPARATED BY ';'.
ENDIF.
END-OF-DEFINITION.
FORM frm_check_data .
CASE abap_true.
WHEN r_1.
PERFORM frm_fill_data TABLES gt_excel1
gt_data1.
LOOP AT gt_data1 ASSIGNING FIELD-SYMBOL(<fs_data>).
%add_message:<fs_data>-col2 <fs_data>-icon TEXT-002 <fs_data>-message,
<fs_data>-col3 <fs_data>-icon TEXT-003 <fs_data>-message,
<fs_data>-col4 <fs_data>-icon TEXT-004 <fs_data>-message,
<fs_data>-col6 <fs_data>-icon TEXT-006 <fs_data>-message,
<fs_data>-col8 <fs_data>-icon TEXT-008 <fs_data>-message,
<fs_data>-col9 <fs_data>-icon TEXT-009 <fs_data>-message,
<fs_data>-col10 <fs_data>-icon TEXT-010 <fs_data>-message,
<fs_data>-col11 <fs_data>-icon TEXT-011 <fs_data>-message,
* <fs_data>-col12 <fs_data>-icon TEXT-012 <fs_data>-message,
<fs_data>-col13 <fs_data>-icon TEXT-013 <fs_data>-message,
<fs_data>-col14 <fs_data>-icon TEXT-014 <fs_data>-message.
IF <fs_data>-col19 IS NOT INITIAL.”当公司代码不为空时
%add_message: <fs_data>-col20 <fs_data>-icon TEXT-019 <fs_data>-message,
<fs_data>-col21 <fs_data>-icon TEXT-020 <fs_data>-message.
ENDIF.
IF <fs_data>-col23 IS NOT INITIAL.”当采购组织不为空时
%add_message: <fs_data>-col24 <fs_data>-icon TEXT-023 <fs_data>-message.
* <fs_data>-col28 <fs_data>-icon TEXT-026 <fs_data>-message.
ENDIF.
* IF <fs_data>-col33 IS NOT INITIAL.”当子范围不为空时
** %add_message: “<fs_data>-col30 <fs_data>-icon TEXT-034 <fs_data>-message,
** <fs_data>-col31 <fs_data>-icon TEXT-035 <fs_data>-message,
** <fs_data>-col32 <fs_data>-icon TEXT-036 <fs_data>-message,
** <fs_data>-col34 <fs_data>-icon TEXT-038 <fs_data>-message.
* ENDIF.
IF <fs_data>-col1 IS INITIAL.
SELECT SINGLE partner INTO @DATA(lv_partner) FROM dfkkbptaxnum
WHERE taxnum = @<fs_data>-col14
OR taxnumxl = @<fs_data>-col14.
IF sy-subrc = 0.
<fs_data>-icon = icon_led_red.
<fs_data>-message = '与供应商' && lv_partner && '税号重复'.
ENDIF.
LOOP AT gt_data1 INTO DATA(ls_data1) FROM sy-tabix + 1 WHERE col14 = <fs_data>-col14 .
<fs_data>-icon = icon_led_red.
<fs_data>-message = '本次导入的数据税号重复'.
EXIT.
ENDLOOP.
ENDIF.
ENDLOOP.
WHEN r_2.
PERFORM frm_fill_data TABLES gt_excel2
gt_data2.
LOOP AT gt_data2 ASSIGNING <fs_data>.
%add_message:<fs_data>-col1 <fs_data>-icon TEXT-001 <fs_data>-message,
<fs_data>-col2 <fs_data>-icon TEXT-018 <fs_data>-message,
<fs_data>-col3 <fs_data>-icon TEXT-019 <fs_data>-message,
<fs_data>-col4 <fs_data>-icon TEXT-020 <fs_data>-message.
ENDLOOP.
WHEN r_3.
PERFORM frm_fill_data TABLES gt_excel3
gt_data3.
LOOP AT gt_data3 ASSIGNING <fs_data>.
%add_message:<fs_data>-col1 <fs_data>-icon TEXT-001 <fs_data>-message,
<fs_data>-col2 <fs_data>-icon TEXT-022 <fs_data>-message,
<fs_data>-col3 <fs_data>-icon TEXT-023 <fs_data>-message,
<fs_data>-col4 <fs_data>-icon TEXT-024 <fs_data>-message,
<fs_data>-col11 <fs_data>-icon TEXT-028 <fs_data>-message,
<fs_data>-col12 <fs_data>-icon TEXT-038 <fs_data>-message,
<fs_data>-col13 <fs_data>-icon TEXT-039 <fs_data>-message,
<fs_data>-col14 <fs_data>-icon TEXT-040 <fs_data>-message.
ENDLOOP.
WHEN r_4.
PERFORM frm_fill_data TABLES gt_excel4
gt_data4.
LOOP AT gt_data4 ASSIGNING <fs_data>.
%add_message:<fs_data>-col1 <fs_data>-icon TEXT-001 <fs_data>-message,
<fs_data>-col2 <fs_data>-icon TEXT-029 <fs_data>-message,
<fs_data>-col3 <fs_data>-icon TEXT-030 <fs_data>-message,
<fs_data>-col4 <fs_data>-icon TEXT-031 <fs_data>-message,
<fs_data>-col5 <fs_data>-icon TEXT-032 <fs_data>-message,
<fs_data>-col7 <fs_data>-icon TEXT-034 <fs_data>-message.
ENDLOOP.
WHEN OTHERS.
ENDCASE.
ENDFORM.
*&———————————————————————*
*& Form frm_import
*&———————————————————————*
*& text
*&———————————————————————*
*& –> p1 text
*& <– p2 text
*&———————————————————————*
FORM frm_import .
ENDFORM.
*&———————————————————————*
*& Form FRM_SHOW_MESSAGE
*&———————————————————————*
*& 弹出消息框
*&———————————————————————*
*& –> p1 text
*& <– p2 text
*&———————————————————————*
FORM frm_show_message TABLES t_msg STRUCTURE bapiret2.
IF t_msg[] IS NOT INITIAL .
CALL FUNCTION 'OXT_MESSAGE_TO_POPUP'
EXPORTING
it_message = t_msg[].
ENDIF.
ENDFORM.
*&———————————————————————*
*& Form frm_download_temp
*&———————————————————————*
*& text
*&———————————————————————*
*& –> p1 text
*& <– p2 text
*&———————————————————————*
FORM frm_download_temp .
DATA: lv_objnam TYPE string,
ls_objdata TYPE wwwdatatab,
lv_rc TYPE sy-subrc.
DATA: lv_filepath TYPE rlgrap-filename.
DATA: lv_errtxt TYPE c LENGTH 100.
DATA: l_object_id TYPE wwwdata-objid VALUE 'ZMM001'.
CONCATENATE l_object_id '.XLSX' INTO lv_objnam.
CONDENSE lv_objnam NO-GAPS.
DATA: p_template TYPE wwwdatatab VALUE 'ZMM001',
lc_title TYPE string VALUE '供应商批量导入模版',
lc_dfname TYPE string VALUE '供应商批量导入模版.xlsx',
lc_filename TYPE string,
lc_fullpath TYPE string,
lc_destination TYPE rlgrap-filename,
lc_path TYPE string,
lc_action TYPE i,
l_rc TYPE sy-subrc.
* LC_DFNAME = LC_TITLE.
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
window_title = lc_title
default_extension = 'xlsx'
default_file_name = lc_dfname
file_filter = '.xlsx'
CHANGING
filename = lc_filename
path = lc_path
fullpath = lc_fullpath
user_action = lc_action
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.
CHECK sy-subrc = 0 AND lc_action = 0.
CONCATENATE '' lc_fullpath INTO lc_destination.
SELECT SINGLE relid objid FROM wwwdata INTO CORRESPONDING FIELDS OF ls_objdata
WHERE srtf2 = 0 AND relid = 'MI' AND objid = l_object_id.
IF sy-subrc NE 0 OR ls_objdata-objid EQ space.
MESSAGE e003 WITH lv_objnam.
ELSE.
lv_filepath = lc_fullpath.
CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
EXPORTING
key = ls_objdata
destination = lv_filepath
IMPORTING
rc = lv_rc.
IF lv_rc NE 0.
MESSAGE s004 WITH lv_objnam DISPLAY LIKE 'E'.
ENDIF.
ENDIF.
ENDFORM.
*&———————————————————————*
*& Form FRM_GET_PATH
*&———————————————————————*
*& text
*&———————————————————————*
*& –> p1 text
*& <– p2 text
*&———————————————————————*
FORM frm_get_path .
CALL FUNCTION 'TB_LIMIT_WS_FILENAME_GET'
EXPORTING
mask = 'Excel Files,*.xlsx,*.*. '
IMPORTING
filename = p_file
EXCEPTIONS
selection_cancel = 1
selection_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE s005 DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
ENDFORM.
*&———————————————————————*
*& Form frm_fill_data
*&———————————————————————*
*& text
*&———————————————————————*
*& –> GT_SHEET1
*&———————————————————————*
FORM frm_fill_data TABLES p_sheet STRUCTURE zalsmex_tabline
p_data LIKE gt_data1.
LOOP AT p_sheet INTO DATA(ls_sheet).
ASSIGN COMPONENT ls_sheet-col OF STRUCTURE gw_data TO FIELD-SYMBOL(<fs_data>).
IF <fs_data> IS ASSIGNED.
<fs_data> = ls_sheet-value.
UNASSIGN <fs_data>.
ENDIF.
AT END OF row.
APPEND gw_data TO p_data.
CLEAR gw_data.
ENDAT.
ENDLOOP.
ENDFORM.
*&———————————————————————*
*& Form frm_import1
*&———————————————————————*
*& text
*&———————————————————————*
*& –> p1 text
*& <– p2 text
*&———————————————————————*
FORM frm_import1 .
DATA:lv_classnum TYPE bapi1003_key-classnum,
lv_objecttable TYPE bapi1003_key-objecttable,
lv_classtype TYPE bapi1003_key-classtype,
lv_object_long TYPE bapi1003_key-object_long,
lt_class TYPE TABLE OF zsmm_create_class WITH HEADER LINE,
ls_return_class TYPE zsbc_msg.
DATA:lt_return TYPE TABLE OF bapiret2 .
DATA:lv_taxnum TYPE bapibus1006tax-taxnumber.
DATA:lv_string TYPE string.
DESCRIBE TABLE gt_data1 LINES DATA(lv_lines).
LOOP AT gt_data1 ASSIGNING FIELD-SYMBOL(<fs_data>).
lv_string = '导入进度' && sy-tabix && '/' && lv_lines.
“显示导入进度
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
percentage = sy-tabix
text = lv_string.
CLEAR:lv_classnum ,
lv_objecttable ,
lv_classtype ,
lv_object_long ,
lt_class ,
ls_return_class .
CLEAR:gt_data ,
gs_data ,
gt_return ,
gt_address ,
gs_address ,
gt_tax ,
gs_tax ,
gt_bank ,
gs_bank ,
gs_vendor ,
gt_roles ,
gs_roles ,
gt_company ,
gs_company ,
gt_purchasing,
gs_purchasing,
gt_purchasing2,
gs_purchasing2,
gs_object_instance , “业务合作伙伴的标识和 GUID
gs_functions ,
gt_functions ,
gt_subrange ,
gs_subrange ,
gs_descri ,
gt_descri ,
gs_smtp,
gt_smtp.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = <fs_data>-col1
IMPORTING
output = <fs_data>-col1.
SELECT SINGLE partner_guid INTO @DATA(lv_partner_guid)
FROM but000
WHERE partner = @<fs_data>-col1.
IF sy-subrc = 0.”如果已经存在 则修改
gs_object_instance-bpartnerguid = lv_partner_guid.
gs_object_instance-bpartner = <fs_data>-col1.
gs_vendor-header-object_task = 'C'.
DATA(lv_flag) = 'M'.
* gs_vendor-header-object_task = lv_flag.
ELSE.”否则新建
TRY .
lv_partner_guid = cl_uuid_factory=>create_system_uuid( )->create_uuid_x16( ).
gs_object_instance-bpartnerguid = lv_partner_guid.
CATCH cx_uuid_error.
ENDTRY.
lv_flag = 'I'.
gs_vendor-header-object_task = lv_flag.
ENDIF.
gs_object_instance-bpartner = <fs_data>-col1.
gs_data-partner-header-object_instance = gs_object_instance.
gs_data-partner-header-object_task = lv_flag.”创建/修改
********BP 中心数据
gs_data-partner-central_data-common-data-bp_control-category = '2'.”业务伙伴类别
gs_data-partner-central_data-common-data-bp_control-grouping = <fs_data>-col2.”业务伙伴分组
gs_data-partner-central_data-common-data-bp_organization-name1 = <fs_data>-col3.”供应商名称1
gs_data-partner-central_data-common-datax-bp_organization-name1 = 'X'.”供应商名称1
gs_data-partner-central_data-common-data-bp_centraldata-searchterm1 = <fs_data>-col4.”业务伙伴的搜索词 1
gs_data-partner-central_data-common-datax-bp_centraldata-searchterm1 = 'X'.”业务伙伴的搜索词 1
IF <fs_data>-col5 = 'NULL' .”将此值更新为空
gs_data-partner-central_data-common-data-bp_centraldata-searchterm2 = ''.”业务伙伴的搜索词 2
gs_data-partner-central_data-common-datax-bp_centraldata-searchterm2 = 'X'.”业务伙伴的搜索词 2
ELSEIF <fs_data>-col5 IS INITIAL.”为空不做处理
ELSE.”其余情况更新该字段
gs_data-partner-central_data-common-data-bp_centraldata-searchterm2 = <fs_data>-col5.”业务伙伴的搜索词 2
gs_data-partner-central_data-common-datax-bp_centraldata-searchterm2 = 'X'.”业务伙伴的搜索词 2
ENDIF.
*****地址数据
CASE lv_flag.
WHEN 'I'.
gs_address-task = '1'.
WHEN 'M'.
gs_address-task = '5'.
WHEN OTHERS.
ENDCASE.
gs_address-data-postal-data-city = <fs_data>-col9.”城市
gs_address-data-postal-datax-city = 'X'.”城市
gs_address-data-postal-data-street = <fs_data>-col6.”街道
gs_address-data-postal-datax-street = 'X'.”街道
IF <fs_data>-col7 = 'NULL' .”将此值更新为空
gs_address-data-postal-data-house_no = ''.”门牌号
gs_address-data-postal-datax-house_no = 'X'.”门牌号
ELSEIF <fs_data>-col7 IS INITIAL.”为空不做处理
ELSE.”其余情况更新该字段
gs_address-data-postal-data-house_no = <fs_data>-col7.”门牌号
gs_address-data-postal-datax-house_no = 'X'.”门牌号
ENDIF.
gs_address-data-postal-data-postl_cod1 = <fs_data>-col8.”邮政编码
gs_address-data-postal-datax-postl_cod1 = 'X'.”邮政编码
gs_address-data-postal-data-country = <fs_data>-col10.”国家/地区代码
gs_address-data-postal-datax-country = 'X'.”国家/地区代码
gs_address-data-postal-data-languiso = <fs_data>-col11.”语言
gs_address-data-postal-datax-langu_iso = 'X'.”语言
gs_smtp-contact-task = lv_flag.
gs_smtp-contact-data-e_mail = <fs_data>-col12. “邮件地址
gs_smtp-contact-datax-e_mail = abap_true.
APPEND gs_smtp TO gt_smtp.
gs_address-data-communication-smtp-smtp = gt_smtp.
APPEND gs_address TO gt_address.
gs_data-partner-central_data-address-addresses = gt_address.
****税分类数据
* gs_tax-data_key-taxnumber = <fs_data>-col14.”税号
* gs_tax-data_key-taxtype = <fs_data>-col13.”税号
* APPEND gs_tax TO gt_tax.
* gs_data-partner-central_data-taxnumber-taxnumbers = gt_tax.
**** 银行数据
IF <fs_data>-col15 IS NOT INITIAL AND <fs_data>-col16 IS NOT INITIAL AND <fs_data>-col17 IS NOT INITIAL .
SELECT COUNT(*) FROM lfbk WHERE lifnr = <fs_data>-col1 AND banks = <fs_data>-col15 AND bankl = <fs_data>-col16
AND bankn = <fs_data>-col18.
IF sy-subrc = 0.
gs_bank-task = 'U'.
ELSE.
gs_bank-task = 'I'.
ENDIF.
IF <fs_data>-col15 = 'NULL'.
gs_bank-data-bank_ctry = ''.”银行国家
gs_bank-datax-bank_ctry = 'X'.”银行国家
ELSEIF <fs_data>-col15 IS INITIAL.
ELSE.
gs_bank-data-bank_ctry = <fs_data>-col15.”银行国家
gs_bank-datax-bank_ctry = 'X'.”银行国家
ENDIF.
IF <fs_data>-col16 = 'NULL'.
gs_bank-data-bank_key = ''.”银行代码
gs_bank-datax-bank_key = 'X'.”银行代码
ELSEIF <fs_data>-col16 IS INITIAL.
ELSE.
gs_bank-data-bank_key = <fs_data>-col16.”银行代码
gs_bank-datax-bank_key = 'X'.”银行代码
ENDIF.
gs_bank-data-bankaccountname = COND #( WHEN <fs_data>-col17 = 'NULL' THEN ''
ELSE <fs_data>-col17 ). “银行名称
gs_bank-datax-bankaccountname = COND #( WHEN <fs_data>-col17 = 'NULL' THEN 'X'
WHEN <fs_data>-col17 IS INITIAL THEN ''
ELSE 'X' ).
IF <fs_data>-col18 = 'NULL'.
gs_bank-data-bank_acct = ''.”银行账户
gs_bank-datax-bank_acct = 'X'.”银行账户
ELSEIF <fs_data>-col18 IS INITIAL.
ELSE.
gs_bank-data-bank_acct = <fs_data>-col18.”银行账户
gs_bank-datax-bank_acct = 'X'.”银行账户
ENDIF.
APPEND gs_bank TO gt_bank.
gs_data-partner-central_data-bankdetail-bankdetails = gt_bank.
ENDIF.
****角色视图
IF lv_flag = 'I'.
gs_roles-task = 'I'.
gs_roles-data_key = 'FLVN00'. “采购角色
APPEND gs_roles TO gt_roles.
gs_roles-task = 'I'.
gs_roles-data_key = 'FLVN01'. “公司角色
APPEND gs_roles TO gt_roles.
gs_data-partner-central_data-role-roles = gt_roles.
ENDIF.
* gs_vendor-header-object_task = lv_flag.
**** 公司代码层数据
IF <fs_data>-col19 IS NOT INITIAL.
gs_company-task = lv_flag.
gs_company-data_key-bukrs = <fs_data>-col19.”公司代码
gs_company-data-akont = <fs_data>-col20. “统驭科目
gs_company-data-zterm = <fs_data>-col21. “付款条件
gs_company-datax-akont = 'X'.
gs_company-datax-zterm = 'X'.
IF <fs_data>-col22 = 'NULL'.
gs_company-data-reprf = ''. “检查重复发票
gs_company-datax-reprf = 'X'.
ELSEIF <fs_data>-col22 IS INITIAL.
ELSE.
gs_company-data-reprf = <fs_data>-col22. “检查重复发票
gs_company-datax-reprf = 'X'.
ENDIF.
APPEND gs_company TO gt_company.
gs_vendor-company_data-company = gt_company.
ENDIF.
**** 采购组织数据
IF <fs_data>-col23 IS NOT INITIAL.
gs_purchasing-task = lv_flag.
gs_purchasing-data_key-ekorg = <fs_data>-col23. “采购组织
gs_purchasing-data-waers = <fs_data>-col24. “货币
gs_purchasing-datax-waers = abap_true.
IF <fs_data>-col32 = 'NULL'.
gs_purchasing-data-webre = ''. “基于收货的发票校验
gs_purchasing-datax-webre = abap_true.
ELSEIF <fs_data>-col32 IS INITIAL.
ELSE.
gs_purchasing-data-webre = <fs_data>-col32. “基于收货的发票校验
gs_purchasing-datax-webre = abap_true.
ENDIF.
IF <fs_data>-col25 = 'NULL'.
gs_purchasing-data-zterm = ''. “付款条件
gs_purchasing-datax-zterm = abap_true.
ELSEIF <fs_data>-col25 IS INITIAL.
ELSE.
gs_purchasing-data-zterm = <fs_data>-col25. “付款条件
gs_purchasing-datax-zterm = abap_true.
ENDIF.
IF <fs_data>-col26 = 'NULL'.
gs_purchasing-data-inco1 = ''. “国贸条件
gs_purchasing-datax-inco1 = abap_true.
ELSEIF <fs_data>-col26 IS INITIAL.
ELSE.
gs_purchasing-data-inco1 = <fs_data>-col26. “国贸条件
gs_purchasing-datax-inco1 = abap_true.
ENDIF.
gs_purchasing-data-inco2_l = COND #( WHEN <fs_data>-col27 = 'NULL' THEN '' ELSE <fs_data>-col27 ) .”国际贸易条款位置 1
gs_purchasing-datax-inco2_l = COND #( WHEN <fs_data>-col27 = '' THEN '' ELSE 'X' ) .
gs_purchasing-data-bstae = COND #( WHEN <fs_data>-col29 = 'NULL' THEN '' ELSE <fs_data>-col29 ) .”确认控制代码
gs_purchasing-datax-bstae = COND #( WHEN <fs_data>-col29 = '' THEN '' ELSE 'X' ) .
gs_purchasing-data-plifz = COND #( WHEN <fs_data>-col28 = 'NULL' THEN '' ELSE <fs_data>-col28 ).”计划交货时间
gs_purchasing-datax-plifz = COND #( WHEN <fs_data>-col28 = '' THEN '' ELSE 'X' ) .
IF <fs_data>-col30 = 'NULL'.
gs_purchasing-data-verkf = ''.”供应商销售人员
gs_purchasing-datax-verkf = 'X'.
ELSEIF <fs_data>-col30 IS INITIAL .
ELSE.
gs_purchasing-data-verkf = <fs_data>-col30.”供应商销售人员
gs_purchasing-datax-verkf = 'X'.
ENDIF.
IF <fs_data>-col31 = 'NULL'.
gs_purchasing-data-telf1 = ''.”电话
gs_purchasing-datax-telf1 = 'X'.
ELSEIF <fs_data>-col31 IS INITIAL.
ELSE.
gs_purchasing-data-telf1 = <fs_data>-col31.”电话
gs_purchasing-datax-telf1 = 'X'.
ENDIF.
***** 供应商子范围
IF <fs_data>-col36 IS NOT INITIAL.
gs_vendor-central_data-central-data-ltsna = 'X'.”激活子范围
gs_vendor-central_data-central-datax-ltsna = 'X'.
gs_purchasing2-task = lv_flag.
gs_purchasing2-data_key-ltsnr = <fs_data>-col37.”子范围
IF <fs_data>-col40 = 'NULL'.
gs_purchasing2-data-waers = ''.”订单货币
gs_purchasing2-datax-waers = 'X'.”订单货币
ELSEIF <fs_data>-col40 IS INITIAL.
ELSE.
gs_purchasing2-data-waers = <fs_data>-col40.”订单货币
gs_purchasing2-datax-waers = 'X'.”订单货币
ENDIF.
gs_purchasing2-data-zterm = <fs_data>-col41.”子范围付款条件
gs_purchasing2-datax-zterm = 'X'.”子范围付款条件
IF <fs_data>-col42 = 'NULL'.
gs_purchasing2-data-verkf = ''.”供应商销售人员
gs_purchasing2-datax-verkf = 'X'.
ELSEIF <fs_data>-col42 IS INITIAL .
ELSE.
gs_purchasing2-data-verkf = <fs_data>-col42.”供应商销售人员
gs_purchasing2-datax-verkf = 'X'.
ENDIF.
IF <fs_data>-col43 = 'NULL'.
gs_purchasing2-data-telf1 = ''.”电话
gs_purchasing2-datax-telf1 = 'X'.
ELSEIF <fs_data>-col43 IS INITIAL.
ELSE.
gs_purchasing2-data-telf1 = <fs_data>-col43.”电话
gs_purchasing2-datax-telf1 = 'X'.
ENDIF.
APPEND gs_purchasing2 TO gt_purchasing2.
gs_purchasing-purchasing2-purchasing2 = gt_purchasing2.
* gs_functions-task = lv_flag.
* gs_functions-data_key-ltsnr = <fs_data>-col30.
* gs_functions-data_key-parvw = 'OA'.
* gs_functions-data-defpa = 'X'.
* gs_functions-datax-defpa = 'X'.
* APPEND gs_functions TO gt_functions.
*
* gs_purchasing-functions-functions = gt_functions.
gs_descri-task = lv_flag.
gs_descri-data_key = sy-langu.
gs_descri-data-ltsbz = <fs_data>-col38.”子范围描述
gs_descri-datax-ltsbz = 'X'.”子范围描述
APPEND gs_descri TO gt_descri.
gs_subrange-task = lv_flag.
gs_subrange-data_key-ltsnr = <fs_data>-col37.”子范围
gs_subrange-description-description = gt_descri.
APPEND gs_subrange TO gt_subrange.
gs_vendor-central_data-subrange-subrange = gt_subrange.
ENDIF.
APPEND gs_purchasing TO gt_purchasing.
gs_vendor-purchasing_data-purchasing = gt_purchasing.
DATA(lv_purchasing) = 'X'.
ENDIF.
gs_data-vendor = gs_vendor.
APPEND gs_data TO gt_data.
CALL METHOD cl_md_bp_maintain=>maintain
EXPORTING
i_data = gt_data
* i_test_run =
IMPORTING
e_return = gt_return.
LOOP AT gt_return INTO DATA(ls_return) .
LOOP AT ls_return-object_msg INTO DATA(ls_msg) WHERE type = 'E' OR type = 'A'.
<fs_data>-icon = icon_led_red.
CONCATENATE ls_msg-message <fs_data>-message INTO <fs_data>-message SEPARATED BY ';'.
ENDLOOP.
ENDLOOP.
IF <fs_data>-icon = icon_led_red .
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
<fs_data>-icon = icon_led_green.
SELECT SINGLE partner INTO <fs_data>-col1 FROM but000 WHERE partner_guid = lv_partner_guid.
<fs_data>-message = '供应商维护成功'.
“如果需要导入采购视图,则创建成功后导入供应商分类
IF lv_purchasing = 'X'.
lv_classnum = 'Z_MM_VENDOR'.
lv_objecttable = 'LFA1'.
lv_classtype = '010'.
lv_object_long = <fs_data>-col1.
lt_class-atnam = 'Z_MM_VENDOR_001'.
lt_class-atwrt = <fs_data>-col33.
APPEND lt_class.
lt_class-atnam = 'Z_MM_VENDOR_002'.
lt_class-atwrt = <fs_data>-col34.
APPEND lt_class.
lt_class-atnam = 'Z_MM_VENDOR_003'.
lt_class-atwrt = <fs_data>-col35.
APPEND lt_class.
CALL FUNCTION 'Z_FMMM_CREATE_CLASS'
EXPORTING
i_classnum = lv_classnum
i_objecttable = lv_objecttable
i_classtype = lv_classtype
i_object_long = lv_object_long
IMPORTING
e_output = ls_return_class
TABLES
t_value = lt_class.
IF ls_return_class-type = 'E'.
<fs_data>-icon = icon_led_yellow.
<fs_data>-message = <fs_data>-message && ';供应商分类维护失败,原因:' && ls_return_class-message.
ENDIF.
ENDIF.
“更新税类别
SELECT SINGLE * INTO @DATA(ls_taxnum) FROM dfkkbptaxnum WHERE partner = @<fs_data>-col1 AND taxtype = 'CN0'.
lv_taxnum = <fs_data>-col14.
IF sy-subrc NE 0 .
CALL FUNCTION 'BAPI_BUPA_TAX_ADD'
EXPORTING
businesspartner = <fs_data>-col1
taxtype = 'CN0'
taxnumber = lv_taxnum
TABLES
return = lt_return.
ELSE.
CALL FUNCTION 'BAPI_BUPA_TAX_CHANGE'
EXPORTING
businesspartner = <fs_data>-col1
taxtype = ls_taxnum-taxtype
taxnumber = lv_taxnum
TABLES
return = lt_return.
ENDIF.
LOOP AT lt_return INTO DATA(ls_return1) WHERE type CA 'AXE'.
CONCATENATE ls_return1-message <fs_data>-message INTO <fs_data>-message SEPARATED BY ';'.
ENDLOOP.
IF sy-subrc = 0.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
<fs_data>-icon = icon_led_yellow.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ENDIF.
ENDIF.
CLEAR:lv_flag,lv_partner_guid.
ENDLOOP.
ENDFORM.
*&———————————————————————*
*& Form frm_import2
*&———————————————————————*
*& text 导入公司代码层数据
*&———————————————————————*
*& –> p1 text
*& <– p2 text
*&———————————————————————*
FORM frm_import2 .
DATA:lv_string TYPE string.
DESCRIBE TABLE gt_data2 LINES DATA(lv_lines).
LOOP AT gt_data2 ASSIGNING FIELD-SYMBOL(<fs_data>).
lv_string = '导入进度' && sy-tabix && '/' && lv_lines.
“显示导入进度
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
percentage = sy-tabix
text = lv_string.
CLEAR:gt_data ,
gs_data ,
gs_vendor ,
gt_roles ,
gs_roles ,
gt_company ,
gs_company ,
gs_object_instance . “业务合作伙伴的标识和 GUID
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = <fs_data>-col1
IMPORTING
output = <fs_data>-col1.
SELECT SINGLE partner_guid INTO @DATA(lv_partner_guid)
FROM but000
WHERE partner = @<fs_data>-col1.
IF sy-subrc NE 0.”
<fs_data>-icon = icon_led_red.
<fs_data>-message = '未找到对应的供应商'.
CONTINUE.
ELSE.
gs_data-partner-header-object_instance-bpartner = <fs_data>-col1.
gs_data-partner-header-object_instance-bpartnerguid = lv_partner_guid.
ENDIF.
**** 查找是否已经存在公司代码角色,没有则创建
SELECT COUNT(*) FROM but100 WHERE partner = <fs_data>-col1 AND rltyp = 'FLVN00'.
IF sy-subrc NE 0.
* DATA(lv_flag) = 'I'.
gs_roles-task = 'I'.
gs_roles-data_key = 'FLVN00'. “公司角色
APPEND gs_roles TO gt_roles.
* gs_roles-task = lv_flag.
* gs_roles-data_key = 'FLVN01'. “采购组织角色
* APPEND gs_roles TO gt_roles.
gs_data-partner-header-object_task = 'U'.
gs_data-partner-central_data-role-roles = gt_roles.
* lv_flag = 'U'.
ENDIF.
SELECT COUNT(*) FROM lfb1 WHERE lifnr = <fs_data>-col1 AND bukrs = <fs_data>-col2.
IF sy-subrc = 0.
DATA(lv_flag) = 'I'.
ELSE.
lv_flag = 'U'.
ENDIF.
gs_vendor-header-object_instance-lifnr = <fs_data>-col1.
gs_vendor-header-object_task = lv_flag.
**** 公司代码层数据
gs_company-task = lv_flag.
gs_company-data_key-bukrs = <fs_data>-col2.”公司代码
gs_company-data-akont = <fs_data>-col3. “统驭科目
gs_company-data-zterm = <fs_data>-col4. “付款条件
gs_company-datax-akont = 'X'.
gs_company-datax-zterm = 'X'.
IF <fs_data>-col5 = 'NULL'.
gs_company-data-reprf = ''. “检查重复发票
gs_company-datax-reprf = 'X'.
ELSEIF <fs_data>-col5 IS INITIAL.
ELSE.
gs_company-data-reprf = <fs_data>-col5. “检查重复发票
gs_company-datax-reprf = 'X'.
ENDIF.
APPEND gs_company TO gt_company.
gs_vendor-company_data-company = gt_company.
gs_data-vendor = gs_vendor.
APPEND gs_data TO gt_data.
CALL METHOD cl_md_bp_maintain=>maintain
EXPORTING
i_data = gt_data
* i_test_run =
IMPORTING
e_return = gt_return.
LOOP AT gt_return INTO DATA(ls_return) .
LOOP AT ls_return-object_msg INTO DATA(ls_msg) WHERE type = 'E' OR type = 'A'.
<fs_data>-icon = icon_led_red.
CONCATENATE ls_msg-message <fs_data>-message INTO <fs_data>-message SEPARATED BY ';'.
ENDLOOP.
ENDLOOP.
IF <fs_data>-icon = icon_led_red .
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
<fs_data>-icon = icon_led_green.
<fs_data>-message = '维护成功'.
ENDIF.
CLEAR:lv_flag,lv_partner_guid.
ENDLOOP.
ENDFORM.
*&———————————————————————*
*& Form frm_import3
*&———————————————————————*
*& text 导入采购组织数据
*&———————————————————————*
*& –> p1 text
*& <– p2 text
*&———————————————————————*
FORM frm_import3 .
DATA:lv_classnum TYPE bapi1003_key-classnum,
lv_objecttable TYPE bapi1003_key-objecttable,
lv_classtype TYPE bapi1003_key-classtype,
lv_object_long TYPE bapi1003_key-object_long,
lt_class TYPE TABLE OF zsmm_create_class WITH HEADER LINE,
ls_return_class TYPE zsbc_msg.
DATA:lv_string TYPE string.
DESCRIBE TABLE gt_data3 LINES DATA(lv_lines).
LOOP AT gt_data3 ASSIGNING FIELD-SYMBOL(<fs_data>).
lv_string = '导入进度' && sy-tabix && '/' && lv_lines.
“显示导入进度
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
percentage = sy-tabix
text = lv_string.
CLEAR:lv_classnum ,
lv_objecttable ,
lv_classtype ,
lv_object_long ,
lt_class ,
ls_return_class .
CLEAR:gt_data ,
gs_data ,
gs_vendor ,
gt_roles ,
gs_roles ,
gt_purchasing ,
gs_purchasing ,
gs_object_instance . “业务合作伙伴的标识和 GUID
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = <fs_data>-col1
IMPORTING
output = <fs_data>-col1.
SELECT SINGLE partner_guid INTO @DATA(lv_partner_guid)
FROM but000
WHERE partner = @<fs_data>-col1.
IF sy-subrc NE 0.”
<fs_data>-icon = icon_led_red.
<fs_data>-message = '未找到对应的供应商'.
CONTINUE.
ELSE.
gs_data-partner-header-object_instance-bpartner = <fs_data>-col1.
gs_data-partner-header-object_instance-bpartnerguid = lv_partner_guid.
ENDIF.
**** 查找是否已经存在采购组织角色,没有则创建
SELECT COUNT(*) FROM but100 WHERE partner = <fs_data>-col1 AND rltyp = 'FLVN01'.
IF sy-subrc NE 0.
gs_roles-task = 'I'.
gs_roles-data_key = 'FLVN01'. “采购组织角色
APPEND gs_roles TO gt_roles.
gs_data-partner-central_data-role-roles = gt_roles.
gs_data-partner-header-object_task = 'U'.
ENDIF.
SELECT COUNT(*) FROM lfm1 WHERE lifnr = <fs_data>-col1 AND ekorg = <fs_data>-col2.
IF sy-subrc = 0.
DATA(lv_flag) = 'U'.
ELSE.
lv_flag = 'I'.
ENDIF.
gs_vendor-header-object_instance-lifnr = <fs_data>-col1.
gs_vendor-header-object_task = 'U'.
**** 采购组织数据
gs_purchasing-task = lv_flag.
gs_purchasing-data_key-ekorg = <fs_data>-col2. “采购组织
gs_purchasing-data-waers = <fs_data>-col3. “货币
gs_purchasing-datax-waers = abap_true.
IF <fs_data>-col4 = 'NULL'.
gs_purchasing-data-zterm = ''. “付款条件
gs_purchasing-datax-zterm = abap_true.
ELSEIF <fs_data>-col4 IS INITIAL.
ELSE.
gs_purchasing-data-zterm = <fs_data>-col4. “付款条件
gs_purchasing-datax-zterm = abap_true.
ENDIF.
IF <fs_data>-col5 = 'NULL'.
gs_purchasing-data-inco1 = ''. “国贸条件
gs_purchasing-datax-inco1 = abap_true.
ELSEIF <fs_data>-col5 IS INITIAL.
ELSE.
gs_purchasing-data-inco1 = <fs_data>-col5. “国贸条件
gs_purchasing-datax-inco1 = abap_true.
ENDIF.
gs_purchasing-data-inco2_l = COND #( WHEN <fs_data>-col6 = 'NULL' THEN '' ELSE <fs_data>-col6 ) .”国际贸易条款位置 1
gs_purchasing-datax-inco2_l = COND #( WHEN <fs_data>-col6 = '' THEN '' ELSE 'X' ) .
gs_purchasing-data-bstae = COND #( WHEN <fs_data>-col7 = 'NULL' THEN '' ELSE <fs_data>-col7 ) .”确认控制代码
gs_purchasing-datax-bstae = COND #( WHEN <fs_data>-col7 = '' THEN '' ELSE 'X' ) .
gs_purchasing-data-plifz = COND #( WHEN <fs_data>-col8 = 'NULL' THEN '' ELSE <fs_data>-col8 ).”计划交货时间
gs_purchasing-datax-plifz = COND #( WHEN <fs_data>-col8 = '' THEN '' ELSE 'X' ) ..
IF <fs_data>-col9 = 'NULL'.
gs_purchasing-data-verkf = ''.”供应商销售人员
gs_purchasing-datax-verkf = 'X'.
ELSEIF <fs_data>-col9 IS INITIAL .
ELSE.
gs_purchasing-data-verkf = <fs_data>-col9.”供应商销售人员
gs_purchasing-datax-verkf = 'X'.
ENDIF.
IF <fs_data>-col10 = 'NULL'.
gs_purchasing-data-telf1 = ''.”电话
gs_purchasing-datax-telf1 = 'X'.
ELSEIF <fs_data>-col10 IS INITIAL.
ELSE.
gs_purchasing-data-telf1 = <fs_data>-col10.”电话
gs_purchasing-datax-telf1 = 'X'.
ENDIF.
IF <fs_data>-col11 = 'NULL'.
gs_purchasing-data-webre = ''. “基于收货的发票校验
gs_purchasing-datax-webre = abap_true.
ELSEIF <fs_data>-col11 IS INITIAL.
ELSE.
gs_purchasing-data-webre = <fs_data>-col11. “基于收货的发票校验
gs_purchasing-datax-webre = abap_true.
ENDIF.
APPEND gs_purchasing TO gt_purchasing.
gs_vendor-purchasing_data-purchasing = gt_purchasing.
gs_data-vendor = gs_vendor.
APPEND gs_data TO gt_data.
CALL METHOD cl_md_bp_maintain=>maintain
EXPORTING
i_data = gt_data
* i_test_run =
IMPORTING
e_return = gt_return.
LOOP AT gt_return INTO DATA(ls_return) .
LOOP AT ls_return-object_msg INTO DATA(ls_msg) WHERE type = 'E' OR type = 'A'.
<fs_data>-icon = icon_led_red.
CONCATENATE ls_msg-message <fs_data>-message INTO <fs_data>-message SEPARATED BY ';'.
ENDLOOP.
ENDLOOP.
IF <fs_data>-icon = icon_led_red .
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
<fs_data>-icon = icon_led_green.
<fs_data>-message = '供应商采购视图维护成功'.
lv_classnum = 'Z_MM_VENDOR'.
lv_objecttable = 'LFA1'.
lv_classtype = '010'.
lv_object_long = <fs_data>-col1.
lt_class-atnam = 'Z_MM_VENDOR_001'.
lt_class-atwrt = <fs_data>-col9.
APPEND lt_class.
lt_class-atnam = 'Z_MM_VENDOR_002'.
lt_class-atwrt = <fs_data>-col10.
APPEND lt_class.
lt_class-atnam = 'Z_MM_VENDOR_003'.
lt_class-atwrt = <fs_data>-col11.
APPEND lt_class.
CALL FUNCTION 'Z_FMMM_CREATE_CLASS'
EXPORTING
i_classnum = lv_classnum
i_objecttable = lv_objecttable
i_classtype = lv_classtype
i_object_long = lv_object_long
IMPORTING
e_output = ls_return_class
TABLES
t_value = lt_class.
IF ls_return_class-type = 'E'.
<fs_data>-icon = icon_led_yellow.
<fs_data>-message = <fs_data>-message && ';供应商分类维护失败,原因:' && ls_return_class-message.
ENDIF.
ENDIF.
CLEAR:lv_flag,lv_partner_guid.
ENDLOOP.
ENDFORM.
*&———————————————————————*
*& Form frm_import4
*&———————————————————————*
*& text
*&———————————————————————*
*& –> p1 text
*& <– p2 text
*&———————————————————————*
FORM frm_import4 .
DATA:lv_string TYPE string.
DESCRIBE TABLE gt_data4 LINES DATA(lv_lines).
LOOP AT gt_data4 ASSIGNING FIELD-SYMBOL(<fs_data>).
lv_string = '导入进度' && sy-tabix && '/' && lv_lines.
“显示导入进度
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
percentage = sy-tabix
text = lv_string.
CLEAR:gt_data ,
gs_data ,
gs_vendor ,
gt_roles ,
gs_roles ,
gt_purchasing ,
gs_purchasing ,
gt_purchasing2 ,
gs_purchasing2 ,
gs_object_instance , “业务合作伙伴的标识和 GUID
gs_functions ,
gt_functions ,
gt_subrange ,
gs_subrange ,
gs_descri ,
gt_descri .
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = <fs_data>-col1
IMPORTING
output = <fs_data>-col1.
SELECT SINGLE partner_guid INTO @DATA(lv_partner_guid)
FROM but000
WHERE partner = @<fs_data>-col1.
IF sy-subrc NE 0.”
<fs_data>-icon = icon_led_red.
<fs_data>-message = '未找到对应的供应商'.
CONTINUE.
ELSE.
gs_data-partner-header-object_instance-bpartner = <fs_data>-col1.
gs_data-partner-header-object_instance-bpartnerguid = lv_partner_guid.
ENDIF.
**** 查找是否已经存在采购组织角色,没有则报错
SELECT COUNT(*) FROM but100 WHERE partner = <fs_data>-col1 AND rltyp = 'FLVN01'.
IF sy-subrc NE 0.
<fs_data>-icon = icon_led_red.
<fs_data>-message = '请先创建采购组织层数据'.
CONTINUE.
ELSE.
“判断是否存在该子范围
SELECT COUNT(*) FROM lfm2 WHERE lifnr = <fs_data>-col1 AND ltsnr = <fs_data>-col3.
IF sy-subrc = 0.
DATA(lv_flag) = 'U'.
ELSE.
lv_flag = 'I'.
ENDIF.
ENDIF.
gs_vendor-header-object_instance-lifnr = <fs_data>-col1.
gs_vendor-header-object_task = 'U'.
***** 供应商子范围
gs_vendor-central_data-central-data-ltsna = 'X'.”激活子范围
gs_vendor-central_data-central-datax-ltsna = 'X'.
gs_purchasing2-task = lv_flag.
gs_purchasing2-data_key-ltsnr = <fs_data>-col3.”子范围
IF <fs_data>-col6 = 'NULL'.
gs_purchasing2-data-waers = ''.”订单货币
gs_purchasing2-datax-waers = 'X'.”订单货币
ELSEIF <fs_data>-col6 IS INITIAL.
ELSE.
gs_purchasing2-data-waers = <fs_data>-col6.”订单货币
gs_purchasing2-datax-waers = 'X'.”订单货币
ENDIF.
gs_purchasing2-data-zterm = <fs_data>-col7.”子范围付款条件
gs_purchasing2-datax-zterm = 'X'.”子范围付款条件
IF <fs_data>-col8 = 'NULL'.
gs_purchasing2-data-verkf = ''.”供应商销售人员
gs_purchasing2-datax-verkf = 'X'.
ELSEIF <fs_data>-col8 IS INITIAL .
ELSE.
gs_purchasing2-data-verkf = <fs_data>-col8.”供应商销售人员
gs_purchasing2-datax-verkf = 'X'.
ENDIF.
IF <fs_data>-col9 = 'NULL'.
gs_purchasing2-data-telf1 = ''.”电话
gs_purchasing2-datax-telf1 = 'X'.
ELSEIF <fs_data>-col9 IS INITIAL.
ELSE.
gs_purchasing2-data-telf1 = <fs_data>-col9.”电话
gs_purchasing2-datax-telf1 = 'X'.
ENDIF.
APPEND gs_purchasing2 TO gt_purchasing2.
gs_purchasing-purchasing2-purchasing2 = gt_purchasing2.
“判断是否存在合作伙伴职能OA
gs_purchasing-data_key-ekorg = '2801'.
gs_purchasing-task = 'U'.
APPEND gs_purchasing TO gt_purchasing.
gs_descri-task = lv_flag.
gs_descri-data_key = sy-langu.
gs_descri-data-ltsbz = <fs_data>-col4.”子范围描述
gs_descri-datax-ltsbz = 'X'.”子范围描述
APPEND gs_descri TO gt_descri.
gs_subrange-task = lv_flag.
gs_subrange-data_key-ltsnr = <fs_data>-col3.”子范围
gs_subrange-description-description = gt_descri.
APPEND gs_subrange TO gt_subrange.
gs_vendor-purchasing_data-purchasing = gt_purchasing.
gs_vendor-central_data-subrange-subrange = gt_subrange.
gs_data-vendor = gs_vendor.
APPEND gs_data TO gt_data.
CALL METHOD cl_md_bp_maintain=>maintain
EXPORTING
i_data = gt_data
* i_test_run =
IMPORTING
e_return = gt_return.
LOOP AT gt_return INTO DATA(ls_return) .
LOOP AT ls_return-object_msg INTO DATA(ls_msg) WHERE type = 'E' OR type = 'A'.
<fs_data>-icon = icon_led_red.
CONCATENATE ls_msg-message <fs_data>-message INTO <fs_data>-message SEPARATED BY ';'.
ENDLOOP.
ENDLOOP.
IF <fs_data>-icon = icon_led_red .
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
<fs_data>-icon = icon_led_green.
<fs_data>-message = '维护成功'.
ENDIF.
CLEAR:lv_flag,lv_partner_guid.
ENDLOOP.
ENDFORM.






![[C++探索之旅] 第一部分第十一课:小练习,猜单词 - 鹿快](https://img.lukuai.com/blogimg/20251015/da217e2245754101b3d2ef80869e9de2.jpg)










暂无评论内容