-
目录
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