☰
SAP框架协议全解析:合同与计划协议选型及配置指南
2026/10/7 9:01:55 网站建设 项目流程

1. 框架协议到底是个什么“协议”

干SAP这行,尤其是做MM(物料管理)和SD(销售与分销)的顾问,框架协议(Framework Agreement)是绕不开的基本盘。我见过不少刚入行的朋友,一听到“框架协议”就以为是个复杂的采购凭证,其实它和标准的采购订单(PO)有个最本质的区别:标准PO是一次性买卖,框架协议是长期合作的“总盘子”。

打个比方,你去菜市场买菜是标准采购,今天买一棵白菜就下一张单;但如果你想跟某家农场签一年供应协议,约定总共要买100吨白菜,具体每次送多少、什么时候送,后面再根据需求叫货,那这个一年期的“总盘子”就是框架协议。在SAP里,这个“总盘子”有两种承载形式:一种是合同(Contract),一种是计划协议(Scheduling Agreement)。两者都算框架协议,但在业务场景和操作逻辑上差异非常大,选错了后面一堆麻烦。

这篇内容适合SAP MM模块的顾问、内部IT支持、以及刚接触SAP采购业务的业务用户来看。我会把框架协议从主数据、后台配置、日常操作到常见坑位都拆开讲,用的都是实际项目里验证过的方案,不是教科书里那些“点击下一步”的水话。

先抛一个核心判断:如果你在SAP里遇到“一个供应商长期供货、价格定期调整、交货分多次进行”的业务,那基本可以锁定用框架协议;如果只是偶尔买一次、价格固定、交期明确,老老实实用标准PO就好。框架协议不是万能的,滥用反而会把流程搞得又重又慢。

2. 合同与计划协议:两张“主卡”怎么选

2.1 数量合同、金额合同与价值合同

合同(Contract)在SAP里对应事务码ME31K,创建的是长期采购安排,但不会直接触收货,必须通过后续下达的采购订单(Release Order)来执行。合同可以基于数量,也可以基于金额。

数量合同很好理解:签1000吨钢材,每吨4000元,后续创建PO时从合同里扣减数量,扣完就关。金额合同则是签总金额,比如50万元的办公用品,后续PO金额累计不能超过50万。这里有个细节很多人忽略:金额合同的监控是基于采购订单的累计值,不是基于发票值。如果你做发票校验时发现价格差异,合同的“已实现金额”并不会自动调整,需要做后续借记/贷记或手动修改合同条件。

另外,创建合同时你还可以选择是“工厂级”还是“公司代码级”。工厂级合同限定在特定工厂使用,跨工厂是不允许的;公司代码级合同通常用于集中采购、分工厂收货的场景。这个选择一旦做错,后续PO参考时就找不到合同,或出现“合同不适用于该工厂”的提示。

2.2 计划协议与JIT/JIT2

计划协议(Scheduling Agreement)在SAP里对应事务码ME31L,核心区别在于:计划协议可以直接产生交货计划(Schedule Line),货物按照计划行自动/手动送货,不需要中间再创建PO。

计划协议特别适合原材料采购中的长期滚动交货场景,比如汽车行业的零部件供应。供应商会看到你的交货计划,按计划行备货、发货。如果实施了JIT(Just In Time),还可以在计划协议里用JIT1/JIT2项目类别,通过EDI把精确到小时甚至分钟的需求发给供应商。

选择合同还是计划协议,我一般看三个条件:

  • 每次交货是否都要有采购订单?如果是,用合同;
  • 是否希望交货直接挂在框架协议下、不生成PO?如果是,用计划协议;
  • 是否有JIT/EDI对接需求?如果有,计划协议几乎是唯一路。

这里不得不提一个常见误解:有人把“计划协议”和“框架协议”当成同义词。严格说,框架协议是业务概念的大类,合同和计划协议是SAP里的两种“凭证载体”。你口头说“和供应商签了框架协议”,落到系统里,一定得选合同或者计划协议其中一个,不能含糊。

3. 框架协议的主数据与后台配置:先打好地基

3.1 凭证类型与号码范围

很多项目上线一年了,框架协议还没配好号码范围,导致ME31K创建合同时系统一直报“没有号码范围”。这个问题大多数出在后台配置遗漏。

框架协议涉及的凭证类型主要是合同(Contract)和计划协议(Scheduling Agreement)。在SPRO配置路径下,物料管理 → 采购 → 框架协议 → 定义凭证类型,你可以看到默认的合同类型和计划协议类型。重点检查内部给号/外部给号:如果用内部给号,必须维护号段范围(Number Range);如果用外部给号,那创建时就必须手工输入编号。

