前言
在发票输出生成会计凭证时,可能会碰到F5 562错误"帐户&只能内部记帐到公司代码&中",这个错误产生的原因是,科目设置中勾选了" 只允许自动过账
",科目为集成科目,不允许手工记账。
奇怪的是通过IDOC自动生成的会计凭证,按道理是系统集成,不是手工记账,为什么还报这个错呢?背后的原理是通过IDOC输出,最终是通过BDC调用TCODE:FB01去生成的会计凭证,所以就会报这个错误。
如果在业务层面没办法将科目 " 只允许自动过账 "取消勾选的话,就需要在代码中来增强处理 。
本文将介绍处理这种错误的方法。
原因分析
1\.
DEBUG跟踪,在包含文件MF05AFB0_BSCHL_KONTO_BEARBEITU的bschl_konto_bearbeitung子例程中抛出562错误,如下图
rf05a-staut字段为空,skb1-xintb不为空,就会报错。
增强实现
既然是判断 rf05a-staut字段为空就报错,那我在 bschl_konto_bearbeitung子例程开始的位置
,把这个字段设置为'X'是否可行呢?经过分析和实践,证明方法是可行的,增强代码如下:
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"$\SE:(1) Form BSCHL_KONTO_BEARBEITUNG, Start A*$*$-Start: (1)---------------------------------------------------------------------------------$*$*ENHANCEMENT 1 ZE_INVOICE_EDI. "active version*EDI输出的凭证,跳过科目自动过账检查IF bkpf-bktxt = 'EDI'. rf05a-staut = char_x.ENDIF.ENDENHANCEMENT.*$*$-End: (1)---------------------------------------------------------------------------------$*$*
总结
SAP强大的地方在于,它功能相对开放,开发人员可根据实际需求,更改系统的标准处理逻辑,但是要千万谨慎,也有可能一不小心就闯下大祸☺