外协库存转换542-541带序列号;两步调用BAPI报错:序列号XXX的库存数据不适合移动!

在SAP中处理序列号管理的库存转移时,遇到一个问题:从542外协库存转为541自有库存时,报错‘序列号XXX的库存数据不适合移动!’。经过测试,发现在MIGO过账后立即进行541转储会报错,但稍等片刻或不退出MIGO则能成功。通过调试标准程序,发现是由于全局内表gt_eqbs_buf未清除导致的问题。解决方法是在调用BAPI前清空该内表,从而成功执行库存转换。
摘要由CSDN通过智能技术生成

背景:

最近项目上有个需求,需要将A供应商的物资转给B供应商。业务顾问给出的方案时,先将A供应商的物资走542外协转为自有,再将自有物资541转给B供应商,若541转储失败,自动冲销542凭证即可。

问题:

乍一看是个很正常的需求,但是在实际开发完测试的过程中发现了个很奇葩的问题。若物料启用序列号管理,542转储时是正常的,可以成功生成物料凭证。但在调用BAPI进行541自有转外协是会报错:序列号XXX的库存数据不适合移动!

测试:

为确认是否是我BAPI参数传值有问题,我进行了如下测试:

  1. 在前台MIGO将542转储过账后(通过BAPI过账)的结果进行541自有转外协,可以成功;
  2. 先在MIGO做542外协转自有,成功过账后,不退出MIGO,切换移动类型为541,直接做541自有转外协,报错:序列号XXX的库存数据不适合移动!;
  3. 先在MIGO做542外协转自有,成功过账后,退出MIGO,重新进入做541自有转外协,可以成功。

思路:

由测试结果可以推断,我BAPI参数的传值应该是没问题的。我推断可能是有以下几种可能造成的:

  1. MIGO过账后的数据库表的更新都是在更新进程中的,可能是两次操作的间隔过短,底表的数据还未更新,所以会在第二次过账时报错;(在调用两次BAPI之间等待20S,发现依旧报错,故排除此可能);
  2. MIGO过账后序列号的某个全局变量没情况,或是有缓存导致的。在BAPI中打了下消息断点,跟了下标准程序,发现报错是在如下位置出现的:

调试发现,EQBS的数据,还是542之前的数据,并不是最新数据,于是找了下EQBS赋值的地方,发现在如下位置:

调试发现:内表gt_eqbs_buf仍是542转储前的数据;由此可见,报错是因为全局内表gt_eqbs_buf没情况导致的。查了下gt_eqbs_buf的引用范围清单,发现了如下函数:

试着在调用BAPI前调用了下这个函数,果然,过账成功了。这种问题说实话,是真没想到的,可能SAP关于序列号这部分的功能还是有些Bug的,毕竟花费我几个小时的时间,值得浅浅记录一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小胖子写代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值