ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

SAP采购收货全链路:从MIGO到会计凭证的表与字段解析

SAP采购收货全链路:从MIGO到会计凭证的表与字段解析 做SAP项目最常被业务追着问的一句话货都收到仓库了为什么财务说没看到凭证又或者反过来财务账上明明有金额库存报表却对不上数量。这类问题追根到底就一个原因没搞清SAP采购验收收货这条链路里物料凭证、库存现有量和会计凭证到底存在哪些表又是靠什么字段连起来的。这篇文章不打算讲高大上的架构就把最常用到的几张表、几个字段、以及从MIGO过账到生成会计凭证的完整链路拆开说一遍。适合刚接触SAP MM模块的顾问、负责物料账和库存对账的财务关键用户以及整天被业务用“库存金额在哪查”轰炸的运维同事。看完之后你可以自己用SE16N把从采购订单到会计凭证的数据串起来遇到问题也不再是一头雾水。1. 先理清收货这件事的完整数据链条1.1 一条采购订单收货系统背后都干了什么采购验收在SAP里的标准动作是MIGO移动类型101也就是“采购订单收货到非限制使用库存”。表面上看你只是输入一个采购订单号、改个数量、点一下过账但系统在后台一次性干了四件事。第一件事是生成物料凭证。物料凭证是库存移动的原始凭据记录“什么物料、什么工厂、什么存储地点、什么移动类型、收了多少数量、多少金额”。它的抬头表是MKPF行项目表是MSEG这是整个物料账最核心的两张表。第二件事是更新采购订单历史。采购订单是EKPO行项目但真正记录“这单已经收了多少货”的地方是EKBE。每做一次101收货EKBE就会多一条记录因此只要打开ME23N看“历史”选项卡就能知道一单采购还有多少没交付。第三件事是更新库存现有量和库存金额。普通库存数量落到MARD批次库存落到MCHB供应商寄售落到MSKU分包业务落到MSLB。与此同时物料的库存总价值会算进MBEW也就是评估范围层的物料评估表。第四件事才是生成会计凭证。系统根据移动类型、评估类、评估分组代码和事务键去OBYC配置里找对应的总账科目然后生成BKPFBSEG这张标准的FI凭证。这四件事不是先后关系而是同步完成的。你点下“过账”的那一刻数据就已经分头写进了这些表里。后面不管是查库存、查会计凭证还是做对账全都依赖这套底表关系。1.2 为什么同一笔业务会有“物料凭证”和“会计凭证”两套凭证很多开始接触SAP的人都会问为什么不能像手工台账一样一笔收货就记一笔账非得多出来一个物料凭证原因是两个模块的视角不一样。MM模块关心的是“货物实际移动”。100个物料从供应商那边到了仓库不管财务什么时候入账仓库实物已经变了所以要有一个物料凭证去跟踪物理移动。而FI模块关心的是“价值变动”。库存多了100个对应的资产或负债怎么变化总账科目是什么这是财务核算的视角。这两套凭证通过字段串在一起形成了完整的审计链。物料凭证里能看到它触发的会计凭证会计凭证里也能反查到它来自哪个物料凭证。最常见的场景是财务在FB03里打开一张凭证业务问“这是收的哪个采购订单的货”点一下“环境→物料凭证”就能跳过去。反过来仓库人员在MB03里看物料凭证点“环境→会计凭证”就能看到成本金额进了哪个科目。你在排查问题时千万别只盯着一边。查库存数量走MM底表查科目金额走FI底表查两者是不是对得上靠的是关联字段而不是某一张“万能总表”。2. 库存现有量到底落在哪些表数量与金额分家看2.1 库存数量在哪张表MARD以及它的“亲戚们”库存现有量的“数量”最常见的表是MARD表名翻译过来就是“物料/工厂/存储地点库存”。一张MARD记录代表“某个物料在某个工厂的某个存储地点下的库存汇总”。常用的数量字段就几个LABST是“无限制使用库存”INSME是“质检库存”SPEM是“冻结库存”UMLME是“在途库存”。平时MMBE库存总览里看到的那几个状态数量就是从这些字段来的。但MARD不是唯一的存在。如果你的物料启用了批次管理那么真正按批次存放数量的是MCHBMARD只是批次汇总后的总量维度比MCHB高一层。也就是说“这个物料在仓库里总共有多少”看MARD“这个批次在哪个货位还有多少”要看MCHB。特殊库存则另起炉灶。看供应商寄售库存要查MSKU看供应商分包库存要查MSLB。这些表里存的是“不属于我企业所有但在我仓库里放着”的特殊库存数量字段的命名逻辑和MARD类似但在对账的时候不能直接和MARD相加否则就会出现“MMBE总库存和财务库存金额对不上”的误会。还有一张表你不能忽略就是MARC。MARC是工厂级物料主数据表里面存着自动收货标志、批量检查等参数。虽然它不是库存数量表但它决定了“这个物料在这个工厂要不要做批次管理”“能不能自动收货”这直接影响库存现有量最终落在MARD还是MCHB。2.2 库存金额在哪张表MSEG是流水MBEW才是“家底”库存的“金额”要分两个角度看。单次收货的金额看MSEG。MSEG.DMBTR字段是“金额本位币”MSEG.WRBTR是“金额凭证货币”。102冲销、103转质检、201发料每一次移动的金额都沉淀在MSEG里。所以当你问“这批货收进来多少钱”第一反应应该是查MSEG而不是查别的表。但如果你想知道“当前这个工厂的库存总共有多少钱”MSEG就不够了因为MSEG只是流水不是余额。这时候要看MBEW也就是物料评估表。MBEW里SALK3字段是“总库存价值”LBKUM是“总库存数量”。这个表是财务做库存金额对账的入口MB5L报表拉出来的库存余额底层逻辑就是MBEW。需要注意MBEW是按“评估范围”组织的对常规企业来说评估范围基本等同于工厂所以MSEG.WERKS要和MBEW.BWKEY关联不要拿MSEG直接和MARD工厂字段乱连。还有个容易被忽略的点如果启用了分割评估比如同一种物料分成“自产”和“外购”两个评估类型那么MBEW里会按BWTAR分行MSEG里也有BWTAR字段。关联时不仅要MATNR对上BWTAR也必须对上否则查出来的金额会串线。MARD和MBEW一个管数量一个管价格两者通过MATNRWERKS关联。这也是为什么财务去核对库存金额时经常要同时看MMBE数量和MB5L金额因为这两个报表背后的表本来就不一样。3. 采购验收如何一步步变成会计凭证3.1 自动科目确定的四个关键元素MIGO过账时系统怎么知道该借哪个科目、贷哪个科目靠的是四个元素组合匹配。第一个是移动类型101代表收货到非限制库存这决定了“这是收货业务”的大方向。第二个是评估类也就是物料主数据会计1视图里的“评估类别”底层存在MBEW.BKLAS。评估类直接决定了“这个物料属于原材料、半成品还是商品”从而决定库存科目。第三个是评估分组代码这个代码在工厂配置里维护通过事务码OMWD分配它的作用是“让不同工厂即使评估类相同也能分开配置不同科目”。第四个是事务键采购收货最常见的是BSX和WRXBSX决定库存科目WRX决定GR/IR科目。这四个元素加上科目表一起扔进OBYC的配置里系统就能取到最终的总账科目。用SQL思路理解就是在OBYC配置表里用“科目表交易键评估分组代码评估类”作为查询条件查出一个字符型字段里面存的就是总账科目编号。这个配置过程实际上就是“评估类与总账科目”对应的底层逻辑。OBYC在哪配IMG路径是“物料管理→评估和科目设置→科目确定→无向导的科目确定→将科目设置给交易/事件”。事务代码OBYC进入后先选“交易”按钮比如BSX然后双击“科目分配”去维护行。3.2 101收货的借贷规则与实际过账示例101收货的过账规则可以浓缩成一句话借方记库存科目贷方记GR/IR科目。具体来说借方科目通过事务键BSX确定贷方科目通过事务键WRX确定。如果物料是标准价控制采购订单价格和标准价不一样中间的差额会记到事务键PRD对应的“价格差异”科目。这个逻辑经常让新手困惑其实说白了就是标准价是企业内部定的“考核价”采购订单是实际成交价两者不一致总不能硬记进库存只能先在差异科目里放着。举个例子原材料A标准价10元采购订单价12元收货100个。过账时系统会这样记借原材料库存 1000元100×10BSX科目 借采购价格差异 200元100×2PRD科目 贷GR/IR 1200元100×12WRX科目如果物料是移动平均价控制库存科目金额就直接记1200元不产生PRD差异。这个差异规则如果你不搞清楚对账时看着“库存金额与采购订单金额差一截”就会百思不得其解。发票校验MIRO时逻辑相反借方是GR/IR贷方是供应商应付。如果发票金额和采购订单金额有差异根据物料价格控制类型系统会再把差异调整进库存或差异科目。所以经常听到的“GR/IR科目余额分析”本质上就是在看“货已经收了但发票还没来”的暂估金额。3.3 从MIGO界面一步跳到会计凭证的三种路径MIGO过账后界面底部会直接显示物料凭证号和会计凭证号。很多人只看到物料凭证号没注意旁边还跟着一个会计凭证编号这个编号就是BKPF里的凭证号。第一种路径是MIGO过账完成后菜单里选择“物料凭证→显示”系统会打开MB03然后在“环境→会计凭证”里直接跳转。第二种路径是你手头只有物料凭证号直接SE16N查MSEG或MB03都能找到对应的会计凭证。第三种路径是反过来你先在FB03里打开一张会计凭证然后“环境→物料凭证”跳到原始物料凭证。需要注意的是有些企业做了会计凭证确认与替代也就是在过账时通过Validation和Substitution把标准科目替换成自定义科目。这种情况下你看到最终凭证里的科目可能和OBYC标准配置不一样。排查时要记得先检查凭证替代逻辑别一头扎进OBYC配置里死磕。4. 表与表之间怎么关联关键连接点全梳理4.1 核心关联键清单把整个采购验收链路涉及的表串起来其实就靠几张表和几个字段。下面这个清单是我平时排查问题时固定会查的关联关系。关联方向左表字段右表字段说明物料凭证抬头→行项目MKPF.MBLNRMSEG.MBLNR同一年度下一张抬头带多行项目物料凭证→采购订单MSEG.EBELNEKPO.EBELN采购订单号保存在MSEG行项目上物料凭证→采购历史EKBE.BELNRMKPF.MBLNREKBE记录了每次收货的物料凭证号物料凭证→库存数量MSEG.MATNRMARD.MATNR关联条件还要带WERKS和LGORT物料凭证→库存金额MSEG.MATNRMBEW.MATNR金额看MBEW.SALK3流水看MSEG.DMBTR物料凭证→会计凭证MKPF.AWKEYBKPF.AWKEY这是两套凭证互跳的关键钥匙会计凭证行→物料凭证BSEG.AWKEYMKPF.AWKEYFB03里“环境→物料凭证”就是走这个字段这里最容易被忽略的就是AWKEY。MKPF表里有个字段叫AWKEY存的是由物料凭证触发的会计凭证的“对象键值”格式一般是公司代码会计年度会计凭证号的组合串。反过来BKPF表里也有AWKEY存的是该会计凭证来源对象的关键值。两边的AWKEY对上凭证就串起来了。4.2 采购历史表EKBE在中间起到的作用EKBE这张表常被当成“中间表”用但它的真实角色是采购订单历史。它记录了采购订单每一笔收货的移动类型、时间、数量、金额、物料凭证号。比如你看到EKBE里有一行BWART101、MENGE50、BELNR5000001234说明这个采购订单在2024年某天收过50个物料凭证号是5000001234。为什么要单独强调EKBE因为在做“采购收货数量核对”时很多人会去查MSEG但MSEG是按移动类型记录所有货物移动一张表里可能同时有101、102、122等多种记录。而EKBE只针对采购订单历史如果要回答“这个采购订单到底收了多少、退了多少”直接用EKBE过滤采购订单号加移动类型会更干净。EKBE和MSEG之间通过BELNR、BUZEI字段可以互查。实际排查中我一般先用ME23N看采购订单历史总览再跳去MSEG看具体行项目金额最后从MSEG跳会计凭证。这个顺序能避免在大量数据里瞎翻。4.3 特殊库存场景下的表关联差异如果是寄售库存收货通常不是101而是移动类型631或类似逻辑库存数量落在MSKU而不是MARD。此时MSEG的字段里不会有LGORT而会有特殊库存标识关联MSKU时要用物料号、工厂、供应商号一起匹配。如果是分包库存收货后数量落在MSLB关联时还要加上分包供应商字段。项目库存、销售订单库存也各有专用表。所以有一句经验值得记住查库存之前先确认“这个物料是普通库存还是特殊库存”否则用MARD一套规则去查结果一定是空的。这也直接解释了为什么跑MB5L时你会发现有些物料没有金额而MMBE里明明有数量。特殊库存的很多场景不参与常规评估库存的汇总对账时如果不把特殊库存单独剥离出来永远对不平。5. 实战排查数量金额对不上、找不到凭证的常见原因5.1 快速定位“库存数量→金额→凭证”的排查路径遇到库存问题我建议按照一个固定的排查顺序走可以少走很多弯路。第一步确认业务场景。是采购收货、退货、盘盈还是库存转移不同移动类型对应的库存状态完全不一样。第二步看物料凭证。用MIGO回显或MB03查先确认MSEG里“数量对不对、金额有没有、采购订单号带没带”。这一步基本能看出收货本身有没有问题。第三步看库存现有量。用MMBE查数量确认是否落到目标仓库再用MB5L查金额确认评估范围层的总价值是否变化。第四步看会计凭证。从MB03跳到FB03确认借贷科目、金额、过账日期。最后一核对问题基本就浮出水面了。如果数量有但金额没有大概率是标准价物料没有维护价格或者收货时评估类型冲突。如果金额有但数量没有八成是物料凭证和库存表之间字段没对上比如收货进的是质检库存你却盯着看LABST。5.2 常见问题与解决速查表问题现象可能原因排查方式MIGO过账报错“科目X未配置”OBYC里BSX或WRX缺少对应科目配置SE16N查T030K或直接维护OBYC库存数量有金额为0物料标准价未维护或价格为空MBEW里查STPRS、VPRSV收货成功但FB03找不到凭证MIGO未自动生成FI凭证或OBYC配置被替代逻辑绕过检查EKPO的“收货自动过账”标识检查替代库存金额与总账对不上存在103/105质检冻结库存未评估库存未参与汇总MMBE看所有状态数量MB5L单独核对EKBE收货数量和MSEG不一致102冲销、退货也会写入EKBE过滤条件不完整按移动类型筛选区分101和102凭证能显示但科目不是预期科目会计凭证确认与替代逻辑修改了标准科目查替代规则而不是回去改OBYC这些坑我全都踩过。最典型的一次业务说“明明收货成功了但财务那边死活没有凭证”结果查出来是采购订单行项目上“收货自动过账”标识没勾系统只更新了库存数量却没有触发财务记账。这类问题如果不知道EKPO这个勾选项能在OBYC里翻一整天都找不到答案。5.3 几个我踩过并值得记下的坑第一MSEG查询一定要带年度和凭证号。MSEG是天文数字级别的流水表直接用MATNR加WERKS去SE16N查询很容易查到超时或者卡死更别提物料的凭证号在多个年度中是可以重号的。正确姿势是先用MB51或者MB03拿到物料凭证号MBLNR和年度MJAHR再去SE16N精确定位。第二MBEW.SALK3和MARD的数量不能简单相乘。SALK3是“当前库存总价值”它对应的数量是LBKUM而不是MARD里某个状态的数量。如果一个物料既有无限制库存又有质检库存你用LABST去乘标准价算出金额和SALK3对不上是正常现象因为SALK3包含了所有状态的评估库存。第三MIRO拆分增强、MIGO过账增强这类二次开发会改写金额。我在一个项目里遇到过MIGO收货增强把GR/IR科目强制替换成另一个自定义科目导致标准OBYC配置完全失效。排查时如果看到凭证能过、科目就是不对先去查增强逻辑而不是先怀疑配置。第四启用凭证分割后会计凭证的行项目会比预想多得多。凭证分割会按利润中心、业务范围等维度把同一金额拆成多行导致你从BSEG里查出来的行项目看起来“金额拆分得乱七八糟”。这时候要理解这是SAP为了出分部报表做的自动处理不是数据错了。最后再分享一个我个人的工作习惯。每次进新项目我都会先把“采购订单→物料凭证→库存数量→库存金额→会计凭证”这条链路的关联表整理成一张Excel标注好每个环节的表名、事务代码、关键字段。新人培训直接发这张表比讲十页PPT都管用。遇到对账差异时也永远从这张表里找断点效率极高。
返回列表