自动锁库解锁服务'此操作对该事务的状态无效'分析原创
金蝶云社区-angen
angen
10人赞赏了该文章 1,249次浏览 未经作者许可,禁止转载编辑于2023年03月17日 08:58:07

    在金蝶云星空2023年4月版本前,自动锁库解锁服务在极端数据情况下会报'此操作对该事务的状态无效。',比如在发货通知单审核操作上配置了自动锁库解锁服务后,就可能会出现此提示,如下图1-1所示:

image.png

图1-1


    通过服务器上的日志文件可以看到有如下1-2所示的日志:

image.png

图1-2


    经分析这种情况是异常数据导致锁库时超锁了,自动锁库解锁服务在锁库时会判断可锁数量,但此数量是依据即时库存上的库存数量(自动锁库解锁服务配置界面却又是配置了基本单位数量),当即时库存中的库存数量和库存基本数量比例与单据上的数量和基本数量比例有差别时,就可能出现此问题。举个例子,如果发货通知单第一行和第二行分录是同一库存维度(物料,仓库,批号等都相同)且第一,第二行分录数量分别为105和35,基本单位数量分别为2205,735,数量和基本单位数量汇总起来是140:2940,当即时库存的数量与基本数量比例有异常(这个可能是尾差问题或者客户切换了基本单位的精度导致的),比如即时库存的数量和基本单位数量为140:2939.999997。此时发货通知单审核时就会报上面'此操作对该事务的状态无效'的错误提示,发货通知单上的数量和即时库存数量如下图2-1和2-2所示:

image.png

图2-1


image.png

图2-2


    为什么会这样呢?这主要是因为发货通知单物料编码为'1004000075'的两条分录一共要锁2940个基本单位数量(锁库服务只需要配置基本单位数量),通过即时库存中的基本单位与库存单位,服务自动算出要锁的2940个库存基本单位数量是对应了140个库存数量,而这140个库存数量在即时库存中是刚好够的,但基本单位数量又是不够的,即时库存中还差0.000003个基本单位数量,即锁库成功后将会形成即时库存数量为0,基本单位数量为-0.000003的结果,自动锁库解锁服务检测一旦有这样的数据结果会直接回滚事务(有异常数据时锁库中的事务不抛异常,也不提交事务),然后外层事务(BOS平台对审核操作上的挂的所有服务会有一个外层事务,由于历史原因,外层事务和锁库中的事务为同一个,锁库中的事务使用了语句TransactionScopeOption.Required)检测不到内部锁库事务的异常,外层事务在锁库事务终止后(内部锁库事务如果不提交,则会在Dispose方法中终止事务,即事务为终止状态:Transaction.Current.TransactionInformation.Status 被置为TransactionStatus.Aborted)还想查询相关锁库信息并更新单据上的一些锁库标识字段时就会抛 '此操作对该事务的状态无效'。

    综上所述:客户应当避免这种即时库存异常数据的发生,后续版本(预计在2023年4月补丁)中将对此提示做出优化,后续版本的提示信息如下图3-1所示:image.png

    图3-1

图标赞 10
10人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!