实操中我建议框架协议一律用内部给号,原因很简单:框架协议往往跨年度、跨公司代码,外部编号容易出现重复或漏号,而且内部给号可以在编号段里通过“年度+流水”的方式组织,方便追溯。具体配置路径是:物料管理 → 采购 → 框架协议 → 定义编号范围。如果你有多个公司代码共用一套号码范围,记得在配置里把公司代码分配进去。

3.2 项目类别、账户分配与科目确定

框架协议的项目类别(Item Category)决定了系统行为。最常见的合同项目类别是标准(Standard)和数量合同(Quantity Contract),计划协议常涉及标准、JIT、子合同(Subcontract)等。

项目类别的选择会影响后续PO参考时的“复制规则”,比如能否复制条件、能否复制文本、是否需要手动做账户分配。我遇到过项目里需求是需要按WBS元素收货,那就必须在合同项目里设置账户分配类别为“Q”(项目),否则后续PO参考时无法分配WBS。

账户分配(Account Assignment)和科目确定的联动容易被忽略。框架协议本身不收货、不产生物料凭证,所以很多时候不需要科目,但后续下达的PO或计划协议的收货会触发会计凭证,这时候就要检查OBYC的科目配置是否完备。我常用的检查方式是在ME31K创建一个测试合同,然后用ME21N参考它生成PO,MIGO收货时看能否正常过账。如果科目确定有问题,你在MIGO时就会撞到“请为账户分配维护科目设置”的报错。

3.3 货源清单、信息记录如何与框架协议配合

框架协议和货源清单(Source List)、采购信息记录(Info Record)是三张“关系网”。业务上经常有人要求“要维护了框架协议才能建PO”,这个其实涉及两个层面的控制:

  • 一是货源清单,你可以在货源清单里维护“合同”或“计划协议”作为固定的货源,并在物料主数据里勾选“货源清单”标记,让MRP跑出来的采购申请只能去找这个货源;
  • 二是信息记录,框架协议的价格通常会被写入信息记录,后续PO参考时优先取数。

这里有个常见误区:认为有了框架协议就不需要信息记录了。实际上,如果框架协议的价格变了但信息记录没更新,后续PO取值时可能还是用旧价格。我在项目里的做法是配置“条件记录更新”和“信息记录更新”,让合同的定价条件能自动同步到信息记录。当然,也要小心循环更新的问题,避免信息记录反过来覆盖合同价格。

4. 框架协议的创建与日常操作全流程

4.1 创建合同与计划协议实操

先讲创建合同(ME31K)。事务码ME31K进去后,第一屏要选“合同类型”“供应商”“协议日期”。协议日期很重要,它影响有效期的计算。如果供应商主数据里维护了“合同有效期”信息,系统会带出来;否则需要手动维护。

在合同行项目里,需要维护物料、数量、净价、工厂、交货日期等信息。这里我要提醒一个细节:合同行的“数量”是总数量,不是单次交货数量。后续PO下时时,系统会自动扣减合同剩余数量。你可以在ME33K里查看合同历史,跟踪已下达数量、剩余数量。

创建计划协议(ME31L)的流程类似,但行项目里多了一个“计划行”页签。你需要维护每一行的计划行(Schedule Line),包括交货日期、数量。如果开了MRP,计划行可以由MRP自动跑出来;如果纯手工操作,那就得手动在ME31L里维护计划行。

我强烈建议:计划协议创建后,先不要让供应商立刻开始送货,先在系统里用ME38(计划协议计划行维护)检查一下计划行的日期和数量,尤其是跨年度的情况。跨年度的计划协议,日期千万别填错年份,我见过有用户把2025年1月的计划行填成2026年1月,供应商等了三个月没收到叫货通知,最后才发现是年份错了。

4.2 从框架协议转采购订单:参考与下达

合同必须“下达”成PO才能执行。最常用的操作是ME21N(创建采购订单)→ 选择“来自合同”选项,输入合同号、行项目,系统会把合同的条件、数量、交期复制过来。

这里有一个重要参数:复制控制。SAP通过“采购订单→框架协议”的复制控制规则,决定哪些字段能复制、哪些字段能修改。比如价格,你可以控制在PO里是否允许手工修改。如果业务要求“合同价必须严格执行”,那就把PO的价格修改设为不能改;如果允许有价格弹性,可以放开修改权限。这个配置在SPRO的“采购→框架协议→(创建后续凭证的控制)”里维护。

实际项目中,我遇到过一种很别扭的需求:合同签的是总数量,但后续PO要分批下,且每批PO的运输费、包装费都不一样。这种情况就不能依赖标准复制控制,得考虑在合同里不维护那些杂费,或者把杂费放到PO层面用单独的条件类型维护,免得每次复制都带出错误费用。

