闲人闲谈PS之三十九——项目财务报表设计

Posted SAP闲人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了闲人闲谈PS之三十九——项目财务报表设计相关的知识,希望对你有一定的参考价值。

惯例闲话:最近群友们一直在讨论SAP顾问的方向和出路。从目前国企和央企的方向来看,SAP被国产化替代是不可逆转趋势,对此很多朋友感觉到了失业危机。对此,闲人的看法是,趋势不可逆,但SAP产品在不久的将来,会以另外一种形式出现并全面铺开。而目前所看到的,并没有一个能替代的产品出现,依葫芦画瓢的也看到过,但总结一句话,东施效颦。所以,闲人对此持乐观态度,机会总是会给准备的人,而目前这一行,能潜心研究工业信息化底层业务架构的同行,还凤毛麟角。所以未来10年之内,对SAP从业者而言,是挑战也是机会,大浪淘沙,真金不怕火炼,希望各位好运。
闲话到此为止,今天聊聊项目财务报表设计

项目财务报表问题

PS模块和财务的关联更为紧密,WBS是重要成本对象之一,常见的财务凭证表BSEG,ACDOCA,COSP,COSS等表,是常用的项目成本报表取数来源,和后勤的用法不一样的是,财务表中的WBS通常体现为对象号OBJNR,通过对象号关联WBS。这些都是非常基本的应用。但是按照常规的方法,会存在一个共同的问题,项目财务报表的效率问题,没有任何例外,根本原因是,所有的项目制企业,都是按项目全周期来分析成本,随着上线后持续的财务凭证生成,必然产生效率问题。因此在项目财务分析的设计中,效率成为一个影响方案落地的问题。

RPSCO表分析


图 业务对象的余额汇算过程
SAP考虑到这个问题,如上图,PS的财务底表中,RPSCO表是一个具有重要意义的表,这个表包含了PS模块产生绝大部分财务相关的数据,成本计划、计划收入、预算、承诺、实际成本、实际收入以及结果分析等等, 系统将实时WBS的余额保存到RPSCO表中,有了这个实时累计数,在很多需要计算累计金额的场景中,效率问题通过RPSCO可以迎刃而解。
首先分析RPSCO表重要的组成字段:
1、OBJNR:成本对象号,PS的成本对象分为WBS、网络头、网络活动三种:
WBS对象类型PR,和PRPS-OBJNR关联;
网络头对象类型NP,和AUFK-OBJNR关联:
网络活动对象号NV,和AFVC-OBJNR关联:

图 ACDOCA表ACCASTY成本对象类型

为了减少报表中的联查逻辑,提高效率,一般的做法是,用WBS成本对象来归集成本,建议不要将网络作为成本对象,这样会大大增加报表的查询负荷。在配置上实践,如下图OPT1对于项目网络发货,将移动类型配置为221。这样配置后,MIGO发货后,在网络上不会产生余额,余额转嫁到网络归属的WBS,而这种结果也是我们所需要的,直接取PR对象的余额。

图 网络发货移动类型配置

2、LEDNR 预算/计划分类帐,成本对象货币和控制范围货币不同时,按汇率自动换算。这个字段通常用于选择不同货币时,作为关键条件选择。如下图,WBS 1520000099-01的对象货币CNY对应0002,控制范围货币HKD对应0003。这里的规律是,控制范围货币的LEDNR编码排在对象货币的编码之后。取数时候按需要排序。

图 WBS对象货币和控制范围货币换算

3、WRTTP 值类型 /VORGA预算类型预算/计划,这个2个字段组合在一起,区分成本计划、预算、承诺、实际的关键字段,几种常用的类型组合解析如下:
4、 BELTP 借类,表示成本和收入。
和WBS结构设计存在关系,这里强烈建议计成本和收入时,归集收入和成本的WBS区分开,这和符合多数项目制企业的记账习惯,一般首层WBS项目层,记收入。下层记成本,这样收入凭证就不会影响直接取数。如果同一个WBS成本收入和计入,那么RPSCO表中的成本会被收入抵消一部分,这样就失去了利用RPSCO表的意义。
5、VERSN,版本,使用成本计划时,需要用VERSN判断对应的成本。

