SAP:上下分屏显示两个ALV

本文介绍了如何在ABAP编程中使用cl_gui_docking_container技术,创建一个包含两个ALV的屏幕,通过上下分割实现同时显示抬头和明细信息,以及如何初始化、刷新和交互处理ALV对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当前需求,需要实现同时显示抬头、明细两个ALV信息。这里使用cl_gui_docking_container,通过上下分割创建2个容器,用这两个容器创建ALV对象,并显示。  效果图如下:

第一步:创建屏幕0100. (只需要将PBO、PAI实现)

第二步: 创建GUI STATUS。

 

第三步:创建TITLE BAR。 

 

代码如下:

REPORT zmmr030.


* 全局变量定义
DATA: gr_top_alv    TYPE REF TO cl_gui_alv_grid. "屏幕alv对象
DATA: gr_bottom_alv TYPE REF TO cl_gui_alv_grid. "屏幕alv对象

DATA: gr_dock       TYPE REF TO cl_gui_docking_container, "屏幕容器对象"选择屏幕
      gr_splitter   TYPE REF TO cl_gui_splitter_container,
      gr_top_con    TYPE REF TO cl_gui_container,  " 最上面的容器
      gr_bottom_con TYPE REF TO cl_gui_container.  " 最下面的容器

DATA: gt_spfli TYPE TABLE OF spfli,
      gt_sbook TYPE TABLE OF sbook.


START-OF-SELECTION.
  CALL SCREEN 0100.


*&---------------------------------------------------------------------*
*& Module z OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE pbo_0100 OUTPUT.
  PERFORM frm_status_0100.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  PAI_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE pai_0100 INPUT.
  PERFORM frm_pai_0100 USING sy-ucomm.
ENDMODULE.



*&---------------------------------------------------------------------*
*& Form frm_status_0100
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_status_0100 .

  IF gr_dock IS INITIAL.
    " 创建ALV
    PERFORM frm_init_alv_grids.
  ELSE.
    " 刷新ALV对象
    PERFORM frm_refresh_alv USING gr_top_alv.
    PERFORM frm_refresh_alv USING gr_bottom_alv.
  ENDIF.


ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_init_alv_grids
*&---------------------------------------------------------------------*
*& 使用Dock将屏幕分割为上下两部分;
*& 建立上下两个ALV对象
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_init_alv_grids.
  DATA: ls_layout    TYPE lvc_s_layo.

**& 设置屏幕的标题状态
  SET PF-STATUS 'STATUS_0100'.
  SET TITLEBAR  'TITLE_0100'.

**& 0. 创建docking
  CREATE OBJECT gr_dock
    EXPORTING
      repid     = sy-repid
      dynnr     = sy-dynnr
      extension = '1500'         "屏幕大小
      side      = cl_gui_docking_container=>dock_at_top.

  "将屏幕拆分成上下两个屏幕:两行一列
  CREATE OBJECT gr_splitter
    EXPORTING
      parent  = gr_dock
      rows    = 2
      columns = 1.

**& 1. 第一个屏幕容器放在第一行第一列
  CALL METHOD gr_splitter->get_container
    EXPORTING
      row       = 1
      column    = 1
    RECEIVING
      container = gr_top_con.
  "第一个屏幕高度
  CALL METHOD gr_splitter->set_row_height
    EXPORTING
      id     = 1
      height = 50.

  " 第一个ALV
  CREATE OBJECT gr_top_alv
    EXPORTING
      i_parent = gr_top_con.

  ls_layout-sel_mode     = 'D'.
  ls_layout-zebra        = 'X'.
  ls_layout-cwidth_opt   = 'X'.
  CALL METHOD gr_top_alv->set_table_for_first_display
    EXPORTING
      i_structure_name = 'SPFLI'
      is_layout        = ls_layout
    CHANGING
      it_outtab        = gt_spfli.


**& 2. 第二个屏幕容器放在第二行第一列
  CALL METHOD gr_splitter->get_container
    EXPORTING
      row       = 2
      column    = 1
    RECEIVING
      container = gr_bottom_con.

  " 第二个ALV
  CREATE OBJECT gr_bottom_alv
    EXPORTING
      i_parent = gr_bottom_con.

  ls_layout-sel_mode     = 'D'.
  ls_layout-zebra        = 'X'.
  ls_layout-cwidth_opt   = 'X'.
  CALL METHOD gr_bottom_alv->set_table_for_first_display
    EXPORTING
      i_structure_name = 'SBOOK'
      is_layout        = ls_layout
    CHANGING
      it_outtab        = gt_sbook.
ENDFORM.

*&---------------------------------------------------------------------*
*& Form frm_refresh_alv
*&---------------------------------------------------------------------*
*&  ALV 刷新
*&---------------------------------------------------------------------*
*&      --> GR_TOP_ALV
*&---------------------------------------------------------------------*
FORM frm_refresh_alv  USING ir_alv_grid TYPE REF TO cl_gui_alv_grid.
  DATA: ls_stable TYPE lvc_s_stbl.

  CLEAR: ls_stable.
  ls_stable-row = 'X'.
  ls_stable-col = 'X'.

  CALL METHOD ir_alv_grid->refresh_table_display
    EXPORTING
      is_stable = ls_stable.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_pai_0100
*&---------------------------------------------------------------------*
*&  100屏幕 互动处理
*&---------------------------------------------------------------------*
*&      --> SY_UCOMM
*&---------------------------------------------------------------------*
FORM frm_pai_0100  USING  iv_ucomm TYPE sy-ucomm.
  CASE iv_ucomm.
    WHEN 'BACK' OR 'EXIT' OR 'CANCEL'.
      LEAVE TO SCREEN 0.  "返回上一级
    WHEN OTHERS.
  ENDCASE.
ENDFORM.

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值