通过ENQUEUE_READ判断单据是否被锁定
使用场景#
公司的外向交货单需要传到WMS进入出库操作,传输成功后调用BAPI外向交货单的一个状态,如果不判断单据是否被锁定,那么下传wms成功后改变单据状态时就会报错,进而导致状态修改失败,从而导致wms和SAP数据不一致的问题。
解决方式#
通过ENQUEUE_READ函数判断某个单据是否被锁定,如果被锁定了就不进行下传操作
参数设置:
主要有四个参数:gname
表示锁定的表,garg
表示锁定的参数,通常由主键构成,gclient
集团,通常传输sy-mandt即可,guname
用户名,留空即可
CALL FUNCTION 'ENQUEUE_READ'
EXPORTING
gclient = sy-mandt
gname = 'LIKP'
garg = lv_garg
guname = ''
TABLES
enq = enq
EXCEPTIONS
communication_failure = 1
system_failure = 2
OTHERS = 3.
现在需要确认的时garg这个参数的数据,举个例子:我要判断销售订单是否被锁定,以下步骤:
-
可以任意打开一个销售订单进入编辑状态
-
SM12 查看当前用户获取的锁对象信息
根据锁对象查看加锁时的参数
- SE11 查看锁对象
那么这个garg
参数构成就是集团编号加上销售订单号
lv_garg = |{ sy-mandt }{ lwa_data-vbeln }|.
通过enq内表判断是否被锁定,如果enq内表为空表示没有被锁定,不为空表示当前单据被锁定,里面有详细信息
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构