子屏幕控件

引用类:定义OOALV需要的容器网格控制器

  data:
  go_container_9100 TYPE REF TO cl_gui_custom_container,
  go_grid_9100      TYPE REF TO cl_gui_alv_grid.   "定义ALV控件名
*输出表字段
TYPES:BEGIN OF gty_alv,
        matnr TYPE mara-matnr,
        ersda TYPE mara-ersda,
        ernam TYPE mara-ernam,
      END OF gty_alv  ,
      gtt_alv TYPE TABLE OF gty_alv.
      
DATA :
      gs_layout_9100   TYPE lvc_s_layo, 
      gt_fieldcat_9100 TYPE lvc_t_fcat,
      gs_fieldcat_9100 TYPE lvc_s_fcat,
      gt_alv_show      TYPE  gtt_alv.     

定义选择屏幕
在这里 9101 是子屏幕号码,1001是主屏幕

SELECTION-SCREEN BEGIN OF SCREEN 9101 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECT-OPTIONS: s_matnr  FOR mara-matnr.
*下拉菜单
PARAMETERS:
l_status  LIKE g_status AS LISTBOX VISIBLE LENGTH 20.

SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN END OF SCREEN 9101.

START-OF-SELECTION.

  CALL SCREEN '1001'.

双击1001进入主屏幕逻辑流,subscr_9100是画屏幕里面子屏幕名称。

PROCESS BEFORE OUTPUT.


  MODULE status_1001.

  CALL SUBSCREEN : subscr_9100 INCLUDING sy-repid  g_sid."调用子屏幕

    MODULE dispay_alv.
*
PROCESS AFTER INPUT.
*  MODULE user_command_1001.

  CALL SUBSCREEN : subscr_9100."执行子屏幕 要放在执行功能代码之前

  MODULE user_command_1001.

在这里插入图片描述
进入“格式” 画一个子屏幕和定制屏幕
在这里插入图片描述在这里插入图片描述

REPORT ZVIVIAN2020_08.



* 子屏幕的开发


TABLES : mara.


TYPES:BEGIN OF gty_alv,
        matnr TYPE mara-matnr,
        ersda TYPE mara-ersda,
        ernam TYPE mara-ernam,
      END OF gty_alv  ,
      gtt_alv TYPE TABLE OF gty_alv.

DATA :
  gt_list           TYPE vrm_values,            "list box的值
  g_flag            TYPE char1,                 "列表初始化标识
  g_status          TYPE char10,
  g_sid             TYPE char4 VALUE '9101',    "子屏幕编号

  gs_stbl           TYPE lvc_s_stbl VALUE 'XX',
  gt_exclubar_9100  TYPE ui_functions,
  go_container_9100 TYPE REF TO cl_gui_custom_container,
  go_grid_9100      TYPE REF TO cl_gui_alv_grid.   "定义ALV控件名

DATA :
      gs_layout_9100   TYPE lvc_s_layo,
      gt_fieldcat_9100 TYPE lvc_t_fcat,
      gs_fieldcat_9100 TYPE lvc_s_fcat,
      gt_alv_show      TYPE  gtt_alv.                 "用于保存当前显示数据.


SELECTION-SCREEN BEGIN OF SCREEN 9101 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECT-OPTIONS: s_matnr  FOR mara-matnr.


PARAMETERS:
l_status  LIKE g_status AS LISTBOX VISIBLE LENGTH 20.

SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN END OF SCREEN 9101.

START-OF-SELECTION.

  CALL SCREEN '1001'.

FORM alvshow.

  SELECT * FROM mara
      INTO CORRESPONDING FIELDS OF TABLE gt_alv_show
      WHERE matnr IN s_matnr.



  CREATE OBJECT go_container_9100   "创建容器对象
    EXPORTING
      container_name = 'ALV_CONTROL'.

  CREATE OBJECT go_grid_9100
    EXPORTING
      i_parent = go_container_9100. "创建控件对象

*  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
*    IMPORTING
*      e_grid = go_grid_9100.



ENDFORM.
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_1001  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_1001 INPUT.

  CASE sy-ucomm.

    WHEN '&F03'.
      LEAVE TO SCREEN 0.
    WHEN 'EXEC'.
      PERFORM display_alv.
  ENDCASE.
ENDMODULE.


*&---------------------------------------------------------------------*
*&      Module  STATUS_1001  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_1001 OUTPUT.
  SET PF-STATUS 'ST01'.
*  SET TITLEBAR 'xxx'.

  PERFORM frm_set_status_list.
ENDMODULE.





