*&---------------------------------------------------------------------*
*& Report ZFFX001
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zfjw002.
TABLES:
zfi_jh_gys_dj,sscrfields.
*&---------------------------------------------------------------------*
*& TYPE POOL
*&---------------------------------------------------------------------*
TYPE-POOLS: slis.
*&---------------------------------------------------------------------*
*& ALV varible
*&---------------------------------------------------------------------*
DATA: it_fields TYPE slis_t_fieldcat_alv.
DATA: wa_fields TYPE LINE OF slis_t_fieldcat_alv.
DATA: gs_layout TYPE slis_layout_alv,
wa_event TYPE slis_alv_event,
gt_event TYPE slis_t_event,
gs_variant TYPE disvariant,
gt_list_top_of_page TYPE slis_t_listheader,
g_repid LIKE sy-repid.
*&---------------------------------------------------------------------*
*& Excel Import global variable
*&---------------------------------------------------------------------*
DATA: g_filepath TYPE string. "保存文件路径
FIELD-SYMBOLS:<fs_unit> LIKE alsmex_tabline. "Excel单元格
FIELD-SYMBOLS:<fs_value> TYPE any.
DATA: g_lines LIKE sy-index VALUE 2. "Excel数据的行数
DATA: g_index LIKE sy-index VALUE 1. "message表的序号
DATA: g_sign TYPE c. "Excel一行是否写入成功的标志
DATA: g_succ LIKE sy-index. "成功更新条数
DATA g_fail TYPE i VALUE 0. "失败的行数
DATA g_flag TYPE char1. "标记
CONSTANTS : s_ctumode TYPE ctu_params-dismode VALUE 'N', "屏幕不可见
s_cupdate TYPE ctu_params-updmode VALUE 'S'. "同步模式
DATA t_xlstmp TYPE alsmex_tabline OCCURS 0 WITH HEADER LINE. "保存Excel中读取的记录
DATA:BEGIN OF wa_message,
znumb TYPE int4,
message TYPE char255,
END OF wa_message.
DATA it_message LIKE wa_message OCCURS 0 WITH HEADER LINE."提示信息
DATA: BEGIN OF t_data OCCURS 0,
znumb TYPE int4, "该次上传的excel内的序号
datab TYPE zfi_jh_gys_dj-ww100,
zbzflx TYPE zfi_jh_gys_dj-zbzflx,
lifnr TYPE zfi_jh_gys_dj-lifnr,
datbi TYPE zfi_jh_gys_dj-ww100,
ww100 TYPE zfi_jh_gys_dj-datbi,
zdj TYPE zfi_jh_gys_dj-zdj,
waers TYPE zfi_jh_gys_dj-waers,
zsfcny TYPE zfi_jh_gys_dj-zsfcny,
lines TYPE int4, "保存行号
flag TYPE char1, "标记该行数据是否合法
END OF t_data.
DATA:BEGIN OF wa_itab.
INCLUDE STRUCTURE zfi_jh_gys_dj.
DATA:
sel TYPE char1,
flag TYPE char1,
END OF wa_itab.
DATA t_itab LIKE wa_itab OCCURS 0 WITH HEADER LINE.
DATA t_dj LIKE zfi_jh_gys_dj OCCURS 0 WITH HEADER LINE.
DATA it_alv_d LIKE t_itab OCCURS 0 WITH HEADER LINE .
*DATA:BEGIN OF i_text OCCURS 0,
* znumb TYPE char10,
* bukrs TYPE char10,
* spmon TYPE char10,
* zylx TYPE char10,
* zdj TYPE char10,
* meins TYPE char10,
* END OF i_text.
DATA g_text TYPE char100.
DATA:wa_dj LIKE zfi_jh_gys_dj.
*&---------------------------------------------------------------------*
*& gloabel variable
*&---------------------------------------------------------------------*
DATA: ok_code LIKE sy-ucomm,
save_ok LIKE sy-ucomm.
DATA:save_ok1 LIKE sy-ucomm.
*&---------------------------------------------------------------------*
*& Macro Definition
*&---------------------------------------------------------------------*
DEFINE macro_fieldcat.
wa_fields-fieldname = &1.
TRANSLATE wa_fields-fieldname TO UPPER CASE.
wa_fields-seltext_l = &2.
wa_fields-outputlen = &3.
wa_fields-edit = &4.
APPEND wa_fields TO it_fields.
CLEAR:wa_fields.
END-OF-DEFINITION.
*&---------------------------------------------------------------------*
*& Selection Screen
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK block0 WITH FRAME TITLE TEXT-001.
PARAMETERS: r1 RADIOBUTTON GROUP g DEFAULT 'X'.
SELECT-OPTIONS:
* s_bukrs FOR zfi_jh_gys_dj-bukrs,
* s_spmon FOR zfi_jh_gys_dj-spmon,
* s_zylx FOR zfi_jh_gys_dj-zylx,
* s_zxhlx FOR zfi_jh_gys_dj-zxhlx.
s_ww100 FOR zfi_jh_gys_dj-ww100,
s_datab FOR zfi_jh_gys_dj-datab.
PARAMETERS: r2 RADIOBUTTON GROUP g .
PARAMETERS: g_fname LIKE rlgrap-filename. "输入文件名称
*PARAMETERS: r3 RADIOBUTTON GROUP g .
*PARAMETERS:p_fname TYPE string DEFAULT 'C:/油类型单价信息维护上传模板.XLS'.
SELECTION-SCREEN END OF BLOCK block0.
SELECTION-SCREEN FUNCTION KEY 1. " Download template
*&---------------------------------------------------------------------*
*& File Impoft screen
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR g_fname.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_path = 'c:\'
" 对话框默认打开路径
mask = ',Excel Files,*.xls,'(101)
"文件类型过滤
mode = 'O'
"文件打开的目的
title = '请选择要导入的Excel文件!' "对话框标题
IMPORTING
filename = g_fname
EXCEPTIONS
inv_winsys = 1
no_batch = 2
selection_cancel = 3
selection_error = 4
OTHERS = 5.
IF sy-subrc <> 0 .
STOP.
ENDIF.
CLEAR g_filepath.
g_filepath = g_fname.
* 判断是否为excel文件
SEARCH g_filepath FOR '.xls'.
IF sy-subrc <> 0.
MESSAGE s003(msgnr) WITH '文件类型错误,请选择Excel数据文件!'.
STOP.
ENDIF.
INITIALIZATION.
sscrfields-functxt_01 = '模板下载'.
AT SELECTION-SCREEN.
IF sscrfields-ucomm = 'FC01' .
PERFORM fm_download_template. " 下载模板
ENDIF.
START-OF-SELECTION.
IF r1 EQ 'X'.
PERFORM frm_query.
ELSEIF r2 = 'X'.
PERFORM frm_excel.
* ELSEIF r3 = 'X'.
*
* PERFORM frm_download.
ELSE.
ENDIF.
*&---------------------------------------------------------------------*
*& Form frm_query
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM frm_query.
FREE:t_itab[].
SELECT *
FROM zfi_jh_gys_dj
INTO CORRESPONDING FIELDS OF TABLE t_itab
WHERE ww100 IN s_ww100
AND datab IN s_datab
.
CLEAR it_alv_d[].
it_alv_d[] = t_itab[].
SORT t_itab BY ww100 zbzflx datab.
gs_layout-zebra = 'X'.
gs_layout-info_fieldname = 'LINE_COLOR'.
gs_layout-box_fieldname = 'SEL'.
PERFORM fr_build_fieldcats.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_save = 'A'
i_callback_program = sy-repid
i_callback_pf_status_set = 'SET_PF_STATUS'
i_callback_user_command = 'FRM_UCOMM'
it_fieldcat = it_fields[]
is_layout = gs_layout
TABLES
t_outtab = t_itab
EXCEPTIONS
program_error = 1
OTHERS = 2.
ENDFORM. "frm_query
*&---------------------------------------------------------------------*
*& Form fr_build_fieldcats
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM fr_build_fieldcats.
REFRESH it_fields.
macro_fieldcat 'WW100' '注册号' '8' ''.
macro_fieldcat 'DATAB' '开始生效日期' '8' ''.
macro_fieldcat 'ZBZFLX' '飞机保障费类型' '2' 'X'.
macro_fieldcat 'LIFNR' '供应商' '10' 'X'.
macro_fieldcat 'DATBI' '有效截至日期' '8' 'X'.
macro_fieldcat 'ZDJ' '单价' '20' 'X'.
macro_fieldcat 'WAERS' '货币码' '5' 'X'.
macro_fieldcat 'ZSFCNY' '是否以CNY记账' '1' 'X'.
ENDFORM. "fr_build_fieldcats
*&---------------------------------------------------------------------*
*& Form set_pf_status
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->RT_EXTAB text
*----------------------------------------------------------------------*
FORM set_pf_status USING rt_extab TYPE slis_t_extab.
SET PF-STATUS 'STANDARD_FULLSCREEN'.
ENDFORM. "Set_pf_status
*&---------------------------------------------------------------------*
*& Form frm_ucomm
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->R_UCOMM text
* -->RS_SELFIELD text
*----------------------------------------------------------------------*
FORM frm_ucomm USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
DATA: lr_grid TYPE REF TO cl_gui_alv_grid.
DATA l_flag(1).
FIELD-SYMBOLS <fs_itab> LIKE wa_itab.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = lr_grid.
CALL METHOD lr_grid->check_changed_data.
rs_selfield-refresh = 'X'."这个值可以让alv制动刷新
CLEAR l_flag.
CASE:r_ucomm.
WHEN 'SAVE'.
DATA gt_update TYPE STANDARD TABLE OF zfi_jh_gys_dj WITH HEADER LINE.
REFRESH gt_update[].
LOOP AT t_itab.
MOVE-CORRESPONDING t_itab TO gt_update.
APPEND gt_update.
CLEAR t_itab.
ENDLOOP.
SORT gt_update BY ww100 datab.
DATA gt_update_d LIKE zfi_jh_gys_dj OCCURS 0 WITH HEADER LINE.
LOOP AT it_alv_d.
CLEAR gt_update.
READ TABLE gt_update WITH KEY ww100 = it_alv_d-ww100
datab = it_alv_d-datab BINARY SEARCH.
IF sy-subrc <> 0."删掉后数据和原数据匹配不到的数据放在另一张表
CLEAR gt_update_d.
MOVE-CORRESPONDING it_alv_d TO gt_update_d.
APPEND gt_update_d.
ENDIF.
ENDLOOP.
LOOP AT gt_update_d. "从配置表删除已经删掉行项目的数据
DELETE FROM zfi_jh_gys_dj WHERE ww100 = gt_update_d-ww100
AND datab = gt_update_d-datab.
ENDLOOP.
MODIFY zfi_jh_gys_dj FROM TABLE gt_update.
COMMIT WORK .
MESSAGE '保存成功' TYPE 'S'.
CLEAR gt_update.
WHEN 'DELETE'.
DELETE t_itab WHERE sel = 'X'.
WHEN OTHERS.
ENDCASE.
ENDFORM. "FRM_UCOMM
*&---------------------------------------------------------------------*
*& Form frm_excel
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM frm_excel.
DATA l_flag(1).
IF g_fname IS INITIAL.
MESSAGE s003(msgnr) WITH '请选择要导入的Excel文件' DISPLAY LIKE 'E'.
STOP.
ENDIF.
PERFORM frm_read_from_excel.
IF it_message[] IS INITIAL.
PERFORM frm_import_data.
IF it_message[] IS NOT INITIAL.
PERFORM show_message.
ELSE.
MESSAGE '数据导入成功!' TYPE 'S' DISPLAY LIKE 'S'.
ENDIF.
ELSE.
PERFORM show_error.
ENDIF.
ENDFORM. "frm_excel
*&---------------------------------------------------------------------*
*& Form frm_read_from_excel
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM frm_read_from_excel.
DATA l_value TYPE char100.
DATA l_flag TYPE char1.
DATA l_count LIKE sy-subrc.
DATA l_message TYPE string.
REFRESH t_xlstmp.
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
filename = g_fname
i_begin_col = 1
i_begin_row = 2 "从第二行开始读
i_end_col = 9
i_end_row = 65536
TABLES
intern = t_xlstmp
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 2
OTHERS = 3.
IF sy-subrc NE 0 .
MESSAGE s003(msgnr) WITH '读取文件失败,请检查Excel数据文件!'.
STOP.
ENDIF.
*由于t_xlstmp-row的长度限制,所以最多只能上传9999行数据(包含标题行)
*控制最多条目不能超过9998
DATA:l_znumber TYPE i.
DATA:l_p TYPE p.
DATA:i TYPE p.
CLEAR:i.
LOOP AT t_xlstmp.
i = i + 1.
ENDLOOP.
i = i / 9 ."9为每行的列数
IF i > 9998.
MESSAGE i398(00) WITH '上传条目数不能超过9998条!'.
EXIT.
ELSE.
CLEAR:t_xlstmp.
READ TABLE t_xlstmp WITH KEY row = '9999'.
IF sy-subrc = 0.
MESSAGE i398(00) WITH '上传条目数不能超过9998条!'.
EXIT.
ENDIF.
ENDIF.
CLEAR t_data.
SORT t_xlstmp BY row col .
LOOP AT t_xlstmp ASSIGNING <fs_unit>.
ASSIGN COMPONENT <fs_unit>-col OF STRUCTURE <fs_unit> TO <fs_value> .
l_value = <fs_unit>-value .
CONDENSE l_value.
CASE <fs_unit>-col.
WHEN 1.
t_data-znumb = l_value+0(10).
WHEN 2.
PERFORM frm_check_ww100_exists USING '注册号' l_value.
WHEN 3.
PERFORM frm_check_datab_exists USING '开始生效日期' l_value.
WHEN 4.
PERFORM frm_check_zbzflx_exists USING '飞机保障费类型' l_value.
WHEN 5.
PERFORM frm_check_lifnr_exists USING '供应商' l_value.
WHEN 6.
PERFORM frm_check_datbi_exists USING '有效截至日期' l_value.
WHEN 7.
PERFORM frm_check_zdj_exists USING '单价' l_value.
WHEN 8.
PERFORM frm_check_waers_exists USING '货币码' l_value.
WHEN 9.
PERFORM frm_check_zsfcny_exists USING '是否以CNY记账' l_value.
ENDCASE.
AT END OF row .
* CLEAR:wa_dj.
* SELECT SINGLE begda endda FROM zfi_jh_gys_dj
* INTO CORRESPONDING FIELDS OF wa_dj
* WHERE bukrs = t_data-bukrs
* AND zylx = t_data-zylx
* AND zxhlx = t_data-zxhlx
* AND spmon = t_data-spmon.
* IF sy-subrc = 0.
* CLEAR:g_text.
* g_text = '年月在系统中已存在数据;'.
* PERFORM frm_add_error_mes USING t_data-znumb g_text.
* ENDIF.
APPEND t_data.
CLEAR t_data.
ENDAT.
ENDLOOP.
ENDFORM. "frm_read_from_excel
*&---------------------------------------------------------------------*
*& Form frm_add_error_mes
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_PERNR text
* -->P_MSG text
* -->P_LINES text
*----------------------------------------------------------------------*
FORM frm_add_error_mes USING p_znumb
p_msg
.
g_flag = 'X'. "设置本行的错误标记
CLEAR wa_message.
wa_message-znumb = p_znumb.
wa_message-message = p_msg.
APPEND wa_message TO it_message.
ENDFORM. "frm_add_error_mes
*&---------------------------------------------------------------------*
*& Form frm_check_bukrs_exists
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
FORM frm_check_ww100_exists USING p_text
p_value.
DATA l_text TYPE char100.
IF p_value+0(8) = ''.
CONCATENATE p_text '不能为空;' INTO l_text.
PERFORM frm_add_error_mes USING t_data-znumb l_text.
EXIT.
ELSE.
t_data-ww100 = p_value+0(8).
ENDIF.
ENDFORM. " frm_check_bukrs_exists
*&---------------------------------------------------------------------*
*& Form frm_check_spmon_exists
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
FORM frm_check_datab_exists USING p_text
p_value.
DATA l_text TYPE char100.
IF p_value+0(8) = ''.
CONCATENATE p_text '不能为空;' INTO l_text.
PERFORM frm_add_error_mes USING t_data-znumb l_text.
EXIT.
ELSE.
t_data-datab = p_value+0(8).
ENDIF.
ENDFORM. " frm_check_spmon_exists
*&---------------------------------------------------------------------*
*& Form frm_check_zylx_exists
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
FORM frm_check_zbzflx_exists USING p_text
p_value.
DATA l_text TYPE char100.
IF p_value+0(2) = ''.
CONCATENATE p_text '不能为空;' INTO l_text.
PERFORM frm_add_error_mes USING t_data-znumb l_text.
EXIT.
ELSE.
t_data-zbzflx = p_value+0(2).
ENDIF.
ENDFORM. " frm_check_zylx_exists
*&---------------------------------------------------------------------*
*& Form frm_check_zxhlx_exists
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
FORM frm_check_lifnr_exists USING p_text
p_value.
DATA l_text TYPE char100.
IF p_value+0(10) = ''.
CONCATENATE p_text '不能为空;' INTO l_text.
PERFORM frm_add_error_mes USING t_data-znumb l_text.
EXIT.
ELSE.
t_data-lifnr = p_value+0(10).
ENDIF.
ENDFORM. " frm_check_zxhlx_exists
*&---------------------------------------------------------------------*
*& Form frm_check_zdj_exists
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
FORM frm_check_datbi_exists USING p_text
p_value.
DATA l_text TYPE char100.
IF p_value+0(8) = ''.
CONCATENATE p_text p_value+0(30) '不能为空;' INTO l_text.
PERFORM frm_add_error_mes USING t_data-znumb l_text.
EXIT.
ELSE.
t_data-datbi = p_value+0(8).
ENDIF.
ENDFORM. " frm_check_zdj_exists
*&---------------------------------------------------------------------*
*& Form frm_check_meins_exists
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
FORM frm_check_zdj_exists USING p_text
p_value.
DATA l_text TYPE char100.
IF p_value+0(30) CN '0123456789. ' .
CONCATENATE p_text p_value+0(30) '不是数值字段;' INTO l_text.
PERFORM frm_add_error_mes USING t_data-znumb l_text.
EXIT.
ELSE.
t_data-zdj = p_value+0(30).
ENDIF.
ENDFORM. " frm_check_meins_exists
*&---------------------------------------------------------------------*
*& Form FRM_CHECK_WAERS_EXISTS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_0808 text
* -->P_L_VALUE text
*----------------------------------------------------------------------*
FORM frm_check_waers_exists USING p_text
p_value.
DATA l_text TYPE char100.
IF p_value+0(5) = ''.
CONCATENATE p_text '不能为空;' INTO l_text.
PERFORM frm_add_error_mes USING t_data-znumb l_text.
EXIT.
ELSE.
t_data-waers = p_value+0(5).
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CHECK_ZSFCNY_EXISTS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_0815 text
* -->P_L_VALUE text
*----------------------------------------------------------------------*
FORM frm_check_zsfcny_exists USING p_text
p_value.
DATA l_text TYPE char100.
IF p_value+0(1) = ''.
CONCATENATE p_text '不能为空;' INTO l_text.
PERFORM frm_add_error_mes USING t_data-znumb l_text.
EXIT.
ELSE.
t_data-zsfcny = p_value+0(1).
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form show_error
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM show_error .
MESSAGE s398(00) WITH '数据检查有错误,未导入数据!'.
REFRESH it_fields.
macro_fieldcat 'ZNUMB' 'EXCEL表内序号' '15' ''.
macro_fieldcat 'MESSAGE' '错误内容' '50' ''.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_save = 'A'
i_callback_program = sy-repid
i_callback_pf_status_set = 'SET_PF_STATUS'
* i_callback_user_command = 'FRM_UCOMM'
it_fieldcat = it_fields[]
is_layout = gs_layout
TABLES
t_outtab = it_message
EXCEPTIONS
program_error = 1
OTHERS = 2.
ENDFORM. " show_error
*&---------------------------------------------------------------------*
*& Form frm_import_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM frm_import_data.
DATA l_text TYPE char100.
DATA l_message TYPE string.
DATA l_count LIKE sy-subrc.
FREE:t_dj[].
LOOP AT t_data.
MOVE-CORRESPONDING t_data TO t_dj.
APPEND t_dj.
ENDLOOP.
IF t_dj[] IS NOT INITIAL.
MODIFY zfi_jh_gys_dj FROM TABLE t_dj. "更新数据库
IF sy-subrc = 0.
MESSAGE s398(00) WITH '更新成功;'.
ELSE.
MESSAGE e398(00) WITH '更新失败;'.
ENDIF.
ENDIF.
ENDFORM. "frm_import_data
*&---------------------------------------------------------------------*
*& Form show_message
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM show_message.
DATA: ls_layout TYPE slis_layout_alv,
l_fieldcat TYPE slis_fieldcat_alv,
ls_fieldcat TYPE slis_t_fieldcat_alv,
l_temp TYPE string,
l_str TYPE string.
FIELD-SYMBOLS: <fs_msg> LIKE wa_message.
MESSAGE s398(00) WITH '数据更新有错误,错误如下!(所有均未导入)'.
REFRESH it_fields.
macro_fieldcat 'ZNUMB' 'EXCEL表内序号' '15' ''.
macro_fieldcat 'MESSAGE' '错误内容' '50' '' .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_save = 'A'
i_callback_program = sy-repid
i_callback_pf_status_set = 'SET_PF_STATUS'
* i_callback_user_command = 'FRM_UCOMM'
it_fieldcat = it_fields[]
is_layout = gs_layout
TABLES
t_outtab = it_message
EXCEPTIONS
program_error = 1
OTHERS = 2.
ENDFORM. "show_message
**&---------------------------------------------------------------------*
**& Form FRM_DOWNLOAD
**&---------------------------------------------------------------------*
** text
**----------------------------------------------------------------------*
** --> p1 text
** <-- p2 text
**----------------------------------------------------------------------*
*FORM frm_download .
*
*
* FREE:i_text[].
* i_text-znumb = '序号'.
* i_text-bukrs_fx = '公司'.
* i_text-spmon = '年月'.
* i_text-zylx = '油类型'.
* i_text-zdj = '单价'.
* i_text-meins = '单位'.
* APPEND i_text.
*
*
* CALL METHOD cl_gui_frontend_services=>gui_download
* EXPORTING
* filename = p_fname "fullpath "
* write_field_separator = 't'
* filetype = 'ASC'
* codepage = '8400' "GB2312中文章编码
* CHANGING
* data_tab = i_text[].
* IF sy-subrc = 0.
* MESSAGE s398(00) WITH '模板已下载到' p_fname.
* ELSE.
* MESSAGE i398(00) WITH '模板下载失败'.
* ENDIF.
*
*ENDFORM. " FRM_DOWNLOAD
*&---------------------------------------------------------------------*
*& Form FM_DOWNLOAD_TEMPLATE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM fm_download_template .
DATA: l_filename TYPE string,
l_fullpath TYPE string,
l_path TYPE string,
l_key TYPE wwwdatatab,
l_mime TYPE TABLE OF w3mime.
l_key-relid = 'MI'.
l_key-objid = 'ZFX003'.
CALL FUNCTION 'WWWDATA_IMPORT'
EXPORTING
key = l_key
TABLES
mime = l_mime
EXCEPTIONS
wrong_object_type = 1
import_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
window_title = 'Download File'
default_extension = '.XLS'
default_file_name = '机号及供应商对应的单价上传模板'
file_filter = cl_gui_frontend_services=>filetype_excel
CHANGING
filename = l_filename
path = l_path
fullpath = l_fullpath
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
IF l_fullpath IS INITIAL.
RETURN.
ENDIF.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = l_fullpath
filetype = 'BIN'
* write_field_separator = cl_abap_char_utilities=>horizontal_tab
TABLES
data_tab = l_mime
EXCEPTIONS
file_write_error = 1
no_batch = 2
gui_refuse_filetransfer = 3
invalid_type = 4
no_authority = 5
unknown_error = 6
header_not_allowed = 7
separator_not_allowed = 8
filesize_not_allowed = 9
header_too_long = 10
dp_error_create = 11
dp_error_send = 12
dp_error_write = 13
unknown_dp_error = 14
access_denied = 15
dp_out_of_memory = 16
disk_full = 17
dp_timeout = 18
file_not_found = 19
dataprovider_exception = 20
control_flush_error = 21
OTHERS = 22.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDIF.
ENDFORM.