SAP公司间项目STO全流程配置与避坑指南

简介:这份文档面向需要在SAP系统中处理跨公司采购交易的操作员与项目经理,聚焦公司间项目(Q)STO的业务背景、系统配置与完整操作链路,帮助读者理清从项目创建、采购申请与订单、交货单处理到收货、开票的先后顺序,并针对CO科目分配错误、采购收货及销售开票等常见问题给出排查与解决思路。资源包共1个docx文件,约3.52MB,内容以配置说明与操作步骤记录为主,附带常用事务代码的实例应用和问题原因分析,便于按目录快速定位对应环节。目前已有654人学习,适合作为日常操作对照与异常处理时的参考手册。

1. 公司间项目 STO:两个公司代码之间那笔“内部买卖”到底怎么跑通

A 公司接了一个项目,物料却要从 B 公司走,B 公司再向外部供应商采购——这种“项目挂在一家公司、采购发生在另一家公司”的结构,在 SAP 里就是典型的公司间项目 STO(Stock Transport Order,库存调拨单)。它跟普通 STO 最大的区别在于:交货单要跨公司代码过账,收货方拿到的不是普通库存,而是挂在 WBS 元素上的项目库存,中间还夹着一步公司间开票。整条链路涉及 CJ20N、ME21N、VL10B、VL02N、MIGO、VF01、MIRO 七八个事务代码,任何一环配置没对齐,报错就会以“CO 科目分配对象属于公司代码 &3,不是 &4”这种看不出所以然的形式甩到你脸上。这份指南的价值就在于把配置顺序和操作顺序钉死,适合正在做跨公司项目采购的 SAP 顾问和关键用户照着复现。

2. 配置先行:SFW5 激活与跨公司交货类型怎么定

公司间项目 STO 跑不起来,十有八九不是操作错,而是配置缺了一块。这一章按“先激活业务功能、再定交货类型、最后补财务清账”的顺序拆,每一步都给出事务代码和检查点,照着走一遍能把大部分前置条件补齐。

2.1 SFW5 激活 LOG_MM_SIT 业务功能

第一步不是建项目,是确认系统里公司间 STO 的业务功能开关有没有打开。事务代码 SFW5 进入后搜索LOG_MM_SIT,这个开关控制的是跨公司代码库存调拨的增强逻辑,没激活的话后面交货单过账会缺移动类型分支。

# SFW5 操作路径(事务代码内导航,非命令行) # 1. 输入事务代码 SFW5 回车 # 2. 菜单路径:企业业务功能 -> 后勤 -> 物料管理 # 3. 在列表中找到 LOG_MM_SIT,勾选后点击“激活” # 4. 激活是后台作业,用 SM37 查看作业状态,确认 FINISHED

这里的关键参数是激活范围:LOG_MM_SIT一旦激活会影响所有工厂间的 STO 行为,不是只针对当前项目。所以如果系统里已有其他 STO 流程在跑,激活前要让相关方确认没有依赖旧逻辑的自定义增强。激活作业跑完后用 SM37 查作业日志,状态必须是FINISHED,如果是RELEASED但没结束,说明后台还在处理,这时候去建交货单会读到半激活状态,行为不可预期。

2.2 交货类型与项目类别的绑定关系

跨公司交货单能不能生成,取决于交货类型和交货项目类别有没有配对。路径是SIMG -> 后勤执行 -> 交货 -> 定义交货类型,公司间项目场景通常复用NLCC(公司间交货)或项目专用的NLCQ类交货类型,具体用哪个看系统里已配置的副本。

配置对象事务代码/路径检查点
交货类型SIMG 定义交货类型交货类型是否允许跨公司代码
交货项目类别SIMG 定义交货项目类别项目类别是否带 WBS 科目分配
移动类型OMJJ683/107 与 109 是否成对存在

交货项目类别这一层最容易被忽略:如果项目类别里没有勾选“科目分配”相关标识,交货单行项目就带不出 WBS 元素,后面销售开票必然报 VF156 找不到 WBS。OMJJ 里要确认移动类型683(公司间发货)和107(收货方在途)成对配置,以及109(收货方入库)的科目修改是否指向正确的清账科目。这三者缺一个,过账时要么没会计凭证,要么凭证借贷方串到错误的公司代码。

