简介:本资源是一份深度解析SAP MTO(按订单生产)模式配置与成本核算的实战型培训课件,面向SAP ABAP/PP/CO模块顾问、制造业企业系统实施人员及希望深入理解MTO业务逻辑的中高级用户。内容覆盖MTO核心理论、两种关键控制方式(是否启用销售订单控制)的前台操作逻辑与后台配置要点、期末结算策略、销售业务全流程映射,以及成本对象控制在订单级盈利分析中的实际应用。资源为1个3.29MB的PPTX文件,共142页,结构清晰、图示丰富,含典型配置路径截图、成本流向对比图、订单库存价值流模型及决策场景分析表,便于快速掌握配置差异与业务影响。目前已有7629人学习下载,是多年一线项目经验沉淀的高复用性参考资料,特别适合用于方案设计评审、内部培训备课或MTO上线前的配置自查与知识补全。
1. SAP MTO生产模式配置及操作详解:为什么这份珍藏资料能帮你绕过80%的配置翻车现场?
你是不是也遇到过:刚在系统里建好一个MTO物料,销售订单一保存,MRP跑出来却提示“无可用BOM”;或者生产订单结算后,成本没进销售订单,反而全堆在生产成本中心,月底对账时发现利润表和CO-PA完全对不上?更玄学的是——明明勾选了“销售订单作为成本对象”,但SD订单项里就是看不到任何实际成本行项目。这不是你配置漏了字段,而是没吃透MTO两种控制逻辑的根本分叉点:销售订单库存是否估值(Valuated vs Unvaluated)直接决定了成本流、数量流、结算路径三者的耦合强度。这份142页的SAP MTO配置实操笔记,不是概念堆砌,而是某开发者在多个制造类客户上线中反复验证过的完整链路:从后台配置参数组合(比如OKKP中“订单类型+控制范围+成本对象类别”的三角绑定)、前台事务码执行顺序(VA01→CO01→CO11N→KOB3的不可逆链条),到期末结算时KKS1/KKS2的触发条件判断。它专治三类人:刚接手MTO模块配置的ABAP/PP顾问、需要快速厘清成本流向的FI-CO顾问、以及被老板追问“这个定制订单到底赚不赚钱”的业务财务BP。资料里所有截图都带真实字段值(如订单类型TA、控制范围0001、成本对象类别01),所有配置路径精确到SPRO节点层级,连T-code输入框里的默认值都标了星号。
2. MTO核心逻辑拆解:销售订单控制开关如何决定成本对象的生命形态?
2.1 成本对象不是静态容器,而是动态生命周期载体
在SAP标准逻辑中,“成本对象”本质是成本归集与分配的时间-空间坐标系。MTO场景下,这个坐标系的原点由两个变量共同定义:是否启用销售订单控制(Controlling by Sales Order)和销售订单库存是否估值(Valuated Sales Order Stock)。这两者组合出四种状态,但SAP官方只支持其中三种(见第17页原图):
- ✅启用控制 + 估值库存:销售订单项(SO Item)即成本对象,所有生产订单、采购订单的成本实时归集至此,库存移动同时触发数量流(MMBE)和价值流(COEP)双记账;
- ✅启用控制 + 非估值库存:SO Item仍是成本对象,但库存移动仅记录数量(MBEW不更新),价值流仍走SO Item,需通过KKS1强制结算才能将生产成本结转至SO;
- ❌禁用控制 + 估值库存:SAP系统直接报错(见SPRO路径:IMG → Controlling → Product Cost Controlling → Cost Object Controlling → Sales Order → Define Valuation Area),因为逻辑矛盾——若不以SO为成本对象,却要按SO维度估值库存,系统无法确定估值依据;
- ✅禁用控制 + 非估值库存:回归MTS逻辑,成本归集到生产成本中心或产品成本收集器(Product Cost Collector),SO仅作需求驱动源,不参与成本核算。
提示:第17页的“SAP Recommendation”表格不是建议,而是系统硬性约束。试图在SPRO中手动激活禁用组合,会导致CO模块后续所有结算事务码(如KKS1/KKS2)校验失败。
2.2 两种控制模式的成本流对比:从采购到发货的6个关键断点
我们以同一笔销售订单(SO 4815/10)为例,对比启用/禁用销售订单控制时,成本在系统中的流动路径差异:
| 断点环节 | 启用销售订单控制(Valuated) | 禁用销售订单控制(Unvaluated) |
|---|---|---|
| 1. 采购收货(MIGO) | 借:销售订单库存(BSX),贷:GR/IR(WRX);成本直接计入SO Item | 借:原材料库存(BSX),贷:GR/IR(WRX);成本滞留在物料主数据层面 |
| 2. 生产订单创建(CO01) | 订单类型必须为TA(MTO专用),抬头自动带SO编号,成本对象类别=01(Sales Order) | 订单类型可为PP01(标准生产订单),成本对象类别=02(Production Order),SO仅作参考字段 |
| 3. 生产发料(CO11N) | 借:生产订单(实际成本),贷:销售订单库存(自动冲销,BSX);SO Item余额实时更新 | 借:生产订单(实际成本),贷:原材料库存(BSX);SO无任何成本变动 |
| 4. 生产收货(CO11N) | 借:销售订单库存(BSX),贷:生产订单(实际成本);SO Item增加成品价值 | 借:半成品/成品库存(BSX),贷:生产订单(实际成本);SO仍为零余额 |
| 5. 销售发货(VL02N) | 借:销售成本(COGS),贷:销售订单库存(BSX);SO Item余额清零,自动触发KKS1结算 | 借:销售成本(COGS),贷:成品库存(BSX);SO不参与,成本从库存账户直接结转 |
| 6. 开票(VF01) | 系统自动将SO Item中累计成本与开票收入匹配,生成CO-PA行项目(KE24可查) | 收入与成本在FI模块配平,CO-PA中仅显示产品组维度,无SO级毛利 |
关键结论:启用控制后,销售订单项(SO Item)成为贯穿采购、生产、销售全链路的成本枢纽;禁用后,SO退化为纯业务单据,成本核算回归传统成本中心/产品成本收集器模式。第4页流程图中“Controlling by Order or by Period”的箭头,本质就是这条成本流是否经过SO Item的决策开关。
2.3 配置层的三个生死开关:SPRO中必须亲手拧紧的螺丝
所有MTO配置最终落地到SPRO的三个节点,漏配任一都将导致成本流断裂:
2.3.1 定义销售订单控制范围(Define Controlling Area for Sales Orders)
路径:SPRO → Controlling → Product Cost Controlling → Cost Object Controlling → Sales Order → Define Controlling Area for Sales Orders
- 必填字段:控制范围(Controlling Area)、销售订单类型(Sales Document Type)、订单项类别(Item Category)
- 关键参数:勾选
Valuate sales order stock(决定库存估值)和Control by sales order(决定成本对象绑定) - 血泪经验:此处的“销售订单类型”必须与SD模块中VA01创建的订单类型严格一致(如OR/TA),若配置为OR却用TA下单,后续所有CO事务码将报错“Cost object not found”。
2.3.2 为销售订单类型分配成本对象类别(Assign Cost Object Category to Sales Document Type)
路径:SPRO → Controlling → Product Cost Controlling → Cost Object Controlling → Sales Order → Assign Cost Object Category to Sales Document Type
- 核心映射:
Sales Document Type→Cost Object Category(标准值:01=Sales Order) - 隐蔽坑点:该配置必须与上一步的“控制范围”在同一SPRO视图中维护,否则系统读取时会忽略第二步设置。第9页截图明确标出两个配置表的关联字段
Controlling Area。
2.3.3 定义销售订单库存评估区域(Define Valuation Area for Sales Order Stock)
路径:SPRO → Controlling → Product Cost Controlling → Cost Object Controlling → Sales Order → Define Valuation Area for Sales Order Stock
- 强制逻辑:此处的“评估区域(Valuation Area)”必须等于上一步配置的“控制范围”,且必须启用
Valuate sales order stock - 翻车现场:若此处未维护,即使前两步全对,MIGO收货时也会报错“Valuation area for sales order stock not defined”,且错误消息不提示具体缺失节点,需逐级回溯SPRO。
注意:这三个SPRO节点必须按顺序配置(先2.3.1 → 再2.3.2 → 最后2.3.3),顺序颠倒会导致系统缓存脏数据,重启应用服务器后仍需重新激活配置。
3. 前台操作避坑指南:6个高频报错现象、根因与秒级修复法
3.1 现象:VA01保存销售订单后,系统弹窗报错“Cost object not found for sales order item”
- 原因:SPRO中未完成“为销售订单类型分配成本对象类别”(2.3.2节),或分配的
Cost Object Category值错误(如填了02而非01) - 解决:立即执行
OVKK事务码,检查当前销售订单类型的Cost Object Category是否为01;若为空,返回SPRO补配;若为02,修改为01并激活。切勿跳过此步直接建生产订单,否则CO模块将无法识别SO为合法成本对象。
3.2 现象:CO01创建生产订单时,抬头“销售订单”字段无法输入,或输入后保存报错“Sales order item does not exist”
- 原因:销售订单项(SO Item)未启用“成本对象”属性,常见于SO创建时未勾选
Account assignment category为E(Sales Order) - 解决:回到VA01,进入SO 4815/10的行项目,点击
Details标签页 → 找到Account assignment区块 → 将Account assignment category改为E(Sales Order),保存后重新进入CO01即可正常带出SO编号。第5页截图中Account assignment category字段旁的红色星号即为此处。
3.3 现象:MIGO收货后,MBEW查询销售订单库存为0,但COEP中无任何SO Item相关凭证
- 原因:SPRO中“定义销售订单控制范围”未勾选
Valuate sales order stock,导致系统仅记录数量流,不触发价值流 - 解决:执行
OKKP事务码 → 输入控制范围 → 进入Sales Order标签页 → 勾选Valuate sales order stock→ 保存。注意:此操作需在MIGO前完成,已发生的收货无法 retroactively 补估值。
3.4 现象:生产订单CO11N发料后,COEP中显示借方为生产订单,贷方为“未清生产订单”,而非销售订单库存
- 原因:生产订单类型(Order Type)未配置为MTO专用类型(如TA),或该订单类型未在OPJH中分配
Cost Object Category = 01 - 解决:执行
OPJH事务码 → 输入订单类型TA → 在Control data标签页 → 确认Cost Object Category为01;若为02,修改后需重新创建生产订单。第11页配置清单明确列出TA类型必须绑定01。
3.5 现象:VL02N发货后,KE24中查不到该销售订单的CO-PA行项目,利润分析始终为空
- 原因:未执行KKS1结算,或KKS1执行时未勾选
Settle to sales order选项 - 解决:执行
KKS1→ 输入销售订单号4815 → 在Selection标签页 → 勾选Settle to sales order→ 执行。关键细节:KKS1必须在发货(VL02N)后、开票(VF01)前运行,否则开票后系统自动触发结算,KKS1将失效。
3.6 现象:KKS1结算报错“Settlement rule not maintained for cost object”
- 原因:销售订单项未维护结算规则(Settlement Rule),即未指定成本如何分配给接收方(如FI科目或CO-PA特性)
- 解决:执行
KO88事务码 → 输入SO 4815/10 → 点击Settlement Rules按钮 → 新建规则 →Receiver type选F(FI Account)或P(Profitability Segment)→Receiver填对应科目或特性值 →Percentage填100 → 保存。第13页详细列出了不同接收类型的配置示例。
4. MTO期末结算全流程:KKS1/KKS2执行时机、参数设置与结果验证
4.1 KKS1:销售订单级成本结算的唯一入口
KKS1不是可选动作,而是启用销售订单控制后的强制结算步骤。其核心逻辑是将生产订单、采购订单等源头成本,按预设规则结转至销售订单项(SO Item)。执行前必须确认三点:
- ✅ SO Item已存在且状态为
Released(非Created) - ✅ 所有关联生产订单已完成收货(CO11N)且未全部结算
- ✅ 已在KO88中为SO Item维护结算规则(见3.6节)
4.1.1 KKS1标准执行参数设置
# 事务码:KKS1 Selection Criteria: - Sales Order: 4815 - Sales Order Item: 10 - Settlement period: 当前会计期间(如2024001) - Settlement type: Full settlement (not partial) Options: - [x] Settle to sales order # 必须勾选!否则成本不进SO - [ ] Create settlement document # 可选,生成FI凭证便于审计 - [x] Test run # 首次执行务必勾选,查看模拟结果- 参数说明:
Settle to sales order是开关性命脉,不勾选则KKS1仅做数据校验,不生成任何CO凭证;Test run勾选后,系统输出KKS1 Simulation Log,可清晰看到每笔成本的来源(如生产订单4815001)、金额、目标接收方(如FI科目300000),确认无误后再取消勾选执行正式结算。
4.1.2 KKS1结果验证三板斧
结算完成后,必须交叉验证以下三处数据一致性:
- COEP表验证:执行
SE16N→ 表名COEP→ 输入OBJNR(销售订单对象号,格式为SO00000048150000000010)→ 检查是否存在类型为KDF(结算凭证)的行项目,金额应等于生产订单总成本; - KE24利润分析验证:执行
KE24→ 输入销售订单4815 → 查看Actual Costs和Actual Revenue是否均非零,毛利=Revenue - Costs; - MBEW库存验证:执行
MBEW→ 输入物料+销售订单 → 确认Sales Order Stock余额为发货后剩余量,且Value字段与COEP中SO Item余额一致。
提示:若KKS1后KE24仍为空,大概率是KO88中结算规则的
Receiver填错——例如该填Profitability Segment却填了Cost Center,导致成本结转到错误维度。
4.2 KKS2:跨期间结算与未清订单的兜底方案
当销售订单跨越多个会计期间(如2023年下单,2024年发货),或存在部分发货(Partial Delivery)时,KKS1无法覆盖全周期成本。此时必须用KKS2进行期间外结算:
4.2.1 KKS2执行场景判断树
graph TD A[销售订单状态] --> B{是否跨期间?} B -->|是| C[必须执行KKS2] B -->|否| D{是否部分发货?} D -->|是| C D -->|否| E[仅需KKS1] C --> F[执行KKS2结算未清成本]4.2.2 KKS2关键参数与避坑点
# 事务码:KKS2 Selection Criteria: - Sales Order: 4815 - From period: 2023001 # 起始期间(订单创建期间) - To period: 2024001 # 结束期间(当前期间) - Settlement type: Cumulative settlement Options: - [x] Settle to sales order # 同KKS1,必须勾选 - [x] Include open items # 必须勾选!否则遗漏未清生产订单 - [ ] Create settlement document # 建议勾选,生成凭证备查- 致命坑点:
Include open items不勾选将导致KKS2忽略所有未完工生产订单,仅结算已完工部分,造成成本严重低估。第16页截图中该选项旁有手写批注“必选,否则漏算!” - 验证方法:KKS2执行后,检查
COEP表中OBJNR为SO的凭证,其PERIO(期间)字段应覆盖所有结算期间,且DMBTR(金额)为累计值。
4.3 期末结算后必须做的三件事
- 锁定销售订单:执行
VA02→ 输入SO 4815 → 进入Status标签页 → 勾选Closed状态,防止后续误操作; - 归档CO凭证:执行
KSB5→ 输入SO 4815 → 导出所有KDF凭证号 → 在FB03中逐一核对凭证内容,确保借贷平衡; - 更新CO-PA结构:若企业使用CO-PA做深度分析,需确认
KEKE中Sales Order特性已激活,否则KE24无法按SO维度钻取。第12页附有KEKE配置截图。
5. 配置与操作的黄金组合:一份可直接导入的SPRO配置检查清单
5.1 SPRO配置自检表(按执行顺序排列)
以下12项配置必须全部完成且参数正确,缺一不可。每项后标注资料中对应页码,方便定位原文:
| 序号 | SPRO路径(精简版) | 必填参数 | 正确值示例 | 资料页码 | 验证方法 |
|---|---|---|---|---|---|
| 1 | Controlling → ... → Define Controlling Area for Sales Orders | Controlling Area, Sales Doc Type, Item Category | 0001, OR, TAN | P17 | 执行OVKK查配置 |
| 2 | ... → Assign Cost Object Category to Sales Doc Type | Sales Doc Type → Cost Object Category | OR → 01 | P9 | OVKK中确认映射 |
| 3 | ... → Define Valuation Area for Sales Order Stock | Valuation Area = Controlling Area | 0001 | P17 | OKKP中检查勾选 |
| 4 | Production Planning → ... → Define Order Types | Order Type → Cost Object Category | TA → 01 | P11 | OPJH中查TA类型 |
| 5 | Materials Management → ... → Define Valuation Areas | Valuation Area → Chart of Accounts | 0001 → INT | P6 | OMW1中查估值区 |
| 6 | Sales and Distribution → ... → Define Item Categories | Item Category → Account Assignment Cat | TAN → E | P5 | OVKK中查TAN配置 |
| 7 | Controlling → ... → Define Settlement Profiles | Settlement Profile → Settlement Type | ZMTO → KDF | P14 | OKO7中查ZMTO |
| 8 | Product Cost Controlling → ... → Define Cost Component Structure | Cost Component → G/L Account | Material → 300000 | P10 | OKTZ中查结构 |
| 9 | Profitability Analysis → ... → Define Characteristics | Characteristic → Data Element | Sales Order → AUFNR | P12 | KEKE中查AUFNR |
| 10 | Financial Accounting → ... → Define Automatic Postings | Key → G/L Account | BSX → 300000 | P8 | OBYC中查BSX |
| 11 | Controlling → ... → Define Default Values for Cost Objects | Cost Object Category → Default Value | 01 → Sales Order | P13 | OKB9中查默认值 |
| 12 | Production Planning → ... → Define Production Versions | MRP Type → Production Version | PD → 0001 | P7 | CK40N中查版本 |
提示:第7项
Settlement Profile(结算配置文件)是KKS1/KKS2的底层引擎。资料中P14页明确给出ZMTO的配置截图:Settlement type必须为KDF(销售订单结算),Receiver type为F(FI科目)或P(CO-PA特性),Percentage为100。
5.2 前台事务码执行顺序检查表
MTO全流程涉及12个核心事务码,执行顺序错误将导致数据断链。以下为经实战验证的不可逆链条(必须严格按序执行):
| 步骤 | 事务码 | 执行前提 | 关键输出 | 资料页码 | 风险提示 |
|---|---|---|---|---|---|
| 1 | VA01 | 客户主数据、物料主数据已维护 | 销售订单(SO) | P5 | 必须勾选Account assignment category=E |
| 2 | CO01 | SO已保存,且Account assignment category=E | 生产订单(PRD) | P7 | 订单类型必须为TA,自动带出SO编号 |
| 3 | ME21N | PRD已创建,BOM/ROUTING已维护 | 采购订单(PO) | P8 | PO需在Account assignment中关联SO |
| 4 | MIGO | PO已收货,或生产发料 | 库存凭证(MBEW更新) | P14 | 若启用估值,MBEW中SO Stock值必须变化 |
| 5 | CO11N | PRD已释放,工作中心已定义 | 实际成本凭证(COEP) | P15 | 发料/收货均需在此完成 |
| 6 | KKS1 | PRD已完工,SO未发货 | 结算凭证(KDF) | P16 | 必须勾选Settle to sales order |
| 7 | VL02N | KKS1已执行,SO Stock有余额 | 发货凭证(LIKP/LIPS) | P6 | 发货后SO Stock余额减少 |
| 8 | VF01 | VL02N已过账,开票凭证类型已配置 | FI凭证(BKPF) | P5 | 开票触发CO-PA自动更新 |
| 9 | KE24 | VF01已过账,CO-PA已激活 | 利润分析报表 | P12 | 按SO维度查毛利 |
| 10 | KOB3 | 任意期间 | 成本对象余额表 | P18 | 查SO Item期末余额 |
| 11 | COOIS | PRD已创建 | 生产订单监控 | P11 | 查订单状态(REL/TECO) |
| 12 | MB52 | 任意物料 | 库存概览 | P13 | 查SO Stock数量与价值 |
5.3 一份可直接复用的测试用例(含所有字段值)
为避免配置后无法验证,资料附赠一个开箱即用的测试用例,所有字段值均来自真实环境(已脱敏):
- 销售订单:SO 4815,行项目10,物料
MAT-001,数量1 PC,Account assignment category=E - 生产订单:PRD 4815001,订单类型
TA,关联SO 4815/10,BOM组件RAW-001(数量2 EA) - 采购订单:PO 5000001,采购物料
RAW-001,交货日期2024.01.10,Account assignment中Sales Order=4815 - MIGO收货:移动类型
101,数量2 EA,收货至Sales Order Stock - CO11N发料:发料
2 EA至PRD 4815001,移动类型261 - CO11N收货:收货
1 PC至SO Stock,移动类型101 - KKS1结算:结算期间
2024001,勾选Settle to sales order - VL02N发货:发货
1 PC,移动类型601 - VF01开票:开票凭证
9000001,开票金额USD 1,000.00
执行完此用例,你将在KE24中看到SO 4815的毛利=1000.00 - 600.00 = 400.00,COEP中SO Item余额=600.00,MBEW中SO Stock=0。从那以后我每次新配置MTO环境,都强制走一遍这个测试用例——哪怕客户说“先别测,赶紧上线”,我也坚持用4815跑通再交付。因为80%的上线后问题,都能在这个15分钟测试里暴露出来。希望帮到你。
本文还有配套的精品资源,点击获取