ABAP Function ALV 使用教程

5 篇文章 1 订阅

Function ALV 是实现最简单,使用频率最高的报表

使用Function ALV的关键就是调用SAP标准的程序

REUSE_ALV_LIST_DISPLAY (仅查看)        REUSE_ALV_GRID_DISPLAY(可编辑)

简单实现: 生成报表  

使用函数:REUSE_ALV_LIST_DISPLAY

示例代码:

REPORT ZABAP_FUNCTION_ALV.

DATA gt_itab TYPE TABLE OF SFLIGHT.

SELECT * FROM SFLIGHT INTO TABLE gt_itab UP TO 25 ROWS.

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
  EXPORTING
    i_structure_name = 'SFLIGHT'
  TABLES
    t_outtab = gt_itab.

运行程序结果如图:

 可以看到简单几行代码就实现了一个报表,但是目前的报表只能查看不能编辑后保存数据到数据库

添加工具栏按钮和绑定点击事件

首先创建一个GUI Status

 其次回到编辑器后引入类型池SLIS和绑定事件所需的变量

SLIS类型池中定义了 Function ALV 所需的类型

REPORT ZABAP_FUNCTION_ALV.

TYPE-POOLS:SLIS.

DATA lt_events TYPE SLIS_T_EVENT.
DATA ls_event TYPE SLIS_ALV_EVENT.

DATA gt_itab TYPE TABLE OF SFLIGHT.

SELECT * FROM SFLIGHT INTO TABLE gt_itab UP TO 25 ROWS.

*设置 GUI Status 显示到画面上

MOVE 'PF_STATUS_SET' TO ls_event-NAME.
MOVE 'ALV_STATUS_SET' TO ls_event-FORM.

APPEND ls_event TO lt_events.

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
  EXPORTING
    i_callback_program = sy-repid
    it_events = lt_events
    i_structure_name = 'SFLIGHT'
    i_callback_user_command = 'ALV_USER_COMMAND'
  TABLES
    t_outtab = gt_itab.

*设置GUI Status 子程序
FORM ALV_STATUS_SET USING PT_EXTAB TYPE SLIS_T_EXTAB.
  CLEAR PT_EXTAB[].
  SET PF-STATUS 'ALV_STATUS'.
ENDFORM.

*设置点击事件 p_ucomm 表示 GUI Status 的 Function Code
FORM ALV_USER_COMMAND USING p_ucomm LIKE sy-ucomm p_selfield TYPE slis_selfield.
  CASE p_ucomm.
    WHEN 'CLOSE'.
      LEAVE PROGRAM.
    WHEN OTHERS.
  ENDCASE.
ENDFORM.

程序运行后显示如图

此时点击关闭按钮会关闭当前程序

参数 :i_callback_user_command 用于设置点击事件

参数 :i_callback_program  以及  it_events  用于设置 工具栏按钮GUI Status

进阶模式:查看报表并按需修改保存报表

使用函数:REUSE_ALV_GRID_DISPLAY

下面演示下进阶的Function ALV 报表,也就是开启Function ALV的Edit模式,做到既能查看又能修改后保存到数据库

首先:设置监听事件并绑定处理子程序

*设置 监听修改事件

*要监听的事件
MOVE 'DATA_CHANGED' TO ls_event-NAME.
*事件触发时执行的子程序
MOVE 'ALV_DATA_CHANGED' TO ls_event-FORM.

APPEND ls_event TO lt_events.

其次:开启编辑模式

DATA: gs_layout TYPE slis_layout_alv.
gs_layout-edit = 'X'.

DATA: gs_layout TYPE slis_layout_alv.
gs_layout-edit = 'X'.

*开启编辑模式的关键就是设置is_layout参数并将edit赋值为X

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
  EXPORTING
    i_callback_program = sy-cprog
    it_events = lt_events
    i_structure_name = 'SFLIGHT'
    i_callback_user_command = 'ALV_USER_COMMAND'
    is_layout = gs_layout
  TABLES
    t_outtab = gt_itab.

