*& Report ZMMR030
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zmmr030.
DATA: BEGIN OF itab OCCURS 0,
lineno(5) TYPE c,
matnr LIKE eord-matnr,
werks LIKE eord-werks,
vdatu LIKE eord-vdatu,
bdatu LIKE eord-bdatu,
lifnr LIKE eord-lifnr,
ekorg LIKE eord-ekorg,
feskz LIKE rm06w-feskz,
autet LIKE eord-autet,
reswk LIKE eord-reswk,
END OF itab.
DATA: row_count TYPE i .
DATA:BEGIN OF i_log,
lineno(5) TYPE c,
matnr LIKE eord-matnr,
werks LIKE eord-werks,
message1(100) TYPE c.
INCLUDE STRUCTURE bdcmsgcoll.
DATA:END OF i_log.
DATA:it_log LIKE i_log OCCURS 0 WITH HEADER LINE.
DATA: it_bdc LIKE bdcdata OCCURS 0 WITH HEADER LINE,
it_bdcmsg LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE.
CONSTANTS:
c_begin_row TYPE i VALUE 1, "Beginning row of excel file
c_begin_col TYPE i VALUE 1, "Beginning column of excel file
c_end_row TYPE i VALUE 9999, "Ending row of excel file
c_end_col TYPE i VALUE 10. "Ending column of excel file
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE t1.
PARAMETERS: pc_file(80).
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE t2.
PARAMETERS: p_chk1 RADIOBUTTON GROUP 1."InterCompany
PARAMETERS: p_chk2 DEFAULT 'X' RADIOBUTTON GROUP 1."External
SELECTION-SCREEN END OF BLOCK b2.
INITIALIZATION.
t1 = '選擇文件'.
t2 = '選擇類型'.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR pc_file.
PERFORM sub_find USING pc_file.
START-OF-SELECTION.
PERFORM uploaddata. "從PC中上傳文件到內表中
DESCRIBE TABLE itab LINES row_count.
IF p_chk2 = 'X'.
LOOP AT itab.
PERFORM get_bdc_external USING itab-lineno itab-matnr itab-werks itab-lifnr itab-vdatu itab-bdatu itab-ekorg itab-feskz itab-autet.
ENDLOOP.
ENDIF.
IF p_chk1 = 'X'.
LOOP AT itab.
PERFORM get_bdc_intercompany USING itab-lineno itab-matnr itab-werks itab-lifnr itab-vdatu itab-bdatu itab-ekorg itab-feskz itab-autet itab-reswk.
ENDLOOP.
ENDIF.
IF sy-subrc = 0.
PERFORM showlog.
ELSE.
MESSAGE 'FALSE' TYPE 'I'.
ENDIF.
*&---------------------------------------------------------------------*
*& Form sub_find
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->PC_FILE text
*----------------------------------------------------------------------*
FORM sub_find USING pc_file.
* Data for open dialog
DATA: l_filetab TYPE filetable,
l_rc TYPE i.
CLEAR l_filetab.
REFRESH l_filetab.
* Open dialog
CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
* WINDOW_TITLE = 'SAP Custom - Open File'
* DEFAULT_EXTENSION =
default_filename = '*.xls'
* FILE_FILTER = '*.xls'
initial_directory = 'D:\'
multiselection = ''
CHANGING
file_table = l_filetab
rc = l_rc
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.
* Get file path
CHECK l_rc EQ 1.
READ TABLE l_filetab INDEX 1 INTO pc_file.
ENDFORM. "sub_find
*&---------------------------------------------------------------------*
*& 2.RFORM uploaddata. "從PC中上傳文件到內表中
*&---------------------------------------------------------------------*
FORM uploaddata.
DATA: BEGIN OF i_excel OCCURS 0.
INCLUDE STRUCTURE alsmex_tabline.
DATA: END OF i_excel.
DATA: l_answer(1) TYPE c.
DATA: l_column TYPE i.
FIELD-SYMBOLS: <fs>.
DATA: l_pathname LIKE rlgrap-filename.
MOVE pc_file TO l_pathname.
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
filename = l_pathname
i_begin_col = c_begin_col
i_begin_row = c_begin_row
i_end_col = c_end_col
i_end_row = c_end_row
TABLES
intern = i_excel
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 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.
ELSE.
IF i_excel[] IS INITIAL.
CALL FUNCTION 'POPUP_TO_CONFIRM_WITH_MESSAGE'
EXPORTING
* DEFAULTOPTION = 'Y'
diagnosetext1 = 'No data in excel'
* DIAGNOSETEXT2 = ' '
* DIAGNOSETEXT3 = ' '
textline1 = 'No data in excel'
* TEXTLINE2 = ' '
titel = 'Confirm'
* START_COLUMN = 25
* START_ROW = 6
* CANCEL_DISPLAY = 'X'
IMPORTING
answer = l_answer.
ELSE.
DELETE i_excel WHERE row = '0001'.
SORT i_excel BY row col.
LOOP AT i_excel.
MOVE i_excel-col TO l_column.
ASSIGN COMPONENT l_column OF STRUCTURE itab TO <fs>.
MOVE i_excel-value TO <fs>.
AT END OF row.
APPEND itab.
CLEAR itab.
ENDAT.
ENDLOOP.
ENDIF.
ENDIF.
ENDFORM. "uploaddata
*&---------------------------------------------------------------------*
*& Form get_bdc_external
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM get_bdc_external USING lineno matnr werks lifnr vdatu bdatu ekorg feskz autet.
DATA: msg_1(50) TYPE c VALUE '當前上傳'.
DATA: msg_2(50) TYPE c VALUE '行'.
DATA: msg_3(50) TYPE c VALUE ',共'.
DATA: msg_4(4) TYPE c .
msg_4 = row_count.
CONCATENATE msg_1 lineno INTO msg_1.
CONCATENATE msg_1 msg_2 INTO msg_1.
CONCATENATE msg_1 msg_3 INTO msg_1.
CONCATENATE msg_1 msg_4 INTO msg_1.
CONCATENATE msg_1 msg_2 INTO msg_1.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
text = msg_1.
PERFORM bdc_dynpro USING 'SAPLMEOR' '0200'.
PERFORM bdc_field USING 'BDC_CURSOR' 'EORD-MATNR'.
PERFORM bdc_field USING 'BDC_OKCODE' '/00'.
PERFORM bdc_field USING 'EORD-MATNR' matnr."物料號
PERFORM bdc_field USING 'EORD-WERKS' werks."工廠
PERFORM bdc_dynpro USING 'SAPLMEOR' '0205'.
PERFORM bdc_field USING 'BDC_CURSOR' 'EORD-AUTET(01)'.
PERFORM bdc_field USING 'BDC_OKCODE' '/00'.
PERFORM bdc_field USING 'EORD-VDATU(01)' vdatu.
PERFORM bdc_field USING 'EORD-BDATU(01)' bdatu.
PERFORM bdc_field USING 'EORD-LIFNR(01)' lifnr."供應商代號
PERFORM bdc_field USING 'EORD-EKORG(01)' ekorg."採購組織
PERFORM bdc_field USING 'RM06W-FESKZ(01)' feskz."定貨源
PERFORM bdc_field USING 'EORD-AUTET(01)' autet."mrp
PERFORM bdc_dynpro USING 'SAPLMEOR' '0205'.
PERFORM bdc_field USING 'BDC_CURSOR' 'EORD-AUTET(01)'.
PERFORM bdc_field USING 'BDC_OKCODE' '=BU'.
CALL TRANSACTION 'ME01' USING it_bdc
MODE 'N'"A前臺顯示、N後臺運行
UPDATE 'S'
MESSAGES INTO it_bdcmsg.
it_log-matnr = matnr.
it_log-werks = werks.
it_log-lineno = lineno.
LOOP AT it_bdcmsg.
MESSAGE ID it_bdcmsg-msgid
TYPE it_bdcmsg-msgtyp
NUMBER it_bdcmsg-msgnr
WITH it_bdcmsg-msgv1 it_bdcmsg-msgv2 it_bdcmsg-msgv3 it_bdcmsg-msgv4
INTO it_log-message1.
it_log-msgtyp = it_bdcmsg-msgtyp.
it_log-dynumb = it_bdcmsg-dynumb.
it_log-tcode = it_bdcmsg-tcode.
it_log-msgnr = it_bdcmsg-msgnr.
it_log-msgid = it_bdcmsg-msgid.
APPEND it_log.
ENDLOOP.
CLEAR: it_bdc,it_bdc[] ,it_bdcmsg, it_bdcmsg[].
ENDFORM. "get_bdc_external
*&---------------------------------------------------------------------*
*& Form get_bdc_intercompany
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM get_bdc_intercompany USING lineno matnr werks lifnr vdatu bdatu ekorg feskz autet reswk.
DATA: msg_1(50) TYPE c VALUE '當前上傳'.
DATA: msg_2(50) TYPE c VALUE '行'.
DATA: msg_3(50) TYPE c VALUE ',共'.
DATA: msg_4(4) TYPE c .
msg_4 = row_count .
CONCATENATE msg_1 lineno INTO msg_1.
CONCATENATE msg_1 msg_2 INTO msg_1.
CONCATENATE msg_1 msg_3 INTO msg_1.
CONCATENATE msg_1 msg_4 INTO msg_1.
CONCATENATE msg_1 msg_2 INTO msg_1.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
text = msg_1.
PERFORM bdc_dynpro USING 'SAPLMEOR' '0200'.
PERFORM bdc_field USING 'BDC_CURSOR' 'EORD-MATNR'.
PERFORM bdc_field USING 'BDC_OKCODE' '/00'.
PERFORM bdc_field USING 'EORD-MATNR' matnr."物料號
PERFORM bdc_field USING 'EORD-WERKS' werks."工廠
PERFORM bdc_dynpro USING 'SAPLMEOR' '0205'.
PERFORM bdc_field USING 'BDC_CURSOR' 'EORD-AUTET(01)'.
PERFORM bdc_field USING 'BDC_OKCODE' '/00'.
PERFORM bdc_field USING 'EORD-VDATU(01)' vdatu.
PERFORM bdc_field USING 'EORD-BDATU(01)' bdatu.
PERFORM bdc_field USING 'EORD-LIFNR(01)' lifnr."供應商代號
PERFORM bdc_field USING 'EORD-EKORG(01)' ekorg."採購組織
PERFORM bdc_field USING 'EORD-RESWK(01)' reswk."工廠
PERFORM bdc_field USING 'RM06W-FESKZ(01)' feskz."定貨源
PERFORM bdc_field USING 'EORD-AUTET(01)' autet."mrp
PERFORM bdc_dynpro USING 'SAPLMEOR' '0205'.
PERFORM bdc_field USING 'BDC_CURSOR' 'EORD-AUTET(01)'.
PERFORM bdc_field USING 'BDC_OKCODE' '=BU'.
CALL TRANSACTION 'ME01' USING it_bdc
MODE 'N'"A前臺顯示、N後臺運行
UPDATE 'S'
MESSAGES INTO it_bdcmsg.
it_log-matnr = matnr.
it_log-werks = werks.
it_log-lineno = lineno.
LOOP AT it_bdcmsg.
MESSAGE ID it_bdcmsg-msgid
TYPE it_bdcmsg-msgtyp
NUMBER it_bdcmsg-msgnr
WITH it_bdcmsg-msgv1 it_bdcmsg-msgv2 it_bdcmsg-msgv3 it_bdcmsg-msgv4
INTO it_log-message1.
it_log-msgtyp = it_bdcmsg-msgtyp.
it_log-dynumb = it_bdcmsg-dynumb.
it_log-tcode = it_bdcmsg-tcode.
it_log-msgnr = it_bdcmsg-msgnr.
it_log-msgid = it_bdcmsg-msgid.
ENDLOOP.
APPEND it_log.
CLEAR: it_bdc,it_bdc[] ,it_bdcmsg, it_bdcmsg[].
ENDFORM. "get_bdc_intercompany
*&---------------------------------------------------------------------*
*& Form BDC_DYNPRO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->PROGRAM text
* -->DYNPRO text
*----------------------------------------------------------------------*
FORM bdc_dynpro USING program dynpro.
CLEAR it_bdc.
it_bdc-program = program.
it_bdc-dynpro = dynpro.
it_bdc-dynbegin = 'X'.
APPEND it_bdc.
ENDFORM. "BDC_DYNPRO
*----------------------------------------------------------------------*
* Insert field *
*----------------------------------------------------------------------*
FORM bdc_field USING fnam fval.
"IF FVAL <> NODATA.
CLEAR it_bdc.
it_bdc-fnam = fnam.
it_bdc-fval = fval.
APPEND it_bdc.
"ENDIF.
ENDFORM. "bdc_field
*&---------------------------------------------------------------------*
*& Form showlog
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM showlog.
DATA:alv_fieldcat TYPE slis_t_fieldcat_alv.
DATA:wa_alv_fieldcat TYPE LINE OF slis_t_fieldcat_alv.
DATA:alv_layout TYPE slis_layout_alv.
DATA: l_cellcolor TYPE slis_specialcol_alv .
alv_layout-colwidth_optimize = 'X'."自動列寬
* ALV_LAYOUT-NO_MIN_LINESIZE = ''.
* ALV_LAYOUT-BOX_FIELDNAME = 'SET'.
" alv_layout-info_fieldname = 'LINECOLOR'."設置行顏色
" alv_layout-coltab_fieldname = 'COLTAB'."設置單元格顏色
CLEAR wa_alv_fieldcat.
REFRESH alv_fieldcat.
CLEAR wa_alv_fieldcat.
wa_alv_fieldcat-fieldname = 'TCODE'.
wa_alv_fieldcat-seltext_m = 'T-CODE'.
APPEND wa_alv_fieldcat TO alv_fieldcat.
CLEAR wa_alv_fieldcat.
wa_alv_fieldcat-fieldname = 'LINENO'.
wa_alv_fieldcat-seltext_m = '行號'.
wa_alv_fieldcat-no_zero = 'X'.
APPEND wa_alv_fieldcat TO alv_fieldcat.
CLEAR wa_alv_fieldcat.
wa_alv_fieldcat-fieldname = 'MATNR'.
wa_alv_fieldcat-seltext_m = '物料號'.
wa_alv_fieldcat-no_zero = 'X'.
APPEND wa_alv_fieldcat TO alv_fieldcat.
CLEAR wa_alv_fieldcat.
wa_alv_fieldcat-fieldname = 'WERKS'.
wa_alv_fieldcat-seltext_m = '工廠'.
wa_alv_fieldcat-no_zero = 'X'.
APPEND wa_alv_fieldcat TO alv_fieldcat.
CLEAR wa_alv_fieldcat.
wa_alv_fieldcat-fieldname = 'MSGTYP'.
wa_alv_fieldcat-seltext_m = 'MSGTYP'.
wa_alv_fieldcat-no_zero = 'X'.
APPEND wa_alv_fieldcat TO alv_fieldcat.
CLEAR wa_alv_fieldcat.
wa_alv_fieldcat-fieldname = 'DYNUMB'.
wa_alv_fieldcat-seltext_m = 'DYNUMB'.
wa_alv_fieldcat-no_zero = 'X'.
APPEND wa_alv_fieldcat TO alv_fieldcat.
CLEAR wa_alv_fieldcat.
wa_alv_fieldcat-fieldname = 'MSGNR'.
wa_alv_fieldcat-seltext_m = 'MSGNR'.
APPEND wa_alv_fieldcat TO alv_fieldcat.
CLEAR wa_alv_fieldcat.
wa_alv_fieldcat-fieldname = 'MSGID'.
wa_alv_fieldcat-seltext_m = 'MESGID'.
APPEND wa_alv_fieldcat TO alv_fieldcat.
CLEAR wa_alv_fieldcat.
wa_alv_fieldcat-fieldname = 'MESSAGE1'.
wa_alv_fieldcat-seltext_m = '信息內容'.
APPEND wa_alv_fieldcat TO alv_fieldcat.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
is_layout = alv_layout
it_fieldcat = alv_fieldcat
i_grid_title = '運行日誌'"標題
" IT_EVENT_EXIT = GIT_EVENT_EXIT "重要
" I_CALLBACK_USER_COMMAND = 'FRM_UCOMM' "調用用戶點擊事件
" I_CALLBACK_PF_STATUS_SET = 'SET_PF' "設置打印按鈕
TABLES
t_outtab = it_log[]
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. "showlog