多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

SAP MM采购申请与计划协议:从PR到交货计划行的全流程解析

SAP MM采购申请与计划协议:从PR到交货计划行的全流程解析 1. 采购申请SAP MM中“需求发起”的起点聊SAP采购很多人一上来就盯着采购订单PO怎么建、怎么审批却容易忽略整个链条的第一环——采购申请Purchase Requisition简称PR。实际跑过几个完整项目的都知道PR才是那个真正决定“买什么、买多少、什么时候要”的源头单据。PO也好计划协议也好往往只是把PR里的需求“翻译”成对供应商的正式承诺。所以想搞懂SAP MM的采购逻辑先吃透采购申请比什么都重要。1.1 采购申请到底解决什么问题采购申请在SAP系统里的定位简单说就是“内部需求凭证”。它记录的是企业某个部门、某条产线、某个项目在某一个时间点需要多少物料或服务以及期望的交货日期。它不直接对供应商产生法律效力它只是企业内部表达需求的一种标准化方式。这个设计思路非常符合实际业务逻辑。拿生产制造企业举例生产计划员跑完MRP物料需求计划系统发现某种原材料的安全库存快见底了于是自动生成一条采购申请数量是2000公斤交货日期是下周三。这时候这条PR需要经过内部审批可能是生产经理确认、采购经理复核然后才进入采购员的待办清单。采购员拿到PR后可以选择转成采购订单发给老供应商也可以先询价比价再决定供应商是谁。也就是说PR把“需求提出”和“采购执行”两个环节解耦了这对于内部职责分离、审计追溯都很有价值。还有一类常见的场景是手工创建PR。比如设备维修部门发现某台机器的轴承磨损了备件库没有库存维修工程师直接在SAP里敲一条PR说明需要2个轴承、希望三天内到货。这种需求往往是零星的、非计划性的但同样需要走采购流程。SAP的采购申请模块对这两类需求计划内和计划外都提供了完整支持。1.2 采购申请的核心字段与创建方式采购申请不是随便填个物料号就完事的它有一组关键字段决定了后续采购动作怎么走。我给刚入行的顾问或关键用户列几个最常见的字段作用注意事项物料号指明需要什么若物料尚未建码可用物料组文本描述替代数量需求量要与需求来源PR、预留、计划订单逻辑一致交货日期期望到货时间直接影响MRP的排程结果工厂/库存地点需求发生地跨工厂的需求要做STO库存转储设计采购组负责该需求的采购员分组后续审批策略、货源策略都会参考它固定供应商已指定货源则直接挂未指定时可留空由采购员后续确定凭证类型标准PR为NB不同凭证类型可配置不同编号范围和审批策略项目类别正常库存/消耗类/服务类等决定了后续转PO时是普通采购还是服务采购创建PR的方式目前我接触过的项目里主流有四种第一种是MRP自动生成也是最常见的一种第二种是手工事务代码ME51N创建第三种是由其他模块的前端单据转换而来比如设备维修订单的备件需求、销售订单的定制物料需求第四种是通过BAPI/接口从外部系统导入比如老旧的EAS系统或SRM系统推送过来的需求。手工创建PR没什么门槛但有个细节很多新手容易忽略ME51N界面里如果你只填了物料组和工厂没有填物料号系统会要求你必须维护一段需求文本否则不能保存。这个文本就是给采购员看的说明写清楚“为什么买、用于哪里”后续转成PO后这段文本还能带到采购订单里再通过打印输出传递给供应商。别嫌麻烦这些信息在审计时是救命的。1.3 采购申请里容易被低估的“科目分配类别”科目分配类别Account Assignment Category通常叫“科目分配类别”或“K类别”是PR上一个不太起眼、但影响深远的字段。它决定了这次采购是买回来进库存的还是直接费用化到成本中心、资产、项目或订单上的。我见过不少初学SAP的朋友在ME51N里看到一个“科目分配类别”下拉框里面有一堆值比如空、U、A、P、M、F搞得一头雾水。简单理解就是空采购进库存物料以后用于生产或销售典型是原材料、半成品、成品。U直接费用到某个成本中心典型是办公用品、维修备件。A费用归集到固定资产用于资本性采购。P挂到项目WBS元素下的采购工程项目里很常见。M挂在生产订单下的采购有时候工艺路线临时需要某种物料。F挂在销售订单下的采购按单生产的模式用得比较多。这个字段千万别乱选因为一旦选了科目分配类别后续做收货时财务凭证的科目确定逻辑就完全变了。进库存的采购收货时走GR/IR科目发票校验时也是标准的三方匹配而费用化采购收货时可能直接借成本中心/资产/项目根本不经过库存过渡。如果业务上本来该进库存的物料你给PR选了费用化科目后续库存账和财务账会对不上盘点时哭都来不及。2. 从PR到PO采购申请转采购订单的关键逻辑采购申请不是终点多数情况下它需要转成采购订单PO发送给供应商才算是真正进入执行阶段。这个转换动作在SAP里通过事务代码ME21N或ME57完成但背后牵扯到的策略、审批、货源确定才是实战中真正考验人的地方。2.1 采购申请的审批策略SAP的审批机制和OA系统的审批流不太一样它不是简单画一个流程图就完事而是基于“特性”驱动。也就是说系统会根据审批策略里的条件自动判断这条PR需不需要审批、需要哪个层级的审批。最常见的做法是配置“批准组 批准代码 批准策略”。比如批准组可以按采购组或物料组区分比如MRO类备件一个组原材料一个组。批准代码是“1、2、3”这种层级每层代表一个审批人。批准策略里设定分类条件比如“采购金额大于10万元”或“物料组属于危险化学品”。实际项目里常遇到的情况是一条PR金额超过了某个阈值必须由部门总监审批但如果金额更大达到总经理级别就要在总监之后再加一层。SAP通过“批准代码”的先后顺序和“审批状态”字段可以完美模拟这种多级审批场景只要在配置里把各层级的先后关系和维护好系统就会自动算出一条PR当前处在哪个审批关卡。这一点我特别想提醒大家采购申请审批不好好配置后续PO审批、发票付款审批全都会乱。因为很多企业的内控要求是“先审批需求再审批订单”如果你把审批压力全部压到PO环节等于把内部控制的堡垒后撤了这是比较危险的。2.2 货源确定谁供货、什么价PR转PO时SAP会尝试根据货源清单、配额协议、信息记录等数据自动带出供应商和采购价格。这一整套逻辑叫“货源确定”虽然听起来简单实际配置项却不少。货源清单Source List指定某物料在某工厂内可以由哪几家供应商供货有效期多久。MRP运行后如果配置了货源清单且勾选了“自动生成采购订单”或“自动生成计划行”系统会优先从货源清单里选供应商。信息记录Info Record记录物料和供应商之间的采购价格、币种、交货条款等。PO上价格的默认来源就是它。配额协议Quota Arrangement按比例分配采购量比如A供应商60%、B供应商40%避免单一货源风险。我建议用一句口诀帮助记忆货源清单决定“能不能买”信息记录决定“多少钱”配额协议决定“买多少比例”。三者可以配合使用但注意优先级和有效期维护否则会出现PO上供应商是系统“拍脑袋”决定的情况。2.3 ME57与ME21N两条思路一个目标PR转PO时采购员通常有两种操作习惯。一种是直接用ME21N在“采购申请”标签页里填入PR号码系统把PR的行项目自动带进PO另一种是用ME57批量处理把所有已审批且未转PO的PR显示出来勾选几条统一转成PO。从生产性系统里的实际反馈来看ME57更受资深采购员的欢迎。因为它可以在一个界面里同时看到所有待处理的PR还能看到每条PR的货源建议、交货计划行信息操作效率比ME21N一条条找要快不少。ME21N则更适合单一PR快速转PO的场景。需要留意的是PR一旦被PO完全引用后PR的状态会变成“已完成”。如果PO后来被删除或数量被修改PR的状态也会相应回退重新变回“未完成”让采购员能重新操作。这种联动机制保证了系统里不会出现需求凭空消失的情况审计时也能追溯每一个环节的变更。3. 采购计划协议与交货计划行长期合作的“框架玩法”聊完采购申请和PO接下来进入这个标题的另一半重头戏——采购计划协议Scheduling Agreement和交货计划行Delivery Schedule Line。这不是一个冷门功能凡是做汽车零部件、电子制造、快消品这类行业几乎都离不开它。尤其是搞过JITJust In Time准时制生产的朋友一定对“计划协议 交货计划行”的组合拳印象深刻。3.1 计划协议和标准PO的本质区别先明确一个概念SAP里的采购计划协议本质上是一种“框架订单”Outline Agreement它不规定一次性交付的准确数量而是约定了一个时间段内供应商按照什么节奏、什么价格、供应什么物料。真正告诉供应商“这周送多少、下个月送多少”的是计划协议下的交货计划行Schedule Line而不是PO。这和标准PO有显著差异。标准PO是一单一议采购员每次下单都是一个独立的交易计划协议则是一个长期框架比如和某家供应商签订一年的供货协议约定物料单价、付款条件、交货条款在这一年内通过下发“计划行”来调度每天的到货量。用个生活化的类比标准PO像是你每次去饭馆单点一道菜价格、份量、上菜时间都在单子里写明计划协议则像是你和健身房的私教签了年卡签合同时定好单价和服务条款具体哪天上私教课、每次练什么动作按每周/每月的排课计划走。排课计划就是“交货计划行”而年卡本身是那一份框架协议。3.2 计划协议的类型与适用场景在SAP MM中计划协议主要有三种普通计划协议LP一般供应协议不含JIT的“倒冲”概念。供应商根据你下发的计划行安排生产/发货适合采购周期较长、BOM相对稳定的原材料或标准件。JIT计划协议LPA常见于汽车行业的JIT/JIS场景。核心特点是计划协议下的计划行可以通过更细粒度的“JIT调用”来触发供应商按精确的时间窗和顺序交货。SAP里有专门的JIT功能组件比如Lean Logistics模块可以和计划协议联动。运输计划协议SAP S/4HANA中的TSATransportation Scheduling AgreementS/4HANA较新版本引入的功能主要是为了解决多地点、多模式的运输调度问题适用于供应链复杂度较高的企业。它把运输计划行和采购计划行更紧密地整合在一起。选择哪种计划协议不取决于系统里有没有这个功能而是取决于企业的采购模式和供应商协同程度。比如一个做精密机加工的工厂A类物料每周一次交货、用普通计划协议就够了但如果客户是主机厂要求每天按订单顺序送零部件到线边你就必须上JIT计划协议同时配套EDIElectronic Data Interchange电子数据交换报文跟供应商保持实时同步。3.3 交货计划行的核心地位很多刚接触计划协议的朋友最困惑的就是“计划行”Schedule Line这个概念。实际上它就藏在两个地方一个是采购计划协议头下的计划行一个是计划协议行项目下的计划行。前者表达“整个协议里供应商什么时候交付哪一批货”后者精确到“某个物料在某天之前交付多少数量”。从数据模型上看一张计划协议可以包含多个行项目多个物料每个行项目又可以有多个计划行。每个计划行有自己独立的交货日期和数量也可以有独立的“交货状态”比如已确认、未确认、已发货等。这种一对多的层级关系给了供应链计划员很大的灵活性。实际业务中计划员可以在ME38计划协议计划行维护事务代码里批量调整计划行比如把下周三的1500件提前到周二、把下月5号的500件推后到下月12号。这些调整如果通过EDI传输给供应商供应商系统里会自动更新自己的生产计划。这就是为什么计划协议在供需协同里这么受欢迎的原因——它不是一张死板的订单它是一份不断演进的生产节拍表。3.4 MD07与库存/需求清单别小看计划行的活动性热搜词里出现了“sap md07”这正好是计划协议场景下的一个高频事务代码。MD07库存/需求清单是一个汇总显示物料需求状况的报表能让人在一屏之内看到当前库存、在途量、计划订单、采购申请、计划协议计划行等全部供需要素。做计划的人最容易犯的错是只盯着采购订单的交期看忽略了计划协议计划行的变动。比如计划协议下的供应商是按月度框架备料的你光看一单PO交期根本不知道后续还有哪些计划行在排队而MD07能把所有供需条目按时间轴展示出来计划员一眼就能发现“这周有缺口下周有积压”。所以我强烈建议所有做MM供应链计划的朋友把MD07当成日常检查的标配工具养成每天早上跑一遍的好习惯。4. 实操场景计划协议从创建到计划行维护的完整流程理论说了一堆必须落到操作层面才有说服力。下面按实际项目里最常见的操作路径完整走一遍“创建计划协议 → 下发计划行 → 收货过账”的关键步骤尽量还原系统界面和事务代码方便照着练手。4.1 使用ME31L创建计划协议ME31L是创建计划协议的经典事务代码在S/4HANA里依然可用。操作步骤如下输入供应商代码、协议类型选LP或LPA、采购组织、采购组。进入行项目维护界面输入物料号、数量、交货日期、工厂/库存地点、价格通常通过信息记录自动带出。保存后系统生成计划协议号。这个号码不是采购订单号它是单独的凭证类型通常前缀有区分码比如“L”打头。需要强调的是计划协议创建后通常不会像PO那样“发货/收货”一次就关闭。它是一份长期有效的框架只要有效期没到供应商可以在协议号下持续供货。所以它的审批策略通常也和PO不同很多企业选择对计划协议做“年度审批”对下面的计划行做“日常调度”不再逐单审批。4.2 用ME38维护交货计划行创建完计划协议行项目后最核心的操作是维护计划行。事务代码ME38是标准操作入口。输入计划协议号、行项目号系统进入计划行清单界面。可以新增计划行输入日期、数量保存。可以修改已有计划行改日期、改数量系统自动更新协议状态。可以删除计划行前提是该计划行未收货否则只能做数量冲销或红冲处理。实际项目里计划行的维护通常不是手工逐条录入而是通过MRP运行结果自动生成或者通过外部高级计划系统如APO/IBP的接口写入。这样做的目的是让计划行和内部的生产计划保持一致避免“手工维护计划行导致库存不准”的问题。如果企业上了EDI或供应商门户计划行下发后通常会自动生成一份“采购计划行发布”的电子报文格式可能是DELFOR/DELJIT供应商收到后反馈一个“计划行确认”SRM或WebEDI里的回传。这时候如果供应商回复的确认数量和你要求的不一致SAP会在计划行上标记一个“确认差异”计划员可以据此提前拉响缺料警报。4.3 收货操作MIGO与计划协议收货的特殊之处计划协议下的收货和普通PO的收货在MIGO发货/收货事务里没有本质区别但有几个细节值得留意。使用MIGO选择“收货 → 采购订单”时如果输入的号是计划协议号系统会提示你选择具体是“计划协议收货”还是“计划协议计划行收货”。后者可以精确到某个计划行进行收货比如供应商送来的这批货是“对应周二计划行”的而“对应周三计划行”的还没送到。收货过账时系统会根据计划协议里的价格、交货条款以及物料主数据里的评估类自动确定财务科目。如果是协议框架内的大批量收货务必要确保计划协议行项目上有正确的工厂和库存地点否则过账时会报错“工厂XXXX中不存在库存地点YYYY”。计划协议收货后MIGO里可以看到消耗的计划行数量被部分或全部标记为“已收货”对应的采购需求也随之释放。4.4 常见问题计划协议改价与交期冲突计划协议在实际运行中最容易踩的两个坑一是改价二是交期冲突。改价的场景出现在年度调价或供应商提价时。有些企业直接在计划协议行项目上改价这其实是不推荐的因为计划协议是框架性的改价会影响历史数据的可比性。更稳妥的做法是在信息记录里维护新版价格并通过“条件更新”同步到计划协议下一次新计划行中去。如果一定要改协议上的价格最好保留价格修改的历史记录并走内部审批流。交期冲突则是指计划协议的框架有效期和计划行的交货日期不一致。比如协议有效期到12月31日但计划员在12月15日维护了一个1月5日交货的计划行。系统通常会允许保存但实际业务里这可能变成纠纷点供应商到底按协议框架接不接单如果框架已过期理论上供应商没有义务再生产。建议在配置里启用“计划行交货日期必须落在协议有效期内”的检查或者在供应商合同中明确约定“所有计划行必须覆盖在有效期内”。5. 计划协议在JIT/JIS场景下的进阶玩法近些年供应链管理强调精益化和数字化SAP MM的计划协议功能被越来越多地推向JITJust In Time准时制和JISJust In Sequence按序供应的前沿场景。如果你所在企业正在做汽车、新能源或高端装备制造大概率绕不开这个方向。5.1 JIT计划协议与传统计划协议的差异传统计划协议计划员的粒度通常是“天”或“周”供应商按计划行批量送货到仓库再由仓库分拣配送上线。这种模式对库存缓冲的要求较高动不动就建一堆高架货架和线边超市。JIT计划协议则把粒度压缩到“小时”甚至“单车/单序”。供应商收到的不再是“下周三送500件”而是“上午10点到11点之间按序列号从1到300依次送到线边道口”。这就对系统数据的实时性、传输报文的准确性、供应商响应速度都提出了极高的要求。SAP在处理这类需求时除了传统的计划协议功能还提供了“JIT调用”Lean Logistics JIT Call功能。它可以在生产订单下达时根据生产序列和BOM展开实时生成对供应商的JIT呼叫并通过IDocIntermediate Document中间文档或RFCRemote Function Call远程函数调用接口发送给供应商。供应商按序列回传发货信息到货后扫描序列号收货。5.2 计划行状态机从计划到实绩的闭环计划协议计划行的状态是判断整条供应链是否健康的重要指标。我常跟用户讲计划行有“生命周期”的概念大致包括已建议SuggestedMRP跑出来、系统生成的计划行还没经过计划员确认。已确认Confirmed计划员或供应商已确认具备采购约束力。已锁定Fixed不允许轻易变动通常用于当天的锁定窗口或已发出的JIT呼叫。已交货Delivered已经完成收货过账。已取消Cancelled计划行被删除或取消。这些状态不仅仅是为了好看它们直接影响MRP运算时对“供给”的判断。比如某个计划行已经“确认”过MRP会把它视为固定供给即使内部需求下降系统也不会自动把数量减掉相反如果只是“建议”状态MRP用“删除/重建”策略时可能直接把它删掉重建。所以计划员必须理解这套“状态机”的管理逻辑否则会做出看似合理实则破坏计划的调整动作。5.3 序列号管理与EWM PPF计划协议的下游联动如果计划协议走得足够深下游还会牵涉序列号管理和EWMExtended Warehouse Management扩展仓库管理的PPFPost Processing Framework后处理框架。举个例子某新能源汽车工厂的驱动电机是JIS供货的电机有唯一序列号。供应商按计划协议发货时提前通过EDI把序列号清单传给SAPMIGO收货时仓管员扫描序列号核对系统自动关联到对应的计划行。如果序列号对不上收货就会报错。这其实已经不只是MM模块的功课而是MM、EWM、Quality Management质量管理、PP生产计划的协同。部署EWM以后计划协议计划行会通过接口生成EWM里的“预收货”Expected Goods Receipt单据仓库人员靠这个预收货指导收货、上架和后续的波次分配。EWM的PPF机制则负责在特定节点自动触发后续动作比如收货完成后自动生成质量检验通知、自动释放到库存等。计划协议、PPF和EWM体系的配合才构成了现代制造业仓储供应链的完整闭环。6. 常见问题排查与实用技巧最后这部分我整理几个高频率踩坑点都是从实际运维和支持中积累下来的希望能帮大家少走弯路。6.1 MIGO收货报错“工厂/库存地点无效”怎么办这个错误多半出在计划协议行项目上。检查顺序应该是计划协议行项目的工厂是不是空着如果空着系统会默认使用的登录工厂有时会选错。该工厂下有没有对应的库存地点MIGO里输入计划协议号后系统会让你选库存地点如果没有收到任何可选列表说明物料主数据里没有扩展该工厂的视图或者库存地点没有分配给该工厂。物料主数据的“物料状态”是否为“锁定采购/收货”如果物料被设置了“删除标志”或“采购冻结”收货一样会报错。这类问题多半不是配置问题而是主数据或操作习惯的问题。把工厂、库存地点、物料主数据三个点逐一排查基本都能解决。6.2 计划协议计划行无法删除或被锁定计划行删除的报错最常见的原因是该计划行已经有收货记录需要先冲销收货再删除计划行。计划行状态已是“已锁定”或“已下达”需要先解除锁定系统才会允许删除。后台配置里启用了“计划行变动日志”某些状态下禁止删除。遇到这种问题别硬删先看看状态字段具体是什么。用事物代码ME38查看计划行时每一行都有“交货状态”“调用状态”“锁定状态”等字段看懂这组状态后再操作效率会高很多。6.3 计划协议在MRP运算后反复“抖动”这是让计划员最头疼的问题——MRP一跑某些计划行的数量忽高忽低今天2万件明天又变1.5万件。原因往往是需求侧的波动被直接传导到了计划协议而没有经过计划员的“确认”缓冲。解决办法有两点第一把计划协议的MRP参数设置调整为“MRP不自动删除/重建计划行”对应MRP组里的“计划行处理”参数让系统在既有计划行基础上做增量修改而非推倒重建第二在计划协议上应用“固定计划行”机制对近期锁定窗口内的计划行设置固定标记MRP不会对其自动修改。这也在一定程度上避免了和供应商之间的交期纠纷。6.4 关于“有发票过账凭证但打不开发票号”的补充说明在检索资料时我注意到有用户反馈“有发票过账凭证但打不开发票号”这种状况在供应链日结或月末结账时特别容易发生。原因通常是发票校验时生成了财务凭证却在后续查找时因为编号范围或显示权限问题无法调出。遇到这种情况优先去FB03里查财务凭证电子凭证号或使用MIRO的“显示发票凭证”通过供应商/过账日期查询千万不要在发票列表里反复刷新那样只会增加系统压力。如果电子凭证号查到了但MIRO里打不开大概率是凭证类型的显示范围权限没给全找BASIS查一下角色上的“单据类型”权限字段就知道问题在哪里了。7. 我的个人体会与一点建议我在做SAP MM实施和运维的这些年里越来越深地感受到一点采购申请、计划协议、交货计划行这些“看起来基础”的功能恰恰是企业供应链管理水平最真实的投影。一个计划员如果能把PR的科目分配类别理清楚、能把计划协议的计划行状态管理明白那这家企业的采购内控和供应链协同通常不会差到哪里去。反过来说如果连PR和计划协议都飘忽不定哪怕你上了再先进的集成平台也很难救回来。最后分享一个自己养成的习惯每次项目上线后我都会专门给关键用户做一次“三张表”的培训——PR生命周期状态表、计划协议行项目状态表、MRP供需例外信息表。让用户搞明白这三张表里每一个状态字段的含义和流转条件比教他一百个事务代码都有用。系统操作只是表层理解背后的业务逻辑才是长期价值所在。希望这篇文章能帮你把这“三张表”的思路也打通一点。
返回列表