问题描述
我被要求在SAP中创建银行对帐单分析。要求如下:
- 选择银行总帐帐户在日期范围内的所有变动
- 查找清算过帐
- 递归地追溯随后的清算,直到找到损益表或未清算过帐。
该报告应包含步骤3中的记录列表。
示例: 已付债权人发票
- 银行对帐单 借记银行付款清算帐户/贷记银行帐户
- 付款建议 借方债权人帐户/贷方银行付款清算帐户
- 凭证发票 借方成本损益帐户,增值税帐户/贷方债权人帐户
已收到债务人发票付款
- 银行对帐单 借记银行帐户/贷方债务人付款清算帐户
- 债务人清算 借方债务人清算帐户/贷方债务人帐户
- 债务人发票 借方债务人帐户/贷方损益收入帐户+增值税帐户
我可以从字段BSIS
和HKONT
的表BLDAT
中按银行GL代码获取所有银行对帐单。
然后使用上一个查询中的AUGBL
,AUGDT
和BSAS
使用表BELNR
的清算凭证(GJAHR
和BUZEI
)过帐
然后再次使用先前查询中的BELNR
和GJAHR
(不包括清算文件)从BSAS重新获得发票文件(BUZEI
,AUGBL
和AUGDT
)
最后,使用BELNR
,GJAHR
和BUZEI
(不包括债务人帐户)从表BSEG提取发票上的损益和增值税案
我的代码在上述简单情况下也能正常工作。但是,如果在首付,信用卡,银行手续费等更复杂的情况下,我总是会丢失一些记录,或者陷入无休止的循环。
通过查看表BSEG
,我发现了另外两个字段AUGGJ
和AGZEI
,它们以某种方式关联了已清除文档的行。但是我无法确定逻辑。
例如,我在BSEG
表中有以下记录:
+-------+------------+-------+------------+------------+-------+-------+-------+-------+-----------+----------+
| GJAHR | BELNR | ZUONR | AUGDT | AUGBL | KOART | AUGGJ | AGZEI | SHKZG | DBRTR | WRBTR |
+-------+------------+-------+------------+------------+-------+-------+-------+-------+-----------+----------+
| 2015 | 200000383 | 1 | 07.01.2015 | 200000383 | S | 2015 | 1 | H | 37.928,55 | 1.363,89 |
| 2015 | 200000383 | 2 | 07.01.2015 | 200000383 | S | 2015 | 4 | S | 37.670,64 | 1.363,89 |
| 2015 | 200000383 | 3 | | | S | | 0 | S | 148,80 | 0,00 |
| 2015 | 200000383 | 4 | | | S | | 0 | S | 109,11 | 0,00 |
| 2015 | 3100000583 | 1 | 07.01.2015 | 200000383 | S | 2015 | 1 | S | 51.522,00 | 1.860,00 |
| 2015 | 3100000583 | 2 | | | S | | 0 | H | 51.522,00 |
| 2015 | 3100000585 | 1 | 07.01.2015 | 200000383 | S | 2015 | 1 | S | 37.779,75 | 1.363,89 |
| 2015 | 3100000585 | 2 | | | S | | 0 | H | 37.779,89 |
| 2015 | 6000000227 | 1 | 07.01.2015 | 6000000227 | K | 2015 | 2 | S | 51.373,20 | 1.860,00 |
| 2015 | 6000000227 | 2 | 07.01.2015 | 200000383 | S | 2015 | 1 | H | 51.373,00 |
| 2015 | 6000000228 | 1 | 07.01.2015 | 6000000228 | K | 2015 | 2 | S | 37.670,89 |
| 2015 | 6000000228 | 2 | 07.01.2015 | 200000383 | S | 2015 | 4 | H | 37.670,89 |
+-------+------------+-------+------------+------------+-------+-------+-------+-------+-----------+----------+
以及BSAS
表中的后续内容
+------------+-----------+-------+------------+-------+-------+-----------+----------+
| AUGDT | AUGBL | GJAHR | BELNR | ZUONR | SHKZG | DMBTR | WRBTR |
+------------+-----------+-------+------------+-------+-------+-----------+----------+
| 07.01.2015 | 200000383 | 2015 | 200000383 | 1 | H | 37.928,89 |
| 07.01.2015 | 200000383 | 2015 | 200000383 | 2 | S | 37.670,89 |
| 07.01.2015 | 200000383 | 2015 | 3100000583 | 1 | S | 51.522,00 |
| 07.01.2015 | 200000383 | 2015 | 3100000585 | 1 | S | 37.779,89 |
| 07.01.2015 | 200000383 | 2015 | 6000000227 | 2 | H | 51.373,00 |
| 07.01.2015 | 200000383 | 2015 | 6000000228 | 2 | H | 37.670,89 |
+------------+-----------+-------+------------+-------+-------+-----------+----------+
第2015/3100000585/2
行(GJAHR/BELNR/BUZEI
)是银行对帐单过帐。目标过帐为2015/6000000227/1
-自动付款,`2015/200000383/3'-汇率差异。
我通过了解会计逻辑并比较DMBTR和WRBTR来了解目标过帐。但是我无法找到如何以编程方式找到链接。
如果我使用前面描述的简单算法,则会从2015/3100000583/1
得到BSEG
来抵消银行对帐单。然后从AUGBL
的同一行中200000383
BSEG
。在具有键BSAS
和AUGDT
的表AUGBL
中,不包括原始行2015/3100000583/1
,我得到了上面第二个表中的所有行-即5条记录,包括2015/3100000585/1
和2015/6000000228/2
实现了不同的付款。
我可以尝试以某种方式排除发布2015/60000002282/2
,因为它具有不同的AGZEI
= 4
而不是1
。但是如何在将2015/200000383/4
都保持为2015/200000383/3
的同时排除AGZEI
呢?{p}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)