玩转SAP ABAP|写出你的ALV报表

2021-10-30 18:39发布


          点击此处--->   EasySAP.com 群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


如果你已经能够独立完成了ABAP 的“Hello World”程序,发现自己有一定的逻辑思维能力,那么建议你先阅读一下SAP BC400的课程,详细了解一下程序的处理逻辑。(毕竟我们这个课程是玩转系列,不是系统教学。需要的小伙伴可以在文末关注本人微信,索要课程),接下来我们就可以来玩一个更实用的小程序,采用这个程序,可以完成SAP 80%左右的业务需求



SAP ALV说白了就是一个数据列表,它的基本逻辑就是“查询-取值-输出”, 中涉及到两个小知识点,就是了解1.SAP内表处理逻辑 2.数据库查询逻辑。





Step by Step


STEP 1 模板代码复制(可在文末添加笔者微信索取)。




STEP2、修改程序代码 a.选择屏幕字段  b.修改取值逻辑 c.输出结构



STEP3 修改报表抬头信息。



STEP4 保存、检查和激活程序。如果您有任何错误,它们将显示在页面底部。




STEP 5如果未显示任何错误,您可以运行程序。



STEP6: 接下来的屏幕会输出标题和字符串。

选择屏幕

输出结果

相关知识点


1 内表处理逻辑

1 了解内部表

•内部表( Internal table )是一个包含相同类型的数据对象的序列。

    内部表只在程序运行过程中存在。

•内部表的用途:

    –暂时存放从数据库表中读取的数据,以便作进一步的处理

    –暂时存放用于显示的清单数据

    –作为数据缓冲用于同其他程序进行数据交换


2 内部表的特性

•内部表的行数不是预先定义的,而是动态增长的(每次增长8K)。

•内部表的行类型(LINETYPE)可以是任意一种ABAP数据类型。

•内部表的类型:

    –标准表(Standard tables),有一个线性索引,主要通过索引访问。

    –排序表(Sorted tables),定义了主键,可以通过主键和索引访问。

    –哈希表(Hashed tables),没有索引,只能通过主键访问。


3 内部表的处理关键字

•APPEND:将工作区的内容添加到内部表的末尾

•INSERT:将工作区的内容添加到内部表指定的位置(行号)

•COLLECT:比较非数值型字段,将数值型字段累加到内部表中

•MODIFY:将工作区的内容覆盖内部表指定的行

•DELETE:从内部表中删除指定的行

•LOOP AT:将内部表的数据逐行读到工作区中

•READ TABLE:将内部表的某一特定行的数据读到工作区中

•SORT:对内部进行排序

•CLEAR:清除工作区的内容

•REFRESH:删除内部表中的所有记录


系统变量SY-TABIX可以表示内部表当前所在行







2 数据库查询逻辑


1两种方式访问数据库

•在ABAP程序中,可以通过两种方式访问数据库

    –OPEN SQL:标准SQL的子集,与ABAP完全集成,具有数据库无关性,数据库接口会自动将其转换为所使用的数据库的标准SQL。

    –NATIVE SQL:与数据库相关,使用数据库提供的标准SQL,不经过数据库接口的语法检查和转换。

•避免使用NATIVE SQL


2 OPEN SQL访问介绍

•OPEN SQL只包含数据操作语言(DML),数据定义语言(DDL)通过ABAP字典对象控制。

•通过OPEN SQL可以执行的操作:SELECT、UPDATE、INSERT、DELETE、MODIFY

•可以通过系统变量SY-SUBRC判断操作成功与否,SY-SUBRC = 0表示执行成功,SY-SUBRC <> 0表示执行不成功,更详细的信息请参考在线帮助文档。


SAP SQL基本格式

•SELECT子句用于确定读取什么数据–结果包含那些字段–需要读取单条记录还是多条记录(SINGLE)–结果是否可以包含重复记录(DISTINCT)

•INTO子句表示读取的数据放入内存的什么位置(变量、工作区、内部表)•FROM子句表示数据源(表或者视图)

•WHERE子句表示记录必须满足的条件





SAP SQL读取方式

可以使用SELECT SINGLE读取单条记录,要确保读出的记录是唯一的,需要在WHERE语句中判断所有主键。

如果不使用SINGLE关键字,则读取所有满足WHERE条件的记录,读取方式有两种:

    –以循环的方式逐行读入目标区域,需要有ENDSELECT语句配合使用。

    –使用SELECT … INTO TABLE语句,一次将所有满足条件的记录读入内部表中,没有使用循环,不需要ENDSELECT这种方式读取数据比前一种有更高的效率。

INTO子句中,可以使用CORRESPONDING FIELDS OF,系统只填充有相同名称的字段,如果不使用,则按照从左向右的顺序填充。

在字段清单和WHERE子句中,只需指定字段名称,不需指定表名称。WHERE子句中可以使用ANDOR实现复杂的逻辑条件。

SELECT *语句读取透明表的所有字段,可以没有INTO子句,但是必须使用TABLES声明透明表。


SAP SQL表链接方法

•可以使用JOIN连接多个透明表进行查询。

    –INNER JOIN

    –LEFT OUTER JOIN

    –RIGHT OUTER JOIN

•透明表可以使用别名。

字段如果只存在于一个表中,不需要指定表名称


<扫描下面二维码,可添加笔者个人微信。任何问题也可直接在下方评论区留言,将一一解答>



点我留言(小程序功能,可能需要授权第一次使用,设置错误了)

赞赏支持