SAP ALV报表展示案例以及错误解决方案

本文简单介绍alv报表的开发,以及在开发过程中遇见的细节性及错误

1.定义alv所用到的类型池

type-pools : slis

2.分为四小部

2.1引用你所用到的透明表

tables: vbak.

2.2定义你应用该表中想要的字段

TYPES: BEGIN OF  gty_alv,
         vkorg TYPE vbak-vkorg , "销售组织
         vtweg TYPE vbak-vtweg , "分销渠道
         vkgrp TYPE vbak-vkgrp , "销售组
         auart TYPE vbak-auart , "订单类型
         erdat TYPE vbak-erdat , "订单日期
         vbeln TYPE vbak-vbeln , "订单号
       END OF gty_alv.

2.3定义透明表的内表

data gt_vbak type table of gty_alv.

2.4定义透明表的工作区

data gs_vbak type gty_alv

3.定义alv所需要的对象

DATA gt_fieldcat TYPE slis_t_fieldcat_alv.
DATA gs_fieldcat TYPE slis_fieldcat_alv.

DATA gs_layout TYPE slis_layout_alv.

*宏定义
DEFINE  %%append_fieldcat.
  CLEAR gs_fieldcat.
  gs_fieldcat-fieldname = &1.
  gs_fieldcat-seltext_m = &2.
    APPEND gs_fieldcat TO gt_fieldcat.
END-OF-DEFINITION.

4.定义选择屏幕

SELECTION-SCREEN : BEGIN OF BLOCK vie WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS s_vbeln FOR vbak-vbeln.

*单选
PARAMETERS: p_1 RADIOBUTTON GROUP grp1 DEFAULT 'X' .
PARAMETERS: p_2 RADIOBUTTON GROUP grp1 .

SELECTION-SCREEN:END OF BLOCK vie.

5.对数据进行处理(取数,显示,alv输出,layout输出)

start-of-selection.
	perfoem get_data. "取数
	 IF gt_vbak IS NOT INITIAL.
    PERFORM show_data.  "显示数据
  ELSE.
    MESSAGE s000 WITH '没数据'.

FORM get_data . "取数
  IF p_1 = 'X'.
    SELECT
       vkorg  "销售组织
       vtweg  "分销渠道
       vkgrp  "销售组
       auart  "订单类型
       erdat  "订单日期
       vbeln  "订单号
    FROM vbak
    INTO CORRESPONDING FIELDS OF TABLE gt_vbak
    WHERE vbeln IN s_vbeln.
  ELSE.
    MESSAGE s000 WITH '暂无'.
  ENDIF.

ENDFORM.

FORM show_data . "显示数据

   PERFORM bulid_fieldcat. "字段显示
   PERFORM build_alv. "alv显示
   PERFORM bulid_layout. "layout显示

ENDFORM.

FORM build_alv .
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
*     I_INTERFACE_CHECK                 = ' '
*     I_BYPASSING_BUFFER                = ' '
*     I_BUFFER_ACTIVE                   = ' '
     I_CALLBACK_PROGRAM                =  sy-repid
*     I_CALLBACK_PF_STATUS_SET          = ' '
*     I_CALLBACK_USER_COMMAND           = ' '
*     I_CALLBACK_TOP_OF_PAGE            = ' '
*     I_CALLBACK_HTML_TOP_OF_PAGE       = ' '
*     I_CALLBACK_HTML_END_OF_LIST       = ' '
*     I_STRUCTURE_NAME                  =
*     I_BACKGROUND_ID                   = ' '
*     I_GRID_TITLE  =
*     I_GRID_SETTINGS                   =
      is_layout     = gs_layout
      it_fieldcat   = gt_fieldcat
