ACDOCA和BSEG
转自:https://zhuanlan.zhihu.com/p/171187728
统一日记账(Universal Journal)是S/4HANA在财务领域最大的创新。它把原先分散的SAP财务模块数据,整合到了一个完全集成的后台表中,就是Table ACDOCA。
下图就展示了ACDOCA是如何将总账(General Ledger),利润中心会计(Profit Center Accounting),固定资产会计(Fixed Asset Accounting),物料账(Material Ledger),成本(Controlling),获利分析(Profitability Analysis)等各个财务子模块的数据集成到一起的。
这样一个集成的信息源,就能生成各式各样的报表:固定资产,库存,应收应付,利润,销售成本COGS),资产负债表,损益表等等。它也让以前ECC系统中的很多后台索引表(Index)和汇总表(Total)变得不再需要。
在本文中,我将就一些关键点,跟ECC的数据结构做一个比较。
1. ACDOCA里有的,BSEG里不一定有
以下的一些凭证行项目,都是只在ACDOCA表里面存在,而在BSEG表里不存在的(你可以通过BKPF表的BSTAT字段的凭证状态U来识别):
- 资产折旧过账
- 特定账套(Ledger)过账
- 外币评估过账
- CO内部凭证
2. 年末结转数字存储在ACDOCA的Period 000中
ACDOCA把上一年度的结转数放在Period 000中,这样便于计算YTD(year-to-date)数字,你不需要回去找上一年度末的数字。
3. ACDOCA的体量比BSEG大很多
ACDOCA表中的行项目数量可能会非常大,因为评分拆分,所有的行项目都被拆分到了最小的维度,再考虑到多个账套的存在,凭证行项目数量还要翻倍。
所以,从长期业务运行的角度,数据库大小和磁盘大小都需要提前考虑好。
4. 已归档的数据会在BKPF/BSEG中被删除,但在ACDOCA中依然存在
当你在财务模块中做数据归档时,对应数据会被从BKPF/BSEG表中删除。
然而,在ACDOCA表中,数据不会立刻被删除,而是添加一条反向的凭证到ACDOCA表里,让汇总余额为0。
要实际上删除ACDOCA中的数据,必须要执行Compression Run。
Compression Run是一个数据压缩的过程,它用汇总数据来替代明细数据。它的数据颗粒度就跟年末余额结转的颗粒度一致,对于余额不产生影响。
5. 对于同样的维度,BSEG和ACDOCA可能有差异
对于同一条记录的同一个字段,你可能会发现在BSEG和ACDOCA中的值可能会不一样。
例如,你可以在Entry View上,通过替代(Substitution)来修改Assignment字段(ZUONR)的值,但是它不一定会被拷贝到ACDOCA表里面。拷贝到ACDOCA是由BAdI BADI_FINS_ACDOC_BSEG_FIELDS控制的,所以当你在系统中做替代时,需要关注一下。
6. Coding Block中的自定义字段 - 集成到ACDOCA
当你在Coding Block中添加自定义字段的时候,自定义字段也会被增加到ACDOCA中。
但是,在各种凭证输入的场景中,这些自定义字段是如何被使用的,将取决于具体的定义。你在Table FINSC_ACDOC_FCT中,能看到这些自定义字段的各种属性。例如,自定义字段在以下各种流程的使用都是可以具体定义的:
- 在损益类科目的年末结转中
- 在资产负债类科目的年末结转中
- 在科目余额中
- 在科目报表中
- 在科目余额评估时
- 在对FI凭证做修改时
- 在科目分摊时
- 在汇总层级定义时
7. 很多时候,报表的数据需求会超越ACDOCA所能提供的信息
有时候报表不仅仅是关于财务细节的,它可能会混合其他维度,例如主数据中的字段,供应商名称,成本中心层次等。
所以,在报表设计时,你需要考虑使用SAP预建的一些CDS view,它们已经混合了ACDOCA的数据和其他维度的数据。并且对于新报表来说,应该尽量基于ACDOCA做开发,而不是BSEG。
我希望上面这些能在你使用ACDOCA的过程中,给你一些帮助。