SAP ABAP 展示多个ALV的方法

这篇文章展示了如何在SAPABAP环境中创建ALV报告。代码包括了从TcodeSE38开始创建程序,定义数据结构,使用SELECTION-SCREEN,以及获取和显示sflight、scarr和sflights表的数据。ALV(AcceleratedListViewer)用于提供标准列表格式和用户界面,通过cl_salv_table工厂方法生成并显示ALV表格。

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

ALV 为我们所有的 ABAP 报告提供了标准列表格式和用户界面。ALV是由SAP提供的一组标准功能模块创建而成。

下面是用于在报告中显示三个 ALV 的代码:

1:Tcode SE38:

2:根据需要提供程序名称并单击创建按钮,应显示一个弹出窗口,选择“可执行程序”,然后保存。

 源代码如下:

*&---------------------------------------------------------------------*
*&  Include           ZR_MULTIPLE_ALV_TOP
*&---------------------------------------------------------------------*
CLASS lcl_report DEFINITION DEFERRED.

TABLES : sflight,
         scarr,
         sflights.

**DATA DECLARATIONS
DATA: lo_salv      TYPE REF TO cl_salv_table,              " ALV Reference
      gt_sflight   TYPE STANDARD TABLE OF sflight,
      gt_scarr     TYPE STANDARD TABLE OF scarr,
      gv_message   TYPE REF TO cx_salv_msg, "Exception Class
      gt_sflights  TYPE STANDARD TABLE OF sflights,
      lo_report    TYPE REF TO lcl_report,
      lo_container TYPE REF TO cl_gui_custom_container. "Custom Container

**SELECTION SCREEN
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-000.
SELECT-OPTIONS s_flight FOR sflight-carrid.
SELECTION-SCREEN END OF BLOCK b1.
===============================================================================
*&---------------------------------------------------------------------*
*&  Include           ZR_MULTIPLE_ALV_I01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Module  STATUS_9000  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*


CLASS lcl_report DEFINITION.
  PUBLIC SECTION.
* Methods to Fetch Data and Display Output
    METHODS: get_data,                             "Data Selection
      display_output,                       "Display Output
      display_alv                           "Display ALV
        IMPORTING
          container_name TYPE c
        CHANGING
          i_data         TYPE STANDARD TABLE.

* Method to Set PF-Status
    METHODS: set_pf_status
      CHANGING
        co_salv TYPE REF TO cl_salv_table. " Default Pf Status

ENDCLASS.                    "lcl_report DEFINITION
*----------------------------------------------------------------------*
*       CLASS lcl_report IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_report IMPLEMENTATION.

* Data selection
  METHOD get_data.
    SELECT * INTO TABLE gt_sflight
           FROM sflight UP TO 10 ROWS WHERE carrid IN s_flight .

    SELECT * INTO TABLE gt_scarr
       FROM scarr UP TO 10 ROWS  WHERE carrid IN s_flight .

    SELECT * INTO TABLE gt_sflights
   FROM sflights UP TO 10 ROWS WHERE carrid IN s_flight .
  ENDMETHOD.                    "get_data

* Display ALV
  METHOD display_alv.

*   Instantiate the container
    CREATE OBJECT lo_container
      EXPORTING
        container_name              = container_name
      EXCEPTIONS
        cntl_error                  = 1
        cntl_system_error           = 2
        create_error                = 3
        lifetime_error              = 4
        lifetime_dynpro_dynpro_link = 5
        OTHERS                      = 6.
    IF sy-subrc <> 0.
*    Raise exception
    ENDIF.

* Call Factory method which will give back the ALV object reference.
    TRY.
        CALL METHOD cl_salv_table=>factory
          EXPORTING
            r_container  = lo_container "****Pass container object to cl_salv_table***
          IMPORTING
            r_salv_table = lo_salv
          CHANGING
            t_table      = i_data.
      CATCH cx_salv_msg INTO gv_message .
    ENDTRY.

*   Set PF status
    CALL METHOD set_pf_status
      CHANGING
        co_salv = lo_salv.

* Display the ALV
    lo_salv->display( ).
  ENDMETHOD.                    "display_ALV

* Display Output
  METHOD display_output.

*  Call ALV display method and pass the Container name and internal table
***Display ALV1***
    display_alv(
       EXPORTING
         container_name = 'CONTAINER1'
       CHANGING
         i_data           = gt_sflight ).

**Display ALV2***
    display_alv(
       EXPORTING
         container_name = 'CONTAINER2'
       CHANGING
         i_data           = gt_scarr ).

***Display ALV3***
    display_alv(
       EXPORTING
         container_name = 'CONTAINER3'
       CHANGING
         i_data           = gt_sflights ).
  ENDMETHOD.                    "display_ALV

************************************************************************
*    Method Implementation
************************************************************************
* Setting the PF-Status
  METHOD set_pf_status.
    DATA: lo_functions TYPE REF TO cl_salv_functions_list.
* Default functions
    lo_functions = co_salv->get_functions( ).
    lo_functions->set_all( abap_true ).
  ENDMETHOD.                    "set_pf_status
 ENDCLASS.                    "lcl_report IMPLEMENTATION
MODULE status_9000 OUTPUT.
  SET PF-STATUS 'ZSTATUS'.
  SET TITLEBAR 'TITLE'.
ENDMODULE.                 " STATUS_0100  OUTPUT
===========================================================================
*&---------------------------------------------------------------------*
*&  Include           ZR_MULTIPLE_ALV_O01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_9000  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_9000 INPUT.
  IF sy-ucomm = 'BACK'.
    LEAVE TO SCREEN 0.
  ENDIF.
ENDMODULE.                 " USER_COMMAND_9000  INPUT

验证结果:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值