ALV回车捕捉
*&---------------------------------------------------------------------*
*& 包括??????????????? ZINCL0016
*&---------------------------------------------------------------------*
INCLUDE <ctldef>.
INCLUDE ole2incl.
TYPE-POOLS: slis.
TYPES: BEGIN OF t_bsbbno,
???????? zbsno TYPE zhrebsno,
???????? zyemn TYPE zhrtbsbb-zyemn,
???????? zbblx TYPE zhrtbsbb-zbblx,
???????? werks TYPE zhrtbsbb-werks,
?????? END OF t_bsbbno.
DATA: doc_table?????? LIKE w3mime OCCURS 0,
????? doc_size??????? TYPE i,
????? doc_type??????? TYPE char100,
????? doc_format????? TYPE char100,
????? gc_templatename TYPE char100,
????? gc_filename???? TYPE string,
????? gc_status?????? TYPE i,
????? gc_alvtitle???? TYPE lvc_title,
????? gt_exclude????? TYPE TABLE OF char20 WITH HEADER LINE,
????? savefile??????? TYPE string,
????? gt_excel??????? TYPE TABLE OF alsmex_tabline.
DATA: excel?????????? TYPE ole2_object,
????? application???? TYPE ole2_object,
????? workbook??????? TYPE ole2_object,
????? sheet?????????? TYPE ole2_object,
????? cells?????????? TYPE ole2_object,
????? exrows????????? TYPE ole2_object,
????? excolumns?????? TYPE ole2_object,
????? borders???????? TYPE ole2_object,
????? linestyle?????? TYPE ole2_object,
????? ranges????????? TYPE ole2_object,
????? interior??????? TYPE ole2_object,
????? pagebreak?????? TYPE ole2_object.
*ALV Used
DATA: it_fieldcat???? TYPE slis_t_fieldcat_alv,
????? it_sort???????? TYPE slis_t_sortinfo_alv,
????? it_events?????? TYPE slis_t_event,
????? wa_fieldcat???? TYPE slis_fieldcat_alv,
????? wa_sort???????? TYPE slis_sortinfo_alv,
????? wa_events?????? LIKE LINE OF it_events,
????? ls_layout?????? TYPE slis_layout_alv,
????? lc_glay???????? TYPE lvc_s_glay.
DATA tem_grid??????? TYPE REF TO cl_gui_alv_grid.
*----------------------------------------------------------------------*
*?????? CLASS LCL_EVENT_RECEIVER DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_event_receiver DEFINITION.
PUBLIC SECTION.
??? METHODS handle_modify
??? FOR EVENT data_changed_finished OF cl_gui_alv_grid
??? IMPORTING e_modified et_good_cells.
ENDCLASS.??????????????????? "LCL_EVENT_RECEIVER DEFINITION
*----------------------------------------------------------------------*
*?????? CLASS LCL_EVENT_RECEIVER IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_event_receiver IMPLEMENTATION.
METHOD handle_modify.
??? PERFORM refresh.
??? DATA stbl TYPE lvc_s_stbl.
*?? 穩定刷新
??? stbl-row = 'X'." 基于行的穩定刷新
??? stbl-col = 'X'." 基于列穩定刷新
??? CALL METHOD tem_grid->refresh_table_display
????? EXPORTING
??????? is_stable = stbl.
ENDMETHOD.??????????????????? "HANDLE_MODIFY
ENDCLASS.??????????????????? "LCL_EVENT_RECEIVER IMPLEMENTATION
DATA gt_event_receiver TYPE REF TO lcl_event_receiver .
*&---------------------------------------------------------------------*
*&????? Form downloadtemplate
*&---------------------------------------------------------------------*
*?????? Download Excel Template From SAP And Save To Local
*----------------------------------------------------------------------*
*????? -->PTEMPLATENAME Template File Name
*????? -->PSAVEFILENAME Excel File Name
*----------------------------------------------------------------------*
FORM downloadtemplate USING ptemplatename TYPE char100
??????????????????????????? psavefilename.
DATA: path???? TYPE string,
??????? filename TYPE string,
??????? title??? TYPE string VALUE '請選擇保存的路徑及文件名',
??????? filter?? TYPE string.
CONCATENATE cl_gui_frontend_services=>filetype_excel
????????????? cl_gui_frontend_services=>filetype_all
???????? INTO filter.
CALL METHOD cl_gui_frontend_services=>file_save_dialog
??? EXPORTING
????? default_file_name = psavefilename
????? window_title????? = title
????? file_filter?????? = filter
??? CHANGING
????? filename????????? = filename
????? path????????????? = path
????? fullpath????????? = savefile.
CHECK savefile IS NOT INITIAL.
CALL FUNCTION 'SAP_OI_LOAD_MIME_DATA'
??? EXPORTING
????? object_id?????? = ptemplatename
??? IMPORTING
????? data_size?????? = doc_size
????? document_format = doc_format
????? document_type?? = doc_type
??? TABLES
????? data_table????? = doc_table.
CHECK doc_table IS NOT INITIAL.
CALL FUNCTION 'GUI_DOWNLOAD'
??? EXPORTING
????? bin_filesize??????????? = doc_size
????? filename??????????????? = savefile
????? filetype??????????????? = 'BIN'
??? TABLES
????? data_tab??????????????? = doc_table
??? 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.
*??? PERFORM main_process.
??? PERFORM writeexcel.
??? MESSAGE s032 WITH savefile.
ELSE.
??? MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
??????????? WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
* DATA:ls_wwwdatatab TYPE wwwdatatab,
*?????? ls_savefile?? TYPE rlgrap-filename,
*?????? ls_filename?? TYPE w3file-name,
*?????? rc??????????? TYPE sy-subrc.
*
* ls_wwwdatatab-relid = 'MI'.
* ls_wwwdatatab-objid = ptemplatename.
* ls_filename = psavefilename.
** ls_savefile = psavefilename.
*
* CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
*??? EXPORTING
*????? key???????? = ls_wwwdatatab
*????? destination = ls_savefile
*??? IMPORTING
*????? rc????????? = rc
*??? CHANGING
*????? temp??????? = ls_filename.
* IF rc = 0.
*??? MESSAGE ls_filename TYPE 'S'.
**??? savefile = ls_filename.
*??? PERFORM openexcelfile USING 1 ls_filename.
*??? PERFORM main_process.
* ENDIF.
ENDFORM.??????????????????? "downloadtemplate
*&---------------------------------------------------------------------*
*&????? Form outputalv
*&---------------------------------------------------------------------*
*?????? Output ALV
*----------------------------------------------------------------------*
*????? -->IT_ALVDATA Internal Table Of ALV Data
*----------------------------------------------------------------------*
FORM outputalv TABLES it_alvdata TYPE STANDARD TABLE.
wa_events-name = 'CALLER_EXIT'.
wa_events-form = 'FM_BUTTON'.
APPEND wa_events TO it_events.
lc_glay-edt_cll_cb = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
?? EXPORTING
*?? I_INTERFACE_CHECK???????????????? = ' '
*?? I_BYPASSING_BUFFER??????????????? = ' '
*?? I_BUFFER_ACTIVE?????????????????? = ' '
???? i_callback_program??????????????? = sy-repid
???? i_callback_pf_status_set????????? = 'SET_STATUS'
???? i_callback_user_command?????????? = 'USER_COMMAND'
???? i_callback_top_of_page??????????? = ' '
???? i_callback_html_top_of_page?????? = ' '
???? i_callback_html_end_of_list?????? = ' '
*?? I_STRUCTURE_NAME????????????????? =
*?? I_BACKGROUND_ID?????????????????? = ' '
???? i_grid_title????????????????????? = gc_alvtitle
???? i_grid_settings?????????????????? = lc_glay
???? is_layout???????????????????????? = ls_layout
???? it_fieldcat?????????????????????? = it_fieldcat
*?? IT_EXCLUDING????????????????????? =
*?? IT_SPECIAL_GROUPS???????????????? =
???? it_sort?????????????????????????? = it_sort
*?? IT_FILTER???????????????????????? =
*?? IS_SEL_HIDE?????????????????????? =
*?? I_DEFAULT???????????????????????? = 'X'
???? i_save??????????????????????????? = 'X'
*?? IS_VARIANT??????????????????????? =
???? it_events???????????????????????? = it_events
*?? IT_EVENT_EXIT???????????????????? =
*?? IS_PRINT????????????????????????? =
*?? IS_REPREP_ID????????????????????? =
*?? I_SCREEN_START_COLUMN???????????? = 0
*?? I_SCREEN_START_LINE?????????????? = 0
*?? I_SCREEN_END_COLUMN?????????????? = 0
*?? I_SCREEN_END_LINE???????????????? = 0
*?? I_HTML_HEIGHT_TOP???????????????? = 0
*?? I_HTML_HEIGHT_END???????????????? = 0
*?? IT_ALV_GRAPHICS?????????????????? =
*?? IT_HYPERLINK????????????????????? =
*?? IT_ADD_FIELDCAT?????????????????? =
*?? IT_EXCEPT_QINFO?????????????????? =
*?? IR_SALV_FULLSCREEN_ADAPTER??????? =
* IMPORTING
*?? E_EXIT_CAUSED_BY_CALLER?????????? =
*?? ES_EXIT_CAUSED_BY_USER??????????? =
??? TABLES
????? t_outtab???????????????????????? = it_alvdata
?? 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.??????????????????? " outputalv
*&---------------------------------------------------------------------*
*&????? Form user_command
*&---------------------------------------------------------------------*
*?????? ALV User Command Call Back Function
*----------------------------------------------------------------------*
*????? -->P_UCOMM??? OK Code
*????? -->P_SELFIELD Selected ALV Field
*----------------------------------------------------------------------*
FORM user_command USING p_ucomm??? LIKE sy-ucomm
??????????????????????? p_selfield TYPE slis_selfield.
CASE p_ucomm.
??? WHEN '&XLS'.
????? PERFORM downloadtemplate USING gc_templatename gc_filename.
??? WHEN '&UPL'.
*????? PERFORM editexcel.
????? PERFORM uploadexcel.
????? PERFORM alv_refresh CHANGING p_selfield-col_stable
?????????????????????????????????? p_selfield-row_stable
?????????????????????????????????? p_selfield-refresh.
??? WHEN '&SMT'.
????? PERFORM submitreport.
??? WHEN '&SAVE'.
????? PERFORM save.
ENDCASE.
ENDFORM.??????????????????? "USER_COMMAND
*&---------------------------------------------------------------------*
*&????? Form READEXCEL
*&---------------------------------------------------------------------*
*?????? text
*----------------------------------------------------------------------*
*????? -->PA_BEGROW????? Begin Row
*????? -->PA_BEGCOL????? Begin Column
*----------------------------------------------------------------------*
FORM readexcel USING pa_begrow TYPE i
???????????????????? pa_begcol TYPE i
???????????????????? pa_endrow TYPE i
???????????????????? pa_endcol TYPE i.
DATA: lc_filter?? TYPE string,
??????? lc_return?? TYPE i,
??????? lt_file???? TYPE filetable,
??????? lc_file???? LIKE LINE OF lt_file,
??????? lc_filename TYPE rlgrap-filename.
lc_filter = cl_gui_frontend_services=>filetype_excel.
CALL METHOD cl_gui_frontend_services=>file_open_dialog
??? EXPORTING
????? file_filter = lc_filter
??? CHANGING
????? file_table = lt_file
????? rc????????? = lc_return.
IF lc_return = 1.
??? READ TABLE lt_file INDEX 1 INTO lc_file.
ENDIF.
lc_filename = lc_file.
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
??? EXPORTING
????? filename??????????????? = lc_filename
????? i_begin_col???????????? = pa_begcol
????? i_begin_row???????????? = pa_begrow
????? i_end_col?????????????? = pa_endcol
????? i_end_row?????????????? = pa_endrow
??? TABLES
????? intern????????????????? = gt_excel
??? EXCEPTIONS
????? inconsistent_parameters = 1
????? upload_ole????????????? = 2
????? OTHERS????????????????? = 3.
ENDFORM.??????????????????? " UPLOADEXCEL
*&---------------------------------------------------------------------*
*&????? Form UPLOADEXCEL
*&---------------------------------------------------------------------*
*?????? text
*----------------------------------------------------------------------*
FORM get_bsno CHANGING p_bsno TYPE zhrebsno.
CALL FUNCTION 'NUMBER_GET_NEXT'
??? EXPORTING
????? nr_range_nr???????????? = '01'
????? object????????????????? = 'ZHRBSBBNR'
????? quantity??????????????? = '1'
??? IMPORTING
????? number????????????????? = p_bsno
??? EXCEPTIONS
????? interval_not_found????? = 1
????? number_range_not_intern = 2
????? object_not_found??????? = 3
????? quantity_is_0?????????? = 4
????? quantity_is_not_1?????? = 5
????? interval_overflow?????? = 6
????? buffer_overflow???????? = 7
????? OTHERS????????????????? = 8.
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.
ENDFORM.??????????????????? "get_bsno
*&---------------------------------------------------------------------*
*&????? Form ALV_REFRESH
*&---------------------------------------------------------------------*
*?????? Refresh ALV
*----------------------------------------------------------------------*
*????? <--PA_COL_STABLE text
*????? <--PA_ROW_STABLE text
*????? <--PA_REFRESH text
*----------------------------------------------------------------------*
FORM alv_refresh CHANGING pa_col_stable
?????????????????????????? pa_row_stable
?????????????????????????? pa_refresh.
pa_col_stable = 'X'.
pa_row_stable = 'X'.
pa_refresh = 'X'.
ENDFORM.??????????????????? " ALV_REFRESH
*&---------------------------------------------------------------------*
*&????? Form F4_BSNO
*&---------------------------------------------------------------------*
*?????? text
*----------------------------------------------------------------------*
FORM f4_bsno USING pa_bblx TYPE zhrtbsbb-zbblx.
DATA: pt_bsbbno TYPE STANDARD TABLE OF t_bsbbno.
SELECT zbsno
???????? zyemn
???????? zbblx
???????? werks
??? FROM zhrtbsbb
??? INTO TABLE pt_bsbbno
?? WHERE zbblx = pa_bblx.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
??? EXPORTING
????? retfield??????? = 'ZBSNO'
????? dynpprog??????? = sy-repid
????? dynpnr????????? = sy-dynnr
????? dynprofield???? = 'P_BSNO'
????? value_org?????? = 'S'
??? TABLES
????? value_tab?????? = pt_bsbbno
??? EXCEPTIONS
????? parameter_error = 1
????? no_values_found = 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.
ENDFORM.??????????????????????????????????????????????????? " F4_BSNO
*&---------------------------------------------------------------------*
*&????? Form FM_BUTTON
*&---------------------------------------------------------------------*
*?????? text
*----------------------------------------------------------------------*
*????? -->E_GRID???? text
*----------------------------------------------------------------------*
FORM fm_button USING e_grid TYPE slis_data_caller_exit.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
*?? EXPORTING
*???? IR_SALV_FULLSCREEN_ADAPTER?????? =
??? IMPORTING
*???? ET_EXCLUDING???????????????????? =
*???? E_REPID????????????????????????? =
*???? E_CALLBACK_PROGRAM?????????????? =
*???? E_CALLBACK_ROUTINE?????????????? =
????? e_grid?????????????????????????? = tem_grid
*???? ET_FIELDCAT_LVC????????????????? =
*???? ER_TRACE???????????????????????? =
*???? E_FLG_NO_HTML??????????????????? =
*???? ES_LAYOUT_KKBLO????????????????? =
*???? ES_SEL_HIDE????????????????????? =
*???? ET_EVENT_EXIT??????????????????? =
*???? ER_FORM_TOL????????????????????? =
*???? ER_FORM_EOL????????????????????? =
??????????? .
* 設置enter事件
CALL METHOD tem_grid->register_edit_event
??? EXPORTING
????? i_event_id = cl_gui_alv_grid=>mc_evt_enter
??? EXCEPTIONS
????? error????? = 1
????? OTHERS???? = 2.
CREATE OBJECT gt_event_receiver.
SET HANDLER gt_event_receiver->handle_modify FOR tem_grid.
ENDFORM.??????????????????? "FM_BUTTON
總結
- 上一篇: BADI 修改采购订单的shipping
- 下一篇: ALV报表中设置可修改字段