简介围绕SAP系统中公司间采购模式展开的归纳型学习课件面向已具备MM模块基础、需要梳理集团内部交易逻辑的顾问与实施人员。内容从公司间交易的基本概念切入讲清同一集团下两家公司之间兼具采购订单与销售订单功能的复合凭证再依次覆盖工厂间转储的UB转储订单带交货单与不带交货单、一步法与两步法、无参考的库存调拨301与303305、公司间采购STO、跨公司销售、集中采购及公司间计划协议并说明涉及K寄售、O委外、Q项目等特殊库存的公司间特殊采购配置与账务处理附带跨公司清账科目与借贷关系。压缩包内为1个pptx文件约26.85MB以流程图与系统演示截图为主便于对照学习。目前已有319人学习适合希望把零散场景串成体系、补充配置思路的读者查阅。1. 先给结论一张 STO 凭证为什么同时是采购单和销售单做过 SAP-MM 的人大多经历过这个阶段看到公司间采购的配置表第一反应是这不就是把采购订单搬到了另一个公司吗。真正的难点不在事务码——ME21N、VL10B、VL02N、MIRO 全是日常操作——而在于同一张转储订单STO在 A 公司是采购凭证、在 B 公司是销售凭证一张单据被两套逻辑同时解释。谁发货、谁收货、谁开票、在途库存挂在哪个公司、跨公司清算科目借贷怎么平这些问题答不上来流程跑通了账也未必对得上。这份资料把工厂间转储、公司间采购STO、UB 转储计划协议、跨公司销售、集中采购以及 K/O/Q 类特殊库存的公司间处理串在一起覆盖了从 301、303305、351101 到 641101、647101 的完整移动类型组合以及 SPRO 里分配凭证类型、一步过程、交货类型和可用性检查这几处关键开关。适合正在做集团内交易方案选型、或者被一步法两步法到底选哪个公司间收货怎么自动触发卡住的 MM 顾问和关键用户按章往下看能直接落到配置和过账。2. 工厂间转储的四条路301、303305、351101、641101 怎么选工厂间转储看起来是同一类业务实际上 SAP 给了四条实现路径差别在于有没有单据载体和在途库存是否落到系统里。选错路径的代价不是一次过账失败而是月末对账时发现某段库存凭空消失了几天或者仓库说货早到了系统里还在途。这一章把四条路拆开最后给一张能直接拿去开会用的选型表。2.1 先分清边界有没有单据、有没有交货单判断顺序只有两步别一上来就翻配置。第一步看是否需要一张转储订单做载体。同一公司下两个工厂距离近、调拨频繁、发的人就是收的人直接 MIGO 301 一步到位不需要任何采购凭证。反之如果两个工厂分属两波人管或者需要审批、需要对账、需要留痕就该上 STO。第二步在有 STO 的前提下看是否需要走 SD 交货单。这由后台按工厂配置交货类型和可用性检查过程决定如果给工厂配了交货单类型常见是 NLSTO 行项目上就会出现装运页签必须走 VL10B/VL10D 建交货单再 PGI如果没配行项目就没有装运页签只能在 MIGO 里用 351 发货。提示一步过程One-Step只在有交货单的情形下生效。没配交货单类型却勾了一步过程配置不会报错但业务上永远走不到 647这是新手最容易踩空的地方。判断清这两步四条路径就确定了无参考 301、无参考 303305、UB STO 351101、UB STO 交货单 641/647101。下面逐条落到操作。2.2 无参考调拨301 一步法与 303305 两步法301 是最轻的方案一张物料凭证完成两个工厂的库存转移系统里不产生在途。MIGO 操作时移动类型选 301抬头填发货工厂和库存地点行项目里指定接收工厂与接收库存地点过账后同一张凭证里既有发出行也有接收行。会计上发出方减少库存、接收方增加库存两边价格不一致产生的差额进差异科目。事务码MIGO 操作 A01 收货 / 移动类型 301 抬头 工厂 发货工厂 F001库存地点 发货库位 行项目 物料 数量 接收工厂 F002 接收库存地点 结果 一张物料凭证两行发出 301 / 接收 301无在途库存303305 是两步法303 把货从发货工厂发到在途此时物权已经转移但接收方还没确认305 由接收工厂按实际清点数量做过账在途转正式库存。中间这段在途可以用 MB5T 看到。两步法多一张凭证、多一个人工动作换来的是接收方对数量的确认权和一段可追溯的在途。什么时候用哪个一个经验判断看接收方认不认发货方的数量。自己发自己收301 就够发十箱实际到九箱、需要按实收入账就必须两步。2.3 不带交货单的 UB 转储单351 发货、101 收货需要单据留痕但不想引入 SD 交货单就走 UB 转储订单。需求工厂用 ME21N 创建凭证类型选 UB转储订单行项目里工厂填接收工厂、供应工厂填发货工厂这是新手最容易填反的两个字段——记住一个原则采购订单永远站在需求方视角开。1. 需求工厂 AME21N 创建 UB 转储订单 凭证类型 UB行项目工厂 接收工厂供应工厂 发货工厂 2. 发货工厂 BMIGO 移动类型 351参考转储订单发货 系统生成在途库存可用 MB5T 查看 3. 需求工厂 AMIGO 移动类型 101参考转储订单收货 在途转正式库存生成第二张物料凭证这里如果没配交货单类型行项目上是看不到装运页签的也就无法用 VL10B 建单只能在 MIGO 里手工 351。频率高了以后每次都手工做很容易漏或者做错日期所以高频场景一般升级成计划协议ME31L 建转储计划协议ME38 维护交货计划发货工厂仍用 351 发货、需求工厂用 101 收货。计划协议把每次开一张 PO变成一张协议下滚动确认计划行操作量降下来计划行日期也成为后续 MRP 和在途统计的依据。2.4 带交货单641101 手动收货与 647 自动收货配了交货单类型之后流程整体向 SD 靠拢VL10B或 VL10D按转储订单批量生成外向交货单VL02N 拣配并发货过账。这一步的移动类型取决于一步过程开关一步过程勾选VL02N 过账用 647系统在同一动作里完成发货和收货生成一张物料凭证无在途库存。一步过程不勾选VL02N 过账用 641货发到在途需求工厂再自己 MIGO 101 收货生成两张物料凭证MB5T 能看到在途。配置位置在 SPRO 的物料管理 → 采购 → 采购订单 → 设置库存调拨订单 → 分配凭证类型, 一步过程, 交货不足限度按凭证类型 工厂组合分配。同一张 UB 单据在不同工厂组合下可以走不同的一步/两步策略这一点在做多工厂方案时很有用但也容易因为漏配某个工厂组合导致行为不一致。拣配环节还有个容易被忽略的点交货单上的批次、序列号、包装信息如果没维护647 过账会直接卡住。带批次管理的物料在 VL02N 里必须先做批次确定否则报批次未确定。2.5 选型对照把判断依据摊在一张表上方案移动类型是否建 STO是否建交货单在途库存凭证张数典型场景无参考一步法301 发收否否无1同公司近距离、自发自收无参考两步法303 发 / 305 收否否有2同公司、需接收方确认数量UB STO 两步法351 发 / 101 收是否有2有单据留痕、无 SD 发运需求UB STO 两步法带 DN641 发 / 101 收是是有2跨公司/跨远距离、走第三方运输UB STO 一步法带 DN647 自动是是无1接收方无系统操作人力UB 计划协议351 发 / 101 收是协议否有2高频、滚动计划表格之外还有三个软性判断是选型会上真正决定走向的一是距离与运输。同城近距离、库存转移频繁、收发是同一批管理者优先 301需要走第三方物流、运输周期以天计就该上 STO 并保留在途否则货在路上那几天库存归属说不清。二是接收方有没有系统操作人力。有人能在 SAP 里做收货优先两步法库存数据才有校验确实没人做才退到一步法自动收货。这个顺序不要反过来——一步法是为了省人力不是为了省事。三是财务口径。跨公司的调拨必须配置跨公司清账科目借贷关系是供方公司借公司间清算科目、贷库存商品采购公司借库存商品加差异、贷公司间清算科目。科目没配单据能过但账做不平月末总账和 MM 对不上就是典型的跑通了流程、对不上账。3. 公司间采购 STO从 ME21N 到 MIRO 的六步与三个配置开关工厂间转储解决的是货怎么搬公司间采购解决的是钱怎么结。前者可以没有发票后者必须有开票和发票校验否则两家公司的往来永远挂在账上。这一章把公司间采购的主干流程拆成六步再把决定走向的三处配置单独拎出来讲。3.1 双身份的根源内部供应商与客户主数据公司间采购里销售公司对采购公司来说是一个供应商采购公司对销售公司来说是一个客户。所以同一家公司在系统里要维护两套主数据一套供应商主数据关联它自己的公司代码和工厂一套客户主数据关联同一个公司代码。这两套主数据如果对不上最典型的症状是 STO 建单时报供应商没有在公司代码下维护或者开票时找不到客户。主数据之外还有定价。公司间交易的价格不是靠给每个物料建一条采购信息记录来维护的那样维护量会失控。常见做法是在后台给内部供应商单独配置一套定价过程用一个专用条件类型挂内部结算价各项目用的条件类型名称不一定一样按自己的定价过程定这样同一物料对外销售价和集团内结算价是分开的改价也不用逐条改信息记录。注意定价过程是公司间方案里最容易被低估的一块。价格取错了后面发票金额、两家公司的毛利、内部抵消全都跟着错而且错得很安静——单据照样过账。3.2 六步单据流每一步在哪个公司做采购公司开单、销售公司发货开票、采购公司收货校验责任是交替的第 1 步 采购公司 AME21N 创建公司间 STO供应商 销售公司 B 第 2 步 销售公司 BVL10B / VL10D 依据 STO 创建外向交货单 第 3 步 销售公司 BVL02N 拣配并发货过账641 到在途 或 647 自动收货 第 4 步 销售公司 BVF01 / VF04 创建公司间销售发票 第 5 步 采购公司 A根据 DN 收货MIGO 101——若第 3 步已自动收货则跳过 第 6 步 采购公司 AMIRO 做采购发票校验与第 4 步的销售发票匹配第 5 步存在与否取决于后台配置是不是让供方 DN 过账后自动触发客户工厂收货。这就是资料里提到的两种解决方案。自动收货省一个人工动作但一旦发货数量有争议系统里已经收进来了回头只能走冲销或后续调整手动收货多一步换来的是收货前的那次实际清点。选哪种还是回到那个判断接收方有没有人、认不认发货数量。VF01 和 MIRO 这一对必须对上。销售发票的金额来自 STO 的定价采购发票校验的金额也来自同一套定价正常情况下 MIRO 的差异应该很小如果 MIRO 频繁报容差超限先别去调容差回去查定价过程是不是取错了条件记录。3.3 三个配置开关决定单据长什么样开关一交货单类型。SPRO 路径是物料管理 → 采购 → 采购订单 → 设置库存调拨订单 → 按工厂配置交货类型和可用性检查过程。给工厂组合配上交货单类型如 NL和库存检查规则行项目上才会出现装运页签才走得了 VL10B。没配行项目是干净的只能用 MIGO 351。开关二一步过程。同一路径下分配凭证类型, 一步过程, 交货不足限度里按凭证类型 工厂分配。勾了一步过程且有交货单VL02N 用 647发货即收货无在途不勾用 641货进在途等对方 101。开关三跨公司清账科目。这是账务侧的开关。公司间交易本质是两家公司代码之间的往来必须有对应的清算科目承接。同一公司下不同工厂调拨不需要这个配置一旦跨公司缺了它借贷就不平。这三处配置有个共同特点改一处全流程行为都变而且变更在测试环境往往看不出来——测试环境只有一条数据、一个工厂组合。所以改配置前先把受影响的工厂组合列出来逐条核对。3.4 自动收货与手动收货两种模式的差别不止一步操作对比项供方 DN 后自动收货客户方手动 MIGO 收货收货触发VL02N 过账时同步触发客户方单独执行 101物料凭证一张或紧邻的两张明确的两张数量争议处理需冲销或后续调整收货前即可按实收调整对接收方人力要求无需有人做系统操作在途是否可见一步法无在途两步法可用 MB5T 查看适用场景接收方无系统操作岗有仓储/收货岗、数量需确认一个实战里的折中主流程走两步法保留在途但在 MRP 层面把在途库存纳入可用性检查的范围这样计划员不会因为货在途而重复下单。这个设置比一刀切改一步法更稳。4. 计划协议与特殊采购ME31L/ME38 和 K/O/Q/L 的物权归属前面两章是主干这一章是枝干。计划协议解决的是频率问题特殊库存解决的是物权问题——后者往往是公司间方案里最容易在账务上翻车的地方因为货在公司里物权却不一定在公司。4.1 ME31L ME38把高频调拨变成滚动计划转储计划协议的本质是把每次开一张 PO换成一张协议加滚动计划行。操作上是三步1. ME31L 创建 UB 类型的转储计划协议 抬头填供应商跨公司时是内部供应商、协议有效期 行项目填物料、目标工厂接收工厂、计划协议类型 2. ME38 维护交货计划 按日期逐行录入计划数量形成滚动计划行 3. 发货工厂 MIGO 351 参考计划协议发货接收工厂 MIGO 101 收货计划协议的价值在计划行上。计划行把未来一段时间的调拨需求提前锁定供应工厂可以据此备货MRP 也能看到这段需求。但计划行维护有个坑计划行的日期必须落在协议有效期内超出有效期的计划行在发货时会报错另外计划协议如果没有配置交货单类型仍然只能走 351/101享受不到交货单那套发运功能。资料里把UB 转储计划协议不带交货单单独列出来就是因为这是最常见的形态。滚动计划还有一个隐性成本计划行数量是需求方填的实际发货量是供应方做的两者不一致时必须有人去调计划行否则下一次 MRP 还是按旧计划跑。这个调整动作在流程文件里常常没人写。4.2 K/O/Q/L 四类特殊库存在公司间的物权与科目这四类放在一起讲是因为它们的共同点不是业务相似而是库存数量在一个公司、物权和成本归属在另一个对象上。公司间场景一旦掺进特殊库存判断标准从货在哪个工厂变成物权什么时候转移。K 寄售。寄售库存放在收货方工厂但物权属于供应方这里是内部供应商公司收货方消耗时才产生负债。公司间寄售的关键在于结算消耗之后要有结算动作把寄售库存转成应付常见是走寄售结算事务码按消耗清单生成发票。如果漏了结算库存越来越少但应付一直不涨账面上看是白拿货。O 委外加工。提供方工厂把组件发给加工方收回成品。移动类型上组件发出用 541 一类成品收货用 101 并同时冲减组件库存。公司间委外要先分清组件是跨公司转移还是在同一公司内流转跨公司的话组件发出这一步本身就是一次公司间交易要挂清算科目。Q 项目库存。按项目或 WBS 归集的库存收货时指定项目号库存不会进普通可用量。公司间项目采购里如果采购公司和项目所属公司不是同一个收货时的库存归属和成本归集要分开看——库存在收货公司成本可能归到项目的持有方。L 与外部服务采购。这类没有实物库存流转但公司间同样存在谁买谁付的问题。服务类采购可以走 STO 形态内部供应商提供服务也可以走单独的服务采购流程区别在于是否需要库存移动。没有库存移动的公司间服务账务上只剩发票校验一条链路反而更容易漏掉清算科目的配置。一个通用的排查思路遇到特殊库存的公司间问题先问三个问题——货在哪个工厂、物权属于哪个公司、成本归到哪个对象。三个答案里只要有两个不在同一主体上就必须检查清账科目和结算流程。4.3 特殊采购类型与库存确定的联动特殊库存在物料主数据的 MRP 视图里有对应的特殊采购类设置收货时系统根据它和库存确定规则决定进哪种库存。公司间场景下这个设置还要和供应工厂、收货工厂的组合对上否则会出现该进寄售的货进了自有库存这种既成事实——发现时往往已经消耗掉了只能走调整。比较稳的做法是把公司间常用的物料按特殊采购类型分组上线前针对每组跑一遍建单 → 发货 → 收货 → 查看库存类型的完整链路用 MB52 或库存类型报表确认库存落点正确再做消耗和结算。验证一次的成本远低于事后调整。5. 避坑清单五条踩过的坑按现象—原因—解决拆开这一章的每一条都在真实项目里出过写法按现象 → 原因 → 解决来方便对号入座。不必全看翻到自己正在踩的那条就行。5.1 现象MIGO 351 过账报错说移动类型不允许或参考单据不存在原因转储订单的行项目已经带了装运页签后台配了交货单类型此时业务上要求走 VL10B 建交货单后用 641/647 发货不能再退回 MIGO 351另一种常见原因是 ME21N 时把工厂和供应工厂填反了发货方变成了采购方。解决先在行项目上确认有没有装运页签——有就走 VL10B没有才用 351。同时核对 STO 的工厂字段行项目工厂是收方供应工厂是发方。改完单据后记得重新检查一步过程配置有没有跟着变。5.2 现象VL10B 跑不出交货单或者跑出来了数量为 0原因交货单生成依赖计划行日期、可用性检查、装运点和工厂日历。计划行日期早于今天、或者落在协议有效期外跑不出来没配装运点或没维护工厂日历同样跑不出来可用性检查规则配了但没维护库存数量会被压到 0。解决先看计划行日期和数量是否有效再看配置里的交货类型和可用性检查过程是否对当前工厂组合生效最后查装运点确定和工厂日历。三步都过一遍一般能定位到具体哪一环。5.3 现象一步法配置改了但过账还是 641系统里冒出了在途库存原因一步过程是按凭证类型 工厂分配的改的是别的组合或者改完没有重新建单——已经建好的转储订单在创建时就把相关信息带进去了改配置对存量单据不生效。解决确认配置里当前凭证类型和当前工厂组合那一行确实勾了一步过程然后用新建的单据测试。存量单据该冲销的冲销该手工做 101 的补做不要指望改配置能自动修正历史数据。这也是最容易在月结前夜炸的地方。5.4 现象跨公司调拨单据过了但总账对不上差一笔公司间往来原因跨公司清账科目没配或者配了但只配了一边。同一公司下不同工厂的调拨不需要这个科目所以测试时用同公司数据跑一切正常换到跨公司场景才暴露。解决先把所有涉及跨公司的工厂组合列出来逐一核对清账科目配置用一张最小单据一个物料、一个数量跑通发货和收货去总账看借贷是否平。别用大额数据测试——错一次调整成本太高。5.5 现象MIRO 发票校验报容差超限或者查不到采购订单历史原因前者多半是定价过程取错了条件记录公司间结算价和采购订单金额对不上后者通常是 VF01 还没开票或者交货单没有完成 PGI——没有发货过账就没有后续的发票和收货历史。解决先按单据流往前倒推交货单有没有 PGI → 销售发票有没有开 → 采购订单有没有收货。链路任何一环断了MIRO 都会报查不到历史。链路通了还报容差再去查定价过程别第一时间动容差配置。6. 用单据流核账三张表把一张 STO 从头串到尾配置和操作都会了以后真正的效率差距体现在排查上。我的习惯是不看界面看表——界面能告诉你单据状态表能告诉你单据之间的关系。一张公司间 STO 走完至少涉及采购、交货、物料凭证、发票四个环节每个环节都有对应的表头表行串起来就是完整的单据流。环节表头行项目关键字段采购订单EKKOEKPOEBELN、EBELP、WERKS、RESWK交货单LIKPLIPSVBELN、VGBEL参考 PO、LFIMG物料凭证MKPFMSEGMBLNR、BWART、EBELN、LFBNR采购发票RBKPRSEGBELNR、EBELN、LFBNR销售发票VBRKVBRPVBELN、AUBEL参考 DN日常排查用一段查询就够比如想看某张 STO 的所有物料移动-- 按采购订单号拉出全部物料移动用于核对发货/收货是否成对 SELECT m.MBLNR, m.MJAHR, m.BWART, m.WERKS, m.LGORT, m.MENGE, m.MEINS, m.EBELN, m.EBELP FROM MSEG AS m WHERE m.EBELN 4500000001 -- 替换为实际 STO 号 ORDER BY m.MBLNR, m.ZEILE;这段查询的逻辑是MSEG 里 EBELN 字段记录了参考采购订单所以同一张 STO 下所有 351、101、641、647 的移动都会带同一个 EBELN。字段含义上BWART 是移动类型从这个字段就能判断这一行是发货还是收货WERKS 是发生移动的工厂对比两行的 WERKS 就能确认是不是从供应工厂到了接收工厂MENGE 是数量发货行和收货行数量不相等差额就是还在途的部分。在 ABAP 里封装一层会更顺手比如做一个按 STO 号输出单据流的小程序 按 STO 号汇总发货与收货数量快速判断是否存在未收货的在途 SELECT ebeln, ebelp, bwart, werks, menge FROM mseg INTO TABLE DATA(lt_mseg) WHERE ebeln p_ebeln. LOOP AT lt_mseg INTO DATA(ls_mseg). CASE ls_mseg-bwart. WHEN 351 OR 641 OR 647 OR 303. 发出侧 gv_out gv_out ls_mseg-menge. WHEN 101 OR 305. 接收侧 gv_in gv_in ls_mseg-menge. ENDCASE. ENDLOOP. 两者相减即为在途数量可与 MB5T 交叉验证 gv_diff gv_out - gv_in.参数上要留意两点。一是 MB5T 显示的在途只覆盖走交货单或 351 的两步法场景一步法 647 和一票制 301 本来就不产生在途用它验证会得到 0这是正常的不是数据丢了。二是公司间交易的在途跨越两个公司代码查的时候要把两边公司代码都带上只看一边会漏。还有一个更省事的技巧把上面的查询做成 SQVI 快速查询挂在收藏夹里遇到这单货到底收没收的追问三十秒给答案比一层层点单据快得多。我一般还会额外加一列交货单号LFBNR这样从物料凭证能一路倒推到交货单和销售发票。从那以后我每接手一个公司间项目上线前都强制走一遍「建单—发货—收货—开票—校验—查表核对」的完整闭环并且只用一条数据跑不看界面状态只对表。界面会骗人单据流不会。希望帮到你。本文还有配套的精品资源点击获取