【SAP FICO】财务三大报表_2-进阶(杜邦分析法、资产负债表-数据表结构、取数逻辑)
系列文章目录
文章目录
- 系列文章目录
- 前言
- 一、杜邦分析法
- 1、定义与起源
- 2、核心指标--盈利、运营、偿债能力指标
- 3、指标关系
- 二、使用杜邦分析法的步骤
- 三、资产负债表的数据表结构
- 1、核心数据表
- 2、内部数据结构
- 四、资产负债表的取数逻辑
- 1、数据定义
- 2、组织查询条件
- 3、获取财务数据和配置数据
- 4、数据处理
- 5、数据整合
- 6、数据导出
- 总结
前言
承接上篇财务三大报表_1-基础,该进阶篇将对资产负债表的相关数据表结构、取数逻辑等底层知识以及更为严谨庞大的财务分析指标体系做进一步分析说明
ps:利润表和现金流量表会在后面的篇章中详细说明
一、杜邦分析法
1、定义与起源
杜邦分析法最早由美国杜邦公司使用,因此得名。它是一种用来评价公司盈利能力和股东权益回报水平,从财务角度评价企业绩效的方法。其基本思想是将企业净资产收益率(ROE)逐级分解为多项财务比率乘积,从而深入分析比较企业经营业绩。
ROE是杜邦分析系统的顶层,也是我们分析的最终目的,它用来反映投入资本的盈利能力
2、核心指标–盈利、运营、偿债能力指标
- 净资产收益率ROE
是杜邦分析系统的核心,也是综合性最强的财务分析指标,它反映了企业利用股东权益(净资产)创造利润的能力,ROE越高,说明企业为股东创造的回报越高 - 资产净利率
体现了企业运用资产创造利润的效率。资产净利率的高低又取决于销售净利率和总资产周转率两个因素。-
销售净利率(盈利能力指标):反映了销售收入的收益水平,即企业每单位销售收入所带来的净利润。
销售净利率=净利润/销售收入-----表明企业盈利能力 -
总资产周转率(运营能力指标):反映了企业总资产的周转速度,即企业资产在一年内能够创造多少销售收入。
总资产周转率=销售收入/总资产-----表明企业资金周转能力
-
- 权益乘数(偿债能力指标)
表示企业的负债程度,反映了公司利用财务杠杆进行经营活动的程度。权益乘数越大,说明企业负债程度越高,可能带来的杠杆利益越多,但同时风险也越高。
权益乘数=总负债/总资产-----反映企业负债程度
3、指标关系
净资产收益率ROE=资产净利率 * 权益乘数
而资产净利率=销售净利率 * 总资产周转率
-》净资产收益率ROE=销售净利率 * 总资产周转率 * 权益乘数
二、使用杜邦分析法的步骤
1、杜邦分析图
2、根据财务三大报表,主要是利用资产负债表和利润表,逐步分解计算各个指标
可以使用软件工具(例如:FineBI)+EXCEL对各个指标逐步分解计算,包括销售净利率、资产周转率、权益乘数
3、将计算出的各个指标数值填入杜邦分析图
4、进行前后对比,分析影响了净资产收益率的指标有哪些
可以对比今年和前一年的杜邦分析图,从净资产收益率开始逐步剖解分析是哪些指标影响了净资产收益率
三、资产负债表的数据表结构
TCODE:ZFIR002
1、核心数据表
- faglflext:是SAP中的通用财务数据表,用于存储总账科目的财务数据,这里主要用于获取每个科目的发生额
关键字段包括:科目代码racct,借贷方向drcrk,期末数和年初数的余额hsl01、hslvt - zfit009:是自定义的表,用于存储资产负债表的配置信息
关键字段包括:公司代码bukrs,报表类型ztype(BS是资产负债表),列标识zcolumn(用于区分不同的列),行标识zrow,借方标识和贷方标识zjfbs、zdfbs,计算公式formula,正负反转reversal
2、内部数据结构
- typ_dmbtr:定义了存储资产类科目期末数和年初数的数据结构。
- typ_dmbtr1:定义了存储负债类科目期末数和年初数的数据结构。
- show_data:显示ALV上的数据结构
四、资产负债表的取数逻辑
1、数据定义
定义数据类型和内部表,用于存储财务数据、配置数据、显示数据
2、组织查询条件
根据用户在选择屏幕输入的公司代码、会计年度、会计期间,动态组织查询数据
3、获取财务数据和配置数据
通过select语句从faglflext表中获取符合查询条件的该公司代码下的财务数据,包括:公司代码、会计年度、期间、科目、货币、借贷方向、年初数和各个期间的发生额
通过select语句从zfit009表中获取配置表数据 资产负债表对应科目范围
核心代码如下:
* 获取该公司代码下所有科目的发生额数据
SELECT (tp_cond)
INTO CORRESPONDING FIELDS OF TABLE gt_fag
FROM faglflext
WHERE rbukrs = p_bukrs
AND ryear = p_ryear
AND rldnr = '0L'.
* AND prctr IN s_prctr..
* 获取配置表数据 资产负债表对应科目范围
SELECT *
INTO CORRESPONDING FIELDS OF TABLE gt_fit001
FROM zfit009
WHERE bukrs = ''
AND ztype = 'BS'
AND langu = sy-langu .
SORT gt_fit001 BY ztype zcolumn zrow zsnum .
4、数据处理
- 先处理带科目号的数据:
遍历zfit009表中的每条记录(配置信息),对于借方标识、贷方标识和公式均为空的记录,不进行数据处理。
根据借贷方向和发生额计算每个科目的期末数 - 再处理公式计算
- 在处理公式之前,需要检查一个名为<gs_fit001>-reversal的字段,reversal是正负标识的字段,如果该字段为’X’,则表示需要对计算结果进行正负反转(反转逻辑:将计算出的数值取相反数)
【为什么要进行正负反转呢?】
某些情况下,原始数据可能包含了一些误差或调整项,这些项需要以特定的正负号进行处理;
对于包含公式的数据项,公式的计算结果可能需要根据具体的业务规则进行正负号的调整;
为了确保所有相关数据项的一致性,在汇总或计算数据时,可能需要确保所有相关数据项的正负号保持一致;
正负反转代码如下:
- 在处理公式之前,需要检查一个名为<gs_fit001>-reversal的字段,reversal是正负标识的字段,如果该字段为’X’,则表示需要对计算结果进行正负反转(反转逻辑:将计算出的数值取相反数)
IF <gs_fit001>-reversal = 'X' . "正负反转
gs_dmbtr-hslvt = - gs_dmbtr-hslvt .
gs_dmbtr-dmbtr = - gs_dmbtr-dmbtr .
ENDIF .
- 首先判断某行数据是否包含公式,若包含公式则调用相应逻辑处理这个公式,并计算出结果
- 具体逻辑:当某行数据包含公式时,会执行PERFORM caculate_results CHANGING <gs_fit001>-formula gs_dmbtr-hslvt gs_dmbtr-dmbtr.语句,这个语句会调用一个名为caculate_results的FORM,该模块(子例程)负责解析并执行公式
- 公式解析
(1)获取公式字符串
(2)遍历该公式字符串,根据每个计算符号来分割公式,识别每个操作数,根据操作数和运算符计算对应行的值
- 公式解析
核心代码如下:
formula_len = strlen( p_formula ) . "计算公式长度
CLEAR:tp_hslvt,tp_dmbtr,tp_char,l_row .
CONDENSE p_formula NO-GAPS .
DO formula_len TIMES. "循环整个公式 根据每个计算符号来计算对应行的值
"根据整个公式 整合所有对应的计算字符串 利用对应的function 计算出对应的值
last = sy-index - 1 .
tp_char = p_formula+last(1) .
IF tp_char CO '0123456789' . "为数字
CONCATENATE l_row tp_char INTO l_row .
CLEAR: tp_char .
ENDIF .
IF tp_char CO '+-*/' OR sy-index = formula_len ."为计算符号
SHIFT l_row RIGHT DELETING TRAILING '' .
OVERLAY l_row WITH '000' .
CLEAR: wa_dmbtr .
READ TABLE gt_dmbtr INTO wa_dmbtr WITH KEY zrow = l_row .
IF sy-subrc = 0 .
CLEAR:tp_value .
tp_value = wa_dmbtr-hslvt .
CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT' "负数负号前置
CHANGING
value = tp_value.
CONCATENATE tp_hslvt '(' tp_value ')' tp_char INTO tp_hslvt .
CLEAR:tp_value .
tp_value = wa_dmbtr-dmbtr .
CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT' "负数负号前置
CHANGING
value = tp_value.
CONCATENATE tp_dmbtr '(' tp_value ')' tp_char INTO tp_dmbtr .
ELSE .
CONCATENATE tp_hslvt '(0)' tp_char INTO tp_hslvt .
CONCATENATE tp_dmbtr '(0)' tp_char INTO tp_dmbtr .
ENDIF.
CLEAR: l_row .
ENDIF.
ENDDO.
(3)计算结果赋值给年初数和期末数
核心代码如下:
IF tp_hslvt <> '' . "计算期初
CLEAR: l_value .
CALL FUNCTION 'CHECK_FORMULA' "判断整合的公司是否符合function的计算规则
EXPORTING
formula = tp_hslvt.
IF sy-subrc = 0.
CALL FUNCTION 'EVAL_FORMULA' "根据整合字符窜计算出对应的值
EXPORTING
formula = tp_hslvt
IMPORTING
value = l_value.
p_hslvt = l_value .
ENDIF.
ENDIF.
IF tp_dmbtr <> '' . "计算期末
CLEAR: l_value .
CALL FUNCTION 'CHECK_FORMULA'
EXPORTING
formula = tp_dmbtr.
IF sy-subrc = 0.
CALL FUNCTION 'EVAL_FORMULA'
EXPORTING
formula = tp_dmbtr
IMPORTING
value = l_value.
p_dmbtr = l_value .
ENDIF.
ENDIF.
5、数据整合
- 获取到的财务数据被整合到gt_dmbtr,gt_dmbtr1内表中
- 然后,代码将整合后的数据转换为show_data结构(显示到ALV上的数据结构),使其在ALV中显示。
6、数据导出
这里简单介绍
- 创建并打开一个excel
- 将数据填充到excel(循环整个内表输入得到的资产及负债、权益数据到excel中)