ABAP BCD_BADDATA错误分析

Posted 狗尾巴草_lan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ABAP BCD_BADDATA错误分析相关的知识,希望对你有一定的参考价值。

曾经有人说:所有SAP里解决不了的问题都找原厂。好吧,不必猜测,不必怀疑,不必苦思冥想,这是我说的,哈哈哈哈哈。俗话说百密必有一疏,没想到这次就碰壁了。

那,事情经过是这样的。。。

很久很久以前,从前从前,有个人爱你很久,但偏偏风渐渐把距离吹得好远,咳咳,不好意思跑题了,再来一次。

很久很久以前,我们有个接口,是将SAP ERP的采购订单同步至SAP SRM系统,接口方式是IDOC+PO,即ERP系统在采购订单保存时将数据用IDOC方式发送至PO,然后PO再发送给SRM系统。

突然,某年某月某时,业务顾问说测试机接口不通了,采购订单皆推送不到SRM系统了,SRM查看日志有如下DUMP:

下面是曲曲折折的调查过程

第一步 照例查看源代码

按部就班查看字段类型如下:

字段数据元素类型长度小数位
ZRC_QUANZERC_QUANQUAN133
QUANTITYBBP_MNGQUAN133
UEBTOZE_UEBTODEC31

 

 

 

 

怎么看?是不没问题?嗯,我也觉得没问题,可怎么就DUMP呢~呢~~呢~~~?

于是我写了个测试程序,字段值同该DUMP时变量值一致。

执行,输出结果如下图:

好的,没有DUMP。嗯,知道了,排除类型问题。

第二步 搜索SAP官网看有没有相关问题

翻了一圈,看到有个提问下SAP回答检查SM59连接配置,需要将目标系统的通信类型设置成Unicode。

好的,检查配置,因为生产机没有出现问题,而生产机配置和测试机配置还真不一样,生产机配置的是非Unicode,那不管三七二十一,先将测试机配置改成和生产机一模一样。顺便我们还检查了PO上的配置,也没发现异常。

再次测试,依然DUMP。好的,这是个坑,因为我们使用的SAP版本是S/4 HANA,且是Unicode系统(可在系统—>状态查看)。SAP系统在早期版本(ERP 6.0 SR2之前)支持Unicode及非Unicode字符集(也称Nonunicode),在较新的版本(ERP 6.0 SR3之后)则只支持Unicode字符集,所以我们系统连接应该配置成Unicode。

这步调查的结果是对咱没任何帮助,只是帮助BASIS将生产机配置改正确了。

第三步 是时候发Message给SAP了

所有SAP里解决不了的问题都找原厂,秉承着这个宗旨,于是我们发了封Very High的Message给SAP,不得不夸赞下SAP的响应速度,11分钟后SAP回复了:

我们依然坚持不懈:

SAP再次回复:

居然被SAP拒绝了。。。。。。怎么办?只能靠我们自己了。

第四步 开发人员尝试注释该行代码

开发人员决定暂时舍弃这行代码,结果再次测试出现了新的DUMP,如下图:

查看源码:

这个INSERT语句没问题,我sure的不要不要的,所以我陷入了思考(请自行脑补沉思者雕塑)。

终于迎来了我的高光时刻,叮铃铃呤,欢迎我闪亮登场,鼓掌!

这边又有一句至理名言:没有Money是万万不能的,但DEBUG是万能的。想必你们也猜到了这句也是我说的吧,哈哈哈哈哈哈。当我在我的知识海洋里畅游寻找答案时,“不忘初心”猛然跃入脑海,于是我决定从头开始,一点点DEBUG跟源码。

(Wei Wan Dai Xu)

 

 

 

 

以上是关于ABAP BCD_BADDATA错误分析的主要内容,如果未能解决你的问题,请参考以下文章

如何使用事务码SMICM分析ABAP代码发起的HTTP请求的错误ICM_HTTP_SSL_PEER_CERT_UNTRUSTED

ABAP中,用Ranges定义的内表,由于数据量大导致运行错误

ABAP性能1 | LOOP嵌套LOOP代码分析(转)

ABAP 内表数据汇总问题 求助

使用ABAP CDS views创建一个分析模型并设置参数

ABAP代码静态分析工具SQF - Support Query Framework