计划协议没有“下达”这个动作,交期直接在计划行里体现。后续如果供应商送货,仓库用MIGO对计划协议收货,货物金额会在计划协议层面动态扣减。如果计划协议挂了很多未交货的计划行,系统会有“未清计划行”的概念,用ME39或MD07可以监控。

4.3 计划协议的计划行维护与MRP联动

计划协议里最核心的是计划行管理。用ME38可以手工创建、修改、删除计划行。如果你上了MRP,系统会自动在计划协议里创建计划行,但前提是:

  • 计划协议被维护为“MRP相关”;
  • 物料主数据里维护了货源清单,且货源类型包含计划协议;
  • MRP运行范围没有错误。

很多项目上线后,计划协议跑不出计划行,十有八九是货源清单没维护,或者物料主数据的MRP类型设置成了“无MRP”(ND)。这个用MD04一查就能看出来:如果MRP清单里显示了计划订单/采购申请,但没显示计划协议的计划行,就去查货源清单。

MRP联动还有一个容易忽略的点:如果计划协议的计划行已经生成,你改了安全库存或需求数量,重新跑MRP时,MRP不会自动“覆盖”已有的计划行,而是可能生成新的建议。这样会导致计划行重复。要解决这个问题,需要理解MRP的“计划区间”和“删除/重建”逻辑,必要时在物料主数据里设置“计划行合并”相关参数。

5. 框架协议与MRP、库存、开票的联动

5.1 框架协议在MRP里的“供应商供货”角色

MRP跑出来的结果通常是计划订单(Planned Order)或采购申请(Purchase Requisition)。采购申请可以被转换为采购订单或合同下达,也可以直接转成计划协议的计划行。

MRP策略上,如果你们用的是“再订货点”策略,那框架协议的计划协议计划行只能作为参考,不会自动成为采购对象。如果用的是“基于计划”的策略,MRP会根据独立需求、生产计划来生成计划协议的计划行。这里建议关注一个事务码——MD07,它可以从MRP角度查看框架协议的计划行覆盖情况,相当于“框架协议计划行约束检查”:一旦某个物料出现短缺,MD07会标红,告诉你供应商那边计划行数量不够。这个功能在长周期物料、产能受限的行业特别有用,我每次做供应保障诊断都会先拉MD07看一遍再决定要不要紧急补货。

为什么说MD07重要?因为很多采购计划的缺口不是需求变大了,而是计划协议的“计划行剩余量”不足——供应商最多只保证了你计划表里的量,超过部分还需要重新协商交期。MD07就是快速识别这类风险的工具。

5.2 交货单、收货、发票校验与框架协议的联动

计划协议收货时,直接MIGO→采购订单→计划协议编号,输入物料、数量,系统会自动匹配未清计划行。这里有一个“过量交货容差”的问题:如果计划行数量是100,仓库实际收到105,系统能不能过?这取决于后台容差配置(OMB2或OMCQ)。

我遇到过一个案例,供应商送货时总是比计划行数量多一点点,仓库每次都慌慌张张找IT解锁。排查下来是后台“过量交货容差”设置成了0%。我建议计划协议场景的容差设置不要设为0%,因为供应商的实际交货很难完全精确,但也不要设置过大(建议3-5%),防止供应商利用容差多送货造成库存积压。

发票校验(MIRO)方面,框架协议不直接参与开票,但后续PO或计划协议的发票校验会检查“数量差异”和“价格差异”。如果PO是从合同下达的,MIRO会核对PO价格与合同价格,有差异会触发警告或错误。计划协议场景特别容易遇到“有发票过账凭证但打不开发票号”的怪问题——这通常不是发票校验本身出错,而是供应商经常一次性送来多张发票,系统里的“发票日”跨月了或者“服务费计算”卡住了。遇到这种,先在FB03查会计凭证,确认凭证是否已经生成,再用MIRO重新进入即可。

5.3 框架协议在成本估算、价值流监视器中的位置

如果你上的是S4 HANA,尤其关注FICO,会发现框架协议的计划价格会影响标准成本估算和实际成本核算。很多公司会在S4里用“值流监视器”(Value Stream Monitor)来追踪采购到收货到发票的全链路,一旦哪个环节出了容差、差异调整,值流监视器会提示。

我提醒一句:框架协议如果频繁做后续借记/后续贷记(如价格差异调整),这些差异会被计入采购差异科目,进而影响库存成本。在月末结账时,一定要确认这些差异已经被“采购差异分摊”逻辑处理,否则库存价值会和财务账对不上。这个在S4 HANA里尤其明显,因为物料账的“差异分摊”和“实际成本”功能会在后台跑一轮,框架协议的差异没处理干净,CO(成本会计)那边就会收到报警提示。

