SAP 小技巧设置表的代理视图

作者:ABAP技巧与实战 约 6 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, CO, Data Engineering, FI, MM, S/4HANA, SD, WM, 仓库管理, 开发, 数据工程, 物料管理, 财务, 销售分销

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

前言

S4基于ECC做了很多底层改进,其中一个很重要的改进就是把物料凭证的底层表从MKPF/MSEG调整到MATDOC .

具体表现为

,从DB02的SQL编辑器中无法读取MKPF/MSEG表,但是SE16N中可以读取.原因在于S4为了重用ECC的表,在ABAP访问数据库环节添加了一个表的代理视图的概念

所有对存在代理视图的表的访问,都会用替换为访问代理视图

**本文主要介绍表的代理视图的相关信息及实现方式**

S4中底层结构改进

这个NOTES详细介绍了和物料凭证及库存相关的底层存储的改进,感兴趣的可以找来看看.

2206980 - Material Inventory Managment_ change of data model in S4HANA

代理表示例

以物料凭证抬头表MKPF为例,我们看看代理对象对表的影响

• 事务代码SE16N可以查看代理对象名称,可以查询到记录 如图一

• SQL编辑器直接访问MKPF表,无法查询到数据,如图二

• SQL编辑器访问MKPF的代理对象 NSDM_V_MKPF 可以获取数据,如图三

如果你用MARD 做上面的测试, 会发现更有趣的现象, 用SQL编辑器可以读取MARD内容,但仅仅库存数量字段如LABST 值为0.

SAP 小技巧设置表的代理视图 - 封面图
SAP 小技巧设置表的代理视图 - 封面图

图一

SAP 小技巧设置表的代理视图 - 封面图
SAP 小技巧设置表的代理视图 - 封面图

图二

SAP 小技巧设置表的代理视图 - 封面图
SAP 小技巧设置表的代理视图 - 封面图

图三

表代理对象的应用

S4调整了物料凭证的底层存储,如果没有代理对象的概念,调整使用到物料凭证表的程序的工作量会非常巨大.

SAP采用了一个很巧妙的方式解决了这个问题

• 保留源表MKPF/MSEG的数据定义

• 使用代理对象视图替换对MKPF/MSEG的访问

这样就确保了所有ABAP层面的程序无需改动(除非该程序用native SQL 直接访问数据库)

这个思路也可以应用于升级项目:如果升级项目期望调整源表的数据存储,但希望延用原有的程序.可以对该表定义代理对象.用视图的访问替代表的访问

创建表的代理对象

S4中的表维护工具(SE11)没有开放修改代理对象字段,但我们可以直接修改DD02L表添加代理对象,

下面的步骤演示了怎么给表ZTIF001维护一个代理视图

_**01** _

**创建CDS视图**

用ECLIPS连接S4系统,创建一个CDS视图.CDS视图中的字段需要和源表一致.内容则可以任意从其它表获取.

SAP 小技巧设置表的代理视图 - 封面图
SAP 小技巧设置表的代理视图 - 封面图

_**02** _

**维护表的代理对象**

数据字典工具没有提供代理对象的维护入口. 可以直接更新表DD02L-VIEWREF 维护一个代理对象

SAP 小技巧设置表的代理视图 - 封面图
SAP 小技巧设置表的代理视图 - 封面图
SAP 小技巧设置表的代理视图 - 封面图
SAP 小技巧设置表的代理视图 - 封面图

_**03** _

**演示数据**

CDS视图相关表的演示数据

表ZTIF001的原始数据

SAP 小技巧设置表的代理视图 - 封面图
SAP 小技巧设置表的代理视图 - 封面图

表ZTIF001_BACK的原始数据

SAP 小技巧设置表的代理视图 - 封面图
SAP 小技巧设置表的代理视图 - 封面图

**_04_ **

**实现效果**

SE16N显示

ZTIF001的代理对象似乎未生效.可能的原因:ABAP底层缓存机制?

SAP 小技巧设置表的代理视图 - 封面图
SAP 小技巧设置表的代理视图 - 封面图

ZTIF001_BACK的代理对象生效了. ZTIF001_BACK是ZTIF001维护代理对象后复制产生的表.

SAP 小技巧设置表的代理视图 - 封面图
SAP 小技巧设置表的代理视图 - 封面图

_**05** _

**程序读取**

用ABAP程序读取表,数据内容等同于SE16N读取的.

SAP 小技巧设置表的代理视图 - 封面图
SAP 小技巧设置表的代理视图 - 封面图
SAP 小技巧设置表的代理视图 - 封面图
SAP 小技巧设置表的代理视图 - 封面图

_**06** _

**重激活表**

用SE11重新激活表ZTIF001.代理对象生效

SAP 小技巧设置表的代理视图 - 封面图
SAP 小技巧设置表的代理视图 - 封面图

总结

代理视图是S4兼容ECC代码的产物,所有和库存相关的表都使用了代理视图.

写代码的时候要注意

• 如果使用native SQL访问数据,或者外部程序通过SQL访问数据,需要使用表的代理对象视图访问.

• 如果在ABAP中访问,则二者皆可

还有一个注意事项,因为代理视图会改变表的访问方式.

比如读取MARC会替换为读取 NSDM_V_MARC . 该视图仅仅补充了MARC中的库存相关字段内容.

**如果程序仅仅想访问MARC的主数据部分内容. 可以通过视图V_MARC_MD

访问表,这样会很大程度的改进性能.(SAP官方NOTES中也提到这一点)**

**约定**

如果你对这篇文章感兴趣,请帮忙点赞,在看,分享.

( **如果你真的喜欢这篇文章,请记得回来打个赏,作为支持我继续下去的动力,这是一个正反馈过程.

越多的人打赏,作者越有动力分享,读者就能享受更多的福利.毕竟打赏的金额富不了我,穷不了你,却能支持这个公众号长久发文.** )

请微信联系管理员

syjf1976

sharry_xlp

Yannick_Duan

申请进入公众号讨论群提问或者参与话题讨论

ABAP技巧与实战

关于作者:ABAP技巧与实战

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

来源说明:本文内容由「SAP小技巧设置表的代理视图.md」整理生成,仅用于内部技术分享与学习交流。