*&---------------------------------------------------------------------*
*&      Form  DISPLAY_ALV
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM display_alv .

  SELECT * FROM mara
      INTO CORRESPONDING FIELDS OF TABLE gt_alv_show
      WHERE matnr IN s_matnr.

  go_grid_9100->refresh_table_display( is_stable = gs_stbl ).
ENDFORM.
*&---------------------------------------------------------------------*
*&      Module  DISPAY_ALV  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE dispay_alv OUTPUT.


  PERFORM frm_data_init.
  IF go_container_9100 IS INITIAL.
    PERFORM frm_get_data.
    CREATE OBJECT go_container_9100
      EXPORTING
        container_name = 'ALV_CONTROL'.

    CREATE OBJECT go_grid_9100
      EXPORTING
        i_parent = go_container_9100.

    "格式设置
    PERFORM frm_alv_set_layout_9100.

*    "注册事件
    PERFORM frm_alv_event_reg_9100.

    "设置列属性
    PERFORM frm_alv_set_fieldcat_9100.
*

    CALL METHOD go_grid_9100->set_ready_for_input
      EXPORTING
        i_ready_for_input = 1.
*    "去掉不需要的功能
    PERFORM frm_alv_exclude_func_9100
      TABLES
        gt_exclubar_9100.

    "ALV显示
    PERFORM frm_alv_first_display_9100
      USING
        go_grid_9100.
  ELSE.
    go_grid_9100->refresh_table_display( is_stable = gs_stbl ).
  ENDIF.

ENDMODULE.
*&---------------------------------------------------------------------*
*&      Form  FRM_DATA_INIT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_data_init .
*  CHECK gt_d_ssqy IS INITIAL.
*  SELECT  domvalue_l,
*          ddtext
*    INTO TABLE @gt_d_ssqy
*    FROM  dd07t
*    WHERE domname = 'ZD_POMP_SSQY'
*      AND ddlanguage = @sy-langu.
*  IF sy-subrc EQ 0.
*    SORT  gt_d_ssqy
*      BY  domvalue_l ASCENDING.
*  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_get_data .
  SELECT * FROM mara
      INTO CORRESPONDING FIELDS OF TABLE gt_alv_show
      WHERE matnr IN s_matnr.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_ALV_EVENT_REG_9100
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_alv_event_reg_9100 .
*  CREATE OBJECT go_event_handler.
*
** 设置enter事件
*  CALL METHOD go_grid_9100->register_edit_event
*    EXPORTING
*      i_event_id = cl_gui_alv_grid=>mc_evt_enter
*    EXCEPTIONS
*      error      = 1
*      OTHERS     = 2.

  CALL METHOD go_grid_9100->register_edit_event( i_event_id = cl_gui_alv_grid=>mc_evt_modified ).
*  SET HANDLER go_event_handler->handle_changed_finished_9100     FOR go_grid_9100.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_ALV_FIRST_DISPLAY_9100
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_GO_GRID_9100  text
*----------------------------------------------------------------------*
FORM frm_alv_first_display_9100

 USING
    lcl_grid TYPE REF TO cl_gui_alv_grid.
  DATA lv_variant TYPE  disvariant.

  lv_variant-report   = sy-repid.
  lv_variant-username = sy-uname.

  CALL METHOD lcl_grid->set_table_for_first_display
    EXPORTING
      is_layout            = gs_layout_9100           "显示格式
      is_variant           = lv_variant               "变式布局
      it_toolbar_excluding = gt_exclubar_9100        "排除按钮
*     it_hyperlink         = gt_hyperlink_9001
      i_save               = 'A'
    CHANGING
*     it_sort              = gt_sort_9001            "排序
      it_fieldcatalog      = gt_fieldcat_9100         "显示列
      it_outtab            = gt_alv_show.            "数据

  lcl_grid->refresh_table_display( is_stable = gs_stbl ).

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_ALV_SET_FIELDCAT_9100
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_alv_set_fieldcat_9100 .

  REFRESH:
    gt_fieldcat_9100.