2.3 按工厂配置交货类型与可用性检查

路径SIMG -> 物料管理 -> 采购 -> 采购订单 -> 设置库存调拨单 -> 按工厂配置交货类型和可用性检查过程,这一步决定的是 STO 采购订单保存时,系统按哪个工厂去推导交货类型。

# 配置检查逻辑(伪代码,用于理解系统推导顺序) # 输入:STO 采购订单行项目 # 1. 读取供货工厂(B 公司工厂 7091) # 2. 按工厂查配置表,取交货类型(如 NLCQ) # 3. 按交货类型取可用性检查规则 # 4. 若工厂未配置,回退到默认交货类型,通常导致跨公司逻辑失效

参数上要盯住“供货工厂”这一列:A 公司采购订单里填的供货工厂是 B 公司的 7091,配置表里必须存在 7091 这一行,否则系统回退到默认交货类型,生成出来的交货单不带公司间标识,VL02N 过账时移动类型会走成普通调拨,收货方拿不到项目库存。可用性检查过程按项目需要选,项目库存场景一般用KP或系统自定义的检查规则,目的是在 STO 创建阶段就拦住库存不足的行,而不是等到交货单过账才报错。

2.4 OBYA 维护公司间清账科目

跨公司过账必然产生公司间应收应付,OBYA 就是配这对清账科目的地方。路径SIMG -> 财务会计 -> 总账会计 -> 业务交易 -> 准备跨公司代码交易,事务代码 OBYA。

配置时按“公司代码组合 + 科目表”维护,A 公司 7010 和 B 公司 7090 这一对要单独建一行,应收科目和应付科目分别指向两边各自的公司间往来科目。这里翻车的典型是只配了单向:发货方过账成功,收货方那笔 109 移动类型找不到对应清账科目,MIGO 直接报“科目未定义”。配完后建议用 FBKP 或直接看科目主数据,确认两个科目都允许公司间业务、且没有设置为只能自动过账的冲突标识。

3. 操作链路:从 CJ20N 建项目到 MIRO 发票校验

配置齐了之后,操作顺序不能乱。这一章按真实执行顺序走一遍,每个事务代码给出关键输入字段和容易填错的地方,重点放在“为什么这一步必须在前一步之后”。

3.1 CJ20N 建项目与 WBS 元素挂载

A 公司 7010 先建项目,事务代码 CJ20N。项目定义下挂 WBS 元素,物料需求最终要落到 WBS 上,所以 WBS 的“科目分配”标识和“库存”标识要打开。

# CJ20N 关键操作点 # 1. 输入项目定义编号,回车进入项目构建器 # 2. 在 WBS 层级下创建元素,维护“基本数据”页签 # 3. 勾选“科目分配元素”,确认“库存”相关标识 # 4. 保存后记下 WBS 元素编号,后续 STO 和交货单都要引用

WBS 元素编号是整条链路的锚点:STO 采购订单行项目的科目分配填它,交货单行项目带出它,销售发票校验它。这里有个血泪经验——WBS 元素如果建在 A 公司 7010 下,但交货单是从 B 公司 7090 发货,系统在开票环节会做一次“WBS 是否属于销售公司代码”的检查,不通过就报 VF156。所以建 WBS 时就要想清楚它归属哪个公司代码,别等开票了才发现归属错位。

3.2 B 公司对外采购:ME51N 到 MIGO 的完整闭环

B 公司 7090 先向外部供应商采购,这一步是普通采购流程,但收货时要收进项目库存。

# ME51N 创建采购申请 # 1. 输入采购申请类型(项目采购常用 NB 或系统自定义类型) # 2. 行项目填物料、数量、交货日期、供应商 # 3. 科目分配页签填 WBS 元素(B 公司自己的项目 WBS) # 4. 保存,记下采购申请号 # ME21N 转采购订单 # 1. 引用采购申请号生成订单 # 2. 确认行项目科目分配仍指向正确 WBS # 3. 保存,记下采购订单号(如 4100000175) # MIGO 收货 # 1. 操作选“收货”,参考选“采购订单” # 2. 输入采购订单号,确认移动类型 101 # 3. 检查行项目“科目分配”页签的 WBS 是否正确 # 4. 过账,记下物料凭证号(如 5000001298)

