主程序
REPORT ztest_001. INCLUDE ztest_001_top. INCLUDE ztest_001_c01. INCLUDE ztest_001_frm. INCLUDE ztest_001_pbo. INCLUDE ztest_001_pai.
ztest_001_top
*&---------------------------------------------------------------------* *& Include ZTEST_001_TOP *&---------------------------------------------------------------------* CLASS lcl_alv_event_receiver DEFINITION DEFERRED. TYPES: BEGIN OF ty_out, light TYPE icon_int, "状态 aufnr TYPE aufnr, "订单号 menge TYPE menge_d, "数量 lgort TYPE lgort_d, "仓位 gernr TYPE gernr, "序列号 zvin TYPE char17, "VIN 码 werks TYPE werks_d, "工厂 matnr TYPE matnr, "物料 msg TYPE char255, "消息 err TYPE char1, "错误标识 grflg TYPE char1, "收货标识 END OF ty_out. DATA: gt_out TYPE STANDARD TABLE OF ty_out, gt_sel TYPE STANDARD TABLE OF ty_out,"选中的行 gs_out TYPE ty_out. *DATA:gt_save TYPE TABLE OF ztable. DATA: g_row TYPE i, g_value TYPE char10, g_col TYPE i, gs_col TYPE lvc_s_col. DATA: gt_alv_field_cat TYPE lvc_t_fcat, "field for General ALV gt_toolbar_excluding TYPE ui_functions, "Alv excluding toolbars gs_toolbar_excluding TYPE ui_func, "WA of git_toolbar_excluding gs_alv_field_cat TYPE lvc_s_fcat, "WA of gt_alv_field_cat gs_layout TYPE lvc_s_layo, "Layout for alv gs_variant TYPE disvariant, "Layout (External Use) go_grid TYPE REF TO cl_gui_alv_grid. DATA: gt_rowid TYPE lvc_t_row, gt_row TYPE lvc_t_roid. DATA:gs_bdc LIKE bdcdata, gt_bdc LIKE STANDARD TABLE OF bdcdata. DATA: gc_event_receiver TYPE REF TO lcl_alv_event_receiver."Event handle for ooalv DATA:gs_toolbar TYPE stb_button."alv button *Set alv field DEFINE set_alv_fieldcat. gs_alv_field_cat-fieldname = &1. gs_alv_field_cat-coltext = &2. gs_alv_field_cat-rollname = &3. gs_alv_field_cat-lzero = space. gs_alv_field_cat-no_zero = ‘X‘. APPEND gs_alv_field_cat TO gt_alv_field_cat. CLEAR gs_alv_field_cat. END-OF-DEFINITION. SELECTION-SCREEN BEGIN OF BLOCK bl1 WITH FRAME TITLE TEXT-001. PARAMETERS:p_file TYPE rlgrap-filename OBLIGATORY. SELECTION-SCREEN END OF BLOCK bl1. AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file. PERFORM frm_get_file. START-OF-SELECTION. PERFORM frm_convert_to_table. CALL SCREEN 100.
ZTEST_001_C01
*&---------------------------------------------------------------------* *& Include ZTEST_001_C01 *&---------------------------------------------------------------------* CLASS lcl_alv_event_receiver DEFINITION. PUBLIC SECTION. METHODS: constructor IMPORTING i_flag TYPE i, handle_menu_button FOR EVENT menu_button OF cl_gui_alv_grid IMPORTING e_object e_ucomm, handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid IMPORTING e_object e_interactive, handle_user_command FOR EVENT after_user_command OF cl_gui_alv_grid IMPORTING e_ucomm e_saved e_not_processed, handle_hotspot_click FOR EVENT hotspot_click OF cl_gui_alv_grid IMPORTING e_row_id e_column_id es_row_no, handle_double_click FOR EVENT double_click OF cl_gui_alv_grid IMPORTING e_row e_column, handle_data_changed FOR EVENT data_changed OF cl_gui_alv_grid IMPORTING er_data_changed e_onf4 e_onf4_before e_onf4_after e_ucomm, handle_data_changed_finished FOR EVENT data_changed_finished OF cl_gui_alv_grid IMPORTING e_modified et_good_cells. * handle_top_of_page FOR EVENT top_of_page OF cl_gui_alv_grid IMPORTING e_dyndoc_id. * PRIVATE SECTION. DATA:lp_alv_flag TYPE i VALUE 1."Multiple ALV Will Use This Flag。 ENDCLASS. "LCL_ALV_EVENT_RECEIVER DEFINITION *----------------------------------------------------------------------* * CLASS lcl_ALV_envent_receiver IMPLEMENTATION *----------------------------------------------------------------------* * *----------------------------------------------------------------------* CLASS lcl_alv_event_receiver IMPLEMENTATION. METHOD constructor. lp_alv_flag = i_flag. ENDMETHOD. "constructor METHOD handle_menu_button. ENDMETHOD. "handle_menu_button METHOD handle_toolbar. PERFORM frm_handle_toolbar USING e_object e_interactive. ENDMETHOD. "HANDLE_TOOLBAR_101 METHOD handle_user_command. PERFORM frm_handle_command USING e_ucomm e_saved e_not_processed. ENDMETHOD. "AFTER_USER_COMMAND METHOD handle_hotspot_click. ENDMETHOD. "HOTSPOT_CLICK METHOD handle_data_changed. ENDMETHOD. "data_changed METHOD handle_data_changed_finished. ENDMETHOD. "handle_data_changed_finished METHOD handle_double_click. ENDMETHOD. "data_changed ENDCLASS. "gc_event_receiver IMPLEMENTATION
ZTEST_001_FRM
*&---------------------------------------------------------------------* *& Include ZTEST_001_FRM *&---------------------------------------------------------------------* *&---------------------------------------------------------------------* *& Form frm_create_alv_grid *&---------------------------------------------------------------------* * text create alv grid *----------------------------------------------------------------------* * -->T_OUTTAB text data to show * -->I_GUI_CUS_CONTAINER text gui container * -->I_ALV_CONTROL text alv object * -->I_IT_FIELD text alv field * -->I_FLAG text derector when there is more than on alv *----------------------------------------------------------------------* FORM frm_create_alv_grid TABLES t_outtab TYPE STANDARD TABLE USING i_alv_control TYPE REF TO cl_gui_alv_grid i_it_field TYPE lvc_t_fcat i_flag TYPE i. DATA:lwa_stable TYPE lvc_s_stbl. CLEAR: gs_variant,gc_event_receiver. gs_variant-report = sy-repid. IF i_alv_control IS INITIAL. CREATE OBJECT i_alv_control EXPORTING i_parent = cl_gui_container=>default_screen. CREATE OBJECT gc_event_receiver EXPORTING i_flag = i_flag. SET HANDLER gc_event_receiver->handle_toolbar FOR i_alv_control. SET HANDLER gc_event_receiver->handle_menu_button FOR i_alv_control. SET HANDLER gc_event_receiver->handle_user_command FOR i_alv_control. SET HANDLER gc_event_receiver->handle_hotspot_click FOR i_alv_control. SET HANDLER gc_event_receiver->handle_double_click FOR i_alv_control. SET HANDLER gc_event_receiver->handle_data_changed FOR i_alv_control. SET HANDLER gc_event_receiver->handle_data_changed_finished FOR i_alv_control. * SET HANDLER gc_event_receiver->handle_top_of_page FOR i_alv_control. CALL METHOD i_alv_control->register_edit_event EXPORTING i_event_id = cl_gui_alv_grid=>mc_evt_modified EXCEPTIONS error = 1 OTHERS = 2. CALL METHOD i_alv_control->register_edit_event EXPORTING i_event_id = cl_gui_alv_grid=>mc_evt_enter EXCEPTIONS error = 1 OTHERS = 2. CALL METHOD i_alv_control->set_table_for_first_display EXPORTING i_buffer_active = ‘X‘ i_bypassing_buffer = ‘X‘ i_save = ‘A‘ i_default = space is_layout = gs_layout is_variant = gs_variant it_toolbar_excluding = gt_toolbar_excluding CHANGING it_outtab = t_outtab[] it_fieldcatalog = i_it_field EXCEPTIONS invalid_parameter_combination = 1 program_error = 2 too_many_lines = 3 OTHERS = 4. ELSE. CALL METHOD cl_gui_cfw=>set_new_ok_code EXPORTING new_code = ‘RELOAD‘. CLEAR lwa_stable. lwa_stable-col = abap_true. CALL METHOD i_alv_control->refresh_table_display EXPORTING is_stable = lwa_stable. * i_soft_refresh = gco_true. CALL METHOD cl_gui_cfw=>flush. ENDIF. ENDFORM. "frm_layout_container FORM frm_get_sel. CLEAR:gt_rowid,gt_row. CALL METHOD go_grid->get_selected_rows( IMPORTING et_index_rows = gt_rowid et_row_no = gt_row ). ENDFORM. FORM frm_get_cel. CLEAR:g_row,g_value,g_col,gs_col. CALL METHOD go_grid->get_current_cell IMPORTING e_row = g_row e_value = g_value e_col = g_col es_col_id = gs_col. ENDFORM. *&---------------------------------------------------------------------* *& Form refresh_alv *&---------------------------------------------------------------------* * text refresh alv list *----------------------------------------------------------------------* * -->I_ALV_CONTROL text alv object * -->P_ROW text row of alv grid *----------------------------------------------------------------------* FORM refresh_alv USING i_alv_control TYPE REF TO cl_gui_alv_grid p_row. DATA: ls_stable TYPE lvc_s_stbl. IF NOT i_alv_control IS INITIAL. ls_stable-row = ‘X‘. ls_stable-col = ‘X‘. CALL METHOD i_alv_control->refresh_table_display EXPORTING is_stable = ls_stable. * i_soft_refresh = ‘X‘. CALL METHOD cl_gui_cfw=>flush. ENDIF. ENDFORM. "refresh_alv FORM frm_set_layout. gs_layout-sel_mode = ‘D‘. ENDFORM. FORM frm_set_field. set_alv_fieldcat ‘AUFNR‘ ‘‘ ‘AUFNR‘ . set_alv_fieldcat ‘MENGE‘ ‘‘ ‘MENGE_D‘ . set_alv_fieldcat ‘LGORT‘ ‘‘ ‘LGORT_D‘ . set_alv_fieldcat ‘GERNR‘ ‘‘ ‘GERNR‘ . set_alv_fieldcat ‘ZVIN‘ ‘序列号‘ ‘‘ . * set_alv_fieldcat ‘DESCR‘ ‘消息‘ ‘‘ . ENDFORM. FORM frm_handle_toolbar USING i_object TYPE REF TO cl_alv_event_toolbar_set i_interactive TYPE char01. CLEAR: gs_toolbar. gs_toolbar-butn_type = 3. APPEND gs_toolbar TO i_object->mt_toolbar. CLEAR: gs_toolbar. gs_toolbar-function = ‘SAVE‘. gs_toolbar-icon = icon_display. gs_toolbar-quickinfo = ‘保存‘. gs_toolbar-butn_type = 0. gs_toolbar-disabled = ‘‘. gs_toolbar-text = ‘保存‘. APPEND gs_toolbar TO i_object->mt_toolbar. ENDFORM. FORM frm_handle_command USING i_ucomm TYPE sy-ucomm i_saved TYPE char01 i_not_processed TYPE char01. CASE i_ucomm. WHEN ‘SAVE‘."保存到内表 PERFORM frm_save_data. WHEN OTHERS. ENDCASE. ENDFORM. FORM frm_save_data. LOOP AT gt_out INTO DATA(ls_out) WHERE err = ‘X‘. EXIT. ENDLOOP. IF sy-subrc = 0. MESSAGE e001(00) WITH ‘数据有错误!‘. ENDIF. * LOOP AT gt_out INTO ls_out. * APPEND INITIAL LINE TO gt_save ASSIGNING FIELD-SYMBOL(<fs_save>). * <fs_save>-aufnr = ls_out-aufnr. * <fs_save>-menge = ls_out-menge. * <fs_save>-lgort = ls_out-lgort. * <fs_save>-gernr = ls_out-gernr. * <fs_save>-zvin = ls_out-zvin. * ENDLOOP. * MODIFY ztable FROM TABLE gt_save. * IF sy-subrc = 0. * COMMIT WORK. * MESSAGE s001(00) WITH ‘保存成功!‘ . * ELSE. * MESSAGE s001(00) WITH ‘保存失败!‘ DISPLAY LIKE ‘E‘. * ENDIF. ENDFORM. FORM frm_check_data. IF gt_row IS INITIAL. MESSAGE e001(00) WITH ‘请选择要收获的行!‘. ENDIF. LOOP AT gt_row INTO DATA(ls_row). READ TABLE gt_out INTO DATA(ls_out) INDEX ls_row-row_id. IF sy-subrc = 0. APPEND ls_out TO gt_sel. ENDIF. ENDLOOP. ENDFORM. FORM frm_post_gr. ENDFORM. FORM frm_get_file. DATA:lt_files TYPE TABLE OF file_table, l_count TYPE i. CALL METHOD cl_gui_frontend_services=>file_open_dialog EXPORTING window_title = ‘‘ file_filter = ‘Excel Files (*.xls)|*.xlsx|Text File(*.txt)|*.txt‘ initial_directory = ‘C:‘ multiselection = space CHANGING file_table = lt_files rc = l_count EXCEPTIONS file_open_dialog_failed = 1 cntl_error = 2 error_no_gui = 3 not_supported_by_gui = 4 OTHERS = 5. READ TABLE lt_files INTO DATA(ls_file) INDEX 1. IF sy-subrc = 0. p_file = ls_file-filename. ELSE. EXIT. ENDIF. ENDFORM. FORM frm_convert_to_table. DATA:lt_intern TYPE TABLE OF alsmex_tabline. CALL FUNCTION ‘ALSM_EXCEL_TO_INTERNAL_TABLE‘ EXPORTING filename = p_file i_begin_col = 1 i_begin_row = 1 i_end_col = 10 i_end_row = 5000 TABLES intern = lt_intern EXCEPTIONS inconsistent_parameters = 1 upload_ole = 2 OTHERS = 3. IF sy-subrc <> 0. MESSAGE e001(00) WITH ‘转换失败‘. ENDIF. IF lt_intern IS NOT INITIAL. SORT lt_intern BY row col. CLEAR:gs_out,gt_out. LOOP AT lt_intern INTO DATA(ls_intern). IF ls_intern-row > 1. ASSIGN COMPONENT ls_intern-col OF STRUCTURE gs_out TO FIELD-SYMBOL(<fs_value>). <fs_value> = ls_intern-value. AT END OF row. CALL FUNCTION ‘CONVERSION_EXIT_ALPHA_INPUT‘ EXPORTING input = gs_out-aufnr IMPORTING output = gs_out-aufnr. APPEND gs_out TO gt_out. CLEAR gs_out. ENDAT. ENDIF. ENDLOOP. ENDIF. IF gt_out IS NOT INITIAL. SELECT aufnr INTO TABLE @DATA(lt_aufk) FROM aufk FOR ALL ENTRIES IN @gt_out WHERE aufnr = @gt_out-aufnr. SELECT mblnr, mjahr, zeile, aufnr INTO TABLE @DATA(lt_mseg) FROM mseg FOR ALL ENTRIES IN @gt_out WHERE aufnr = @gt_out-aufnr. SORT lt_aufk BY aufnr. SORT lt_mseg BY aufnr. LOOP AT gt_out ASSIGNING FIELD-SYMBOL(<fs_out>). READ TABLE lt_aufk TRANSPORTING NO FIELDS WITH KEY aufnr = <fs_out>-aufnr BINARY SEARCH. IF sy-subrc NE 0. <fs_out>-light = ‘@S_TL_R@‘. <fs_out>-msg = ‘工单不存在‘. <fs_out>-err = ‘X‘. ELSE. <fs_out>-light = ‘@S_TL_G@‘. <fs_out>-msg = ‘‘. ENDIF. READ TABLE lt_mseg INTO DATA(ls_mseg) WITH KEY aufnr = <fs_out>-aufnr BINARY SEARCH. IF sy-subrc = 0. <fs_out>-grflg = ‘X‘. <fs_out>-msg = ‘已经收货‘. ENDIF. ENDLOOP. ENDIF. ENDFORM.
ZTEST_001_PBO
*&---------------------------------------------------------------------* *& Include ZTEST_001_PBO *&---------------------------------------------------------------------* *&---------------------------------------------------------------------* *& Module INIT_100 OUTPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE init_100 OUTPUT. PERFORM frm_set_field. PERFORM frm_set_layout. PERFORM frm_create_alv_grid TABLES gt_out USING go_grid gt_alv_field_cat 1. ENDMODULE. *&---------------------------------------------------------------------* *& Module STATUS_0100 OUTPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE status_0100 OUTPUT. SET PF-STATUS ‘STATUS_100‘. * SET TITLEBAR ‘xxx‘. ENDMODULE.
ZTEST_001_PAI
*&---------------------------------------------------------------------* *& Include ZTEST_001_PAI *&---------------------------------------------------------------------* *&---------------------------------------------------------------------* *& Module EXIT INPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE exit INPUT. LEAVE TO SCREEN 0. ENDMODULE. *&---------------------------------------------------------------------* *& Module USER_COMMAND_0100 INPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE user_command_0100 INPUT. ENDMODULE.
原文:https://www.cnblogs.com/JackeyLove/p/14259095.html