*     IT_EXCLUDING  =
*     IT_SPECIAL_GROUPS                 =
*     IT_SORT       =
*     IT_FILTER     =
*     IS_SEL_HIDE   =
*     I_DEFAULT     = 'X'
*     I_SAVE        = ' '
*     IS_VARIANT    =
*     IT_EVENTS     =
*     IT_EVENT_EXIT =
*     IS_PRINT      =
*     IS_REPREP_ID  =
*     I_SCREEN_START_COLUMN             = 0
*     I_SCREEN_START_LINE               = 0
*     I_SCREEN_END_COLUMN               = 0
*     I_SCREEN_END_LINE                 = 0
*     I_HTML_HEIGHT_TOP                 = 0
*     I_HTML_HEIGHT_END                 = 0
*     IT_ALV_GRAPHICS                   =
*     IT_HYPERLINK  =
*     IT_ADD_FIELDCAT                   =
*     IT_EXCEPT_QINFO                   =
*     IR_SALV_FULLSCREEN_ADAPTER        =
*  IMPORTING
*     E_EXIT_CAUSED_BY_CALLER           =
*     ES_EXIT_CAUSED_BY_USER            =
    TABLES
      t_outtab      = gt_vbak
    EXCEPTIONS
      program_error = 1
      OTHERS        = 2.
  IF sy-subrc <> 0.
* Implement suitable error handling here
  ENDIF.

ENDFORM.

FORM bulid_fieldcat .

  %%append_fieldcat:
     'vkorg'  '销售组织',
     'vtweg'  '分销渠道',
     'vkgrp'  '销售组',
     'auart'  '订单类型',
     'erdat'  '订单日期',
     'vbeln'  '订单号'.

ENDFORM.

FORM bulid_layout .
  gs_layout-colwidth_optimize = 'X'.
  gs_layout-zebra = 'X'.
ENDFORM.

6.最终效果

在这里插入图片描述

7.遇到的一些错误

7.1.这个错误是"字段目录没找到"

原因:在调用"REUSE_ALV_GRID_DISPLAY"时忘记给 " it_fieldcat " 赋值
解决方案: 把字段it_fieldcat = gt_fieldcat
在这里插入图片描述

7.2. 第37行 append 的应该是列属性,不应该是内表

在这里插入图片描述

7.3. 在区间时用 in

非区间用 =
要不然会查不出数据的

在这里插入图片描述

7.4.这个错误算是细节"字段显示"

注意一下就行了.不然容易出错.子程序的顺序出错了,下面箭头指的的是正确的…
之前写的是build_alv在build_fieldcat前面报的就是下面的错误
在这里插入图片描述
欢迎补充说明.以上仅个人开发经验,仅供参考!!!

  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
SAP ABAP ALV 报表是一种基于 ABAP 编程语言的高级列表工具,用于生成和显示数据报表。如果你想要为 ALV 报表添加自定义校验逻辑,可以按照以下步骤进行修改: 1. 首先,创建一个包含自定义校验逻辑的 ABAP 函数模块。该函数模块可用于对 ALV 报表的数据进行验证。在函数模块中,你可以定义各种校验规则和逻辑,例如检查数据的完整性、一致性或合法性。 2. 在 ABAP 程序中,使用 ALV 报表时,可以在数据填充之前或之后调用自定义函数模块。例如,你可以使用 FUNCTION MODULE_BEFORE_OUTPUT 或 FUNCTION MODULE_AFTER_OUTPUT 事件处理程序,在 ALV 表的输出之前或之后执行自定义校验逻辑。 3. 在这些事件处理程序中,可以调用定义的自定义函数模块来执行数据校验。通过将 ALV 表的数据传递给这些函数模块,你可以对数据进行校验,并根据校验结果决定是否允许数据的修改。如果校验失败,可以通过向用户显示错误消息、高亮显示错误行或阻止修改操作来提醒用户。 4. 在 ALV 报表的输出或修改事件中,你还可以根据需要调整和修改 ALV 表的格式和显示。例如,你可以通过修改字段属性、调整列宽或添加新的 ALV 功能按钮来满足特定的需求。 通过以上步骤,你可以在 SAP ABAP ALV 报表中成功添加自定义校验逻辑。这将提高报表数据的质量和准确性,并为用户提供更好的用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雨天行舟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值