Files

182 lines
5.7 KiB
Plaintext

*&---------------------------------------------------------------------*
*& Report ZCK001_U01
*&---------------------------------------------------------------------*
*& 促進價匯入
*& Author: Michael
*& Create Date: 2020/2/26
*&---------------------------------------------------------------------*
REPORT ZCK001_U01.
TYPE-POOLS: slis.
TYPE-POOLS truxs.
TABLES : ZCK001_T01.
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,
ZSOURCE(10) TYPE C,
ZFILTER(10) TYPE C,
LIFNR(10) TYPE C,
MATNR(40) TYPE C,
ZSDATE TYPE D,
ZEDATE TYPE D,
INPRICE TYPE P DECIMALS 2,
ZCDATE TYPE D,
ZMEMO(60) TYPE C,
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\ZCK001_T01.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:
't_upload' 'ZSOURCE' '資料來源' '資料來源' 'X',
't_upload' 'ZFILTER' '條件類型' '條件類型' '',
't_upload' 'LIFNR' '供應商' '供應商' '',
't_upload' 'MATNR' '物料' '物料' '',
't_upload' 'ZSDATE' '生效日期' '生效日期' '',
't_upload' 'ZEDATE' '有效期限' '有效期限' '',
't_upload' 'INPRICE' '價格' '價格' '',
't_upload' 'ZCDATE' '建立日期' '建立日期' '',
't_upload' 'ZMEMO' '備註' '備註' ''.
"顯示 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 ZCK001_T01 where ZSOURCE = @WA_UPLOAD-ZSOURCE and ZFILTER = @WA_UPLOAD-ZFILTER and LIFNR = @WA_UPLOAD-LIFNR and MATNR = @WA_UPLOAD-MATNR and ZSDATE = @WA_UPLOAD-ZSDATE and ZEDATE = @WA_UPLOAD-ZEDATE .
if recno = 0.
ZCK001_T01-ZSOURCE = WA_UPLOAD-ZSOURCE.
ZCK001_T01-ZFILTER = WA_UPLOAD-ZFILTER.
ZCK001_T01-LIFNR = WA_UPLOAD-LIFNR.
ZCK001_T01-MATNR = WA_UPLOAD-MATNR.
ZCK001_T01-ZSDATE = WA_UPLOAD-ZSDATE.
ZCK001_T01-ZEDATE = WA_UPLOAD-ZEDATE.
ZCK001_T01-INPRICE = WA_UPLOAD-INPRICE.
ZCK001_T01-ZCDATE = WA_UPLOAD-ZCDATE.
ZCK001_T01-ZMEMO = WA_UPLOAD-ZMEMO.
MODIFY ZCK001_T01.
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