
简介面向SAP MM模块实施顾问、供应链与仓储管理人员系统讲解库存调拨与发货流程及其后台配置。内容从一步转储和二步转储的差异切入覆盖库存地之间的直接调拨、工厂间转储、物料到物料转移以及库存状态变动并说明在途库存如何查看、工厂间调拨为何建议采用转储订单以避免对物料需求计划运算产生不利影响。资源包为单个docx格式的Word文档大小约2.25MB目录按流程操作与后台配置拆解便于在项目测试、内部培训或自学实操时查阅。文档还专门拆解后台设置要点包括库存调拨订单的凭证类型分配、是否启用销售分销功能的装运数据配置并结合配置实例说明转储单是否生成的条件能有效避免移动类型选错、库存状态混乱等常见问题。目前已有超过一千五百人学习下载适合需要快速掌握库存调拨发货逻辑及自定义配置的初学者和实施顾问。1. 库存调拨与发货先搞清楚你在处理哪一类物料移动打开 SAP 的人多半是被业务一句话推过来的把 A 仓的货挪到 B 仓或者给客户发货。听着简单进到 SAP 里才发现事务代码一堆——MIGO、MB1B、VL01N、LT06——每个都能做但每个管的场景不一样。拿 MIGO 做调拨拿 VL01N 做发货这只是最粗的常识真正上了系统移动类型、库存类型、收货方工厂、批次策略、WM 仓位这些参数层层叠叠任何一个选错账面上就会出现莫名其妙的差异。这篇就沿着「调拨」和「发货」这两条主线把从订单到过账的完整路径、参数设置和典型翻车点拆开讲清楚。适合正在做 SAP MM 或 SD 配置、被业务追问“库存怎么变得不对”的顾问和关键用户。2. 用 MIGO 做库存调拨一步调拨与两步调拨的移动类型选择2.1 一步调拨311为什么默认首选库存调拨最常见的诉求是“把物料从 A 工厂挪到 B 工厂”或者同工厂内从 A 库位挪到 B 库位。SAP 里最简单的路径是 MIGO 事务代码选择移动类型 311一步转储。所谓一步就是发货方和收货方在同一笔过账里完成——系统在后台同时产生一张发货凭证和一张收货凭证库存数量在发货方扣减、在收货方增加中间不存在“在途库存”的概念。选择 311 的典型场景是同工厂内库位之间的调拨或者两个工厂距离很近、当天能到、不需要跟踪在途状态。操作上MIGO 进入后选择「货物移动」→ 移动类型填 311然后指定发货工厂/库位和收货工厂/库位。需要特别注意的是311 要求发货方和收货方在物料主数据的工厂层面都已经维护了相应的库存视图否则系统会在过账时报“物料未在工厂维护”的错。 用 BAPI 做一步调拨的常见写法 DATA: ls_goodsmvt_code TYPE bapi2017_gm_code, ls_goodsmvt_header TYPE bapi2017_gm_head, ls_goodsmvt_item TYPE bapi2017_gm_item_create, lt_goodsmvt_item TYPE TABLE OF bapi2017_gm_item_create, lt_return TYPE TABLE OF bapiret2. ls_goodsmvt_code-gm_code 01. ls_goodsmvt_header-pstng_date sy-datum. ls_goodsmvt_header-doc_date sy-datum. ls_goodsmvt_item-material MATERIAL_A. ls_goodsmvt_item-plant 1000. 发货工厂 ls_goodsmvt_item-stge_loc A001. 发货库位 ls_goodsmvt_item-move_type 311. ls_goodsmvt_item-entry_qnt 10. ls_goodsmvt_item-move_plant 2000. 收货工厂 ls_goodsmvt_item-move_stloc B001. 收货库位 APPEND ls_goodsmvt_item TO lt_goodsmvt_item. CALL FUNCTION BAPI_GOODSMVT_CREATE EXPORTING goodsmvt_code ls_goodsmvt_code goodsmvt_header ls_goodsmvt_header goodsmvt_item lt_goodsmvt_item[] IMPORTING goodsmvt_headret ls_goodsmvt_headret return lt_return[].这段 BAPI 的逻辑是构造一个货物移动抬头和行项目把移动类型 311、发货工厂库位、收货工厂库位都塞进 item 结构里。move_plant和move_stloc是收货方字段只有跨工厂或跨库位移动时才需要填同库位内转储不需要收货方。注意entry_qnt填的是移动数量SAP 会按物料主数据的基本计量单位转换。2.2 两步调拨303305用在什么时候跨工厂调拨且需要跟踪在途库存时两步调拨是更稳的选择。两步调拨拆成 303转储发货和 305转储收货两个移动类型303 过账后货物从发货工厂发出进入“在途库存”305 过账后在途库存转为收货工厂的普通库存。这里的核心价值在于财务上可以区分“已发出未到达”的库存月末对账时能清楚看到有多少货在运输途中。使用 303 的前提是物料主数据在收货工厂维护了会计视图并且工厂之间的调拨需要配置“调拨单”的后台设置——虽然 303/305 可以不用调拨单直接做但生产环境里多数企业会用 LB 调拨单把两步串起来。操作上MIGO 里移动类型填 303 完成发货之后在收货工厂用 305 做收货或者用单据流找到待收货的凭证。 303 发货过账注意 move_type 改成 303并指定收货方 ls_goodsmvt_item-material MATERIAL_A. ls_goodsmvt_item-plant 1000. ls_goodsmvt_item-stge_loc A001. ls_goodsmvt_item-move_type 303. ls_goodsmvt_item-entry_qnt 10. ls_goodsmvt_item-move_plant 2000. ls_goodsmvt_item-move_stloc B001. ls_goodsmvt_item-mvt_ind B.mvt_ind B表示这是调拨移动系统会把库存类型标记为“在途”。如果没有这个字段303 过账后收货工厂看不到任何待收货记录305 就找不到对应的凭证。这是新手最容易漏掉的参数。2.3 批次管理和特殊库存对调拨的影响启用了批次管理的物料311 和 303 在过账时都会要求指定批次。如果发货方和收货方的批次确定策略是自动的系统会按物料主数据里的批次确定规则来选如果是手动指定MIGO 界面会出现批次输入框必须填对批次号——填错批次在两步调拨里尤其麻烦因为 305 收货时系统会根据批次结合来匹配在途记录批次不一致会导致收货报错。另一种需要注意的情况是特殊库存比如供应商寄售库存K、客户库存E。311 调拨的是普通库存遇到特殊库存要换对应的移动类型比如寄售库存转自有库存用的是 411 而不是 311。做 MIGO 过账增强时比如在 BADI MB_DOCUMENT_BADI 里增强物料凭证要特别注意移动类型的分支判断——我见过有项目团队用 311 的增强逻辑覆盖了 411 的场景导致寄售库存过账时被多扣了一次数量。3. 用库存调拨单LT06/LT01做公司间调拨从创建到收货的完整链路3.1 调拨单和 MIGO 直拨的区别MIGO 直拨适合临时性、偶发性的库存移动但如果是经常性的工厂间补货或者需要仓库执行层面的人去操作WM 仓位、拣配、装运就要用库存调拨单Stock Transport Order简称 STO。调拨单在 SAP 里是采购订单的一种特殊形式单据类型是 UB创建之后收货方可以基于它做收货发货方可以基于它做发货。和 MIGO 直拨最大的区别是调拨单把“计划—执行—确认”拆成了三个步骤先创建调拨单LT06 或 ME21N再发货MIGO 或 LB10最后收货MIGO 或 VL31N。为什么推荐调拨单而不是 MIGO因为调拨单有审批流程可以控制调拨的合理性可以做货源确定自动带出收货工厂的默认库位财务上也能根据调拨单追踪到完整的凭证流。对于公司间调拨关联公司之间的库存转移调拨单是必须的——公司间调拨还涉及开票公司间发票没有调拨单就没法生成 IDOC 凭证做后续的会计处理。相关热搜词里频繁出现的“SAP 公司间报表合并”“关联交易 IDOC 凭证”它们的源头数据就是在调拨单这一环产生的。3.2 用 LT06 创建调拨单的关键参数LT06 是创建库存调拨单的经典事务代码。进去之后首先选调拨类型工厂间调拨跨工厂或者公司间调拨。这里有一个容易混淆的点——工厂间调拨单的发出工厂和收货工厂都属于同一个公司代码而公司间调拨单属于不同的公司代码。后台配置路径是 SPRO → 物料管理 → 采购 → 采购订单 → 库存调拨单 → 定义工厂间调拨单的单据类型里面可以维护调拨单号码范围、发货工厂的装运条件。创建调拨单时行项目里的移动类型默认是 351调拨单发货收货自动对应 101 收货——这是和 MIGO 直拨完全不同的一套移动类型逻辑。如果物料在收货方是启了批次管理的调拨单行项目里可选的批次字段只会在收货时生效发货方在发货时依然要手动敲批次。项目上我一般建议在调拨单抬头维护“供货工厂”和“收货工厂”后先在行项目里跑一遍货源确定确认收货工厂默认库位带出来的值是正确的否则后面 MIGO 收货时会默认抓到不对的库位。参数工厂间调拨一张单内公司间调拨跨公司单据类型UBUB公司代码不同移动类型发货351351移动类型收货101101是否必须开票否是公司间发票定价方式无转移定价/成本加成IDOC 需求无是关联交易凭证3.3 调拨单发货收货的完整操作顺序创建调拨单之后发货方用 MIGO 做 351 发货过账。MIGO 里选择「采购订单」→ 输入调拨单号 → 系统带出待发货的行项目确认发货工厂和库位输入数量后过账。过账完成后物料在发货工厂扣减同时在收货工厂以“调拨单在途库存”的形式出现——这不是你主动做 303 产生的在途而是 351 自动生成的特殊库存类型在途库存。收货方的操作是在收货工厂用 MIGO 做 101 收货同样输入调拨单号系统带出待收货的行项目。收货过账后在途库存转为收货工厂的普通库存或非限制使用库存。这一步常见的坑是收货数量小于发货数量——SAP 允许部分收货但调拨单行项目里的“交货已完成”标记不会自动打上需要业务确认后才手动勾选。如果调拨单数量大、分批收货频繁建议在调拨单行项目里维护“过量交货容差”和“不足交货容差”否则收货时会报容差超限的错误。-- 查询调拨单当前收货状态的常用 SQLSE16N 查 LIKP/LIPS 或 EKPO SELECT ekpo~ebeln AS sto_no, ekpo~ebelp AS item, ekpo~matnr AS material, ekpo~menge AS ordered_qty, ekpo~wemng AS received_qty, ekpo~loevm AS deleted_flag FROM ekpo WHERE ekpo~bsart UB AND ekpo~ebeln 4500012345 ORDER BY ekpo~ebelp.这段 SQL 查的是调拨单的订货数量menge和已收货数量wemng两者相减就是待收货数量。bsart UB限定单据类型避免混入普通采购订单。实际项目里用这个 SQL 做月末对账比一个个点 MIGO 看历史快得多。4. 销售发货流程从销售订单到发货单再到过账4.1 销售发货的单据串联关系SAP SD 模块的发货链路是完整的单据流销售订单VA01→ 交货单VL01N→ 发货过账VL02N→ 开票VF01。这条链路里交货单是执行层的关键单据——销售订单只记录“要什么”交货单记录“实际发什么、从哪个库位发、发给谁”。MIGO 也能做发货移动类型 601但 MIGO 发货不产生交货单不走 SD 的完整链路所以正常企业的标准做法是 VL01N 创建交货单然后 VL02N 做发货过账。热词里提到的“SAP SD 模块相关单据串联关系”指的就是 VA01→VL01N→VL02N→VF01 这条链。创建交货单时系统会根据销售订单的交货工厂、装运条件、客户主数据里的收货地址自动确定交货单的交货工厂和库位。如果销售订单行项目里维护了批次交货单会带批次如果没有可以在交货单上手动指定。这里有个容易被忽略的点交货单创建后系统会自动生成一个 Delivery Requirement交付需求这个需求会占用 ATP 库存。如果交货单删除了ATP 库存要等后台作业释放不是立刻释放——这也是发货相关“库存被锁”的常见来源。4.2 VL01N 创建交货单的选型参数VL01N 是创建外向交货单的主事务代码。进入后输入销售订单号并指定交货工厂。关键参数有三个交货类型、装运点、拣配位置。交货类型默认是 LF标准外向交货如果是退货场景要用 LR装运点决定了发货工厂的哪个装运码头拣配位置决定 WM 层从哪里下架。这三个参数任何一个配错都会导致后续的拣配或者发货过账失败。创建交货单后系统会检查物料的可用性ATP 检查。如果库存不够交货单会以“部分交货”状态创建行项目数量会被系统调整。此时不要硬改交货单数量去凑数——正确的做法是回到销售订单里确认 ATP 数量或者跑 MD07 看库存/需求清单确认有没有在途的采购订单或生产订单可以覆盖。MD07 是物料需求覆盖情况的汇总报表在全屏 MRP 里能看到某个物料未来一段时间的供应和需求判断是否有可能的补货来源。 用 BAPI_DELIVERY_PROCESSING_EXEC 触发发货过账 DATA: lt_delivery TYPE TABLE OF bapideliveryitem, lt_return TYPE TABLE OF bapiret2, lv_delivery_numb TYPE vbeln. lv_delivery_numb 80001234. CALL FUNCTION BAPI_DELIVERY_PROCESSING_EXEC EXPORTING delivery lv_delivery_numb IMPORTING return lt_return. 检查 return 是否有错误然后提交 COMMIT WORK.这段 BAPI 是触发发货过账相当于 VL02N 里的“发货过账”按钮的标准做法。调用后系统会执行拣配确认、发货过账并生成物料凭证和会计凭证。参数里没有直接控制过账日期的入口过账日期默认是当前日期需要改日期要在调用前更新交货单抬头里的 WADAT发货日期字段。4.3 发货过账后的凭证流与库存变化VL02N 发货过账后系统自动产生的凭证包括物料凭证MIGO 里能看到、会计凭证财务能看到、以及交货单状态更新Picked、Goods Issue。此时物料从非限制使用库存转为“已发货”状态——在 MM 的库存报表里这笔库存既不在这家工厂的普通库存里也不在在途库存里而是作为“销售库存”被扣减。如果是跨公司销售公司间销售还会额外产生一张公司间发票和对应的 IDOC 凭证。这里有个值得注意的边界发货过账不等于开票。很多业务人员以为 VL02N 做完就完事了其实财务侧还要 VF01 做开票。开票金额来自销售订单的定价条件和发货数量不一定一致——比如发货数量 90但销售订单数量 100开票默认按 90 开。如果业务希望按原订单数量开票需要在交货单里维护“开票数量”字段。这个差异处理不好月末对账时 SD 和 FI 的金额就会对不上会计凭证替代和确认的增强逻辑也会因此出现异常。5. 库存调拨与发货的避坑指南五个高频翻车点5.1 移动类型用错导致库存看不见现象用户反馈工厂 A 的库存转到了工厂 B但工厂 B 的 MMBE 里查不到这批货。原因用了 MIGO 直拨 311但收货工厂的物料主数据没有维护工厂视图系统过账时报错后只完成了发货部分的扣减收货部分没有产生。解决检查收货工厂物料主数据的工厂视图和会计视图是否齐全如果已经出现“只发不收”的不完整凭证用 MBST 冲销发货凭证然后修正主数据后重新做调拨。经验上调拨类业务做完后第一件事是跑 MMBE 同时查发货工厂和收货工厂确认两边数量一减一增再离开事务代码。5.2 调拨单收货容差超限现象调拨单数量 100到货数量 102MIGO 收货时报容差超限。原因调拨单后台配置里没有维护过量交货容差默认值为 0系统不允许多收。解决SPRO → 物料管理 → 库存调拨单 → 定义容差限制设置过量交货容差为 10% 左右或者让业务人员在调拨单行项目里手动修改容差。日常操作里交货数量略多的情况经常发生运输损耗、包装误差把容差配到合理范围能少很多来回沟通。5.3 批次物料调拨后批次号码变了现象工厂 A 发货批次 A001工厂 B 收货后发现系统里批次变成了 B001。原因收货方启用了不同的批次确定策略系统按收货方的批次规则自动分配了新批次。解决如果要求批次原样传递需要在物料主数据的批次确定里关闭收货工厂的自动批次创建或者在调拨单行项目里维护“批次传递”标记。这个坑在医药和食品行业尤其严重批号对不上就是合规事故建议提前在测试环境验证清楚。5.4 VL02N 发货过账报“物料在库位无库存”现象交货单创建成功拣配也做完了VL02N 发货过账时报“在库位 XXXX 无库存”。原因交货单里指定的拣配库位不是实际库存所在库位。常见场景是 WM 启用的仓库里拣配库位和存储库位不一致WM 层已经做了下架但没有完成拣配确认或者手工更改了交货单的批次后系统重算 ATP 失败。解决先查 MMBE 确认实际库位再在交货单行项目里修正库位WM 场景下回到 LB10 或 LT06 确认拣配状态。这类问题最常见的画面是用户自己手工改了交货单库位但没改批次导致批次和库位组合不存在。5.5 MRP 跑完库存地点被排除产生重复需求现象工厂做 MRP 时发现某个库存地点的库存没有参与可用性检查系统重复产生了采购申请。原因物料主数据 MRP 视图里的“库存地点 MRP 排除”设置勾选了这个库位。如果调拨或发货到该库位的库存没有被 MRP 识别需求就会被重复计算。解决检查 MM02 里 MRP1 视图的“工厂级 MRP”和“库存地点 MRP”设置——常见做法是工厂层跑 MRP 时排除这些库位但如果库存调拨的目标恰恰是这些库位跑完 MRP 后一定要用 MD07 复核一遍库存/需求情况确认没有重复需求。6. 调拨与发货的进阶验证用 MD07 和 MB51 把账对回来库存调拨也好、销售发货也好做完之后的关键动作是验证。我最常用的是两个报表MD07 看库存/需求覆盖情况MB51 看物料凭证清单。MD07 能告诉你某个物料当前可用库存是多少、未来有哪些需求和供应是判断“货够不够发、调拨量合不合理”的最快路径。MB51 则是物料凭证的总账——输入工厂、物料、移动类型、时间范围系统列出一段时间内所有相关过账记录是排查库存差异的第一现场。具体操作上我习惯先把 MD07 里的可用库存数字和 MMBE 的工厂级库存核对一遍——这两个数字理论上应该一致。如果不一致说明有移动类型没被正确过账或者有凭证被冲销但冲销凭证没做完。然后用 MB51 拉出当天/当月的所有 311、303、305、351、101、601 的凭证逐条核对数量和移动类型。遇到数量对不上的继续下钻到物料凭证的抬头看是谁、在什么时间、用什么原因代码做的过账。这个思路不管调拨还是发货都适用本质上是把所有的“货在动”都找出来看有没有哪个动作没有配对成功。最后说一个个人习惯做调拨和发货相关的配置或开发时先把移动类型的关系图画出来——311/312 是同一仓库内一步/两步303/305 是跨工厂在途两步351/101 是调拨单驱动601/602 是销售发货/退货。画完这张图再动手配后台或写增强基本不会出大方向的问题。希望这篇笔记能帮你在处理库存调拨和发货时少踩几个坑顺利把账对平。本文还有配套的精品资源点击获取