REUSE_ALV_GRID_DISPLAY 编辑数据

本文介绍如何在ABAP中使用REUSE_ALV_GRID_DISPLAY函数模块来显示和删除内表数据。通过设置ALV网格的特性,实现数据的显示,并提供用户交互删除功能。

请注意程序中的五处红色标记的代码,其他代码请用户自己按自己的需要进行修改

*&---------------------------------------------------------*
*& REPORT CREATE TRANSFER *
*&---------------------------------------------------------*
*& Create date : 2007/06/21 *
*& Program type : Report *
*&---------------------------------------------------------*
*& Modifications : *
*& Date | Programmer |Change request | Description *
*& *
*&-------------------------------------------------------- *
REPORT zsdpr_yfdj MESSAGE-ID zmc01 NO STANDARD PAGE HEADING LINE-SIZE 500.
************************************************************
* TABLES
************************************************************
TABLES : zadtb_yf.

TYPE-POOLS: slis.
************************************************************
*INTERNAL TABLE DEFINITION
************************************************************
DATA: BEGIN OF gs_it,
lfdat(10),
vbeln(50),
zstation(20),
END OF gs_it.
DATA : gt_it LIKE gs_it OCCURS 0 WITH HEADER LINE.
DATA : gt_itab LIKE zadtb_yf OCCURS 0 WITH HEADER LINE.
DATA: BEGIN OF gs_yf OCCURS 0 .
*1内表增加一个选中字段
DATA: gv_check TYPE c.
INCLUDE TYPE zadtb_yf.
DATA: END OF gs_yf.

DATA : gt_yf LIKE gs_yf OCCURS 0 WITH HEADER LINE.
************************************************************
* Variable DEFINITION
***********************************************************
DATA: gt_fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE,
gs_layout TYPE slis_layout_alv,
usercommand TYPE slis_fieldname VALUE 'USERCOMMAND',
gt_sort TYPE slis_t_sortinfo_alv.
DATA: progname LIKE sy-repid,
title(70).
DATA : gv_cancel(1) TYPE c,
gv_flag TYPE i.
************************************************************
* SELECTION-SCREEN
************************************************************
SELECTION-SCREEN BEGIN OF BLOCK bl1 WITH FRAME TITLE text-bl1.
SELECTION-SCREEN SKIP 1.
SELECT-OPTIONS:
so_lfdat FOR zadtb_yf-lfdat,"提货日期
so_vbeln FOR zadtb_yf-vbeln,"销售凭证
so_erdat FOR zadtb_yf-erdat."录入日期
SELECTION-SCREEN END OF BLOCK bl1.
SELECTION-SCREEN BEGIN OF BLOCK bl3 WITH FRAME TITLE text-bl3.
PARAMETERS: pa_z2 RADIOBUTTON GROUP pa2 ."删除
SELECTION-SCREEN SKIP 1 .
SELECTION-SCREEN END OF BLOCK bl3.
***********************************************************
* START OF SELECTION
***********************************************************
START-OF-SELECTION.
PERFORM get_date.
END-OF-SELECTION.
PERFORM output_date.
*&---------------------------------------------------------------------*
*& Form GET_DATE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM get_date .
SELECT *
INTO CORRESPONDING FIELDS OF TABLE gt_yf
FROM zadtb_yf
WHERE lfdat IN so_lfdat "提货日期
AND vbeln IN so_vbeln "销售凭证
AND erdat IN so_erdat. "录入日期
ENDFORM. " GET_DATE
*&---------------------------------------------------------------------*
*& Form OUTPUT_DATE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM output_date .
REFRESH gt_fieldcat.
progname = sy-repid.
title = '运费查询及信息删除'.

gs_layout-zebra = 'X'. "设置每行的背景颜色交错 显示。
gs_layout-colwidth_optimize = 'X'. "ALV输出时候自动优化宽 度
gs_layout-detail_popup = 'X'.

*2此处代码设置屏幕的chekbox选中字段
gt_fieldcat-fieldname = 'GV_CHECK'.
gt_fieldcat-seltext_m = '选择'.
gt_fieldcat-outputlen = 1.
gt_fieldcat-checkbox = 'X'.
gt_fieldcat-input = 'X'.
gt_fieldcat-edit = 'X'.
APPEND gt_fieldcat.
CLEAR gt_fieldcat.

gt_fieldcat-fieldname = 'LFDAT'.
gt_fieldcat-seltext_m = '提货日期'.
gt_fieldcat-outputlen = 10.
APPEND gt_fieldcat.
CLEAR gt_fieldcat.

gt_fieldcat-fieldname = 'VBELN'.
gt_fieldcat-seltext_m = '销售凭证'.
gt_fieldcat-outputlen = 50.
APPEND gt_fieldcat.
CLEAR gt_fieldcat.

