在使用BAPI BAPI_ACC_DOCUMENT_POST 创建会计凭证时存在以下业务背景:
交易币为USD,本位币为VND,OB08维护的当期USD转换为VND的汇率为23655。以下为对应的USD传入金额:
以下是代码结合当期OB08汇率传入BAPI的交易币(USD)/本位币(VND)金额一览(注意画框的金额):
调用BAPI后出现以下报错
这是属于本位币借贷不平的错误,但笔者调试代码时发现本位币传入金额的借贷其实是平的,如下图:
那又是哪里不平呢?使断点进入BAPI,进一步调试标准代码后发现是在BAPI里面出现了借贷不平:
出现这种情况的原因是VND的外部实际金额转换为SAP内部底表的金额存储时,系统会自动将VND实际金额缩小100倍并且四舍五入保留两位小数。这就导致传入系统后的VND金额出现了尾数,致使借贷不平。与之类似的数据笔者在F-02的前台进行手工,是能够正常过账:
不难看出F-02对于此类数据的处理逻辑为:根据币种的小数位数(VND的小数位数为0),对每一行的借方(S)正常四舍五入后将此行为导致的尾差补在贷方(H)的第一行,以此实现借贷相平。仿照F-02前台逻辑,对于自开发的代码进行以下补充,即可实现借贷相平。
再次调用BAPI,过账成功。