玩转 SAPABAP 写出你的 ALV 报表

作者:ABAP技巧与实战 约 7 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, 开发
玩转 SAPABAP 写出你的 ALV 报表 - 封面图
玩转 SAPABAP 写出你的 ALV 报表 - 封面图

[ ABAP 技巧与实战 ](javascript:void\(0\);)

编者荐语:

我之前写的其它公众号文章,没有考虑受众的ABAP基础. 这里推荐一个朋友的文章,适合想学习ABAP的受众

以下文章来源于故事与茶 ,作者故事与茶

玩转 SAPABAP 写出你的 ALV 报表 - 封面图
玩转 SAPABAP 写出你的 ALV 报表 - 封面图

**故事与茶** . 热爱工作又不能去上班的时候,不妨找个地方来一起玩工作。

** “ ** 如果你已经能够独立完成了ABAP 的“Hello World”程序 ,发现自己有一定的逻辑思维能力,那么建议你先阅读一下SAP

BC400的课程,详细了解一下程序的处理逻辑。(毕竟我们这个课程是玩转系列,不是系统教学。需要的小伙伴可以在文末关注本人微信,索要课程),接下来我们就可以来玩一个更实用的小程序,采用这个程序,可以完成SAP

80%左右的业务需求 。 ** ” **

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

2.数据库查询逻辑。

Step by Step

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

玩转 SAPABAP 写出你的 ALV 报表 - 封面图
玩转 SAPABAP 写出你的 ALV 报表 - 封面图

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

玩转 SAPABAP 写出你的 ALV 报表 - 封面图
玩转 SAPABAP 写出你的 ALV 报表 - 封面图

STEP3 **修改报表抬头信息。**

玩转 SAPABAP 写出你的 ALV 报表 - 封面图
玩转 SAPABAP 写出你的 ALV 报表 - 封面图
玩转 SAPABAP 写出你的 ALV 报表 - 封面图
玩转 SAPABAP 写出你的 ALV 报表 - 封面图

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

玩转 SAPABAP 写出你的 ALV 报表 - 封面图
玩转 SAPABAP 写出你的 ALV 报表 - 封面图

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

玩转 SAPABAP 写出你的 ALV 报表 - 封面图
玩转 SAPABAP 写出你的 ALV 报表 - 封面图

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

**选择屏幕**

玩转 SAPABAP 写出你的 ALV 报表 - 封面图
玩转 SAPABAP 写出你的 ALV 报表 - 封面图

输出结果

玩转 SAPABAP 写出你的 ALV 报表 - 封面图
玩转 SAPABAP 写出你的 ALV 报表 - 封面图

相关知识点

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可以表示内部表当前所在行**

**

**

玩转 SAPABAP 写出你的 ALV 报表 - 封面图
玩转 SAPABAP 写出你的 ALV 报表 - 封面图
玩转 SAPABAP 写出你的 ALV 报表 - 封面图
玩转 SAPABAP 写出你的 ALV 报表 - 封面图
玩转 SAPABAP 写出你的 ALV 报表 - 封面图
玩转 SAPABAP 写出你的 ALV 报表 - 封面图

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表示执行不成功,更详细的信息请参考在线帮助文档。

** 3 ** SAP SQL基本格式

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

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

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

玩转 SAPABAP 写出你的 ALV 报表 - 封面图
玩转 SAPABAP 写出你的 ALV 报表 - 封面图

** 4 ** SAP SQL读取方式

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

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

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

– 使用 SELECT … INTO TABLE 语句,一次将所有满足条件的记录读入内部表中,没有使用循环,不需要 ENDSELECT 。

这种方式读取数据比前一种有更高的效率。

• 在 INTO 子句中,可以使用 CORRESPONDING FIELDS OF

,系统只填充有相同名称的字段,如果不使用,则按照从左向右的顺序填充。

• 在字段清单和 WHERE 子句中,只需指定字段名称,不需指定表名称。 • WHERE 子句中可以使用 AND 或 OR

实现复杂的逻辑条件。

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

** 5 ** SAP SQL表链接方法

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

–INNER JOIN

–LEFT OUTER JOIN

–RIGHT OUTER JOIN

•透明表可以使用别名。

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

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

玩转 SAPABAP 写出你的 ALV 报表 - 封面图
玩转 SAPABAP 写出你的 ALV 报表 - 封面图

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

ABAP技巧与实战

关于作者:ABAP技巧与实战

企业信息化与 SAP 技术顾问,长期专注 SAP ABAP、FI/CO、MM、SD 等模块的技术分享与实战经验总结。查看更多介绍

来源说明:本文内容由「玩转SAPABAP写出你的ALV报表.md」整理生成,仅用于内部技术分享与学习交流。