SAP中三种alv的简单模版以及三种alv之间的优劣对比

  1. 目录

    Function ALV 模板

    **适用场景**:

    **优点**:

    **缺点**:

    2. OO ALV 模板

    **适用场景**:

    **优点**:

    **缺点**:

    3. SALV 模板

    **适用场景**:

    **优点**:

    **缺点**:

    4. 三种ALV方式比较总结

    4.1. 选择建议:


    Function ALV 模板

REPORT zfunction_alv_demo.

TYPES: BEGIN OF ty_data,
         vbeln TYPE vbeln_va,  "销售订单号
         erdat TYPE erdat,     "创建日期
         netwr TYPE netwr,     "净值
         waerk TYPE waerk,     "货币
       END OF ty_data.

DATA: gt_data TYPE TABLE OF ty_data,
      gs_data TYPE ty_data,
      gv_okcode TYPE sy-ucomm.

DATA: gr_container TYPE scrfname VALUE 'ALV_CONTAINER',
      gr_grid      TYPE REF TO cl_gui_alv_grid,
      gr_layout    TYPE lvc_s_layo,
      gt_fieldcat  TYPE lvc_t_fcat.

START-OF-SELECTION.
  PERFORM get_data.
  PERFORM display_alv.

FORM get_data.
  SELECT vbeln erdat netwr waerk
    FROM vbak
    INTO TABLE gt_data
   UP TO 100 ROWS.
ENDFORM.

FORM display_alv.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program     = sy-repid
      i_callback_top_of_page = 'TOP_OF_PAGE'
      is_layout              = gr_layout
      it_fieldcat            = gt_fieldcat
    TABLES
      t_outtab               = gt_data
    EXCEPTIONS
      program_error          = 1
      OTHERS                 = 2.
ENDFORM.

FORM top_of_page.
  DATA: lt_header TYPE slis_t_listheader.
  
  CLEAR lt_header.
  PERFORM build_header CHANGING lt_header.
  
  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
      it_list_commentary = lt_header.
ENDFORM.

**适用场景**:

- 简单的报表需求

- 需要快速开发的场景

- 传统ABAP开发环境

**优点**:

- 实现简单,代码量少

- 无需创建容器对象

- 适合初学者和简单报表

**缺点**:

- 功能有限,定制能力较弱

- 界面相对老旧

- 不支持某些高级ALV功能

2. OO ALV 模板

REPORT zoo_alv_demo.

TYPES: BEGIN OF ty_data,
         vbeln TYPE vbeln_va,
         erdat TYPE erdat,
         netwr TYPE netwr,
         waerk TYPE waerk,
       END OF ty_data.

DATA: gt_data TYPE TABLE OF ty_data,
      gs_data TYPE ty_data.

DATA: gr_container TYPE REF TO cl_gui_custom_container,
      gr_grid      TYPE REF TO cl_gui_alv_grid,
      gr_layout    TYPE lvc_s_layo,
      gt_fieldcat  TYPE lvc_t_fcat.

START-OF-SELECTION.
  PERFORM get_data.
  PERFORM display_alv.

FORM get_data.
  SELECT vbeln erdat netwr waerk
    FROM vbak
    INTO TABLE gt_data
   UP TO 100 ROWS.
ENDFORM.

FORM display_alv.
  " 创建容器
  CREATE OBJECT gr_container
    EXPORTING
      container_name = 'ALV_CONTAINER'.

  " 创建ALV网格
  CREATE OBJECT gr_grid
    EXPORTING
      i_parent = gr_container.

  " 设置布局
  gr_layout-grid_title = '销售订单列表'.
  gr_layout-zebra = 'X'.

  " 准备字段目录
  PERFORM build_fieldcat.

  " 显示ALV
  CALL METHOD gr_grid->set_table_for_first_display
    EXPORTING
      is_layout       = gr_layout
    CHANGING
      it_outtab       = gt_data
      it_fieldcatalog = gt_fieldcat.
ENDFORM.

FORM build_fieldcat.
  DATA: ls_fieldcat TYPE lvc_s_fcat.

  " VBELN字段
  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname = 'VBELN'.
  ls_fieldcat-ref_table = 'VBAK'.
  ls_fieldcat-ref_field = 'VBELN'.
  ls_fieldcat-coltext = '销售订单'.
  APPEND ls_fieldcat TO gt_fieldcat.

  " 其他字段类似添加...
ENDFORM.

**适用场景**:

- 需要高度定制的报表

- 复杂交互需求

- 现代SAP应用开发

**优点**:

- 功能强大,可定制性高

- 支持事件处理

- 可以创建复杂的用户界面

- 性能较好

**缺点**:

- 代码量较大

- 学习曲线较陡

- 需要管理对象生命周期

3. SALV 模板

REPORT zsalv_demo.

TYPES: BEGIN OF ty_data,
         vbeln TYPE vbeln_va,
         erdat TYPE erdat,
         netwr TYPE netwr,
         waerk TYPE waerk,
       END OF ty_data.

DATA: gt_data TYPE TABLE OF ty_data,
      gs_data TYPE ty_data.

DATA: gr_table TYPE REF TO cl_salv_table,
      gr_functions TYPE REF TO cl_salv_functions,
      gr_display TYPE REF TO cl_salv_display_settings.

START-OF-SELECTION.
  PERFORM get_data.
  PERFORM display_salv.

FORM get_data.
  SELECT vbeln erdat netwr waerk
    FROM vbak
    INTO TABLE gt_data
   UP TO 100 ROWS.
ENDFORM.

FORM display_salv.
  TRY.
      " 创建SALV表
      cl_salv_table=>factory(
        IMPORTING
          r_salv_table = gr_table
        CHANGING
          t_table      = gt_data ).
      
      " 获取功能对象并启用默认功能
      gr_functions = gr_table->get_functions( ).
      gr_functions->set_all( abap_true ).
      
      " 设置显示属性
      gr_display = gr_table->get_display_settings( ).
      gr_display->set_striped_pattern( abap_true ).
      gr_display->set_list_header( '销售订单列表(SALV)' ).
      
      " 显示ALV
      gr_table->display( ).
      
    CATCH cx_salv_msg INTO DATA(lx_error).
      MESSAGE lx_error TYPE 'I' DISPLAY LIKE 'E'.
  ENDTRY.
ENDFORM.

**适用场景**:

- 需要快速实现标准ALV功能

- 不需要复杂自定义的报表

- SAP NW 7.0及以上版本

**优点**:

- 代码简洁,开发快速

- 内置功能丰富

- 不需要处理容器

- 维护简单

**缺点**:

- 定制能力有限

- 某些高级功能不支持

- 事件处理不如OO ALV灵活

4. 三种ALV方式比较总结

特性

Function ALV

OO ALV

SALV

复杂度

简单

复杂

中等

代码量

较少

定制能力

有限

非常强大

中等

事件处理

有限

完整支持

有限支持

容器需求

不需要

需要

不需要

性能

一般

版本要求

所有SAP版本

SAP 4.6C+

SAP NW 7.0+

学习曲线

平缓

陡峭

中等

适用场景

简单报表/快速开发

复杂交互/高度定制报表

标准功能报表/快速实现

4.1. 选择建议:

1. 对于简单报表或维护已有代码,使用Function ALV

2. 对于需要高度定制和复杂交互的报表,使用OO ALV

3. 对于新开发的标准报表,优先考虑SALV

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值