生产机遇到个问题,EWM跟ECC集成的。
在EWM进行收货,触发ECC过账。
EWM收货完,ECC查看的时候,发现并没有成功。
然后SMQ2查看Qrfc,就是上次写的那个debug系列里提到的方法。
查看报错:
负数,哪儿来的负数,
想VL33N查看下单据,结果dump,应该是那个字段不允许负数,显示的时候dump了。
然后查看下LIPS 和LIKP表,发现毛重字段出现了负数。
因为交货单都是通过接口传输创建的,那边接口没控制住,导致出现了负数,也不知道怎么写进去的。
然后查看对应的ECC BAPI:
SPE/INB_DELIVERY_CONFIRM_DEC
然后去debug看了下,定位报错位置的方法用的最简单粗暴的
然后F8 F8的看就行了,很快就能定位到位置
之后我们在Q系统进行模拟:
也是接口过来一个交货单,毛重负数,EWM进行收货,发现……
Q系统没出问题,而且lips表的负数还自动改为了EWM传过来的正数。
这就奇怪了,为啥P系统有问题,Q就没问题?
有代码没传吗?
后来我对比了下P系统和Q系统的这两条数据。
发现P系统是多个行项目,而且是部分收货,只对其中一行做了收货,而且毛重是正数的那条正常行项目进行的收货,然后才报的错。
而Q数据是单个行项目,就这一个行项目,而且毛重是负数。
那重新做数据,Q上三个行项目,其中两条毛重是负数,一条毛重是正数。然后分别对三个行项目进行收货。
问题重现了……
之后又试了一下,多个行项目,存在负数,然后一起收货的情况,没出现问题,EWM传过来的数据会覆盖掉ECC 负数的毛重。
那这么看就是说,ECC多个行项目,如果EWM收货的时候,传过来数据,就以传过来的数据为准,如果没传过来,会取ECC内数据,然后全部参与校验。
位置在这里:
WS_DELIVERY_UPDATE_2
VBPOK_INTERFACE_CHECK
最后处理方式其实也简单,EWM前台收货的时候,把有负数的行项目先进行收货,或者全部一起收货的话,就会直接覆盖掉。
如果前台处理不了,就在这里把vbpok_tab内表的数据,debug的时候把负数改一下,然后继续执行就行了。
领取专属 10元无门槛券
私享最新 技术干货