🌵 SAP 内外码概述与转换

首页 / 🐽 SAP / 正文

🐧 转载文章

SAP 内外码概述与转换

原文链接

前人栽树,后人乘凉,作者总结的很好,把自己第一次遇到的坑基本上都提到了😭

🎏 前言

​ SAP 的表设计,有些字段是有内外码关系的,当我们在功能开发说明书中,写取值逻辑时,如果忽略了内外码的转换,就可能出现,逻辑写的没问题,但是就是取不到值;或者 BAPI 入参赋值没问题,但是,就是无法正确调用,这时,我们就要考虑内外码转换的问题了。


🥝 概念

在 SAP 系统中,实际已内码作为存储,外码作为显示的字段

  • 外码:在系统操作界面直接查看到的值
  • 内码:真正在表里存储的值

🍉 分析

我们以 PS 模块中的 WBS 字段,做一下说明

WBS 是典型的内外码转换的字段,如上图,我们使用 CJ20N 查看到的是:C/0000-034-4

可是,当我们使用存储 WBS 的表 PRSP 中查看时,我们查看到的值是:00003044

这就是典型的有内外码转换关系的字段

可是有人问了?咦,我在表里查询的时候,咋就还是前台显示的字段呢?比如如下图所示,这是为什么呢?

​ 这实际上是 SAP 为了方便我们查看和校验,在 SE11SE16N 等查看透明表的事务码中,带了内外码转化的功能

如下图,当我们勾选了“存在检查转换”时,系统就会将内码转换为外码,进行显示了

是什么实现了内外码的转换?

对于 WBS 这个字段来说,是以下函数

  • CONVERSION_EXIT_ABPSP_INPUT
  • CONVERSION_EXIT_ABPSP_OUTPUT

​ 当我们使用 SE11 等查看表时,勾选“存在检查转换”,系统会根据相应字段,取到相应的转换函数,将内码转化成外码进行显示,如下图

当然下图是 SAP 标准代码,其实没必要深入研究,截图只是为了效果展示

​ 换句话说:在 SAP 的前台操作时,针对这类有内外码转换关系的字段,我们看到的是外码,实际上,SAP 已经在界面展示的程序中,调用了相关函数,并进行了转化。


🐷 注意事项

这里给大家分享一下,实际项目中,关于这个问题,非常容易犯错,而且经常犯错的几个点:
1. BAPI 的调用

我们在调用 BAPI 时,大多数情况下,赋值就得用内码

​ 比如上述举例的 WBS,在调用 WBS 相关 BAPI 时,得赋值 00003044,而不是 C/0000-034-4;那么这个时候,我们就需要用相关函数将外码,转化成内码,再给 BAPI 赋值


2. 写取值逻辑时,要注意取值

​ 这个原理和 1 差不多,当我们取值的时候,如果程序直接取 "PRPS-PSPNR",并放在内表中进行 loop,此时,很有可能取的是一堆数字的内码。然后,接着用 "C/0000-034-4" 等的外码值,进行相等或者不相等的判断,你测试时,会发现怎么都没法实现测试效果;万一 ABAP 顾问,和业务顾问都不了解这个点,那么,三个人也得郁闷一对半了。别问我曾经郁闷了多久。


3. BDC 和 BAPI 的区别

很多顾问在面试的时候,可能会被问到采用 BDCBAPI 的方式,到底有什么区别呢?

这个内外码的转换就是区别的一种

  • BDC 录屏的方式,本质上就是模拟人的前台操作,那么输入值的时候,得和人操作系统一样,应该输入外码,比如 WBS,我们输入的时候就得输入外码。
  • BAPI 调用赋值的时候,大多数时候需要用内码,也就是需要我们把外码转化成内码,再进行赋值处理。

4. 内外码转换函数的查找和测试

同样的,我们依旧以 WBS 为例,测试一下内外码转换函数的测试效果

函数的展示和执行事务码:SE37

​ 除了外码转内码,我们还有内码转外码的需求,比如我们自开发一个 WBS 查询的报表,用户不可能去看一堆数字。如下图:


可是除了 WBS,还有哪些字段具有内外码转换这一特点的呢?

常见的比如:

  • 语言:前台显示是 ZH,实际表里存的是 1;前台是 EN,实际存的是 E
  • 物料主数据上的“单位”,如下图,虽然前台录入时的值 BOT,但是如果你调用 BAPI,还是赋值 BOT 就会报错,应该赋值 BT

物料编号,内码显示物料编号有前导零,可是外码显示没有,如下图

img


我们不可能把所有字段都记住,以下方法,可以帮助大家看看字段有没有,内外码转储的特点:

​ 我们可以查看字段的数据类型,看看数据类型中,有没有转换例程,如果有就说明此字段涉及内外码转换;

双击转换例程,还能查看到相应转换函数:

img

其他字段,大家可以自行研究测试

您阅读这篇文章共花了:
打赏
评论区
头像
文章目录