MIGO 收货这一步的检查点是“收货后库存进了哪里”。正确结果是 B 公司 7091 工厂的项目库存增加,会计凭证里借项目库存、贷 GR/IR。如果收货后库存进了普通库存而不是项目库存,说明采购申请或订单的科目分配没带 WBS,或者 WBS 的库存标识没开。这一步错了,后面 A 公司收货时对不上数量,整条链路要回滚重来。

3.3 A 公司向 B 公司建 STO:ME21N 的跨公司字段

A 公司 7010 向 B 公司 7090 建 STO,事务代码 ME21N,订单类型用公司间 STO 专用类型(常见UB或项目定制的ZUB)。

# ME21N 创建公司间 STO # 1. 订单类型选公司间 STO 类型 # 2. 供应商填 B 公司对应的内部供应商编码(如 7090 对应的供应商号) # 3. 行项目:物料、数量、供货工厂填 7091(B 公司工厂) # 4. 科目分配页签填 A 公司项目 WBS 元素 # 5. 确认“交货”页签里交货类型自动带出 NLCQ 类 # 6. 保存,记下 STO 号(如 4300000176)

这里最容易填错的是“供应商”字段:公司间 STO 的供应商不是外部供应商,而是 B 公司对应的内部供应商主数据,这个供应商主数据要跟 B 公司 7090 绑定。填错的话,后续 VL10B 生成交货单时找不到发货方,或者交货单过账时公司间清账科目对不上。另一个检查点是供货工厂必须填 B 公司的 7091,填成 A 公司自己的工厂就变成普通 STO,跨公司逻辑整个不触发。

3.4 VL10B 生成交货单与 VL02N 发货过账

STO 保存后,用 VL10B 按采购订单生成交货单,再用 VL02N 过账发货。

# VL10B 生成交货单 # 1. 选择“采购订单”作为参考凭证 # 2. 输入 STO 号 4300000176,执行 # 3. 在结果列表勾选行,点击“创建交货单” # 4. 记下交货单号(如 800000123) # VL02N 发货过账 # 1. 输入交货单号,进入修改模式 # 2. 检查行项目“批次”“库存地点”是否正确 # 3. 点击“发货过账”,移动类型应为 683+107 # 4. 记下物料凭证号(如 4900002188)

VL02N 过账时移动类型683+107的含义是:B 公司 7091 发货 683,同时在途 107 记到 A 公司侧。如果过账后只看到 683 没有 107,说明 OMJJ 里移动类型配对没配全,或者交货类型没带出跨公司标识。这一步过账成功后,B 公司的项目库存减少,A 公司侧产生在途库存,接下来才能做收货。

3.5 MIGO 收货与 VF01/MIRO 开票校验

A 公司用 MIGO 根据交货单收货,移动类型109,然后走销售开票和发票校验。

# MIGO 收货(A 公司侧) # 1. 操作选“收货”,参考选“交货单” # 2. 输入交货单号 800000123 # 3. 确认移动类型 109,检查行项目 WBS 为 A 公司项目 WBS # 4. 过账,记下物料凭证号(如 5000001299) # 注意:此步通常不产生会计凭证,库存直接进项目库存 # VF01 销售开票 # 1. 参考交货单号创建发票 # 2. 检查行项目 WBS 元素是否正确带出 # 3. 若报 VF156,转第 4 章排查 # MIRO 发票校验 # 1. 输入 STO 采购订单号 4300000176 # 2. 核对发票金额与收货金额 # 3. 过账,完成公司间应付确认

MIGO 收货这一步“无会计凭证产生”是正常现象,因为 109 移动类型在跨公司场景下只做库存转移,价值已经在 683+107 过账时记到在途科目。如果这里意外产生了会计凭证,说明移动类型配置串了,要回 OMJJ 检查 109 的科目修改。VF01 开票是整条链路最容易卡住的地方,WBS 归属检查、复制控制里的字段映射都会在这里集中爆发,下一章专门拆。

4. 避坑排查:四类高频报错的现象、原因与解法

这条链路跑通一次不难,难的是报错时知道往哪看。下面四条是按实际踩坑频率排的,每条都按“现象 → 原因 → 解决”写,照着对号入座能省不少时间。

4.1 报错“CO 科目分配对象属于公司代码 &3,不是 &4”

