一
前言
最近发现常用的会计凭证冲销功能无法使用了. 对常见凭证冲销时会报错
在解决这个问题的过程,有了本文的内容.
本文主要介绍会计凭证冲销相关的BAPI函数
二
标准BAPI报错分析
标准BAPI 函数
BAPI_ACC_DOCUMENT_REV_POST
跟踪错误 RW 628 .
在BAPI 开始会执行类型检查逻辑,相关类别(包括 BKPF )都会触发BAPI报错. 执行这些检查的原因不明. 但客观上阻止了这个函数冲销大部分凭证.但FB08可以冲销这个报错的凭证
三
解决方式
BAPI函数无法冲销(也可以考虑强行去掉BAPI函数的凭证类别检查), 就只能采用BDC的方式冲销了. BDC可以用如下三种方式
自行录制BDC
使用标准函数CALL_FB08
POSTING_INTERFACE_REVERSE_DOC
其中CALL_FB08调用后无法获取冲销产生的新凭证号,
自行录制的BDC可以通过消息获取生成的凭证,但稳定性可能不足.
最终建议使用函数
POSTING_INTERFACE_REVERSE_DOC冲销会计凭证.
需要注意的是需要依次调用以下三个函数
POSTING_INTERFACE_START
POSTING_INTERFACE_REVERSE_DOC
POSTING_INTERFACE_END
四
凭证分类
根据目前的经验给会计凭证分了两类
标准会计凭证(通过前台或者业务过账产生的凭证)
清账会计凭证(使用清账程序产生的会计凭证)
其中清账会计凭证可以细分为
清账产生的凭证有凭证行, (剩余清账)
清账产生的凭证没有凭证行( 完全清账 )
清账凭证通过TCODE FBRA 清除清账信息.
剩余清账-清账产生新的凭证行
完全清账产生的凭证没有凭证行
对于清账产生凭证的冲销,需要先清除清账标记. 完全清账的,清除清账标记即可. 剩余清账的, 清除清账标记后, 还需要再次冲销凭证,
五
封装
基于上述分析把,会计凭证的冲销逻辑封装到函数Z_BC_CANCEL_FB中
先判断会计凭证类别(识别逻辑可能需要优化)
非清账凭证直接冲销
清账凭证先清除清账标记
对于剩余清账的凭证,存在新的凭证行, 则再次调用凭证的冲销.
总结
会计凭证的冲销本身逻辑不复杂. 因为标准BAPI函数的限制及清账凭证的特殊性, 才有了一些复杂性.
函数组FIPI整合了标准BDC调用产生会计凭证的函数. 这些函数中考虑BDC过程中的所有可能的屏幕逻辑, 比自行录制的BDC好用很多 .
THE
END
约定
如果你对这篇文章感兴趣,请帮忙点赞,在看,分享.
请微信联系管理员:
syjf1976
sharry_xlp
Yannick_Duan
申请进入公众号讨论群提问或者参与话题讨论