158 lines
4.6 KiB
Plaintext
158 lines
4.6 KiB
Plaintext
*&---------------------------------------------------------------------*
|
|
*& Report @TCode@
|
|
*&---------------------------------------------------------------------*
|
|
*& @FunctionName@
|
|
*& Author: Michael
|
|
*& Create Date: 20yy-mm-dd
|
|
*&---------------------------------------------------------------------*
|
|
REPORT @TCode@.
|
|
|
|
TYPE-POOLS: slis.
|
|
TYPE-POOLS truxs.
|
|
|
|
TABLES : @TableName@.
|
|
|
|
DATA: wa_fieldcat TYPE slis_fieldcat_alv , " 相當於工作區
|
|
i_fieldcat TYPE slis_t_fieldcat_alv , " 存放輸出欄位名稱的列表
|
|
i_layout TYPE slis_layout_alv . " 負責整個ALV的全域性屬性
|
|
|
|
i_layout-zebra = 'X' . " 使ALV界面呈顏色交替
|
|
"i_layout-colwidth_optimize = 'X' . " 自動優化列寬
|
|
i_layout-detail_initial_lines = 'X' . " 是否出現細節螢幕
|
|
i_layout-detail_titlebar = '詳細內容' . " 細節螢幕標題
|
|
|
|
TYPES: BEGIN OF t_tab,
|
|
@FieldDefine@
|
|
END OF t_tab.
|
|
|
|
DATA :
|
|
t_upload TYPE STANDARD TABLE OF t_tab,
|
|
wa_upload TYPE t_tab,
|
|
it_type TYPE truxs_t_text_data.
|
|
|
|
DATA:
|
|
recno type I,
|
|
ok_no type I,
|
|
err_no type I.
|
|
|
|
DATA: ok_c(10) TYPE c, err_c(10) TYPE c.
|
|
DATA: lv_result(200) TYPE c.
|
|
|
|
* Selection screen
|
|
SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE text-001 .
|
|
PARAMETERS:
|
|
p_view RADIOBUTTON GROUP rg1 DEFAULT 'X',
|
|
p_save RADIOBUTTON GROUP rg1.
|
|
SELECTION-SCREEN END OF BLOCK blk1.
|
|
|
|
SELECTION-SCREEN BEGIN OF BLOCK blk2 WITH FRAME TITLE text-002 .
|
|
PARAMETERS p_file TYPE rlgrap-filename DEFAULT 'D:\Data\@TableName@.xlsx'.
|
|
SELECTION-SCREEN END OF BLOCK blk2.
|
|
|
|
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
|
|
CALL FUNCTION 'F4_FILENAME'
|
|
EXPORTING
|
|
field_name = 'P_FILE'
|
|
IMPORTING
|
|
file_name = p_file.
|
|
|
|
START-OF-SELECTION.
|
|
* Uploading the data in the file into internal table
|
|
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
|
|
EXPORTING
|
|
* I_FIELD_SEPERATOR =
|
|
* I_LINE_HEADER = 'X'
|
|
i_tab_raw_data = it_type
|
|
i_filename = p_file
|
|
TABLES
|
|
i_tab_converted_data = t_upload[]
|
|
EXCEPTIONS
|
|
conversion_failed = 1
|
|
OTHERS = 2.
|
|
|
|
IF sy-subrc NE 0.
|
|
MESSAGE ID sy-msgid
|
|
TYPE sy-msgty
|
|
NUMBER sy-msgno
|
|
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
|
|
ENDIF.
|
|
|
|
CASE 'X'.
|
|
WHEN p_view.
|
|
PERFORM frm_view.
|
|
WHEN p_save.
|
|
PERFORM frm_save.
|
|
WHEN OTHERS.
|
|
ENDCASE.
|
|
|
|
END-OF-SELECTION.
|
|
|
|
*&---------------------------------------------------------------------*
|
|
*& Form frm_view
|
|
*&---------------------------------------------------------------------*
|
|
FORM frm_view.
|
|
"設定 alv 參數
|
|
PERFORM frm_set_fieldcat USING:
|
|
@FieldCaption_excel@
|
|
|
|
"顯示 excel 內容
|
|
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
|
|
exporting
|
|
i_callback_program = sy-repid " 當前程式
|
|
is_layout = i_layout " ALV的全域性屬性
|
|
it_fieldcat = i_fieldcat[] " 存放輸出欄位名稱的列表
|
|
i_save = 'X' " 是否保存佈局
|
|
tables
|
|
T_OUTTAB = t_upload. " Table with data to be displayed
|
|
ENDFORM.
|
|
|
|
*&---------------------------------------------------------------------*
|
|
*& Form frm_view
|
|
*&---------------------------------------------------------------------*
|
|
*& 目前版本沒有防錯機制, 僅檢查是否已存在的判斷
|
|
*&---------------------------------------------------------------------*
|
|
FORM frm_save.
|
|
* Uploading the data into the database table
|
|
ok_no = 0.
|
|
err_no = 0.
|
|
LOOP AT T_UPLOAD INTO WA_UPLOAD.
|
|
"判斷資料是否已存在, 若已存在 skip
|
|
select count( * ) into @recno from @TableName@ where @PK_Where@
|
|
|
|
if recno = 0.
|
|
@AssignFieldValue@
|
|
|
|
MODIFY @TableName@.
|
|
ok_no = ok_no + 1.
|
|
else.
|
|
err_no = err_no + 1.
|
|
endif.
|
|
ENDLOOP.
|
|
|
|
ok_c = ok_no.
|
|
err_c = err_no.
|
|
CONCATENATE '資料寫入成功筆數:' ok_c ',失敗筆數:' err_c INTO lv_result.
|
|
CALL FUNCTION 'POPUP_TO_DISPLAY_TEXT'
|
|
exporting
|
|
TEXTLINE1 = lv_result.
|
|
ENDFORM.
|
|
|
|
*&---------------------------------------------------------------------*
|
|
*& Form frm_set_fieldcat
|
|
*&---------------------------------------------------------------------*
|
|
* text
|
|
*----------------------------------------------------------------------*
|
|
FORM frm_set_fieldcat
|
|
USING l_tabname l_fieldname l_titlename_l l_titlename_s l_fix_column.
|
|
|
|
CLEAR wa_fieldcat.
|
|
wa_fieldcat-tabname = l_tabname.
|
|
wa_fieldcat-fieldname = l_fieldname. " 需要輸出的內表的欄位名
|
|
wa_fieldcat-seltext_l = l_titlename_l. " 欄位的描述-長欄位標籤
|
|
wa_fieldcat-seltext_m = l_titlename_l. " 欄位描述-中欄位標籤
|
|
wa_fieldcat-seltext_s = l_titlename_s. " 欄位描述-短欄位標籤
|
|
wa_fieldcat-fix_column = l_fix_column. " 是否是固定列
|
|
"wa_fieldcat-outputlen = l_outputlen. " 欄寬
|
|
APPEND wa_fieldcat TO i_fieldcat.
|
|
|
|
ENDFORM. " frm_set_fieldcat |