EWM跟ECC集成的。

在EWM进行收货,触发ECC过账。


EWM收货完,ECC查看的时候,发现并没有成功。


然后SMQ2查看Qrfc,就是上次写的那个debug系列里提到的方法。


查看报错:

EWM收货ECC交货单校验逻辑问题_SAP刘梦_新浪博客_bug

负数,哪儿来的负数,


想VL33N查看下单据,结果dump,应该是那个字段不允许负数,显示的时候dump了。

EWM收货ECC交货单校验逻辑问题_SAP刘梦_新浪博客_java_02

然后查看下LIPS 和LIKP表,发现毛重字段出现了负数。


因为交货单都是通过接口传输创建的,那边接口没控制住,导致出现了负数,也不知道怎么写进去的。


然后查看对应的ECC BAPI:

SPE/INB_DELIVERY_CONFIRM_DEC

EWM收货ECC交货单校验逻辑问题_SAP刘梦_新浪博客_spring boot_03

​​然后去debug看了下,定位报错位置的方法用的最简单粗暴的

EWM收货ECC交货单校验逻辑问题_SAP刘梦_新浪博客_项目管理_04

​然后F8 F8的看就行了,很快就能定位到位置

EWM收货ECC交货单校验逻辑问题_SAP刘梦_新浪博客_python_05

之后我们在Q系统进行模拟:

也是接口过来一个交货单,毛重负数,EWM进行收货,发现……

Q系统没出问题,而且lips表的负数还自动改为了EWM传过来的正数。


这就奇怪了,为啥P系统有问题,Q就没问题?

有代码没传吗?


后来我对比了下P系统和Q系统的这两条数据。


发现P系统是多个行项目,而且是部分收货,只对其中一行做了收货,而且毛重是正数的那条正常行项目进行的收货,然后才报的错。


而Q数据是单个行项目,就这一个行项目,而且毛重是负数。


那重新做数据,Q上三个行项目,其中两条毛重是负数,一条毛重是正数。然后分别对三个行项目进行收货。


问题重现了……


之后又试了一下,多个行项目,存在负数,然后一起收货的情况,没出现问题,EWM传过来的数据会覆盖掉ECC 负数的毛重。


那这么看就是说,ECC多个行项目,如果EWM收货的时候,传过来数据,就以传过来的数据为准,如果没传过来,会取ECC内数据,然后全部参与校验。


位置在这里:

EWM收货ECC交货单校验逻辑问题_SAP刘梦_新浪博客_项目管理_06

WS_DELIVERY_UPDATE_2

VBPOK_INTERFACE_CHECK

EWM收货ECC交货单校验逻辑问题_SAP刘梦_新浪博客_python_07

最后处理方式其实也简单,EWM前台收货的时候,把有负数的行项目先进行收货,或者全部一起收货的话,就会直接覆盖掉。


如果前台处理不了,就在这里把vbpok_tab内表的数据,debug的时候把负数改一下,然后继续执行就行了。




QQ群 :SAP干货铺,  群号:775662808