ZFJ002(實現上下同步)




畫1個屏幕:1001,分別再畫2個自定義控件:CONT1以及CONT3.

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_t001w1  TYPE TABLE OF typ_t001w,
     i_detail TYPE TABLE OF typ_smf"""""單擊ALV內表列ZICON顯示的明細ALV內表
     i_smf    TYPE TABLE OF typ_smf.""""SF內表

DATA:fieldcat TYPE lvc_t_fcat,
      fieldcat1 TYPE lvc_t_fcat,
     grid TYPE REF TO cl_gui_alv_grid,  "alv控件名
     grid1 TYPE REF TO cl_gui_alv_grid,
     grid2 TYPE REF TO cl_gui_alv_grid,  "alv控件名
     g_container TYPE scrfname VALUE 'CONT1',"重新定義本地容器對象名
     g_container1 TYPE scrfname VALUE 'CONT3',
     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_container1 TYPE REF TO cl_gui_custom_container,
     g_custom_container2 TYPE REF TO cl_gui_custom_container.

DATAui_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.
    DATAlwa_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'.


      WHEN 'B_EDIT'.
        IF grid->is_ready_for_inputEQ 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.
    DATAlwa_t001w1 LIKE LINE OF i_t001w.
    READ TABLE i_t001w INTO lwa_t001w INDEX es_row_no-row_id"判斷行號
     LOOP AT i_t001w INTO lwa_t001w.
      READ TABLE i_t001w INTO lwa_t001w INDEX es_row_no-row_id.
      IF lwa_t001w-zcheckbox 'X'..
        lwa_t001w-zcheckbox ' '.
      ELSEIF lwa_t001w-zcheckbox ' '.
        lwa_t001w-zcheckbox 'X'.
      ENDIF.

      MODIFY i_t001w FROM lwa_t001w INDEX es_row_no-row_id.
      CLEAR lwa_t001w.
    ENDLOOP.

    CALL METHOD grid->refresh_table_display.

    CASE e_column_id-fieldname "判斷列名
      WHEN 'NAME1'.
        CALL TRANSACTION 'ME51N' AND SKIP FIRST SCREEN"隨便寫的
      WHEN 'ZCHECKBOX'.
*        LOOP AT i_t001w INTO lwa_t001w WHERE zcheckbox = 'X'.
*          LOOP AT i_t001w1 INTO lwa_t001w1 WHERE werks = lwa_t001w-werks.
*            lwa_t001w1-zcheckbox = 'X'.
*            MODIFY i_t001w1 FROM lwa_t001w1 INDEX sy-tabix.
*            CLEAR lwa_t001w1.
*          ENDLOOP.

        LOOP AT I_T001W1 INTO LWA_T001W1.
          READ TABLE I_T001W INTO LWA_T001W WITH KEY WERKS LWA_T001W1.
          IF SY-SUBRC 0.
            LWA_T001W1-ZCHECKBOX LWA_T001W-ZCHECKBOX.
          ENDIF.
          MODIFY i_t001w1 FROM lwa_t001w1 INDEX sy-tabix.
          CLEARlwa_t001w,LWA_T001W1.
        ENDLOOP.

        CALL METHOD grid1->refresh_table_display.
      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 .
  DATATYPE 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_inputEQ 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  '@16@'.  "圖標
      ENDLOOP.

      SELECT FROM t001w
         INTO CORRESPONDING FIELDS OF TABLE i_t001w1.
      LOOP AT  i_t001w1  ASSIGNING <field>  .
        <field>-werks2 <field>-werks.
        <field>-zicon  '@16@'.  "圖標
      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.

      IF g_custom_container1 IS INITIAL.
        PERFORM exclude_tb_functions CHANGING ui_functions"隱藏某些按鈕
        PERFORM frm_layout_set.
        PERFORM frm_fieldcat_set1.
        PERFORM alv_show2.
      ELSE.
        CALL METHOD grid1->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'.
  ls_fcat-hotspot   '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
*----------------------------------------------------------------------*
FORM frm_alv_show_detail .
  DATAls_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 .

  ps_layout-zebra 'X' .
  ps_layout-grid_title '交貨明細憑證' .
  ps_layout-smalltitle 'X' .  "ALV 控制: 標題大小
  ps_layout-cwidth_opt 'X' "優化列寬
  ps_layout-no_toolbar 'X' "隱藏按鈕
*  ps_layout-SEL_MODE = 'A' . "flag選擇方式 A:行和列的選擇,無法選擇單元格  多行,多列  B
*  ps_layout-info_fname = 'ROWCOLOR'.

  IF g_custom_container2 IS INITIAL.
    CREATE OBJECT g_custom_container2                        "創建容器對象
     EXPORTING container_name g_container2.
    CREATE OBJECT grid2                                      "創建ALV對象
     EXPORTING i_parent g_custom_container2.
  ELSE.
    CALL METHOD grid2->refresh_table_display"刷新
  ENDIF.
  CALL METHOD grid2->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            ps_layout
*     IS_PRINT             =
*     IT_SPECIAL_GROUPS    =
*     IT_TOOLBAR_EXCLUDING =
*     IT_HYPERLINK         =
*     IT_ALV_GRAPHICS      =
*     IT_EXCEPT_QINFO      =
*     IR_SALV_ADAPTER      =
    CHANGING
      it_outtab            i_detail[]
      it_fieldcatalog      fieldcat2[].
*           IT_SORT                       =
*           IT_FILTER                     =
*         EXCEPTIONS
*           INVALID_PARAMETER_COMBINATION = 1
*           PROGRAM_ERROR                 = 2
*           TOO_MANY_LINES                = 3
*           others                        = 4
  .
ENDFORM.                    " FRM_ALV_SHOW_DETAIL
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_1002  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_1002 INPUT.
  DATA ok_code2 TYPE sy-ucomm.
  ok_code2 sy-ucomm.
  CLEAR sy-ucomm.
  CASE ok_code2.
    WHEN 'BACK'.
      LEAVE TO SCREEN 0.
  ENDCASE.
ENDMODULE.                 " USER_COMMAND_1002  INPUT
*&---------------------------------------------------------------------*
*&      Form  ALV_SHOW2
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM ALV_SHOW2 .
  CREATE OBJECT g_custom_container1                        "創建容器對象
       EXPORTING container_name g_container1.
  CREATE OBJECT grid1                                      "創建ALV對象
        EXPORTING i_parent g_custom_container1.
  CALL METHOD grid1->register_edit_event                   "可編輯回傳方法
    EXPORTING
      i_event_id grid1->mc_evt_modified.
  CALL METHOD grid1->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_t001w1[]
      it_fieldcatalog      fieldcat1[].
*           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 grid1->set_toolbar_interactive.

ENDFORM.                    " ALV_SHOW2
*&---------------------------------------------------------------------*
*&      Form  FRM_FIELDCAT_SET1
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_FIELDCAT_SET1 .
  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'.
  ls_fcat-hotspot   'X'.
  APPEND ls_fcat TO fieldcat1 .

  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 fieldcat1 .

  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 fieldcat1 .

  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 fieldcat1 .

  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 fieldcat1 .
  CLEAR ls_fcat .

ENDFORM.                    " FRM_FIELDCAT_SET1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章