1. 结果分析是给谁算账的——先搞懂KKA1/KKA2/KKA3的定位
1.1 一张月末未完工的订单,会计到底想要什么
做FICO顾问的应该都有这种经历:项目上线后的第一个月结,总账会计盯着利润表问为什么这个月成本比收入还高,是不是凭证做错了。排查下来凭证没问题,问题出在成本对象上——一张非标设备的销售订单,合同额100万,生产周期六个月,成本每个月都在发生,但按合同约定要验收合格后才一次性开票。于是前五个月的利润表上只有成本没有收入,每个月都在巨亏,最后开票那个月突然爆出一大笔利润。
这显然是收入成本不匹配。生产订单的场景也类似:一张内部工单投料、报工发生了大几十万成本,产品还没完工入库,这些成本如果全部进当期损益,这个月的成本会异常虚高,毛利率完全没法看。
SAP CO的结果分析(Results Analysis,以下简称RA)解决的就是这个问题。它的本质,是在月末结账前对未完工的成本对象做一次应计调整,把收入和成本按完工进度摆到正确的期间里,要么确认一部分应计收入,要么把一部分成本资本化为在制品资产。结果分析算出来的是"该确认多少",至于怎么在总账上挂科目,由后面的KO88结算负责过账。
1.2 三种结果分析对象的边界:生产订单、项目、销售订单
SAP里结果分析虽然引擎统一,但按成本对象分了三类,分别对应三个事务代码:
- KKA1:单个内部订单/生产订单的结果分析,按订单号直接执行,跑完后能看到这张订单的行项目结果。
- KKA2:项目结果分析,针对WBS元素、网络等PS模块对象,主要用在项目型制造和工程类项目。
- KKA3:销售订单结果分析,按销售订单行项目执行,是带收入的成本对象最常用的单对象分析入口。
这三个事务代码本质上是"单对象结果分析执行器",输入的维度不同,但背后调用的是同一套结果分析计算逻辑。很多顾问容易把它们当成普通报表来用,实际上运行后它们会直接在当前期间内生成结果分析行项目,写进底表,为后续结算做准备。
还要区分一个概念:KKA1/KKA2/KKA3算出来的是金额,KO88过账的才是会计凭证。两者的关系打个比方,KKA系列是"称重",KO88是"装车"。称重称错了,装车装得再快也是白搭。
1.3 结果分析、在制品、收入确认三者的关系
不少新人以为结果分析就是在制品计算,其实在制品只是结果分析输出的形态之一。
结果分析最终会输出三类行项目:
- 收入类:确认未开票收入/应计收入,主要出现在销售订单和项目型成本对象上;
- 成本类:按完工进度确认已实现成本;
- 在制品/准备金类:尚未确认的差额,要么资本化为WIP资产,要么计提为准备金负债。
以实际成本法跑生产订单,输出的是在制品;以成本收益比法跑销售订单,输出的是应计收入和利润准备金。两者形态不一样,但底层是同一套结果分析引擎在算。理解了这一点,后面看评估方法就顺了。
2. 评估方法全家桶:六大方法分三派
2.1 评估方法在哪里定义
评估方法(Valuation Method)不是写死在程序里的,而是在后台配置中指定。定义路径是:
IMG → Controlling → Product Cost Controlling → Cost Object Controlling → Results Analysis → Define Valuation Methods(事务代码OKG8)
打开以后能看到SAP预置的一套标准方法。如果把常见方法归归类,大致能分成三个派别:成本驱动派、收入驱动派、无收入派。选哪种方法,直接决定了结果分析引擎是按"实际成本投入进度"来算,还是按"开票收入进度"来算,又或者根本不碰收入只算资产。
2.2 成本驱动派:成本收益比法与完工百分比法
成本收益比法(Cost-Based Method)是销售订单结果分析最常用的方法。核心思路是用成本投入进度替代完工进度:
完工率 = 实际成本 ÷ 计划成本
然后用这个完工率去乘计划收入,得到应确认收入;成本侧则直接按实际发生额确认为当期成本。这个方法的隐含假设是:成本投入和项目进度成正比,花费了50%的计划成本,就相当于完成了50%的项目。
完工百分比法(Percentage of Completion Method,简称POC法)的逻辑和成本收益比法类似,差别在于成本侧不是直接按实际成本确认,而是也按完工率从计划成本里推算出炉。也就是说,收入和成本都按完工率来确认。
2.3 收入驱动派:销售成本法(Sales Revenue Method)
销售成本法是完全相反的一条路线:完工率 = 实际收入 ÷ 计划收入。收入按实际开票/确认的收入进损益,成本则按收入进度从在制品中结转出来。
这里有个容易绕晕的点:销售成本法既然叫"销售成本法",但它的计算核心反而是收入。名字里的"销售成本"指的是它要去推算"本期应该确认多少销售成本"。
这一派还有一个变体叫销售成本百分比法(Percentage of Sales Revenue Method),比销售成本法更精细,适合收入凭据明确的长期合同,但日常项目里用得不算多。
2.4 只算在制品不算利润:实际成本法与期间成本法
实际成本法(Actual Costs Method)是生产订单的标准配置。它的逻辑极其简单:不碰收入,不碰利润,只做一件事——把未完工订单上的实际成本(扣除已结算金额)资本化为在制品。订单一旦被标记为技术完成(TECO)或交货(DLV),就不再计算在制品,剩余成本全部结算为差异。
期间成本法(Period-Based Method)更简单:每个期间的实际成本直接进当期损益,不资本化、不提准备金。适合维修工单这类不需要在制品核算的费用性订单。
2.5 方法选型的业务场景对照
| 成本对象类型 | 推荐评估方法 | 主要输出 |
|---|---|---|
| 内部生产订单 | 实际成本法 | 在制品、完工差异 |
| 带收入的销售订单(按单生产) | 成本收益比法 | 应计收入、利润准备金 |
| 长期项目/工程合同 | 销售成本法或POC法 | 按进度确认收入、成本 |
| 维修工单/费用性订单 | 期间成本法或不启用RA | 无在制品,直接进损益 |
选型时还有一个关键判断标准:这个成本对象有没有收入。有收入,才能走成本收益比法或销售成本法;没有收入的内部工单,老老实实用实际成本法。
3. 算清楚账:成本收益比法与销售成本法的完整计算推演
3.1 成本收益比法手工推演
光讲概念没感觉,我用一组数字完整推演一遍。
假设一张销售订单,计划收入10,000,计划成本8,000。本月实际成本发生4,000,实际开票收入0。
第一步,算完工率: 完工率 = 实际成本4,000 ÷ 计划成本8,000 = 50%
第二步,算应确认收入: 应确认收入 = 完工率 × 计划收入 = 50% × 10,000 = 5,000
第三步,算应确认成本: 成本收益比法下,应确认成本 = 实际成本 = 4,000
第四步,算利润准备金: 利润准备金 = 应确认收入5,000 - 应确认成本4,000 = 1,000
结果分析行项目就是三条:
- 收入:5,000(应计收入,不是开票收入)
- 成本:4,000(实际发生成本确认为已实现成本)
- 准备金:1,000(未实现利润准备金)
这个"准备金"不是坏账准备,它是推迟确认的利润。按完工进度来看,这个项目已经有1,000的利润,但因为还没开票收款,SAP先把这笔利润放在负债端,等项目真正开票时再释放出来。
下个月继续发生成本3,000,累计实际成本7,000,完工率87.5%,应确认收入8,750,利润准备金1,750。上期已经确认过5,000收入和1,000准备金,所以本期补确认3,750收入,补提750准备金。
这就是结果分析"按月滚动重算"的机制:每个期间重新算一遍累计数,减去以前期间已经过账的金额,剩下的才是本期要过账的净值。
3.2 销售成本法手工推演
同一张订单换个场景:计划收入10,000,计划成本8,000,本月实际开票收入5,000,实际成本5,000。
第一步,算完工率: 完工率 = 实际收入5,000 ÷ 计划收入10,000 = 50%
第二步,算应确认收入: 销售收入法下,应确认收入 = 实际开票收入 = 5,000
第三步,算应确认成本: 应确认成本 = 完工率 × 计划成本 = 50% × 8,000 = 4,000
第四步,算在制品: 实际成本5,000 - 应确认成本4,000 = 1,000
这里就出现了在制品。为什么在销售收入法下会出现在制品?因为按收入进度来看项目只完成了50%,理论上只应该消耗计划成本的50%(4,000),但实际已经消耗了5,000,说明有一部分成本投入还没被收入进度覆盖,这1,000先资本化放进资产端。
下个月如果开票收入又确认5,000,累计实际收入10,000,完工率100%,应确认成本 = 8,000。上期已确认成本4,000,本期补确认4,000,同时把在制品1,000冲销为零。
3.3 同组数据,两种方法下的损益影响对比
把两个推演放在一起看,区别一目了然:
| 对比项 | 成本收益比法 | 销售成本法 |
|---|---|---|
| 完工率依据 | 实际成本÷计划成本 | 实际收入÷计划收入 |
| 收入确认方式 | 按完工率推算 | 按实际开票收入 |
| 成本确认方式 | 按实际发生额 | 按完工率推算 |
| 差额去向 | 利润准备金 | 在制品/准备金 |
| 适合场景 | 开票时点靠后、成本持续发生 | 按里程碑开票、收入凭据明确 |
从损益角度看,成本收益比法更强调"收入按进度确认",解决的是成本发生了但收入还没开票的问题;销售成本法更强调"成本按收入进度匹配",解决的是收入已确认但成本归集不均衡的问题。
3.4 期末怎么过账:WIP、准备金、收入调整科目
计算完成以后,KO88结算会按照行标识和成本要素的配置,把行项目过到总账科目。标准的科目方向如下:
在制品资本化: 借:在制品(存货类科目) 贷:成本调整科目(损益类)
准备金计提: 借:收入调整/成本调整(损益类) 贷:准备金(负债类)
未开票收入确认: 借:收入调整科目(资产负债调整类) 贷:销售收入科目(损益类)
已确认成本: 借:销售成本科目(损益类) 贷:成本调整科目(损益类)
这些科目的借贷方向完全由OKG7里的成本要素配置决定,项目之间的差异主要就在行标识与成本要素的映射关系上。
4. 配置链路上容易被忽略的四个节点
4.1 评估方法下挂在结果分析版本上
不少人配置结果分析时只记得定义评估方法,却忘了方法和版本的挂接关系。完整的配置链路是这样的:
OKG8定义评估方法 → OKG4定义结果分析版本(RA Version)→ 结果分析版本中指定评估方法 → 成本对象(订单类型/销售订单类型)分配结果分析版本。
所以一张订单最终用哪种评估方法,取决于它挂的结果分析版本,而不是直接在订单上写方法名。生产订单的标准配置通常是RA版本0搭配实际成本法;销售订单的RA版本一般也是版本0,但评估方法会改成成本收益比法或销售成本法。
4.2 行标识与成本要素映射
结果分析计算完,生成的每一行金额都要有对应的行标识(Line ID)和成本要素,否则KO88过账时直接报错。
行标识在OKG9里定义,比较常见的有:
- 1:收入(Revenue)
- 2:成本(Costs)
- 3:资本化成本(Capitalized Costs,在制品)
- 4:准备金(Reserve)
OKG7里再把这些行标识挂到具体的初级成本要素上。不同公司用的科目不一样,有的用生产成本差异科目,有的用收入调整科目,没有统一标准,但每个行标识最终必须能映射到一个有效成本要素。
4.3 订单类型必须激活结果分析标志
配置层面的另一个高频坑:结果分析方法和版本都配好了,但订单类型里没有勾选"结果分析"标志,导致月底KKAO检查时订单根本不参与计算。
生产订单类型在OPPG/OPPH里的"结果分析"页签勾选,销售订单类型在VOV8里设置。更隐蔽的是销售订单除了订单类型,行项目类别也要激活结果分析。经常有人只检查了订单类型,忽略了行项目类别,结果销售订单一直跑不出结果分析行项目。
4.4 计划成本与计划收入:算完工率的种子
不管用哪种进度类评估方法,完工率的分母都是计划值。没有计划值,结果分析就是无源之水。
生产订单如果没有做成本估算(CK11N/CK40N),计划成本为空,完工率要么是无穷大要么是零,算出来的结果完全没法用。销售订单还需要维护计划收入。很多项目把合同金额记录在外部系统,却忘了在销售订单行项目上维护计划收入,导致应确认收入永远算不出来。
上线前一定要和业务确认:哪些订单必须做成本估算,计划收入在哪个单据里维护、谁负责维护、什么时点维护。这块职责没有理清,结果分析跑出来的数字就没有说服力。
5. KKA1/KKA3实操与月度循环的常见坑
5.1 单张订单的结果分析怎么看
KKA1打开后,输入订单编号、结果分析版本(默认0)、会计年度和期间,回车就能看到这张订单的结果分析行项目列表。每一行包含行标识、金额、累计金额、已过账金额,差异就是本期需要结算的金额。
KKA2输入WBS元素或网络,KKA3输入销售订单行项目,操作逻辑一致。这三个事务代码最大的价值在于:月末批量运行前,抽查十几张典型订单,验证取数和计算逻辑是否正确。尤其是那些本月成本发生额大但收入为0的销售订单,以及接近完工但还没TECO的生产订单,这两类订单最容易在结果分析上出问题。
5.2 后台批量执行与程序对应关系
月末几百上千张订单,不可能一张张执行KKA1/KKA2/KKA3。批量执行的三个入口是:
- KKAO:订单结果分析,面向生产/内部订单;
- KKAP:项目结果分析,面向WBS/网络;
- KKAS:销售订单结果分析。
这三个事务代码可以带变式传到后台跑,也可以直接放在结账流程里作为后台作业步骤。实际项目中更推荐用后台作业方式,把结果分析、CO凭证汇总、KO88结算串成一条链,减少人工干预。
后台作业跑完以后,一定要检查日志,确认有没有红字报错或未被分析的订单。常见的问题是变式里的选择条件太窄,导致某些订单漏算。
5.3 结果分析结果怎么检查
结果分析跑完,光看订单上有没有行项目还不够,至少要做三个动作:
一是核对底表KKBL,按订单、期间、行标识查看汇总金额,确认没有遗漏的成本对象; 二是检查CO凭证(COEP/COVP)里结果分析自动产生的冲销和重估分录是否成对出现; 三是模拟KO88结算,检查结果分析行项目过账到总账是否有科目缺失或金额不平。
特别是第二点,结果分析按月滚动重算,每个月会自动冲销上一期的结果分析行项目再重新生成。如果你在CO凭证里看到只有新生成没有冲销,或者冲销金额对不上,那基本可以断定上期有手工调整过的痕迹。
5.4 五个高频报错与解决思路
结合项目上的实际经验,下面这五个问题出现频率最高,写出来供大家排查时参考。
第一个是**"没有为结果分析版本分配成本要素"**。基本是OKG7没配好,或者配置的成本要素被误设成了辅助成本要素。把成本要素改成初级成本要素就好。
第二个是**"订单未找到计划成本/计划收入"**。典型原因是没有运行成本估算,或者销售订单计划收入没维护。解决办法不是改程序,而是补计划数据,然后重新跑结果分析。
第三个是**"已交货订单仍产生在制品"**。排查订单状态,如果销售订单已经DLV但生产订单还没TECO,需要检查状态配置文件,确保完工状态对应的结算规则正确。SAP里对DLV/TECO订单不计算在制品是一条硬逻辑,如果还在算,说明状态设置有问题。
第四个是**"结果分析行项目大量重复"**。往往是因为同一天重复跑KKAO,虽然系统会自动冲销上一批结果分析再重算,但检查不及时会造成CO凭证积压。建议批量运行后检查日志,确认每个成本对象只处理了一次。
第五个是**"上期WIP没冲销干净"**。结果分析是按累计数重算的,理论上会自动冲销上期,但如果上期是手工在KO88里做过冲销或用工具改过在制品,就会遗留余额。遇到这种情况只能逐个期间去核对KKBL,找到残留金额的源头再处理。
再补充一个我项目上反复强调的实操建议:结果分析虽然可以后台自动跑,但绝不是"跑了就行"的黑盒。上线初期建议连续三个月抽查同一批代表性订单,把手工推算的完工率、应确认收入与系统输出对齐一遍,确认配置没有跑偏。等模式稳定了再逐步减少抽查范围。至于KKA1/KKA2/KKA3这三个代码,日常用得最多的是KKA1和KKA3,遇到跨公司销售、退货业务、部分开票等复杂场景时,结果分析的逻辑会变得很绕,建议遇到具体问题时先手工按完工率推一遍,再和系统行项目比对,基本都能快速定位问题出在数据还是配置上。