* 请求单号
  CLEAR gs_fieldcat_9100 .
  gs_fieldcat_9100-fieldname = 'MATNR'.
  gs_fieldcat_9100-ref_field = 'MATNR'.
  gs_fieldcat_9100-ref_table = 'MARA'.
  gs_fieldcat_9100-reptext   = '物料编号'.
  gs_fieldcat_9100-scrtext_l = gs_fieldcat_9100-reptext.
  gs_fieldcat_9100-scrtext_m = gs_fieldcat_9100-reptext.
  gs_fieldcat_9100-scrtext_s = gs_fieldcat_9100-reptext.
  APPEND gs_fieldcat_9100 TO gt_fieldcat_9100 .


ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_ALV_SET_LAYOUT_9100
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_alv_set_layout_9100 .

  gs_layout_9100-language   = '1'.            "语言
  gs_layout_9100-zebra      = 'X'.            "斑马线显示
  gs_layout_9100-cwidth_opt      = 'X'.            "自动调整列宽
  gs_layout_9100-sel_mode   = 'A'.            "选择方式
  gs_layout_9100-stylefname = 'STYLE'.  "设置单元格格式
  gs_layout_9100-box_fname = 'SEL'.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_SET_STATUS_LIST
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_set_status_list .

  DATA:
    lv_name  TYPE vrm_id,        "   list box的名称
    lv_value LIKE LINE OF gt_list . "list box的结构

  CHECK g_flag IS INITIAL.

  REFRESH gt_list .

  lv_name = 'L_STATUS'.

  DEFINE fill_list.
    lv_value-key   = &1.  "个就是变量P_LIST的值
*    lv_value-text  = &2.   "这个是text
    APPEND lv_value TO gt_list.
  END-OF-DEFINITION.

  fill_list '全部'.
  fill_list '下拉选择1'.
  fill_list '下拉选择2'.
  fill_list '下拉选择3'.

  "---〉调用函数显示listbox里面的值
  CALL FUNCTION 'VRM_SET_VALUES'
    EXPORTING
      id     = lv_name  " PARAMETERS's Name
      values = gt_list.

  l_status = '下拉默认初始值'.

  g_flag  = 'X'.
ENDFORM.

FORM frm_alv_exclude_func_9100
  TABLES
    p_gt_exclubar_9100.
  DATA: ls_exclude TYPE ui_func.

  ls_exclude = '&PRINT'.
  APPEND ls_exclude TO p_gt_exclubar_9100.

  ls_exclude = '&LOCAL&INSERT_ROW'.
  APPEND ls_exclude TO p_gt_exclubar_9100.

  ls_exclude = '&LOCAL&DELETE_ROW'.
  APPEND ls_exclude TO p_gt_exclubar_9100.

  ls_exclude = '&MAINTAIN'.
  APPEND ls_exclude TO p_gt_exclubar_9100.

  ls_exclude = '&INFO'.
  APPEND ls_exclude TO p_gt_exclubar_9100.

  ls_exclude = '&SL'.
  APPEND ls_exclude TO p_gt_exclubar_9100.

  ls_exclude = '%PC'.
  APPEND ls_exclude TO p_gt_exclubar_9100.

  ls_exclude = '&UMC'.
  APPEND ls_exclude TO p_gt_exclubar_9100.

  ls_exclude = '&GRAPH'.
  APPEND ls_exclude TO p_gt_exclubar_9100.

  ls_exclude = '&PNT_PREV'.
  APPEND ls_exclude TO p_gt_exclubar_9100.

  ls_exclude = '&ETA'.
  APPEND ls_exclude TO p_gt_exclubar_9100.

  ls_exclude = '&LOCAL&PASTE_NEW_ROW'.
  APPEND ls_exclude TO p_gt_exclubar_9100.

  ls_exclude = '&LOCAL&COPY_ROW'.
  APPEND ls_exclude TO p_gt_exclubar_9100.

  ls_exclude = '&DETAIL'.
  APPEND ls_exclude TO p_gt_exclubar_9100.

  ls_exclude = '&CHECK'.
  APPEND ls_exclude TO p_gt_exclubar_9100.

  ls_exclude = '&LOCAL&CUT'.
  APPEND ls_exclude TO p_gt_exclubar_9100.

  ls_exclude = '&LOCAL&COPY'.
  APPEND ls_exclude TO p_gt_exclubar_9100.

  ls_exclude = '&MB_PASTE'.
  APPEND ls_exclude TO p_gt_exclubar_9100.

  ls_exclude = '&LOCAL&APPEND'.
  APPEND ls_exclude TO p_gt_exclubar_9100.

  ls_exclude = '&LOCAL&CUT'.
  APPEND ls_exclude TO p_gt_exclubar_9100.

  ls_exclude = '&LOCAL&UNDO'.
  APPEND ls_exclude TO p_gt_exclubar_9100.

  ls_exclude = '&MB_EXPORT'.
  APPEND ls_exclude TO p_gt_exclubar_9100.

  ls_exclude = '&MB_SUBTOT'.
  APPEND ls_exclude TO p_gt_exclubar_9100.

  ls_exclude = '&FIND_MORE'.
  APPEND ls_exclude TO p_gt_exclubar_9100.
ENDFORM.

最终效果图:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值