gt_fieldcat-fieldname = 'ZSTATION'.
gt_fieldcat-seltext_m = '到站'.
gt_fieldcat-outputlen = 20.
APPEND gt_fieldcat.
CLEAR gt_fieldcat.

*3设置处理代码
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = progname
is_layout = gs_layout
it_fieldcat = gt_fieldcat[]
i_grid_title = title
i_callback_pf_status_set = 'PF_STATUS_SET'
i_callback_user_command = usercommand
* i_save = 'A'
TABLES
t_outtab = gt_yf
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. " OUTPUT_DATE
*&---------------------------------------------------------------------*
*& FORM user_command
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM usercommand USING ucomm TYPE sy-ucomm
selfield TYPE slis_selfield.
DATA: lr_grid TYPE REF TO cl_gui_alv_grid.

*4此处代码将用户输入读入内表(这一步不可少)
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = lr_grid.
CALL METHOD lr_grid->check_changed_data.

*5此处代码阻止'REUSE_ALV_GRID_DISPLAY创建新的屏幕,造成屏幕多层
selfield-refresh = 'X'.
CASE sy-ucomm.
WHEN 'DELE'.
CLEAR sy-ucomm.
LOOP AT gt_yf.
IF gt_yf-gv_check = 'X'.
*请填写删除操作
DELETE gt_yf.
ENDIF.
ENDLOOP.
ENDCASE.
ENDFORM. "USER_COMMAND
*&---------------------------------------------------------------------*
*& FORM PF_STATUS_SET
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM pf_status_set USING rt_extab TYPE slis_t_extab.
SET PF-STATUS 'YFDJ' .
ENDFORM. "frm_PF_STATUS_SET

在SAP系统中,使用`REUSE_ALV_GRID_DISPLAY`函数模块时,若涉及`SUBMIT`操作导致程序异常终止(dump),通常与数据传递、字段结构不匹配或程序逻辑错误有关。以下是一些常见的问题原因及解决方案: ### 数据结构不匹配 在调用`REUSE_ALV_GRID_DISPLAY`时,必须确保传递的字段目录(`IT_FIELDCAT`)与实际数据表结构一致。如果字段目录中定义的字段与数据表中的字段不匹配,可能导致程序在运行时报错或异常终止。检查字段目录的生成逻辑,确保所有字段名称、长度和数据类型与数据表一致。 ### 内部表结构不一致 `REUSE_ALV_GRID_DISPLAY`函数模块需要传递一个内部表作为数据源。如果内部表的结构与ALV控件期望的结构不一致,也可能导致错误。确保内部表的字段顺序、名称和数据类型与字段目录一致。 ### SUBMIT操作的参数传递问题 在执行`SUBMIT`操作时,需确保传递的参数正确无误。例如,若传递的报表名称或参数不正确,可能导致系统无法找到对应的报表程序,从而引发异常。检查`SUBMIT`语句中的参数是否正确,尤其是报表名称和选择屏幕参数。 ### 内存不足问题 当处理大量数据时,`REUSE_ALV_GRID_DISPLAY`可能会占用较多内存,尤其是在`SUBMIT`操作中处理大数据集时。如果系统内存不足,可能导致程序崩溃。可以通过优化数据处理逻辑,减少一次性加载的数据量,或者调整系统内存设置来解决此问题。 ### 示例代码 以下是一个典型的`REUSE_ALV_GRID_DISPLAY`调用示例,确保字段目录和数据表结构一致: ```abap DATA: lt_fieldcat TYPE slis_t_fieldcat_alv, ls_fieldcat TYPE slis_fieldcat_alv. ls_fieldcat-fieldname = 'MATNR'. ls_fieldcat-seltext_m = 'Material Number'. APPEND ls_fieldcat TO lt_fieldcat. ls_fieldcat-fieldname = 'WERKS'. ls_fieldcat-seltext_m = 'Plant'. APPEND ls_fieldcat TO lt_fieldcat. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = sy-repid it_fieldcat = lt_fieldcat TABLES t_outtab = lt_data EXCEPTIONS program_error = 1 OTHERS = 2. ``` ### 相关问题 1. 如何在SAP中调试REUSE_ALV_GRID_DISPLAY的字段目录问题? 2. 在使用REUSE_ALV_GRID_DISPLAY时,如何处理大数据量导致的性能问题? 3. 如何确保SUBMIT操作中的参数传递正确无误? 4. 有哪些常见的SAP ALV报表开发中的错误及其解决方案? 5. 如何优化REUSE_ALV_GRID_DISPLAY的内存使用以避免程序崩溃?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值