最后:实现数据保存的事件子程序ALV_DATA_CHANGED

FORM ALV_DATA_CHANGED USING pchanged_data TYPE REF TO cl_alv_changed_data_protocol.
  DATA lv_name(20).
  DATA ls_cells TYPE lvc_s_modi.
  FIELD-SYMBOLS: <fs_value>.
  CLEAR gt_itab.
  LOOP AT pchanged_data->mt_mod_cells INTO ls_cells.
    READ TABLE gt_itab INDEX ls_cells-row_id.
    CONCATENATE 'GT_ITAB-' ls_cells-fieldname INTO lv_name.
    ASSIGN (lv_name) TO <fs_value>.
    <fs_value> = ls_cells-value.
    MODIFY gt_itab INDEX ls_cells-row_id.
  ENDLOOP.
  MODIFY SFLIGHT FROM gt_itab.
ENDFORM.

编辑

 将 SFLIGHT-Capacity 值 385 修改为 385555 后按Enter键保存

结果查看数据中发现已保存

 完整的报表编辑保存代码

*&---------------------------------------------------------------------*
*& Report ZABAP_FUNCTION_ALV
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZABAP_FUNCTION_ALV.

TYPE-POOLS:SLIS.

DATA lt_events TYPE SLIS_T_EVENT.
DATA ls_event TYPE SLIS_ALV_EVENT.

DATA gt_itab TYPE TABLE OF SFLIGHT WITH HEADER LINE.

SELECT * FROM SFLIGHT INTO TABLE gt_itab UP TO 25 ROWS.

*设置 GUI Status 显示到画面上

MOVE 'PF_STATUS_SET' TO ls_event-NAME.
MOVE 'ALV_STATUS_SET' TO ls_event-FORM.

APPEND ls_event TO lt_events.

*设置 监听修改修改事件

*要监听的事件
MOVE 'DATA_CHANGED' TO ls_event-NAME.
*事件触发时执行的子程序
MOVE 'ALV_DATA_CHANGED' TO ls_event-FORM.

APPEND ls_event TO lt_events.

DATA: gs_layout TYPE slis_layout_alv.
gs_layout-edit = 'X'.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
  EXPORTING
    i_callback_program = sy-cprog
    it_events = lt_events
    i_structure_name = 'SFLIGHT'
    i_callback_user_command = 'ALV_USER_COMMAND'
    is_layout = gs_layout
  TABLES
    t_outtab = gt_itab.

*设置GUI Status 子程序
FORM ALV_STATUS_SET USING PT_EXTAB TYPE SLIS_T_EXTAB.
  CLEAR PT_EXTAB[].
  SET PF-STATUS 'ALV_STATUS'.
ENDFORM.

*设置点击事件 p_ucomm 表示 GUI Status 的 Function Code
FORM ALV_USER_COMMAND USING p_ucomm LIKE sy-ucomm p_selfield TYPE slis_selfield.
  CASE p_ucomm.
    WHEN 'CLOSE'.
      LEAVE PROGRAM.
    WHEN OTHERS.
  ENDCASE.
ENDFORM.

FORM ALV_DATA_CHANGED USING pchanged_data TYPE REF TO cl_alv_changed_data_protocol.
  DATA lv_name(20).
  DATA ls_cells TYPE lvc_s_modi.
  FIELD-SYMBOLS: <fs_value>.
  CLEAR gt_itab.
  LOOP AT pchanged_data->mt_mod_cells INTO ls_cells.
    READ TABLE gt_itab INDEX ls_cells-row_id.
    CONCATENATE 'GT_ITAB-' ls_cells-fieldname INTO lv_name.
    ASSIGN (lv_name) TO <fs_value>.
    <fs_value> = ls_cells-value.
    MODIFY gt_itab INDEX ls_cells-row_id.
  ENDLOOP.
  MODIFY SFLIGHT FROM gt_itab.
ENDFORM.

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值