6、WLP01~WLP16,当月的余额。在使用中需要将截止月份余额,需要将月份余额累加起来。从16列开始到31列的金额累加,计算WBS累计成本的参考逻辑如下:
LOOP AT LT_RPSCO INTO LS_RPSCO
WHERE OBJNR = LS_WBSRPSCO-OBJNR
AND WRTTP = ‘04’
AND ( VORGA = ‘COIN’ OR
VORGA = ‘COIE’ OR
VORGA = ‘RKIB’ OR
VORGA = ‘RKIV’ OR
VORGA = ‘KOAO’ OR
VORGA = ‘KOAR’)
AND VERSN = ‘000’
AND LEDNR = ‘0003’
AND GJAHR LE I_DATE+0(4)
AND BELTP = ‘1’."成本和贷方支付
ASSIGN LS_RPSCO TO ."将工作区赋值给指针区
LV_TIMES = 16 ."从16列开始取数
IF LS_RPSCO-GJAHR < LV_GJAHR.
DO 16 TIMES."循环16次累加
ASSIGN COMPONENT LV_TIMES OF STRUCTURE TO .
LS_WBSRPSCO-ACTUAL = LS_WBSRPSCO-ACTUAL + .
LV_TIMES = LV_TIMES + 1.
ENDDO.
ELSEIF LS_RPSCO-GJAHR = LV_GJAHR.
DO LV_MONAT TIMES.
ASSIGN COMPONENT LV_TIMES OF STRUCTURE TO .
LS_WBSRPSCO-ACTUAL = LS_WBSRPSCO-ACTUAL + .
LV_TIMES = LV_TIMES + 1.
ENDDO.
ENDIF.
ENDLOOP.
CLEAR LS_RPSCO.
这段逻辑的结果,如下图,将这些字段累计。

图 累加字段
以上是RPSCO表中关键字段的解读,理解以上字段的意义是掌握这个表基础。这个表也是大部分S_ALR*表的取数源头。

应用举例

某公司是一家建筑机电设备安装工程公司,组织架构按照公司法人/事业部/项目层层分解,每月财务需要根据每个项目的预算成本、实际成本、实际收入、变更追加成本等数据监控公司运营状况,分析每个责任主体绩效。

图 项目分析组织架构
公司年产值40亿,单个项目WBS结构达到1800+数量级别,逻辑不复杂每个项目数据获取后,按事业部、公司汇总。分析了三种方案:
方案A:常规ABAP直接开发,直接根据需求定制化开发报表。
1、优势为开发速度相对较快。
2、报表的通用性不强,由于管理报表逻辑复杂,对运维的要求较高。
3、报表实时读取,效率也较低。
方案B:参考BW的理念,指标模块化开发。
1、建立统一的分析维度和查询标准,将项目营收报表、项目试算表的分析指标模块化分解。
2、定期将数据保存在定制表中,实现快速查询
3、分析指标模块化,在统一按项目+时间的维度下,可根据不同的实现报表拼接生成新的管理报表。
4、具有较大的灵活性,方便运维
5、开发周期相对A,略长
本方案可简单理解是基于方案CBI理念下+业务模块化思想的简化应用
方案C:上BI系统。SAP专项解决方案,专门为企业SAP上线后,建立分析决策模型,快速抽取数据形成报表。BI的实施一般在SAP稳定运行,积累一定的数据量基础上进行。需一定的时间周期沉淀。
如果按照方案A,程序必然出现超时DUMP问题,方案A毫无疑问舍弃。由于客户对SAP项目预算有限和实施周期,方案C不具备实施条件。最终选定了方案B。

设计过程

1、确定汇总层级。如上图,项目->事业部->公司法人
2、确定分析指标,需要有期间分析功能。指标预算、承诺、累计成本、累计收入、开票、回款等核心财务数据。最大的效率瓶颈在这个环节。其中成本、收入、回款、承诺是跨整个项目全生命周期是最大难点。
3、利用RPSCO表将指标模块化,化整为零,独立存表,称之为模块子表。如下表:

4、模块子表的主键统一为项目定义/年度/更新日期,这一步是十分关键,和财务总监确定后,设计表结构。下表为部分子表举例

