在开发过程中,我们调用BAPI:BAPI_GOODSMVT_CREATE进行货物移动生成物料凭证时,出现了报错提示:“不能执行功能模块 MB_CREATE_GOODS_MOVEMENT”,如下图所示:
但也许我们通过调试,将传入BAPI的参数放到SE37中,直接使用该BAPI进行测试的时候,却能正常产生凭证,并不会出现上面的提示。于是我们又花了很多时间,逐个去核对传入的参数什么的有没有问题,去SAP官网查找对应的报错NOTE甚至怀疑是不是业务配置的问题。。。
其实这个问题的原因并不复杂,我们点开上面报错图中的“帮助”按钮,就可以看到问题的原因了,如下2图所示:
从上图大概可以看出,是因为程序在调用函数 MB_CREATE_GOODS_MOVEMENT时,重复调用了该函数,且上一次调用的时候,没有进行提交(COMMIT WORK),才导致的。
那么新的问题似乎来了,我们并没有直接调用 MB_CREATE_GOODS_MOVEMENT这个函数,为什么出现这个提示呢?其实这个问题不能理解,因为我们调用的货物移动BAPI:BAPI_GOODSMVT_CREATE的代码中调用了函数MB_CREATE_GOODS_MOVEMENT,如下图所示:
再联想到本次开发的需求,用户要求同时执行多个货物移动,当所有的货物移动都没有报错的时候,再统一提交或者回滚。正好就验证了本次报错的原因,多次间接调用函数MB_CREATE_GOODS_MOVEMENT,而没有在每次调用后进行提交导致。
至于要如何实现同时实现多个货物移动的统一提交和回滚,则不在本文讨论之中。