1、需新建屏幕1001 並畫container:'CONT1' 2、需新建屏幕1002 並畫container:'CONT2' 3、定義屏幕1001、1002的ok_code和邏輯流 4、定義工具欄 程序代碼:
- TABLES t001w.
-
- TYPES:BEGIN OF typ_t001w ,
- werks TYPE t001w-werks,
- name1 TYPE t001w-name1,
- werks2 TYPE t001w-werks,
- rowcolor TYPE char10,
- zcheckbox TYPE c, "LAYOUT-CHECBOX = 'ZCHECKBOX'.
- * zflag TYPE c, "LAYOUT-BOX_FNAME = 'ZFLAG'.
- zicon TYPE char10, "LAYOUT-ICON = 'ZICON' 圖標需要顯示的
- END OF typ_t001w.
-
- TYPES:BEGIN OF typ_smf ,
- werks TYPE t001w-werks,
- name1 TYPE t001w-name1,
- END OF typ_smf.
-
- DATA:i_t001w TYPE TABLE OF typ_t001w,"""""第一次ALV內表
- i_detail TYPE TABLE OF typ_smf, """""單擊ALV內表列ZICON顯示的明細ALV內表
- i_smf TYPE TABLE OF typ_smf.""""SF內表
-
- DATA:fieldcat TYPE lvc_t_fcat,
- grid TYPE REF TO cl_gui_alv_grid, "alv控件名
- grid2 TYPE REF TO cl_gui_alv_grid, "alv控件名
- g_container TYPE scrfname VALUE 'CONT1',"重新定義本地容器對象名
- g_container2 TYPE scrfname VALUE 'CONT2',"重新定義本地容器對象名
- is_layout TYPE lvc_s_layo,
- ps_layout TYPE lvc_s_layo,
- g_custom_container TYPE REF TO cl_gui_custom_container,
- g_custom_container2 TYPE REF TO cl_gui_custom_container.
-
- DATA: ui_functions TYPE ui_functions. "隱藏按鈕的內表
- *********ALV上事件捕捉類
- DATA:gs_toolbar TYPE stb_button. "按鈕
- CLASS alv_event_receiver DEFINITION DEFERRED. "聲明類對象
- *----------------------------------------------------------------------*
- * CLASS alv_event_receiver DEFINITION
- *----------------------------------------------------------------------*
- *
- *----------------------------------------------------------------------*
- CLASS alv_event_receiver DEFINITION. "聲明類成員可見性
- PUBLIC SECTION. "定義相關類成員可以被程序中的所有對象調用
- CLASS-METHODS: "靜態方法
- handle_toolbar "初始化工具欄對象事件,如增加按鈕並設定其屬性
- FOR EVENT toolbar OF cl_gui_alv_grid
- IMPORTING e_object e_interactive,
-
- handle_menu_button "用於在下拉菜單中增加選項
- FOR EVENT menu_button OF cl_gui_alv_grid
- IMPORTING e_object e_ucomm,
-
- handle_user_command "工具欄中的按鈕的單擊事件
- FOR EVENT user_command OF cl_gui_alv_grid
- IMPORTING e_ucomm,
-
- 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 es_row_no.
- ENDCLASS. "alv_event_receiver DEFINITION
- *&---------------------------------------------------------------------*
- *& Class (Implementation) alv_event_receiver
- *&---------------------------------------------------------------------*
- * Text
- *----------------------------------------------------------------------*
- CLASS alv_event_receiver IMPLEMENTATION. "實現類方法
- METHOD handle_toolbar.
- gs_toolbar-function = 'B_SUM'. "爲按鈕分配功能碼
- gs_toolbar-icon = icon_display. "爲按鈕分配圖標
- gs_toolbar-text = '總行數'. "爲按鈕分配文本
- gs_toolbar-butn_type = '0'. "定義按鈕類型,不填時默認爲0
- APPEND gs_toolbar TO e_object->mt_toolbar. "添加按鈕到工具欄
-
- gs_toolbar-function = 'B_PRINT'. "爲按鈕分配功能碼
- gs_toolbar-icon = icon_import. "爲按鈕分配圖標
- gs_toolbar-text = '轉儲訂單打印'. "爲按鈕分配文本
- gs_toolbar-checked = 'X'.
- gs_toolbar-butn_type = '0'. "定義按鈕類型,不填時默認爲0
- APPEND gs_toolbar TO e_object->mt_toolbar. "添加按鈕到工具欄
-
- gs_toolbar-function = 'B_LIST'. "爲按鈕分配功能碼
- gs_toolbar-quickinfo = '自定義下拉菜單'.
- gs_toolbar-icon = icon_biw_report_view. "爲按鈕分配圖標
- gs_toolbar-text = '下拉菜單'. "爲按鈕分配文本
- gs_toolbar-butn_type = '1'. "定義按鈕類型
- APPEND gs_toolbar TO e_object->mt_toolbar. "添加按鈕到工具欄
-
- gs_toolbar-function = 'B_EDIT'. "爲按鈕分配功能碼
- gs_toolbar-icon = icon_change. "爲按鈕分配圖標
- gs_toolbar-text = '切換編輯狀態'. "爲按鈕分配文本
- gs_toolbar-checked = 'X'.
- gs_toolbar-butn_type = '0'. "定義按鈕類型,不填時默認爲0
- APPEND gs_toolbar TO e_object->mt_toolbar. "添加按鈕到工具欄
- ENDMETHOD. "handle_toolbar
- METHOD handle_menu_button.
- IF e_ucomm = 'B_LIST'.
- CALL METHOD e_object->add_function
- EXPORTING
- icon = icon_display
- fcode = 'B_SUM'
- text = '顯示ALV總數'.
- ENDIF.
- ENDMETHOD. "handle_menu_button
- METHOD handle_user_command.
- DATA sum TYPE i.
- DATA text TYPE string.
- DATA: lwa_t001w LIKE LINE OF i_t001w.
- DATA: lwa_smf LIKE LINE OF i_smf.
-
- CASE e_ucomm.
- WHEN 'B_SUM'.
- DESCRIBE TABLE i_t001w[] LINES sum.
- text = sum.
- CONCATENATE '當前表格中數據的總行數:' text INTO text.
- MESSAGE text TYPE 'I'. "爲何消息類型爲 E 時運行時顯示A類型,異常終止到初始界面
- WHEN 'B_PRINT'.
- LOOP AT i_t001w INTO lwa_t001w WHERE zcheckbox = 'X'.
- lwa_smf-werks = lwa_t001w-werks.
- lwa_smf-name1 = lwa_t001w-name1.
- APPEND lwa_smf TO i_smf.
- CLEAR :lwa_t001w,lwa_smf.
- ENDLOOP.
- IF i_smf[] IS INITIAL.
- MESSAGE '請至少選擇一行數據區打印!' TYPE 'E'. "E類型消息會轉化爲A類型,很蛋疼,求破!
- ELSE.
- PERFORM frm_print_data. "這個沒具體寫。
- ENDIF.
- WHEN 'B_EDIT'.
- IF grid->is_ready_for_input( ) EQ 0.
- CALL METHOD grid->set_ready_for_input
- EXPORTING
- i_ready_for_input = 1.
- ELSE.
- CALL METHOD grid->set_ready_for_input
- EXPORTING
- i_ready_for_input = 0.
- ENDIF.
- WHEN OTHERS.
- ENDCASE.
- ENDMETHOD. "handle_user_command
- "ALV內表展示處單擊事件捕捉,需要設置熱點對單擊列字段
- METHOD handle_hotspot_click.
- DATA:lwa_t001w LIKE LINE OF i_t001w.
- READ TABLE i_t001w INTO lwa_t001w INDEX es_row_no-row_id. "判斷行號
- CASE e_column_id-fieldname . "判斷列名
- WHEN 'NAME1'.
- CALL TRANSACTION 'ME51N' AND SKIP FIRST SCREEN. "隨便寫的
- WHEN 'ZICON'. "
- SELECT werks
- name1
- INTO TABLE i_detail
- FROM t001w
- WHERE werks = lwa_t001w-werks2.
- CLEAR lwa_t001w.
- IF sy-subrc NE 0.
- MESSAGE 'No result finding!' TYPE 'I'.
- ELSE.
- CALL SCREEN 1002.
- ENDIF.
- WHEN OTHERS.
- ENDCASE.
- * MESSAGE i001(00) WITH '當前行:' es_row_no-row_id ',航線代碼:' ls_lt001w-werks.
- ENDMETHOD. "handle_hotspot_click
- "ALV內表展示處雙擊擊事件捕捉,如果設置熱點雙擊不起作用
- METHOD handle_double_click.
- DATA:lwa_t001w LIKE LINE OF i_t001w.
- READ TABLE i_t001w INTO lwa_t001w INDEX es_row_no-row_id.
- IF e_column-fieldname = 'WERKS'.
- SET PARAMETER ID 'AUN' FIELD lwa_t001w-werks.
- CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
- ENDIF.
- ENDMETHOD. "handle_double_click
-
- ENDCLASS. "alv_event_receiver
- START-OF-SELECTION.
- CALL SCREEN 1001.
-
- *&---------------------------------------------------------------------*
- *& Module STATUS_1001 OUTPUT
- *&---------------------------------------------------------------------*
- * text
- *----------------------------------------------------------------------*
- MODULE status_1001 OUTPUT.
- SET PF-STATUS 'T001'.
- * SET TITLEBAR 'xxx'.
- ENDMODULE. " STATUS_1001 OUTPUT
- *&---------------------------------------------------------------------*
- *& Module USER_COMMAND_1001 INPUT
- *&---------------------------------------------------------------------*
- * text
- *----------------------------------------------------------------------*
- MODULE user_command_1001 INPUT.
- FIELD-SYMBOLS <field> TYPE typ_t001w .
- DATA: i TYPE i VALUE 0.
- DATA ok_code TYPE sy-ucomm.
- ok_code = sy-ucomm.
- CLEAR sy-ucomm.
-
- CASE ok_code.
- WHEN 'BACK'.
- LEAVE TO SCREEN 0.
- WHEN 'EDIT'.
- IF grid->is_ready_for_input( ) EQ 0.
- CALL METHOD grid->set_ready_for_input
- EXPORTING
- i_ready_for_input = 1.
- ELSE.
- CALL METHOD grid->set_ready_for_input
- EXPORTING
- i_ready_for_input = 0.
- ENDIF.
- WHEN 'EXECU'.
- SELECT * FROM t001w
- INTO CORRESPONDING FIELDS OF TABLE i_t001w.
- LOOP AT i_t001w ASSIGNING <field> .
- <field>-werks2 = <field>-werks.
- <field>-zicon = '@[email protected]'. "圖標
- ENDLOOP.
-
- IF g_custom_container IS INITIAL.
- PERFORM exclude_tb_functions CHANGING ui_functions. "隱藏某些按鈕
- PERFORM frm_layout_set.
- PERFORM frm_fieldcat_set.
- PERFORM alv_show.
- ELSE.
- CALL METHOD grid->refresh_table_display. "刷新
- ENDIF.
- WHEN OTHERS.
- ENDCASE.
- ENDMODULE. " USER_COMMAND_1001 INPUT
- *&---------------------------------------------------------------------*
- *& Form ALV_SHOW
- *&---------------------------------------------------------------------*
- * text
- *----------------------------------------------------------------------*
- * --> p1 text
- * <-- p2 text
- *----------------------------------------------------------------------*
- FORM alv_show .
- CREATE OBJECT g_custom_container "創建容器對象
- EXPORTING container_name = g_container.
- CREATE OBJECT grid "創建ALV對象
- EXPORTING i_parent = g_custom_container.
- CALL METHOD grid->register_edit_event "可編輯回傳方法
- EXPORTING
- i_event_id = grid->mc_evt_modified.
- CALL METHOD grid->set_table_for_first_display
- EXPORTING
- * I_BUFFER_ACTIVE =
- * I_BYPASSING_BUFFER =
- * I_CONSISTENCY_CHECK =
- * I_STRUCTURE_NAME = 'T001W'
- * IS_VARIANT =
- i_save = 'X'
- * I_DEFAULT = 'X'
- is_layout = is_layout
- * IS_PRINT =
- * IT_SPECIAL_GROUPS =
- it_toolbar_excluding = ui_functions[]
- * IT_HYPERLINK =
- * IT_ALV_GRAPHICS =
- * IT_EXCEPT_QINFO =
- * IR_SALV_ADAPTER =
- CHANGING
- it_outtab = i_t001w[]
- it_fieldcatalog = fieldcat[].
- * IT_SORT =
- * IT_FILTER =
- * EXCEPTIONS
- * INVALID_PARAMETER_COMBINATION = 1
- * PROGRAM_ERROR = 2
- * TOO_MANY_LINES = 3
- * others = 4
- .
-
- ******註冊ALV中引用的事件
- SET HANDLER alv_event_receiver=>handle_toolbar
- alv_event_receiver=>handle_menu_button
- alv_event_receiver=>handle_user_command
- alv_event_receiver=>handle_hotspot_click
- alv_event_receiver=>handle_double_click
- FOR ALL INSTANCES.
- ****調用方法激活自定義工具對象
- CALL METHOD grid->set_toolbar_interactive.
- ENDFORM. " ALV_SHOW
-
- *&---------------------------------------------------------------------*
- *& Form exclude_tb_functions
- *&---------------------------------------------------------------------*
- * text
- *----------------------------------------------------------------------*
- * -->PT_EXCLUDE text
- *----------------------------------------------------------------------*
- FORM exclude_tb_functions CHANGING pt_exclude TYPE ui_functions .
- DATA ls_exclude TYPE ui_func.
- ls_exclude = cl_gui_alv_grid=>mc_fc_filter . "過濾器
- APPEND ls_exclude TO pt_exclude.
- ls_exclude = cl_gui_alv_grid=>mc_fc_current_variant . "佈局更改
- APPEND ls_exclude TO pt_exclude.
- ls_exclude = cl_gui_alv_grid=>mc_fc_average ."平均值
- APPEND ls_exclude TO pt_exclude.
- ls_exclude = cl_gui_alv_grid=>mc_mb_sum ."求和
- APPEND ls_exclude TO pt_exclude.
- ls_exclude = cl_gui_alv_grid=>mc_mb_export . "導出
- APPEND ls_exclude TO pt_exclude.
- ls_exclude = cl_gui_alv_grid=>mc_fc_loc_cut . "剪切
- APPEND ls_exclude TO pt_exclude.
- ls_exclude = cl_gui_alv_grid=>mc_fc_loc_delete_row . "刪除行
- APPEND ls_exclude TO pt_exclude.
- ls_exclude = cl_gui_alv_grid=>mc_fc_loc_insert_row . "插入行
- APPEND ls_exclude TO pt_exclude.
- ls_exclude = cl_gui_alv_grid=>mc_fc_refresh . "刷新
- APPEND ls_exclude TO pt_exclude.
- ls_exclude = cl_gui_alv_grid=>mc_fc_find ."查找
- APPEND ls_exclude TO pt_exclude.
- ls_exclude = cl_gui_alv_grid=>mc_fc_sort_asc . "升序排列
- APPEND ls_exclude TO pt_exclude.
- ls_exclude = cl_gui_alv_grid=>mc_fc_sort_dsc . "降序排列
- APPEND ls_exclude TO pt_exclude.
- ls_exclude = cl_gui_alv_grid=>mc_fc_views . "視圖
- APPEND ls_exclude TO pt_exclude.
- ls_exclude = cl_gui_alv_grid=>mc_fc_print ."打印
- APPEND ls_exclude TO pt_exclude.
- ls_exclude = cl_gui_alv_grid=>mc_fc_detail . "詳細按鈕
- APPEND ls_exclude TO pt_exclude.
- ls_exclude = cl_gui_alv_grid=>mc_fc_graph . "顯示圖形
- APPEND ls_exclude TO pt_exclude.
- ls_exclude = cl_gui_alv_grid=>mc_fc_info . "最終用戶文檔
- APPEND ls_exclude TO pt_exclude.
- ls_exclude = cl_gui_alv_grid=>mc_fc_loc_append_row . "附加行
- APPEND ls_exclude TO pt_exclude.
- ls_exclude = cl_gui_alv_grid=>mc_fc_loc_copy_row . "複製行
- APPEND ls_exclude TO pt_exclude.
- ls_exclude = cl_gui_alv_grid=>mc_fc_loc_copy . "複製文本
- APPEND ls_exclude TO pt_exclude.
- ls_exclude = cl_gui_alv_grid=>mc_fc_loc_undo . "撤消
- APPEND ls_exclude TO pt_exclude.
- ENDFORM . "exclude_tb_functions
- *&---------------------------------------------------------------------*
- *& Form FRM_LAYOUT_SET
- *&---------------------------------------------------------------------*
- * text
- *----------------------------------------------------------------------*
- * --> p1 text
- * <-- p2 text
- *----------------------------------------------------------------------*
- FORM frm_layout_set .
- is_layout-zebra = 'X' .
- is_layout-grid_title = '倉儲轉儲訂單跟蹤及打印' .
- is_layout-smalltitle = 'X' . "ALV 控制: 標題大小
- is_layout-cwidth_opt = 'X' . "優化列寬
- * is_layout-no_toolbar = 'X' . "隱藏按鈕
- is_layout-sel_mode = 'A' . "flag選擇方式 A:行和列的選擇,無法選擇單元格 多行,多列 B
- is_layout-info_fname = 'ROWCOLOR'.
- ENDFORM. " FRM_LAYOUT_SET
- *&---------------------------------------------------------------------*
- *& Form FRM_FIELDCAT_SET
- *&---------------------------------------------------------------------*
- * text
- *----------------------------------------------------------------------*
- * --> p1 text
- * <-- p2 text
- *----------------------------------------------------------------------*
- FORM frm_fieldcat_set .
- DATA ls_fcat TYPE lvc_s_fcat .
- CLEAR ls_fcat .
- ls_fcat-fieldname = 'ZCHECKBOX' .
- ls_fcat-coltext = '選擇'.
- * ls_fcat-emphasize = 'C601' ."列顏色控制
- ls_fcat-checkbox = 'X'.
- ls_fcat-edit = 'X'.
- APPEND ls_fcat TO fieldcat .
-
- CLEAR ls_fcat .
- ls_fcat-fieldname = 'WERKS' .
- ls_fcat-inttype = 'C' .
- ls_fcat-outputlen = '4' .
- ls_fcat-coltext = '工廠'."Carrier ID.列標題
- ls_fcat-seltext = 'AAA' ."ALV 控制: 對話功能的列標識符
- ls_fcat-emphasize = 'C601' ."列顏色控制
- * ls_fcat-hotspot = 'X'. 「不能設置hotspot 否則double click事件無效
- APPEND ls_fcat TO fieldcat .
-
- CLEAR ls_fcat .
- ls_fcat-fieldname = 'NAME1' .
- ls_fcat-ref_table = 'T001W' .
- ls_fcat-ref_field = 'NAME1' .
- ls_fcat-outputlen = '30' .
- ls_fcat-coltext = '工廠名稱' .
- ls_fcat-hotspot = 'X'.
- APPEND ls_fcat TO fieldcat .
-
- CLEAR ls_fcat .
- ls_fcat-fieldname = 'WERKS2' .
- ls_fcat-inttype = 'C' .
- ls_fcat-outputlen = '4' .
- ls_fcat-coltext = '工廠2號'."Carrier ID.列標題
- ls_fcat-seltext = 'AAA' ."ALV 控制: 對話功能的列標識符
- ls_fcat-emphasize = 'C601' ."列顏色控制
- ls_fcat-edit = 'X'.
- APPEND ls_fcat TO fieldcat .
-
- CLEAR ls_fcat .
- ls_fcat-fieldname = 'ZICON' .
- ls_fcat-coltext = '交貨明細憑證'."Carrier ID.列標題
- ls_fcat-seltext = 'AAA' ."ALV 控制: 對話功能的列標識符
- ls_fcat-icon = 'X'.
- ls_fcat-hotspot = 'X'.
- APPEND ls_fcat TO fieldcat .
- CLEAR ls_fcat .
- ENDFORM. " FRM_FIELDCAT_SET
- *&---------------------------------------------------------------------*
- *& Form FRM_PRINT_DATA
- *&---------------------------------------------------------------------*
- * text
- *----------------------------------------------------------------------*
- * --> p1 text
- * <-- p2 text
- *----------------------------------------------------------------------*
- FORM frm_print_data .
-
- ENDFORM. " FRM_PRINT_DATA
- *&---------------------------------------------------------------------*
- *& Module STATUS_1002 OUTPUT
- *&---------------------------------------------------------------------*
- * text
- *----------------------------------------------------------------------*
- MODULE status_1002 OUTPUT.
- SET PF-STATUS 'T001'.
- * SET TITLEBAR 'xxx'.
- PERFORM frm_alv_show_detail.
- ENDMODULE. " STATUS_1002 OUTPUT
- *&---------------------------------------------------------------------*
- *& Form FRM_ALV_SHOW_DETAIL
- *&---------------------------------------------------------------------*
- * text
- *----------------------------------------------------------------------*
- * --> p1 text
- * <-- p2 text
- *&---------------------------------------------------------------------*
- *& Module STATUS_1002 OUTPUT
- *&---------------------------------------------------------------------*
- * text
- *----------------------------------------------------------------------*
- MODULE status_1002 OUTPUT.
- SET PF-STATUS 'T001'.
- * SET TITLEBAR 'xxx'.
- PERFORM frm_alv_show_detail.
- ENDMODULE. " STATUS_1002 OUTPUT
- *&---------------------------------------------------------------------*
- *& Form FRM_ALV_SHOW_DETAIL
- *&---------------------------------------------------------------------*
- * text
- *----------------------------------------------------------------------*
- * --> p1 text
- * <-- p2 text
- *----------------------------------------------------------------------*
- FORM frm_alv_show_detail .
- DATA: ls_fcat TYPE lvc_s_fcat ,
- fieldcat2 TYPE lvc_t_fcat.
- ls_fcat-fieldname = 'WERKS' .
- ls_fcat-coltext = '工廠'."Carrier ID.列標題
- APPEND ls_fcat TO fieldcat2 .
- CLEAR ls_fcat .
- ls_fcat-fieldname = 'NAME1' .
- SET PF-STATUS 'T001'.
- * SET TITLEBAR 'xxx'.
- PERFORM frm_alv_show_detail.
- ENDMODULE. " STATUS_1002 OUTPUT
- *&---------------------------------------------------------------------*
- *& Form FRM_ALV_SHOW_DETAIL
- *&---------------------------------------------------------------------*
- * text
- *----------------------------------------------------------------------*
- * --> p1 text
- * <-- p2 text
- *----------------------------------------------------------------------*
- FORM frm_alv_show_detail .
- DATA: ls_fcat TYPE lvc_s_fcat ,
- fieldcat2 TYPE lvc_t_fcat.
- ls_fcat-fieldname = 'WERKS' .
- ls_fcat-coltext = '工廠'."Carrier ID.列標題
- APPEND ls_fcat TO fieldcat2 .
- CLEAR ls_fcat .
- ls_fcat-fieldname = 'NAME1' .
- ls_fcat-coltext = '工廠名稱'.
- APPEND ls_fcat TO fieldcat2 .
- CLEAR ls_fcat .
-
- *& Form FRM_ALV_SHOW_DETAIL
- *&---------------------------------------------------------------------*
- * text
|