简介:本资源是一份面向SAP顾问、成本控制专员及生产计划实施人员的MTO(按单制造)模式深度实践指南,系统解决定制化生产场景下销售订单控制选择、后台配置落地与期末成本结算等核心难题。资料以1个3.29MB的PPTX文件呈现,共142页,涵盖MTO理论框架、不采用/采用销售订单控制的差异化配置路径、成本对象控制逻辑、销售业务全流程映射及期末结算实务要点,并通过对比表格、流程图与典型配置界面示意强化理解。内容预览显示其结构严谨:从MTO概述切入,分模块详解两种控制方式的适用场景、库存估值策略、成本归集维度及结果分析功能,特别突出高价值订单、复杂变式生产的控制需求。目前已有7658人学习下载,是多年一线项目经验沉淀的实操型配置手册,可直接用于企业MTO方案设计、系统实施验证与成本核算体系优化。
1. SAP MTO生产模式配置及操作详解:不是“配完就跑”的PPT,而是能直接上手调通销售订单成本流的实战包
你有没有遇到过这种场景:在SAP里建好一个MTO物料,下了销售订单,也跑了生产订单,但月底一跑CO-PA报表,发现“这个订单到底赚没赚”根本对不上——成本没归集到订单项,库存移动不触发价值流,结算时系统报错“未定义成本对象”,甚至销售订单库存(Sales Order Stock)显示数量有、金额为零?这不是配置漏了几个字段,而是整个成本对象控制逻辑没立住。这份《SAP MTO生产模式配置及操作详解》不是泛泛而谈的理论课件,而是某资深SAP CO/PP顾问在多个制造型企业落地MTO项目后,把三年内反复验证、踩坑、回滚、再上线的真实配置快照和前台操作链路,压缩成142页可逐页复现的实操手册。它覆盖从“为什么必须用销售订单做成本对象”到“如何让SD发货自动触发CO结算”,从“无价值销售订单库存怎么设才不翻车”到“期末结算时如何避免‘未清生产订单’卡死结账”。适合两类人:一是刚接手MTO模块配置的ABAP+FI/CO背景顾问,需要一份带参数截图逻辑、禁用选项说明、后台表校验点的落地指南;二是负责MTO业务流程设计的制造企业计划/成本主管,想看清SAP里“按单生产”四个字背后,到底要动哪些开关、填哪些值、绕哪些坑。它不讲SAP架构史,只解决一个问题:让每一笔客户订单,在系统里从询价到收款,全程成本可追溯、价值可计量、利润可核算。
2. MTO成本对象控制的本质:销售订单项(SO Item)为何必须成为成本收集单位?
2.1 为什么“不采用销售订单控制”在MTO场景下是伪命题?
很多初学者误以为“MTO=按订单生产,所以自然就按订单算成本”,结果在配置时选了“不采用销售订单控制”(即Controlling by Period),上线后立刻暴雷。核心矛盾在于:MTO的业务本质是订单驱动的价值闭环,而Period控制是MTS(按库存生产)的逻辑——它把成本归集到产品组、成本中心或期间,再通过标准价分摊。但在MTO中,同一物料(如定制化机柜)不同订单的BOM、工艺路线、外协费用、特殊包装成本可能天差地别。若强行走Period路径,系统会用同一套标准价去套所有订单,导致:
- 订单A用了高价进口轴承,成本被均摊到订单B的普通国产件上;
- 订单C加急空运组件,运费无法单独归集,只能进制造费用池,最终稀释到所有产品;
- 客户要求的特殊测试报告费用,因无对应成本对象,只能挂在内部订单,月底手工调整。
提示:SAP官方文档明确指出——“For Make-to-Order production with individual customer requirements, controlling by sales order is mandatory to reflect actual costs and commitments.”(《SAP Library: Product Cost by Sales Order》)。这不是建议,是前提条件。
2.2 销售订单项作为成本对象的四大不可替代能力
当启用“Controlling by Sales Order”(事务码OKKP配置),系统将销售订单行项目(SO Item)实例化为一个动态成本对象(Cost Object),其能力远超静态的生产订单号。关键能力如下:
| 能力维度 | 具体表现 | 后台支撑机制 |
|---|---|---|
| 实时成本归集 | 所有与该SO Item关联的生产订单、采购订单、内部活动,其实际成本(Material, Labor, OH)自动过账至该SO Item,无需人工分配 | 表COEP中OBJNR字段存储SO Item对象编号(格式:OR+销售订单号+行项目号),KDFLG标识是否为销售订单成本对象 |
| 收入与成本配比 | 开票(VF01)时,系统自动将开票金额与已归集成本匹配,生成毛利分析数据,直接输出CO-PA报表中的“订单盈利能力” | CO-PA特性0SORDER(销售订单)和0SORDITEM(行项目)被激活,开票凭证(BKPF/BSID)通过VBELN关联至COEP |
| 承诺与在途管控 | 采购申请(PR)、采购订单(PO)创建时,系统自动在SO Item层级生成资金承诺(Commitment);发货(VL01N)后,自动生成“在途货物”(Goods in Transit)评估,避免库存虚高 | 表COVP记录承诺值,COSS记录在途货物价值,均由SO Item对象号驱动 |
| 多级BOM穿透核算 | 对于含半成品(Semi-Finished)的MTO结构(如:整机→模块→PCB),成本可逐层穿透至最末级SO Item,支持“一个订单、多级委外、分段结算” | CK11N成本估算基于SO Item展开BOM,CO88结算时按BOM层级递归归集 |
2.3 配置入口与核心开关:OKKP中必须勾选的三个致命选项
进入事务码OKKP(Define Controlling Area),选择对应控制范围(Controlling Area),点击“Sales Order”标签页。此处有三个选项决定MTO成本流生死,缺一不可:
[✓] Sales order controlling active [✓] Valuated sales order stock [✓] Settlement of sales order itemsSales order controlling active:全局开关。关闭则整个控制范围禁用SO成本对象,所有后续配置失效。Valuated sales order stock:决定销售订单库存是否参与价值核算。MTO必须勾选!否则MB1B移动类型601发货时,库存价值不更新,CO88结算报错“no valuated stock for sales order item”。Settlement of sales order items:启用订单行项目结算。若不勾选,生产订单完工确认(CO15)后成本滞留在生产订单,无法自动结算至SO Item。
注意:这三个选项必须在控制范围激活前完成配置。若已激活控制范围,修改后需执行
OKTZ重置控制范围(需停业务窗口),否则配置不生效。这是新人最常踩的“玄学”坑——改完OKKP以为好了,结果前台一切照旧。
2.4 物料主数据的关键字段:确保MTO物料被系统识别为“订单驱动”
仅OKKP配置不够,物料主数据(MM01/MM02)中以下字段必须精准设置,否则系统拒绝将其纳入SO成本流:
| 视图 | 字段名 | 必填值 | 作用说明 |
|---|---|---|---|
| MRP视图 | MRP类型 | PD(MRP)或ND(无MRP) | PD启用MRP运行,ND适用于纯手工计划的MTO;禁用M0(无MRP)或VB(基于库存) |
| MRP视图 | 策略组 | 20(Make-to-Order) | 此字段触发系统按SO生成计划订单(Planned Order),而非独立需求(Independent Requirement) |
| 会计视图 | 评估类 | Z001(示例,需与CO配置一致) | 必须与OKKP中定义的“销售订单库存评估类”匹配,否则MB1B报错“valuation area not defined” |
| 基本视图 | 项目类别组 | NORM(标准项目)或ERLA(BOM项目) | ERLA用于含BOM的MTO物料,确保BOM展开正确;NORM用于无BOM的简单定制件 |
验证方法:用事务码MM03查看物料,切换至“MRP”视图,确认策略组为20;切换至“会计1”视图,确认评估类存在且状态为“已维护”。
3. 前台操作全链路:从销售订单创建到CO88结算,每一步都带参数截图逻辑
3.1 创建销售订单:必须启用“销售订单库存”并指定评估类
以事务码VA01创建销售订单为例,关键步骤如下:
- 输入售达方、送达方、订单类型(如
TA-标准订单); - 在行项目中输入物料号,系统自动带出“项目类别”为
TAN(标准订单项目); - 关键动作:点击行项目 → “项目细节”(Enter)→ 切换至“计划行”标签页 → 勾选
Sales order stock(销售订单库存); - 继续点击“项目细节” → “会计”标签页 → 在“评估类”字段手动输入与物料主数据一致的评估类(如
Z001); - 保存订单(Ctrl+S),系统生成销售订单号(如
10000001)及行项目号(如10)。
逻辑说明:勾选
Sales order stock是触发MTO库存管理的开关。若不勾选,后续MB1B移动类型601发货时,系统默认走普通库存(MBEW表),而非销售订单库存(S031表),导致成本对象丢失。评估类必须手动输入,因为系统不会自动从物料主数据继承——这是SAP设计的“显式确认”机制,防止误用。
3.2 运行MRP:生成计划订单而非独立需求
销售订单保存后,需运行MRP(MD01/MD02)生成生产计划。MTO模式下,MRP输出必须是“计划订单”(Planned Order),而非“独立需求”(Independent Requirement)。验证方法:
- 运行
MD02(单物料MRP),输入物料号和工厂; - 查看“需求”部分:应显示
Planned Order(计划订单),数量=销售订单需求数量; - 若显示
Ind. Reqmt(独立需求),说明物料主数据中“策略组”未设为20,或MRP类型错误。
计划订单(事务码MD11查看)的“需求来源”字段(BEDAR)必须为04(销售订单),而非01(独立需求)。这是后续生产订单(CO01)创建时,系统自动带出SO Item号的前提。
3.3 创建生产订单:SO Item号自动带入,禁止手动修改
使用事务码CO01创建生产订单:
- 输入工厂、生产版本、物料号;
- 关键现象:在“订单抬头”中,“销售订单”字段(
AUFNR旁)自动带出销售订单号(如10000001); - 在“项目概览”中,行项目“销售订单”列(
VBELN)自动填充销售订单号,“行项目”列(POSNR)自动填充行项目号(如10); - 保存后,生产订单号(如
10000001)与SO Item绑定。
参数说明:此自动带入依赖于计划订单的
BEDAR=04。若手动在CO01中修改“销售订单”字段,会导致COEP中OBJNR与VBELN/POSNR不一致,CO88结算时报错“sales order item not found”。
3.4 生产订单执行:从领料到完工确认,成本实时归集
生产订单执行涉及多个事务码,每步均触发成本过账:
- 领料(MB1A):移动类型
261(发料至生产订单),系统自动将物料成本计入该生产订单,并同步归集至SO Item(COEP中OBJNR为OR1000000100000010); - 报工(CO11N):确认工时,系统将作业成本(Labor, OH)计入生产订单,再传递至SO Item;
- 完工确认(CO15):确认产出数量,系统将生产订单中归集的全部成本(材料+人工+费用)暂存于SO Item,此时
COEP中KOART='D'(借方)记录完整成本。
验证:运行KOB1(成本对象行项目),输入SO Item对象号(OR1000000100000010),可见所有借方成本明细。
3.5 发货与开票:触发价值流与收入确认
- 发货(VL01N):选择销售订单,创建交货单,过账移动类型
601(发货至客户)。此时:- 库存减少:销售订单库存(
S031表)数量减1; - 价值转移:
COEP中生成贷方凭证(KOART='C'),金额=标准成本×发货数量; - 在途货物:
COSS表中生成“Goods in Transit”条目,金额=发货数量×标准成本。
- 库存减少:销售订单库存(
- 开票(VF01):基于交货单创建发票,系统自动:
- 更新
COEP:贷方记录开票金额(KOART='C'); - 生成CO-PA行项目:
0SORDER=10000001,0SORDITEM=10,0AMOUNT=开票金额; - 自动计算毛利:开票金额 - 已归集成本(
COEP借方累计)。
- 更新
血泪经验:若发货后未开票,
CO88结算时系统会将“在途货物”视为未实现收入,强制生成“Reserves for Goods in Transit”(在途储备),导致利润表失真。务必确保发货后72小时内完成开票。
4. 避坑:MTO配置与操作中五个高频翻车点及根治方案
4.1 现象:CO88结算报错“Message no. KI344: No settlement rule exists for cost object”
- 原因:销售订单行项目未定义结算规则(Settlement Rule)。系统找不到“成本从哪里来、结算到哪里去”的路径。
- 解决:
- 进入事务码
KO02(更改成本对象),输入SO Item对象号(OR1000000100000010); - 点击“结算”标签页 → “结算规则” → 点击“新建”;
- 设置接收方为
P&L Account(损益科目),如70000000(主营业务收入),比例100%; - 保存。此后
CO88可正常结算。
- 进入事务码
4.2 现象:MB1B移动类型601发货,销售订单库存数量减少但价值不变(金额为零)
- 原因:“Valuated sales order stock”未在OKKP中启用,或物料主数据中评估类未维护,或销售订单行项目未勾选
Sales order stock。 - 解决:
- 检查
OKKP→ “Sales Order”标签页 → 确认Valuated sales order stock已勾选; - 用
MM03检查物料主数据 → “会计1”视图 → 确认评估类存在且有效; - 用
VA02打开销售订单 → 行项目 → “项目细节” → “计划行” → 确认Sales order stock已勾选。
- 检查
4.3 现象:CO15完工确认后,COEP中无成本,或成本归集到错误对象(如成本中心)
- 原因:生产订单创建时未自动带入SO Item号,或生产版本中未维护“销售订单”作为需求来源。
- 解决:
- 检查生产版本(CA01)→ “基本数据”标签页 → “需求来源”必须为
Sales order; - 若已创建错误生产订单,不可修改SO号,需取消(CO02 → 取消标记)后重新用CO01创建;
- 运行
CO03查看生产订单抬头 → 确认“销售订单”字段非空。
- 检查生产版本(CA01)→ “基本数据”标签页 → “需求来源”必须为
4.4 现象:VF01开票后,CO-PA报表中无该订单行项目的毛利数据
- 原因:CO-PA未激活
0SORDITEM特性,或开票凭证未正确关联销售订单。 - 解决:
- 进入
KEA0(CO-PA初始化)→ 选择控制范围 → “特性” → 确认0SORDITEM已激活; - 运行
VF03查看发票凭证 → 点击“凭证流” → 确认VBELN(销售订单号)与POSNR(行项目号)正确传递; - 若缺失,需检查
OVKK(开票凭证类型配置)中“销售订单”字段是否设为必输。
- 进入
4.5 现象:期末运行CO88,大量生产订单状态为“CLSD”(已关闭)但未结算
- 原因:生产订单已技术性关闭(TECO),但未执行“结算”(Settlement)操作。系统认为成本已结束,不再允许结算。
- 解决:
- 进入
CO02→ 输入生产订单号 → “订单抬头” → 取消TECO状态(需权限); - 运行
CO88结算; - 结算完成后,再执行
TECO。切记:TECO必须在CO88之后!
- 进入
5. 期末结算深度解析:CO88参数设置、结算顺序与异常处理技巧
5.1 CO88结算的核心参数:不是“一键结算”,而是精准控制成本流向
事务码CO88(结算:成本对象)是MTO模式下利润确认的终极阀门。其参数设置直接决定成本能否正确结转至损益。关键参数如下:
| 参数 | 推荐值 | 作用说明 | 不推荐值风险 |
|---|---|---|---|
| 成本对象 | OR1000000100000010(SO Item对象号) | 精确指定结算范围,避免全范围扫描拖慢系统 | *(全部):结算所有SO Item,包括已开票、未发货的,导致重复结算 |
| 结算期间 | 001/2024(当前会计期间) | 限定结算凭证过账期间,确保财务一致性 | 000/0000:系统默认期间,易与历史期间混淆 |
| 结算类型 | FUL(完全结算) | 将生产订单全部成本一次性结转,适用于已发货订单 | PER(周期性):仅结转部分成本,MTO中极少使用 |
| 结算规则 | 0001(默认规则) | 读取KO02中定义的规则,指向损益科目 | 空白:系统报错“no settlement rule” |
| 过账日期 | 20240630(期末最后一天) | 确保所有凭证在关账日统一过账 | SY-DATUM(系统日期):若跨月运行,凭证日期错乱 |
逻辑说明:
CO88不是“结算生产订单”,而是“结算成本对象”。因此必须输入SO Item对象号(OR开头),而非生产订单号(10000001)。输入生产订单号会导致系统忽略SO层级,直接结算至生产订单本身,失去订单级毛利分析能力。
5.2 结算顺序:三步不可逆,错一步全盘皆输
MTO期末结算必须严格遵循以下顺序,任何跳步都将导致数据断裂:
第一步:结算生产订单至销售订单项(CO88)
- 目标:将生产订单(
COEP中OBJNR为OR...)的借方成本,结转至SO Item的贷方; - 前提:生产订单状态为
REL(已释放)或PCNF(已确认),且未TECO; - 输出:
COEP中新增KOART='C'凭证,OBJNR仍为SO Item号。
- 目标:将生产订单(
第二步:结算销售订单项至损益科目(CO88)
- 目标:将SO Item中累计的借方成本(生产成本)与贷方收入(开票金额)轧差,结转至损益;
- 前提:SO Item中已存在开票凭证(
VF01生成); - 输出:
COEP中生成最终损益凭证,OBJNR为SO Item号,KOART='C'指向损益科目。
第三步:运行CO-PA实际值更新(KE24)
- 目标:将
COEP中SO Item的结算凭证,同步至CO-PA数据库,供报表查询; - 前提:
KEA0中0SORDER和0SORDITEM特性已激活; - 输出:
CE1xxxx表中生成实际值行项目,0SORDER=10000001,0SORDITEM=10。
- 目标:将
避坑提醒:若跳过第一步直接执行第二步,
CO88会报错“no costs to settle for sales order item”,因为SO Item中只有开票收入(贷方),无生产成本(借方)。必须先让成本“流进来”,再“流出去”。
5.3 异常结算处理:当CO88报错“KJ293: Settlement period does not match”时怎么办?
此错误表示结算期间与成本对象的会计期间不一致。常见于跨月发货场景(如5月发货,6月开票)。根治方案:
- 检查成本对象期间:运行
KOB1→ 输入SO Item对象号 → 查看COEP中所有凭证的CPUDT(过账日期),确认是否跨月; - 强制指定结算期间:在
CO88中,不依赖默认期间,手动输入001/2024(5月)和002/2024(6月)分别结算; - 使用“结算变式”:事务码
OKO7创建变式,勾选Settlement period = Posting period,确保结算期间与凭证期间强绑定。
5.4 验证结算结果:三张表交叉核对,杜绝“黑匣子”盲区
结算完成后,必须通过以下三张表交叉验证,确保数据闭环:
| 表名 | 关键字段 | 验证逻辑 | 示例值 |
|---|---|---|---|
| COEP | OBJNR,KOART,DMBTR,CPUDT | OBJNR为SO Item号,KOART='D'(借方)为成本,KOART='C'(贷方)为收入/结算,CPUDT为结算日期 | OBJNR='OR1000000100000010',KOART='C',DMBTR=600.00 |
| COSS | OBJNR,WRTTP,DMBTR | OBJNR同上,WRTTP='01'为在途货物,DMBTR应等于发货数量×标准成本 | OBJNR='OR1000000100000010',WRTTP='01',DMBTR=600.00 |
| CE1xxxx(CO-PA) | 0SORDER,0SORDITEM,0AMOUNT,0CURR | 0SORDER与0SORDITEM匹配SO,0AMOUNT为开票金额,0CURR为币种 | 0SORDER='10000001',0SORDITEM='10',0AMOUNT=600.00 |
从那以后我每次跑CO88,都强制走一遍这三张表核对:先
KOB1看凭证是否生成,再COSS看在途是否清零,最后KE24导出CO-PA数据比对开票额。哪怕多花10分钟,也比月底关账时发现毛利为负、全盘返工强。希望帮到你。
本文还有配套的精品资源,点击获取