现象:采购申请审批、STO 创建或收货时弹出这条消息,消息号 KI100,流程直接中断。

原因:WBS 元素归属的公司代码跟当前操作的公司代码不一致。比如在 B 公司 7090 下操作,却引用了 A 公司 7010 的 WBS,系统做科目分配检查时发现对象不属于当前公司代码,按错误级别拦截。

解决:短期用 OBA5 把消息号 KI100 从 E 改成 W,让流程能继续走;但这是后悔药不是根治,长期要把 WBS 建在正确的公司代码下,或者调整科目分配逻辑。改 OBA5 之前要评估:改成 W 之后错误被吞掉,后续对账可能对不上,建议只在测试或紧急场景用,生产环境还是修数据。

4.2 MIGO 根据交货单收货报错

现象:A 公司 MIGO 引用交货单收货,系统提示无法收货或交货单状态不对。

原因:交货单没有完成发货过账。VL02N 那一步如果只保存没点“发货过账”,交货单状态停在“已创建”,收货方读不到可收货的数量。

解决:回 VL02N 确认交货单状态,补做发货过账,物料凭证生成后再回 MIGO 收货。这个坑的本质是操作顺序被跳过,不是配置问题,所以排查时先看交货单的凭证流,别一上来就查配置。

4.3 销售开票报 VF156 找不到 WBS 元素

现象:VF01 开票时日志报VF 156 Error & while substituting WBS element &,发票创建失败。

原因:WBS 元素属于发货方公司代码,但开票检查的是销售方公司代码下的开票元素。跨公司场景下,系统在外部客户开票时会额外检查网络里是否存在销售公司代码的开票元素,找不到就报错。

解决:两条路。一是按 SAP Notes 937407 和 499389 的思路,在销售公司代码的网络里定义更高级别的开票元素;二是把 WBS 元素从交货单到销售发票的复制控制里删掉,复制请求号 105 到 901,事务代码 VOFM,这一步通常需要开发配合改复制规则。选哪条看项目结构:如果 WBS 本来就不该出现在 B 公司,删复制控制更干净;如果业务要求保留,就补开票元素。

4.4 公司间清账科目未定义或借贷方串位

现象:VL02N 过账或 MIGO 收货时报“科目未定义”,或者过账成功但会计凭证借贷方公司代码不对。

原因:OBYA 里公司代码组合没配全,或者配了但科目主数据的公司间标识、自动过账标识冲突。

解决:回 OBYA 补全 7010 和 7090 这一对的应收应付科目,再用 FS00 检查两个科目是否允许公司间业务、是否被标记为只能自动过账。配完后用 FBKP 模拟一笔过账验证,别等生产过账才发现。

5. 进阶验证:用凭证流和复制控制把链路钉死

跑通一次不算完,能稳定复现才算。我一般会在测试环境把整条链路走完后,用凭证流把每个节点的物料凭证、会计凭证、交货单、发票串起来看一遍,确认没有断点。具体做法是 MB03 查物料凭证 5000001298 和 5000001299,看它们的凭证流是否指向同一张交货单 800000123;再用 VF03 查发票的凭证流,确认它引用的交货单和 STO 号对得上。凭证流断在哪,问题就在哪一段。

复制控制这块值得单独花时间。VOFM 里交货单到销售发票的复制规则,决定了哪些字段会带到发票行项目。公司间项目场景下,WBS 元素的传递逻辑要跟业务确认:如果 WBS 只属于 A 公司,就在复制规则里把它过滤掉,避免 VF156;如果两边都要引用,就确保复制规则里的字段映射指向正确的公司代码层级。改复制规则前先在测试客户端用请求号隔离,改完跑一遍完整链路,确认发票金额、WBS、公司间清账三处都对得上再传到生产。

还有一个验证习惯:每次改完配置,用 SM30 或配置传输日志确认改动落在正确的请求号里,别让测试环境的临时改动混进生产传输。公司间 STO 的配置分散在 SFW5、OMJJ、OBYA、VOFM 好几处,漏传一个就会在生产复现测试环境没出现过的报错。从那以后我每次动这类跨模块配置,都强制走一遍“配置清单 → 请求号核对 → 测试链路 → 凭证流验证”四步,少一步都不敢往生产传。希望帮到你。

本文还有配套的精品资源,点击获取