S/4 HANA中的ACDOCT和FAGLFLEXT

最近的几个需求让我对ACDOCT和FAGLFLEXT这两个财务相关表(准确地说是视图)产生了一些了解,同时也发现某些开发同行和业务顾问并没有认识到这些东西。因此我打算从技术角度来说明一下这两个视图在S4中的实际面貌。当然因为我并不了解FICO方面的任何业务知识,所以也只是进行技术角度的说明。

本文内容基于 S/4 1709版本;某些内容可能和其他版本不是完全符合,特别是具体的DDL代码部分。

本文链接:http://www.cnblogs.com/hhelibeb/p/8629942.html

 

财务报表开发中经常会出现有关期初余额和本期发生额的需求,传统上获取期初余额的方式是从FAGLFLEXT或ACDOCT中获取结转余额(HSLVT),再加上各期发生额(HSL01, HSL02....)。

比如要获取公司1000的2018年3月的期初余额,ABAP代码的写法是:

SELECT SUM( ( hslvt + hsl01 + hsl02 ) ) FROM faglflext WHERE rbukrs = '1000'
                                                         AND ryear  = '2018'
  INTO @DATA(l_balance).

 

这只是段简单的示例代码,实际需求中可能要按科目等条件取出各个期间分组汇总。并且,为了适应动态的查询条件,通常要使用Field Symbol,在内表中对数据进行累加操作,颇为繁琐。

 

那么,HSLVT和HSL01, HSL02....等数据是从哪里来的呢?如果把FAGLFLEXT和ACDOCT视为数据库表,读者可能会认为,它们是通过某些结转操作,由系统汇总计算后得来并存储到数据库中的。但实际上,FAGLFLEXT和ACDOCT都只是视图,而非透明表。可以理解成,它们当中的数据不是数据库中既有的,而是和各种报表程序一样、是对其它表的数据进行实时处理后临时生成的结果。

打开SE11可以看到:

 

可以看到,它们实际上是ABAP CDS视图。如果不了解ABAP CDS视图的话,可以暂时把它理解成使用SQL语言建立的数据模型,通过使用注解,还能为它赋予其它能力。

推荐通过Eclipse来查看CDS视图的定义,具体操作方式不提。

CDS视图中的数据通常是从透明表中取得的,这里以FAGLFLEXT为例:

观察视图的DDL源,寻找其中的FROM关键字:

@AbapCatalog.sqlViewName: 'FAGLFLEXT'
@AccessControl.authorizationCheck: #NOT_REQUIRED
@ObjectModel.usageType.serviceQuality: #X
@ObjectModel.usageType.sizeCategory: #XL
@ObjectModel.usageType.dataClass: #MIXED
@EndUserText.label: 'FAGLFLEXT (Compatibility View) '
@AbapCatalog.preserveKey: true

define view v_faglflext_view 
as
    select key rclnt, key ryear,
    key objnr00, key objnr01, key objnr02, key objnr03, key objnr04, key objnr05, key objnr06, key objnr07, key objnr08,
    key drcrk, key rpmax,
    activ, rmvct, rtcur, runit, awtyp,
    rldnr, rrcty, rvers, logsys, racct, cost_elem, rbukrs,
    rcntr, prctr, rfarea, rbusa, kokrs, segment, zzpaytype, zzinvunit, zzempnum, ps_posid, aufnr, kunnr, lifnr,  
//<$VF>
//<$FIELDS>  
//<$VF>
    scntr, pprctr, sfarea, sbusa, rassc, psegment,
    tslvt, tsl01, tsl02, tsl03, tsl04, tsl05, tsl06, tsl07, tsl08, tsl09, tsl10, tsl11, tsl12, tsl13, tsl14, tsl15, tsl16,
    hslvt, hsl01, hsl02, hsl03, hsl04, hsl05, hsl06, hsl07, hsl08, hsl09, hsl10, hsl11, hsl12, hsl13, hsl14, hsl15, hsl16,
    kslvt, ksl01, ksl02, ksl03, ksl04, ksl05, ksl06, ksl07, ksl08, ksl09, ksl10, ksl11, ksl12, ksl13, ksl14, ksl15, ksl16,
    oslvt, osl01, osl02, osl03, osl04, osl05, osl06, osl07, osl08, osl09, osl10, osl11, osl12, osl13, osl14, osl15, osl16,
    mslvt, msl01, msl02, msl03, msl04, msl05, msl06, msl07, msl08, msl09, msl10, msl11, msl12, msl13, msl14, msl15, msl16,
    timestamp
    from faglflext_bck where rrcty = '1'
union all
    select
    key rclnt,
    key cast(ryear as gjahr) as ryear,
    key cast(objnr00 as g_objnr) as objnr00,
    key cast(objnr01 as g_objnr) as objnr01,
    key cast(objnr02 as g_objnr) as objnr02,
    key cast(objnr03 as g_objnr) as objnr03,
    key cast(objnr04 as g_objnr) as objnr04,
    key cast(objnr05 as g_objnr) as objnr05,
    key cast(objnr06 as g_objnr) as objnr06,
    key cast(objnr07 as g_objnr) as objnr07,
    key cast(objnr08 as g_objnr) as objnr08,
    key cast(drcrk as shkzg) as drcrk,
    key cast(rpmax as rpmax) as rpmax,
    cast(activ as acti1) as activ,
    cast(rmvct as rmvct) as rmvct,
    cast(rtcur as rtcur) as rtcur,
    runit,
    cast(awtyp as awtyp) as awtyp,
    cast(rldnr as fagl_rldnr) as rldnr,
    cast(rrcty as rrcty) as rrcty,
    cast(rvers as rvers) as rvers,
    cast(logsys as logsys) as logsys,
    cast(racct as racct) as racct,
    cast(cost_elem as kstar) as cost_elem,
    cast(rbukrs as bukrs) as rbukrs,
    cast(rcntr as kostl) as rcntr,
    cast(prctr as prctr) as prctr,
    cast(rfarea as fkber) as rfarea,
    cast(rbusa as gsber) as rbusa,
    cast(kokrs as kokrs) as kokrs,
    cast(segment as fb_segment) as segment,//<$VF>
//<$FIELDS>
//<$VF>
    cast(scntr as skost) as scntr,
    cast(pprctr as pprctr) as pprctr,
    
  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值