聊聊 SAP 内存和 ABAP 内存

作者:斌将军 约 5 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, Data Engineering, 开发, 数据工程
聊聊 SAP 内存和 ABAP 内存 - 封面图
聊聊 SAP 内存和 ABAP 内存 - 封面图

**1**

**区别与联系**

聊聊 SAP 内存和 ABAP 内存 - 封面图
聊聊 SAP 内存和 ABAP 内存 - 封面图

SAP内存(SAP Memory)和ABAP内存(ABAP

Memory),两者都可用于编程中的数据传递,将数据通过ID进行绑定,之后在其他程序中通过ID获取。

**1.1**

**语法区别**

SAP内存通过SET/GET PARAMETER,来抛接内存值,如:

SET PARAMETER ID 'MAT' FIELD p_matnr. GET PARAMETER ID 'MAT' FIELD p_matnr.

ABAP内存通过EXPORT/IMPORT,来抛接内存值,如:

EXPORT p_matnr TO MEMORY ID 'MAT'.IMPORT p_matnr FROM MEMORY ID 'MAT'.FREE MEMORY ID 'MAT'.

**1.2**

**作用范围区别**

在介绍作用范围区别之前,先引入三个概念,User Session、External Session 和 Internal Session。

当用户登录SAP就生成了User Session。

打开一个窗口界面,就产生了一个External Session,窗口关闭,则External Session释放。

SAP NW 7.0之前的版本,一次最多打开6个窗口,也就是6个External Session。之后的版本最多打开16个窗口。

聊聊 SAP 内存和 ABAP 内存 - 封面图
聊聊 SAP 内存和 ABAP 内存 - 封面图

在一个窗口内,通过CALL TRANSACTION,SUBMIT等方式调用程序,则会自动打开Internal

Session,此处会根据调用打开多个Internal Session。当窗口关闭时,则释放该External Session下的所有Internal

Session。

用户退出登录,则关闭所有External Session和Internal Session。

理解了这三个概念,现在回到主题,上文的ABAP内存是在Internal Session之间进行数据传递,而SAP内存是在External

Session之间进行数据传递,当然也可以传数据到Internal Session中。

通俗的讲,ABAP内存是在同一个窗口内运行的程序之间,进行数据传递。而SAP内存,可以在多个窗口之间进行数据传递。如下图所示

聊聊 SAP 内存和 ABAP 内存 - 封面图
聊聊 SAP 内存和 ABAP 内存 - 封面图

**2**

**代码举例**

聊聊 SAP 内存和 ABAP 内存 - 封面图
聊聊 SAP 内存和 ABAP 内存 - 封面图

**2.1**

**ABAP内存**

在主程序抛数据

聊聊 SAP 内存和 ABAP 内存 - 封面图
聊聊 SAP 内存和 ABAP 内存 - 封面图

在被调程序中接收数据

聊聊 SAP 内存和 ABAP 内存 - 封面图
聊聊 SAP 内存和 ABAP 内存 - 封面图

而如果在另外一个窗口中运行YTEST007是不会收到数据的

聊聊 SAP 内存和 ABAP 内存 - 封面图
聊聊 SAP 内存和 ABAP 内存 - 封面图

**2.2**

**SAP内存**

在主程序Y001中抛SAP内存

聊聊 SAP 内存和 ABAP 内存 - 封面图
聊聊 SAP 内存和 ABAP 内存 - 封面图

在另一个窗口调用Y002接内存

聊聊 SAP 内存和 ABAP 内存 - 封面图
聊聊 SAP 内存和 ABAP 内存 - 封面图

**2.3**

**标准SAP内存ID**

在SAP中,定义了很多SAP内存ID,存放在TPARA表中,通常也与数据元素绑定

聊聊 SAP 内存和 ABAP 内存 - 封面图
聊聊 SAP 内存和 ABAP 内存 - 封面图

如此,可以通过SAP抛内存的方式,为初始屏幕中的字段填值

"--------------------@斌将军--------------------DATA:lv_matnr TYPE mara-matnr.

lv_matnr = '2000000585'.

SET PARAMETER ID 'MAT' FIELD lv_matnr.

CALL TRANSACTION 'MM03'." AND SKIP FIRST SCREEN."--------------------@斌将军--------------------

自动填上物料

聊聊 SAP 内存和 ABAP 内存 - 封面图
聊聊 SAP 内存和 ABAP 内存 - 封面图

搭配AND SKIP FIRST SCREEN,就自动打开对应的物料视图。

是不是很熟悉?没错,这就是我们平时在报表中常用的穿透。

对于SAP内存传值的应用还很多。再比如,当批导上传EXCEL时,为了能记录上次导入的文件地址,避免重复选择文件,通常在文件后边加上MEMORY ID

此应用也是使用了SAP内存传值

聊聊 SAP 内存和 ABAP 内存 - 封面图
聊聊 SAP 内存和 ABAP 内存 - 封面图

上传文件地址

聊聊 SAP 内存和 ABAP 内存 - 封面图
聊聊 SAP 内存和 ABAP 内存 - 封面图

如果此时用接内存的方式,运行程序就能得到批导程序上传的文件路径

聊聊 SAP 内存和 ABAP 内存 - 封面图
聊聊 SAP 内存和 ABAP 内存 - 封面图

当然此时运行其他批导程序,而且MEMORY ID相同,则其他程序也会自动带出上一个批导程序的文件路径

聊聊 SAP 内存和 ABAP 内存 - 封面图
聊聊 SAP 内存和 ABAP 内存 - 封面图

所以内存传值也可以用在一些个性化细节的需求开发上。以上就是关于SAP内存和ABAP内存的介绍。

**** —— ** 希望本篇文章对您有所帮助 ** —— ** **

斌将军

关于作者:斌将军

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

来源说明:本文内容由「聊聊SAP内存和ABAP内存.md」整理生成,仅用于内部技术分享与学习交流。