简介:面向SAP顾问、成本会计与生产计划人员的MTO生产模式学习资料,围绕按单制造场景下销售订单是否作为成本对象这一核心问题展开。内容覆盖MTO概述、不采用销售订单控制与采用销售订单控制两种方案及其后台配置、期末结算活动、销售业务流程和成本对象控制,并延伸到销售订单库存的数量流与价值流、订单级成本归集与盈利能力分析等主题,适合需要系统梳理SAP MTO配置逻辑、理解成本核算差异的初中级用户对照学习。资源包为1个PPTX演示文稿,约3.29MB,共142页,以图文与流程示意方式组织章节,便于按主题检索和培训使用。目前已有7636人学习下载。借助两种控制方式的比较、配置要点与结算思路,读者可建立从销售订单到生产订单再到成本对象的完整认知,并据此判断企业应选择哪种库存评估与控制策略。
1. 一张销售订单压住整条生产线
客户下二十台非标机柜,交期六周。销售在系统里保存订单的那一刻,采购、生产、仓库的动作全被这一行订单号牵着走:原材料不能拿去补别的单,半成品堆在线上不能挪用,财务月底还得说清楚这二十台到底赚没赚。这就是 SAP MTO(按单生产)最典型的现场。真正难的是成本核算这一层:成本挂在生产订单上还是销售订单行项目上,销售订单库存要不要做评估,期末结算先跑哪一步,这三点选错,后面所有报表口径都会跟着偏。这份资料把 MTO 的概述、两种控制方式、前后台配置和期末结算活动连成了一条线,适合正在推按单生产方案、或者接了定制化项目要把成本对象真正落地的从业者。
2. SAP MTO 的成本对象怎么选:销售订单行、生产订单与销售订单库存的关系
成本对象这个概念,落到系统里就是“成本往哪个容器里装”。按库存生产装在生产订单或期间上,按单生产多了一个选择:装在生产订单上,还是装到销售订单行项目上。选错容器,成本照样能出来,但没有人知道某一单到底花了多少,销售订单库存的金额也是空的,月结时只能靠手工台账补,补到第三个月基本就会失效。这一章先把三个基础概念讲清楚,后面的配置和操作才知道为什么这么点。
2.1 成本对象从生产订单搬到销售订单行
按库存生产的逻辑很直接:生产订单是成本对象,收货入库,生产订单上的实际成本和标准成本一比,差异要么进库存、要么进获利分析,产品卖给谁不影响成本归集。到了按单生产,客户订单本身就是需求源,管理层自然想再多看一层——这一单的收入、料工费、在途、承诺能不能放在一起看。
不采用销售订单控制时,系统只把销售订单当成需求驱动:销售订单行带出需求类型,跑出计划订单,转成生产订单,成本仍然收在生产订单上,期末差异按产品组进获利分析。这套跑法和按库存生产几乎没有区别,只是需求来源从预测换成了实际订单。好处是配置简单、批量大时性能稳;代价是销售订单行项目上看不到实时成本,客户中途改配置、加数量,也只能等生产订单结算完才知道这单亏了还是赚了。
采用销售订单控制时,销售订单行项目本身成为成本对象,系统在订单行上生成一个成本收集用的对象号,生产成本、采购成本、结算转来的成本都往这个对象上归集。它能做的事情明显多一层:可以在订单行上挂收入、看承诺、算在途、做结果分析,形成一张订单级的损益视图。代价是配置链路更长,物料主数据、需求类别、订单类型、结算参数文件、结果分析版本,任何一环没带出来,成本就会掉到生产订单上,销售订单行永远是零。
判断标准并不复杂:如果客户只关心产品组层面的毛利,产量大、订单结构简单,走不采用销售订单控制更省事;如果订单金额高、结构复杂、客户要求单订单追溯,或者存在变式配置,采用销售订单控制几乎是必选项。正文里那句“销售订单成本估算对变式生产是必要的”,说的就是这个场景——配置不同的产品,不按订单行算,根本没法比价。
2.2 销售订单库存的有价与无价
决定成本对象之后,紧接着要决定销售订单库存评不评估。MTO 的库存按客户订单段管理,专业叫法是销售订单库存,收货时必须带销售订单号和行项目号,发货也只能核销对应订单的数量,A 订单的库存挪不到 B 订单上。这是 MTO 和普通库存最大的行为差异,很多库存被占用的现场问题,根源都在这里。
有价销售订单库存,数量流和价值流是合并的。生产订单收货 101 带销售订单号过账,库存数量增加的同时金额也进库存科目,和按库存生产的收货体验一致。多层按单生产时,半成品逐层收货,装配成本能一层层滚上去,生产订单收货后可以正常算差异,差异再结算到库存或获利分析。资料里把它称为“CO-PC 与 PP 逻辑解耦的第一步”,意思是从这一步开始,成本会计可以独立于生产计划去跑核算,不必等生产端把所有工序都走完。
无价销售订单库存,数量流和价值流是拆开的。数量照样进销售订单库存,收货、发货都能看到数量变化,但金额不落在库存上;成本先在生产订单上归集,直到订单结算或者采购发票校验,才转到销售订单行项目这个成本对象上。这种模式下,分配给它的生产订单不计算差异,因为价值根本没有停在库存里,算差异没有落脚点。换来的好处是:销售订单行能看到完整的实际成本,配合结果分析可以算出在制品、准备金和在途,项目型、高订单价值的场景更吃这一套。
这里有一处血泪经验:有价和无价不是开关一拨就完事,它会影响库存科目、差异计算、期末结算顺序和报表取数。中途切换,历史库存的金额不会自动重算,已经结算过的订单也不会回头改,最后一定出现账实差。要切就在新物料或新订单类型上灰度,别在同一个物料上直接改。
2.3 四象限决策表
把两个维度交叉,四种组合里有一种是系统不支持的,其余三种各有适用面。资料里给出的推荐组合,实务中也确实是最常见的起步方案。
| 是否采用销售订单控制 | 销售订单库存是否评估 | 可行性 | 典型用法 |
|---|---|---|---|
| 不采用 | 有价 | 可行 | 大批量、产品组维度控制,销售控制方式接近按库存生产 |
| 不采用 | 无价 | 不支持 | 价值流没有归集对象,月末成本无处可去 |
| 采用 | 有价 | 可行,推荐 | 既要订单级透明,又要库存资金可见,差异能正常计算 |
| 采用 | 无价 | 可行 | 订单价值高、结构复杂,用结果分析驱动在制品和准备金 |
第二行“不支持”不是配置麻烦,而是逻辑上不成立:库存不评估,又没有销售订单行作为成本对象,生产订单结算出来的成本没有接收方,系统只能报错或者把金额丢到差异科目里,账就烂了。所以在项目里听到“我们想无价库存、但不想用销售订单控制”,基本可以判定这个方案走不通,得先说服业务改其中一头。
第三行是多数企业的起点:销售订单库存有价,同时启用销售订单行作为成本对象。这样库存有金额、差异能算、订单行上还有事前成本估算和承诺,兼顾了两边的诉求。第四行是项目型或者高复杂度定制的常见做法,前提是财务愿意接受“库存不反映资金占用、靠结果分析看进度”这套口径。
3. 不采用销售订单控制:需求类型、科目分配类别与生产订单类型
这条路的目标很明确:让按单生产跑起来,但成本核算保持按库存生产那套逻辑。配置量相对小,出问题的点集中在需求类型有没有带对、生产订单的科目分配类别是不是按单、结算参数文件有没有分配。下面按配置顺序拆开,最后给一遍前台走单。
3.1 什么时候该走这条路
资料里列了几个典型场景:生产控制聚焦在产品组、产量高、销售控制方式与按库存生产类似、装配式生产、带包装变型的按单生产。翻译成现场语言就是:订单很多、每单金额不大、客户不太追问单订单成本,财务更关心这个月这一类产品整体赚了多少。
这类企业的生产模式往往接近“接到订单才装配”,组件是通用的,成品按客户配置。成本上真正需要盯的是标准成本准不准、差异大不大,而不是每一单的料工费拆到分。把销售订单行设成成本对象,反而会让成本对象数量暴涨,月结跑不完,报表也没人看。
反过来,如果客户明确要求报价时就看到单订单成本、交付后要出单订单毛利、销售合同里带罚则条款需要按单核算,那就别省这一步,直接走第 4 章的方案。省下来的配置时间,后面会以对账工时的方式还回去。
3.2 物料主数据与需求类型的落地设置
按单生产的第一颗扣子在物料主数据上。计划策略组决定需求类型,需求类型再决定需求类别,需求类别里带着“是否个别客户需求”的标识,这个标识决定了销售订单行能不能带出销售订单库存。
常见做法是:成品物料在 MRP 视图里把计划策略组设成按单生产对应的策略组,需求类型随之带出;销售订单行项目类别通过物料主数据和订单类型的组合确定,行项目上能看到需求类型和需求类别;物料主数据的销售视图里把“成本核算”标识打开,否则销售订单成本估算跑不出来。组件物料一般按库存管理,不需要单独设按单策略,除非它也做客户专用件。
| 配置点 | 事务代码或位置 | 作用 |
|---|---|---|
| 计划策略组 | 物料主数据 MRP 视图 | 带出需求类型,决定是否个别客户需求 |
| 需求类型与需求类别 | 后台需求管理配置 | 控制销售订单库存、可用性检查、计划行 |
| 行项目类别确定 | 销售订单类型配置 | 决定销售订单行是否参与成本估算 |
| 物料成本核算标识 | 物料主数据销售视图 | 允许在销售订单里做事前成本估算 |
| 销售订单库存科目 | OBYC 中 BSX 与 GBB 相关修改码 | 收货、发货的库存与对方科目 |
这张表里最容易漏的是最后一行。销售订单库存的科目配置和普通库存不是一套,评估类和科目修改码配错,收货时系统直接报“科目确定失败”,订单一多就是批量报错。上线前拿一个典型物料在测试客户端把收货、发货、冲销各跑一遍,比在配置文档里核对十遍都管用。
3.3 生产订单类型与成本核算变式
生产订单是这条路线上的成本容器,所以订单类型的参数必须配到位。订单类型决定了科目分配类别、结算参数文件、成本核算变式、差异变式和结果分析码,这几个参数一起决定成本怎么收、差异怎么算、期末怎么结。
科目分配类别是这里的关键。按单生产的生产订单通常用按单对应的科目分配类别,创建订单时强制填销售订单号和行项目,收货自动进销售订单库存。如果订单类型里科目分配类别留空,生产订单就变成普通按库存订单,收货进自己的库存,成本再也挂不回销售订单,后面的报表全是错的。
结算参数文件负责定义生产订单结算到哪些接收方、按什么规则分配。常见配置是结算到物料库存和差异科目,比例按金额或数量。成本核算变式决定标准成本怎么估、评估变式决定物料和作业价格从哪来。这几项在订单类型参数里一般会带出默认值,但默认值对不对,得拿一张真实订单跑一遍 KKS1 看差异结果才能确认。
注意:订单类型参数改动会影响所有新建订单,已创建的订单不会自动更新。要调整科目分配类别或者结算参数文件,先确认在制订单的数量,必要时用批量变更或者新建订单类型承接,不要直接改老订单类型。
3.4 前台走单顺序:从 VA01 到 KO88
配置确认后,前台走一遍完整链路,能把大部分配置问题暴露出来。顺序不要跳,每一步的产出都是下一步的输入。
- 用 VA01 创建销售订单,选按单生产的订单类型,录入客户、物料、数量、交期,保存后记下订单号和行项目号。
- 用 MD01 或 MD02 跑物料需求计划,进入 MD04 查看计划订单行,确认需求来源是销售订单而不是预测。
- 用 CO40 或 CO41 把计划订单转成生产订单,或者在 MD04 里直接转换,转换后进入 CO03 查看订单头,确认科目分配页签里带出了销售订单号和行项目。
- 用 MIGO 做生产订单收货,移动类型 101,参考生产订单,收货后进入 MSC3N 查看销售订单库存,数量和金额都应该有值。
- 用 MIGO 做组件发料,移动类型 261,确认组件成本进了生产订单。
- 用 VL01N 创建交货单,VL02N 发货过账,移动类型 601,库存减少。
- 用 VF01 开票,收入进财务和获利分析。
- 用 KO88 结算生产订单,把成本和差异结到库存或差异科目。
- 用 KE30 或获利分析报表查看这批订单的收入、成本、差异,确认口径和财务账一致。
这条链路跑通,说明需求类型、科目分配、库存评估、结算参数基本对齐。跑不通的时候,先看生产订单的科目分配页签有没有销售订单号,再看销售订单库存的金额是不是零,两个现象能定位到八成问题。
4. 采用销售订单控制的配置:让销售订单行成为成本收集器
这条路线的核心变化只有一句话:销售订单行项目成为成本对象,生产成本最终要落到这一行上。听起来简单,实际有三处开关要同时打开,少一处成本就漏到生产订单或者差异科目里。这一章按“开关、有价、无价、报表”四段讲,配置和操作混在一起写,方便对照系统点。
4.1 激活销售订单成本对象的三处开关
第一处是需求类别。销售订单行要成为成本对象,需求类别里必须带出个别客户需求,同时销售订单行项目上要有成本核算标识。这个标识通常由物料主数据的销售视图带出,也可以用订单类型的行项目类别控制。标识没打开,销售订单行就只是需求单据,系统不会在它上面建成本收集对象。
第二处是订单行的结算规则。销售订单行作为成本对象,期末要有接收方,结算规则决定成本往哪转。常见做法是在销售订单行项目上自动带出结算规则,接收方是获利分析段或者结果分析对象。如果订单行上没有结算规则,VA88 结算时会直接报“结算规则未定义”,订单一多就是成片报错。
第三处是生产订单与销售订单的关联。生产订单的科目分配类别必须带出销售订单,创建时强制录入销售订单号和行项目,收货 101 才能进销售订单库存。三处开关里这一处最容易漏,因为订单能建、能收货、能发料,表面上看不出问题,直到月末发现销售订单行上的实际成本是零。
我一般会按这个顺序确认:先看物料主数据的成本核算标识和计划策略组,再看销售订单行项目的结算规则,最后看生产订单的科目分配页签。三步都过,再谈有价无价。
4.2 有价销售订单库存:数量流与价值流合并
有价模式下,生产订单收货 101 带销售订单号,库存数量和金额同时增加,库存科目有余额,销售订单库存报表能看到每一单占用了多少资金。发货 601 时,库存减少,成本通过销售订单库存的科目结转进获利分析,收入也在获利分析里,两边一减就是这单的毛利。
这条路径的优点是直观:库存有金额,差异能算,多层装配的成本能逐层滚上去,和按库存生产的操作体验基本一致。财务月底看资产负债表,销售订单库存是实打实的存货,不需要额外的备查账。生产订单用 KKS1 算差异,用 KO88 结算,差异进库存或者获利分析,流程和按库存生产几乎一样。
缺点是它只解决了“库存和差异”,没解决“订单级透明”。销售订单行项目上有事前成本估算、有承诺、有在途,但实际成本的容器仍然是生产订单,销售订单行更多是展示和对比。要做到真正按订单行归集实际成本,得看下一节的无价模式。
配置上要盯住三个点:销售订单库存的评估必须激活,否则收货不产生金额;库存科目和对方科目在 OBYC 里按评估类和销售订单库存相关修改码配好;生产订单类型的差异变式和结算参数文件要能算差异、能结算。这三点里任何一点没配,表现出来的现象都是“收货成功但金额为零”或者“结算报错”。
4.3 无价销售订单库存:数量流和价值流拆开之后
无价模式把数量和金额拆成两条线。数量线走销售订单库存,收货、发货、库存报表都能看到数量;金额线走销售订单行项目和分配给它的订单,生产订单归集成本,结算时转到销售订单行,采购组件的发票校验也直接进销售订单行。库存本身不承载金额,所以生产订单不算差异,因为没有库存作为差异的落脚点。
这套模式适合订单价值高、结构复杂、需要按进度确认在制品和在途的场景。系统通过结果分析来计算销售订单行的完工进度,进而算出在制品、准备金、在途,再通过结算把成本和收入转到财务和获利分析。资料里提到的“在途和储备的计算能力”,指的就是这一套。
操作上要特别注意顺序。生产订单先归集成本,期末先跑结果分析,再跑销售订单结算,最后才是财务过账。顺序反了,结果分析拿不到最新的成本,算出来的在制品是旧的,结算出去以后又要冲回,来回几次账就乱了。无价模式下生产订单不计算差异,这一点要提前和业务说清楚,否则业务会一直追问“为什么这单没有差异”。
无价模式还有一个隐性成本:对账复杂度上升。库存报表只有数量,金额要去销售订单行上看,两边口径不一致时,需要拿货物移动明细和成本行项目明细逐笔对。这也是为什么很多企业明明做了无价,最后还是加了一套销售订单库存金额的辅助报表。
| 对比项 | 有价销售订单库存 | 无价销售订单库存 |
|---|---|---|
| 数量流 | 销售订单库存 | 销售订单库存 |
| 价值流 | 随收货进库存 | 进销售订单行成本对象 |
| 生产订单差异 | 可计算 | 不计算 |
| 期末结算 | 生产订单结算为主 | 结果分析加销售订单结算 |
| 库存资金可见性 | 直接可见 | 需要结果分析间接反映 |
| 适用场景 | 大批量、结构相对简单 | 高订单价值、结构复杂 |
4.4 结果分析、在途与承诺:报表口径怎么统一
采用销售订单控制以后,报表会多出几个口径:销售订单行的计划成本、实际成本、在制品、准备金、在途、承诺。这几个数各自有来源,不统一口径就会出现“销售说这单赚了、财务说这单亏了”的经典场面。
结果分析版本决定用哪种方法评估完工进度,常见的是按收入法或者按完工百分比。版本里配置评估方法、成本要素、结算接收方,执行时按销售订单行逐行算。在途一般来自交货单已发货未开票的部分,承诺来自采购申请、生产订单对销售订单的占用。承诺这个数在项目型订单里特别重要,因为它反映的是“已经承诺出去但还没发生的成本”,不纳入报表,毛利会被高估。
统一口径的做法是固定一张订单级报表:计划成本取销售订单成本估算,实际成本取销售订单行归集的成本,差异等于两者相减,在制品和准备金取结果分析结果,在途单独列一列。每月结算前后各跑一次,对比差异,差得多的订单逐笔查货物移动和成本行项目。这套动作坚持三个月,后面的月结会轻松很多。
5. MTO 常见问题排查:五个最容易翻车的点
按单生产的报错有一个共同特点:表面现象和根因隔得很远。收货报库存不足,根因可能是需求类型没带对;结算报规则未定义,根因可能是订单类型参数没分配。这一章按现象、原因、解决三段写五条现场高频问题,都是配置和操作里真实会遇到的。
5.1 库存与订单关联类问题
现象一:MIGO 做生产订单收货,移动类型 101,系统提示销售订单库存不存在或者库存数量不足,但销售订单明明还在。
原因通常有三个:物料主数据的计划策略组没有带出个别客户需求,销售订单行根本没有生成销售订单库存;收货时没有录入销售订单号和行项目号,系统按普通库存处理;销售订单行已经被删除、冻结或者交货已完成,库存段关闭。还有一种情况是可用性检查拦截,订单数量超过可用量,收货被挡住。
解决办法是分层排查:先用 VA03 打开销售订单行,看行项目状态和需求类型;再用 MM03 看物料主数据的计划策略组和销售视图;然后在 MIGO 界面确认销售订单号和行项目号是否填了;最后用 MSC3N 查销售订单库存的现有数量。四步下来,问题基本定位。如果是可用性检查拦截,去检查确认可用量和库存/需求清单,别急着改配置。
现象二:生产订单收货成功,但成本没有挂到销售订单行上,销售订单行的实际成本一直是零。
原因多半是生产订单的科目分配类别不对。订单类型参数里科目分配类别如果留空,生产订单就是普通按库存订单,收货进自己的库存,和销售订单没有成本关联。也可能是手工创建生产订单时没有填销售订单号,系统没有强制校验,订单就游离出去了。
解决方法是进 CO03 看订单头的科目分配页签,确认销售订单号和行项目号是否存在。不存在的话,检查订单类型的参数配置,把科目分配类别固定成按单对应的类别,让创建订单时强制录入。已经创建的错误订单,能在 CO02 里补科目分配就补,不能补就冲销重做,别留着过年。
5.2 成本与结算类问题
现象三:无价销售订单库存模式下,跑 KKS1 算生产订单差异,系统提示没有差异或者差异为零,业务质疑成本算错了。
原因不是算错,是无价模式下生产订单本身不计算差异。价值没有停在库存里,差异没有落脚点,系统设计上就不做这件事。真正的成本差异体现在销售订单行的结果分析里,通过实际成本和计划成本的对比反映出来。
解决办法是调整月结动作:无价模式不跑生产订单差异,改为跑结果分析,用销售订单行的实际成本和销售订单成本估算对比,看订单级的成本偏差。同时和业务对齐口径,告诉他们差异看订单行,不看生产订单。这个沟通不做,每个月都会被问一遍。
现象四:期末用 VA88 结算销售订单,系统报结算规则未定义,订单行无法结算。
原因是销售订单行项目上没有带出结算规则,或者订单类型没有分配结算参数文件。销售订单行的结算规则可以自动确定,也可以手工维护,自动确定依赖订单类型和行项目类别的配置。配置缺失时,订单能建、能生产、能发货,就是结算不了。
解决办法是先查一张报错订单的结算规则页签,确认接收方是否存在;不存在就去检查订单类型的结算参数文件分配和行项目类别的结算规则确定逻辑;配置补上以后,对已存在的订单用批量维护补结算规则,再重新跑结算。补配置之前先把报错订单清单导出来,避免漏单。
5.3 配置切换与历史数据类问题
现象五:有价销售订单库存切成无价,或者反过来,切换后前几个月的库存金额和销售订单行成本对不上,报表出现负数余额。
原因是评估方式的变更不追溯历史。已经收货进库存的金额不会因为切换而重算,已经结算的订单也不会回头改,新旧数据混在一起,科目余额自然对不上。切换时如果还有在制订单和在途库存,问题会更明显。
解决办法是切换必须选在期间边界,切换前把在制订单、在途库存、未结算销售订单全部清理或者结平,切换后用新物料或者新订单类型承接新业务,老物料保持原评估方式直到库存清零。别在期间中间切,也别指望系统自动重算。切换方案里要写清楚历史数据的处理方式,这一条比配置本身更重要。
6. 期末结算与对账:用 AUFM、COSP、MSKA 把 MTO 成本账对平
MTO 的期末结算顺序不能乱:生产订单先算在制品,再算差异,然后结算;销售订单先做结果分析,再结算;最后进获利分析。顺序错了,结果分析拿的是旧成本,结算出去再冲回,来回几次账就花了。我一般按这个顺序跑:生产订单在制品计算、生产订单差异计算、生产订单结算、销售订单结果分析、销售订单结算、获利分析过账,每一步跑完看一眼日志,有报错先处理再往下走,别攒到最后一起看。
对账靠三张表就够:AUFM 看货物移动和订单的分配关系,COSP 和 COSS 看成本行项目,MSKA 看销售订单库存数量。把这三张表和销售订单行、生产订单号串起来,数量、金额、订单号三个维度能对上,账基本就平了。下面这段查询用来做第一步核对,把销售订单行对应的生产订单和货物移动拉出来。
REPORT zmto_check. DATA: lt_afpo TYPE STANDARD TABLE OF afpo, lt_aufm TYPE STANDARD TABLE OF aufm, lv_sum TYPE p DECIMALS 3. SELECT-OPTIONS s_kdauf FOR afpo-kdauf OBLIGATORY. " 1. 取按单生产订单,科目分配类别为按单的订单才带销售订单号 SELECT aufnr kdauf kdpos gamng wemng FROM afpo INTO TABLE lt_afpo WHERE kdauf IN s_kdauf AND kdpos <> '000000'. IF sy-subrc <> 0. MESSAGE '没有取到按单生产订单,先确认科目分配类别是否为按单' TYPE 'S'. RETURN. ENDIF. " 2. 按销售订单行汇总货物移动,101 收货、261 发料、601 发货 SELECT kdauf kdpos bwart menge FROM aufm INTO TABLE lt_aufm FOR ALL ENTRIES IN lt_afpo WHERE kdauf = lt_afpo-kdauf AND kdpos = lt_afpo-kdpos AND bwart IN ( '101', '261', '601' ). " 3. 逐单对比订单数量与实际移动数量 LOOP AT lt_afpo INTO DATA(ls_afpo). CLEAR lv_sum. LOOP AT lt_aufm INTO DATA(ls_aufm) WHERE kdauf = ls_afpo-kdauf AND kdpos = ls_afpo-kdpos AND bwart = '101'. lv_sum = lv_sum + ls_aufm-menge. ENDLOOP. IF lv_sum <> ls_afpo-wemng. WRITE: / ls_afpo-aufnr, ls_afpo-kdauf, ls_afpo-kdpos, '订单收货数量', ls_afpo-wemng, '移动汇总', lv_sum. ENDIF. ENDLOOP.这段代码的逻辑很直白:先从 AFPO 取按单生产订单,条件是销售订单号非空,用来过滤掉游离出去的生产订单;再用 FOR ALL ENTRIES 从 AUFM 取对应的货物移动,只保留收货、发料、发货三类;最后逐单对比订单头上的收货数量和移动明细汇总,不一致的打印出来。参数上,销售订单号是必输的,一次别选太多,几千行以内跑起来很快;移动类型可以按需要加,比如加上 102 冲销,但冲销数量和收货数量要做正负处理,别直接相加。
实际用的时候,我会把这段查询的结果和销售订单行的成本放到一张表里对比:订单收货数量对不上,先查货物移动是不是漏了或者重复过账;数量对得上但金额对不上,再去查 COSP 里成本行项目的期间和成本要素。对到最后,差异无非三类:订单没关联、移动没记账、结算没跑完。三类都能从这三张表里定位。
从那以后我每次月结前都先用这段查询把销售订单行、生产订单和货物移动对一遍,对完再跑结算,宁可多花半小时,也不想在结算日志里捞报错。希望帮到你。
本文还有配套的精品资源,点击获取