子表名 字段名 字段描述 主键 说明
ZTPS_0001 MANDT 客户端 X SAP客制表默认字段
ZTPS_0001 PSPID 项目定义 X  
ZTPS_0001 POSID WBS X  
ZTPS_0001 BUDAT 更新日期 X  
ZTPS_0001 STUFE 层级    
ZTPS_0001 PLFAZ 项目基本_合同开工日期    
ZTPS_0001 PLSEZ 项目基本_合同竣工日期    
ZTPS_0001 SPROG 项目基本_实际开工日期    
ZTPS_0001 EPROG 项目基本_实际竣工日期    
ZTPS_0001 POST1 项目基本_描述    
ZTPS_0001 S_TXT04 项目基本_项目状态_上年    
ZTPS_0001 B_TXT04 项目基本_项目状态_本年    
ZTPS_0001 Z_SNXXJD 截止上年末业主确认的形象进度    
ZTPS_0001 Z_BNXXJD 截止本年末业主确认的形象进度    
ZTOA_0003 MANDT 客户端 X SAP客制表默认字段
ZTOA_0003 PSPID 项目定义 X  
ZTOA_0003 POSID WBS X  
ZTOA_0003 BUDAT 更新日期 X  
ZTOA_0003 ZBGWTQ 变更Y2_未提请金额    
ZTOA_0003 ZBGYTQ 变更Y2_已提请金额    
ZTOA_0003 ZBGYQR 变更Y2_已确认金额    
ZTOA_0003 ZBGYHT 变更Y2_已转化为合同金额

表 表结构设计
4、指标计算逻辑。最核心的取数逻辑,详细见上RPSCO表分析,逻辑编写不复杂,前提是掌握RPSCO表的更新逻辑。将项目各项指标计算封装成函数,如图ZPS_FM_WBSRPSCO_GET,获取到数据后,做汇算逻辑。和常规方法最大的区别,非凭证级别,而是余额的汇算,效率大为提高,理论上,每个WBS只需要一次循环,即可算出当期余额。

5、按客户财务总监要求,数据实时性定为24小时,每天晚上1点,系统资源空闲的时候,进行计算汇总,存入子表。如果个别项目需要最新数据,则人工执行一次即可刷新表数据。

6、项目综合营收报表测试,毫无疑问,效果在预料之内,可以达到秒内速度


图 项目综合报表执行结果

小结:这个案例在项目制企业非常典型,在以往的项目实践中,项目报表出不来或者数据不准,是很多实施项目的遗憾。从以上过程总结几个重要的启示:
1、财务分析要在蓝图设计阶段今早规划,以此作为方向定功能基础;
2、业务层面的索引条件标准化,统一了统计和查询口径。
3、SAP标准功能价值最大化,对RPSCO表的利用。
4、财务数据时效性口径。随着系统数据海量增长,做到完全实时几乎不可能就需要约定时效性,一般24小时。

Qt系列文章之三十九(Qt多语言国际化程序实例设计实现)

关注我的公众号,可免费看全本Qt系列文章~

概述

  有些软件需要开发多语言界面版本,如中文版、英文版、日文版、繁体版等等,并且在软件里可以方便地切换界面语言。Qt为多语言界面提供了很好的支持,使用Qt的一些规则和工具,可以很方便地为应用程序开发提供多语言界面支持。

  用Qt开发多语言界面应用程序,主要包括以下几个步骤:

  1. 在程序设计阶段,程序代码中每一个用户可见的字符串都用 tr() 函数封装, 以便Qt提取界面字符串用于生成翻译资源文件。用UI设计器可视化设计窗体时统一用一 种语言,如汉语。

以上是关于闲人闲谈PS之三十九——项目财务报表设计的主要内容,如果未能解决你的问题,请参考以下文章

PX4模块设计之三十九:Commander模块

Qt系列文章之三十九(Qt多语言国际化程序实例设计实现)

Qt系列文章之三十九(Qt多语言国际化程序实例设计实现)

通信算法之三十九:单载波频域均衡系统波形设计

Java经典编程题50道之三十九

C#之三十九 抽象工厂模式