原创 Tab Zhu [ SAP TAB ](javascript:void\(0\);)
**点击蓝字关注我们**
富强 民主 文明 和谐
自由 平等 公正 法制
爱国 敬业 诚信 友善
**不念过** **去**
**START**
**不畏将来**
**_Title_ **
**OO ALV 模版**
**
**
**一**
**创建ALV前的所需操作**
** 上次摸鱼群有个老兄让我写个OO,今天在这里交代一下。 **
** **
** 1\. 取数据 **
这里我们随便取数据
SELECT * FROM sflight INTO TABLE @DATA(gt_sflight) UP TO 20 ROWS.** 2\. 创建屏幕 **
注意,我们这里使用的是行列200/255 最大值 **
**
同时设置容器CONTAINER自动调节 最少行列为10/10,这样屏幕就会根据你的电脑屏幕大小来自动调节了
创建了OK_CODE
**3\. 添加逻辑流**
在逻辑流中打开PBO,PAI的注释,分别创建2个module,同时创建STATUS,TITLE(可选),
status 仅仅需要这3个按钮即可
**二**
**使用ALV 类直接显示**
输入以下代码,然后直接点击执行程序
REPORT z_tab_test03.DATA ok_code TYPE sy-ucomm.
SELECT * FROM sflight INTO TABLE @DATA(gt_sflight) UP TO 20 ROWS.DATA(cl_oo_alv) = NEW zcl_tab_oo_alv( ).
CALL METHOD cl_oo_alv->create_oo_alv EXPORTING* iv_repid = SY-CPROG* iv_screen = '9000'* iv_default_ex = 'X'* is_layout =* it_fieldcat =* it_exclude =* iv_split_number =* iv_split_container = iv_container_name = 'CONTAINER'* iv_variant_handle = '1'* i_f4_form =* i_toolbar_form =* i_user_command_form =* i_hotspot_form =* i_datachanged_form =* i_datachanged_finished_form =* i_before_ucomm_form =* i_double_click_form =* i_menu_button_form = CHANGING it_data = gt_sflight.
CALL SCREEN 9000.*&---------------------------------------------------------------------**& Module STATUS_9000 OUTPUT*&---------------------------------------------------------------------**&*&---------------------------------------------------------------------*MODULE status_9000 OUTPUT. SET PF-STATUS 'STATUS'. SET TITLEBAR 'TITLE'.ENDMODULE.*&---------------------------------------------------------------------**& Module USER_COMMAND_9000 INPUT*&---------------------------------------------------------------------** text*----------------------------------------------------------------------*MODULE user_command_9000 INPUT. CASE ok_code. WHEN 'EXIT' OR 'BACK'. LEAVE TO SCREEN 0. WHEN 'CANC'. LEAVE PROGRAM. WHEN OTHERS. ENDCASE. CLEAR ok_code.ENDMODULE.我们就可以看到一个ALV画面了
下面介绍ZCL_TAB_OO_ALV代码- 复制可用
小伙伴们可以直接SE24,创建一个类,然后点击基于源代码创建,然后COPY代码即可
对于方法ZCL_TAB_OO_ALV=>SPLIT_CONTAINER , 可以直接静态调用,将容器切割后,返回多个容器,然后将返回的容器分别调用
cl_oo_alv->create_oo_alv 方法即可实现多个ALV显示,
简单的显示多个ALV代码如下:
REPORT z_tab_test03.DATA ok_code TYPE sy-ucomm.
SELECT * FROM sflight INTO TABLE @DATA(gt_sflight) UP TO 20 ROWS.CHECK sy-subrc EQ 0.SELECT * FROM scarr INTO TABLE @DATA(gt_scarr) FOR ALL ENTRIES IN @gt_sflight WHERE carrid = @gt_sflight-carrid.CALL METHOD zcl_tab_oo_alv=>split_container EXPORTING iv_container_name = 'CONTAINER' i_row = 1 i_col = 2 IMPORTING et_container_t = DATA(lt_container_t).CHECK lt_container_t IS NOT INITIAL.
DATA(cl_oo_alv1) = NEW zcl_tab_oo_alv( ).DATA(cl_oo_alv2) = NEW zcl_tab_oo_alv( ).
READ TABLE lt_container_t INTO DATA(ls_container) INDEX 1.IF sy-subrc EQ 0. CALL METHOD cl_oo_alv1->create_oo_alv EXPORTING iv_split_number = 1 iv_split_container = ls_container-container CHANGING it_data = gt_sflight.ENDIF.
READ TABLE lt_container_t INTO ls_container INDEX 2.IF sy-subrc EQ 0. CALL METHOD cl_oo_alv1->create_oo_alv EXPORTING iv_split_number = 2 iv_split_container = ls_container-container CHANGING it_data = gt_scarr.ENDIF.CALL SCREEN 9000.**三**
**ZCL_TAB_OO_ALV代码** **如下**
CLASS zcl_tab_oo_alv DEFINITION PUBLIC CREATE PUBLIC .*&=====================================================================**& Create date: 2021.08.26*& Created by: Tab-Zhu (微信公众号:Tab_JXZHU)*&---------------------------------------------------------------------* PUBLIC SECTION.
TYPES: BEGIN OF ty_splits, row TYPE i, col TYPE i, container TYPE REF TO cl_gui_container, END OF ty_splits . TYPES: ty_t_splits TYPE TABLE OF ty_splits .CONSTANTS gc_a TYPE c VALUE 'A' ##NO_TEXT. CONSTANTS gc_d TYPE c VALUE 'D' ##NO_TEXT. DATA cr_grid TYPE REF TO cl_gui_alv_grid . DATA cr_container TYPE REF TO cl_gui_custom_container . DATA split_n TYPE i . DATA m_repid TYPE progname . DATA m_f4_form TYPE strin
...