6. 常见问题排查:我踩过的坑和解决办法

6.1 框架协议无法被PO参考或找不到合同

这是出场率最高的一个问题。场景是:ME21N里选“取自合同”,输入合同号后,系统提示“找不到计划行”或“合同不适用”。

排查思路:

  • 检查合同是否已经审批完毕,未审批的合同无法被参考(如果启用了审批策略);
  • 检查合同里的“工厂”和你要创建的PO“工厂”是否一致,工厂级合同时跨工厂会被拒绝;
  • 检查合同行项目的“有效到”日期是否已过期;
  • 检查该项目类别是否允许“创建采购订单”。

如果以上都没问题,最后再查后台“采购订单→框架协议→定义可能的项类别”的复制规则,确认目标项目类别在允许范围内。很多定制化的“特殊项目类别”不会自动出现在可复制清单里,需要手动添加。

6.2 条件类型提示“无法在此业务凭证中使用”

框架协议价格维护时,偶尔会碰到“无法在此业务凭证中使用条件类型”的报错。这个问题的根源是**定价过程(Pricing Procedure)**的“框架协议”存取顺序不包含对应的条件类型。

SAP里的定价过程区分不同的应用场景,比如合同、计划协议、采购订单各有各的定价过程。如果你在合同里用的条件类型,在计划协议的定价过程里没有配置,那ME31L里维护这个条件时就会被拒。解决办法是在SPRO的“采购定价”里给对应凭证类型添加该条件类型的存取顺序。

有个细节:框架协议里“条件类型无效”经常不是条件类型本身没配,而是凭证类型分配了错误的定价过程。比如给计划协议分配了“标准采购订单”的定价过程,但计划协议业务上要用“框架协议”定价过程,条件自然就被过滤掉了。排查时可以看ME31L/ME31K顶部的“定价过程”字段,确认是否合理。

6.3 计划协议交货计划不按预期生成

常见表现:MRP跑了,计划协议却没有新增计划行;或者新增了,但交期不是按供应商确认的日期。

排查询径如下:

  • 确认计划协议“交货计划”视图的“自动生成计划行”标记是否打开;
  • 确认货源清单里计划的“有效期”是否覆盖当前日期;
  • 确认物料主数据的MRP类型不是ND(无MRP);
  • 如果MRP认为已有计划行量足够覆盖需求,就不会新增,这是正常情况,但容易让用户误判。建议用MD04检查计划行覆盖情况,而不是只看有没有新增计划行。

如果MRP生成了计划行,但日期和需求日期差了很多,大概率是计划协议行项目里的“计划交期(Processing Time)”或者MRP的“收货处理时间”设置过大。改完这些时间参数后,重跑MRP,计划行日期就会响应调整。

6.4 框架协议被锁或号码范围冲突

多人同时维护框架协议时,偶尔会遇到更新锁报错(物料/供应商被加锁)。这种可以等后台释放,或者用SM12去查锁对象,找到对应的用户、终端再释放。我见过一个项目里,有人用同一个计划协议号段同时跑接口批量创建,导致号码范围表被锁死,所有业务用户都无法创建新计划协议,最后只能临时扩展号段才恢复。

号码范围冲突的另一个变种,是“内部给号出现外部编号录入的空白”。如果后台配置了混合编号(既允许内部也给外部),实际操作中很容易出现手输了一个极长的外部编号,把号段搞乱。建议框架协议一律统一用内部给号,不开放外部编号。

7. 关于框架协议,我还想补充两点经验

框架协议虽然是SAP里比较经典的功能,但每个项目里使用的方式千差万别。我做过汽车零部件行业,计划协议加JIT几乎是标配;也做过化工行业,采购完全靠数量合同加大批发布料;还见过一个贸易公司,框架协议用得很少,基本是标准PO搞定一切。

从配置和操作角度,框架协议的核心价值在于“控制长期供应关系下的每次交易”,它把价格、条款、货源这种“商务信息”抽离到PO之外,避免每次下单都要重复录入。但要注意:框架协议也引入了额外的系统复杂度。如果业务没有“长期、分批、重复购买”场景,不建议硬上。

最后分享一个小技巧:框架协议在S4 HANA里查看时,推荐用Fiori的“管理采购合同”或“管理计划协议”应用,界面上能直接看到合同剩余数量、交货计划履行率、以及即将过期的未清数量,比在GUI里来回跳屏方便很多。对于习惯GUI的老用户,我会推荐把ME33K、ME33L、ME38、MD07这几组事务码做成个人收藏,日常监控效率会明显提升。

框架协议不是高深的技术,但它背后的采购业务逻辑和系统联动,值得每一个做SAP供应链的人花时间吃透。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询