☰
SAP MRP 批量程序:EX/FX/MB/WB/TB 选型与避坑
2026/9/29 1:47:13 网站建设 项目流程

SAP 里有个字段,平时没人盯着它,出了问题基本全是它的锅——物料主数据 MRP1 视图上的批量程序(Lot-Size Procedure / Losgrößenverfahren)。它不参与 BOM 展开,不管提前期,也不做可用性检查,只在 MRP 链路的最后一步决定一件事:这笔算出来的净需求,到底要变成几张单、每张单多少量。这篇文章是"SAP 批量程序"系列的第一篇,先把最常用、也最容易被混用的几个讲透:静态批量 EX、FX,以及期间批量 MB、WB、TB,顺带把 PB、HB 和最小/最大批量、舍入值这些"同伙"一起理清楚。写这篇的起因很简单:我在项目里不止一次遇到计划员拍着桌子问"我明明设的是月度批量,MD04 里怎么还是五张计划订单",也不止一次看到顾问把 FX 和最小批量当成一回事,结果库存多压了百分之几十。如果你是在做 MM/PP 模块的内部顾问、SAP 计划员,或者正在准备 S/4HANA 迁移要梳理 MRP 参数的人,这篇应该能省你几个来回。

1. SAP 批量程序到底是什么:从净需求到单据数量那条链路

1.1 批量程序在 MRP 里站在哪一步

想搞明白批量程序,得先把它在 MRP 流程里的位置找出来。一次 MRP 运行(MD01/MDBT/MD01N)大致走这么几步:展开 BOM 和工艺路线算出毛需求,扣掉现有库存、在途采购、已确认的生产订单,得到净需求;然后系统拿净需求去查物料主数据上的批量程序,算出订单建议的数量;最后再被最小批量、最大批量、舍入值(舍入参数文件)修饰一遍,落到计划订单或采购申请上。

关键点在于:批量程序作用的对象是净需求,不是毛需求。这一点经常被忽略。有人看到"月度批量",以为系统会把一个月的毛需求加总下一单;实际上如果这个月里有 200 件在途采购到货,净需求可能只有 30 件,最后下出来的单就是 30 件。所以调批量程序之前,一定要先在 MD04 里看清净需求的真实分布——需求集中不集中、被哪些收据冲掉了、日期怎么排的。批量程序只能改变"怎么打包",改变不了"需不需要"。

还有一个容易踩的坑:批量程序只影响新生成的订单建议。已经被手工固定(Firming)的计划订单、已经转成采购申请或生产订单的单据,重跑 MRP 时不会被重新打包。改完参数发现数量没变,八成就是这个原因,不是配置没生效。

1.2 静态批量和期间批量,SAP 为什么要分成两类

SAP 在配置里给每个批量程序打了一个"静态/期间"的标识,这不是为了分类好看,而是对应两种完全不同的补货哲学。

静态批量的思路是"一笔需求对应一次补货":净需求出现一笔,就产生一张单(EX),或者产生一张固定数量的单(FX)。它不跨需求合并,因此库存水平最贴近真实需求,缺点也直接——单据多。期间批量的思路是"一段时间窗内凑一车":把同一个日历期间(日、周、月,或者自定义期间)内的所有净需求汇总成一张单,按这个期间里最早的那笔需求日期来安排订单日期。单据数量大幅下降,代价是后段的需求被"提前"满足了,账面上多出一块提前库存。

这背后其实是最经典的订货成本与持有成本权衡。批量大一点,采购/生产的处理成本摊薄,但库存资金占用和仓租上升;批量小一点,库存轻,但采购部天天开单、生产部天天换产。SAP 标准没有直接提供一个 EOQ(经济订购量)模型去自动算这个平衡点,它的做法是把决策权交给顾问和计划员:你要么用 FX 加舍入值去逼近一个合理的固定批量,要么用期间批量按自然节奏凑单,要么通过用户出口或 BAdI 写自己的逻辑。所以批量程序的选型,本质是在替公司做一次库存策略决策,不该由某个顾问拍脑袋填个字母了事。

1.3 标准批量程序清单和它们的脾气

标准系统里的批量程序键值不多,但每一个的性格都很清楚。下表是我按实际使用频率整理的,字段名以你系统里的版本为准(不同版本、不同语言包的翻译略有差异)。

批量程序类型含义需要维护的关键参数合并范围典型适用场景
EX静态精确批量/按需批量无不合并,一笔净需求一张单单价高、需求零散、单件或项目型物料
FX静态固定批量固定批量不合并,每单做满固定数量供应商有起订量/包装量、生产有最小投料
HB静态补充批量补充批量数量需求小于阈值时补足到指定量想设一个"补货下限"但不想设最小值
TB期间日批量工厂日历同一日历日内的净需求每日跑 MRP、需求按日密集出现
WB期间周批量工厂日历(周划分)同一工厂日历周内的净需求按周发运、每周集中下单
MB期间月度批量工厂日历同一日历月内的净需求供应商按月供货、低值易耗品
PB期间期间批量期间标识(指向期间分组)自定义期间内的净需求半月、双周、40 天集装箱周期等非标节奏

这里要单独说一句 HB。它容易被忽略,但在一些"小件、日用、需求频繁且单笔量很小"的物料上挺好用:需求在阈值以下就补到指定量,超过阈值就按实际需求走,比 FX 那种"每笔都做满一整批"要温和得多。至于标准系统里还有没有别的键值,直接打开配置事务看完整清单最省事——标准版本一般就是这几个,不同行业解决方案可能有增减。

2. 静态批量:EX 和 FX 的细节、参数与踩坑点

2.1 EX 精确批量:最诚实,也最容易把单据搞爆

EX 的逻辑最朴素:净需求是多少就下多少,需求日期减去补货提前期就是订单日期。你在 MD04 里看到的效果就是"一笔需求对应一张计划订单,数量完全相等"。它的优点是库存端几乎零浪费,账面干净,审计和成本核算都舒服;缺点是单据量随需求笔数线性增长。

我在一个备件项目里见过真实的后果:几百个高频小件全部用 EX,一次 MRP 跑完生成一万多张采购申请,采购部一天的工作量全耗在合并和清理上,最后不得不把大部分物料改成 FX 或 MB。所以 EX 适合什么样的物料?单价高、体积大、需求笔数少、客户订单驱动的物料,比如专用件、项目采购件、贵重元器件。判断标准很简单:这个物料的单笔需求金额能不能覆盖这张单据的处理成本?如果一张采购申请的处理成本按五十块算,单笔需求只有三十块,那就是亏的。

另一个常见误解是"EX 不能设最小批量"。其实 EX 和最小批量、舍入值可以共存:EX 只负责"不合并",最小批量负责"托底",舍入值负责"向上取整"。只是这时候出现的结果就不再是"需求多少下多少"了,很多人会以为自己选的还是 EX 就应该严格等量,一看数量多了就怀疑配置出错——其实是这三个参数在叠加。

2.2 FX 固定批量:固定批量字段到底怎么取值

FX 的行为是:以"固定批量"字段(物料主数据 MRP1 视图上的固定批量,SAP 内部字段常见为 BSTFE,翻译可能叫"固定的批量")为基准,做出来的订单建议以这个数值为单位。需求小于固定批量时,直接做满一整批;需求大于固定批量时,系统会按固定批量的整数倍去覆盖需求——实际表现上,常见的是一张单取倍数,也可能拆成多张数量等于固定批量的计划订单,这一点和版本、和该需求是否落在同一时间点有关,最靠谱的办法是拿自己系统的一笔真实需求试一次,别背文档。

FX 的价值在于把外部约束写进 MRP。供应商起订量 500、托盘一板 60、注塑机最小投料 200 公斤,这些都是硬约束,你不设 FX,采购拿到 30 件的需求还得回头找你确认能不能加量,流程就断了。但 FX 的副作用也很直白:需求越零散、日期越分散,库存就越离谱。

举个我在算例章节会继续用的数:一批物料三、四两个月总净需求 235 件,四笔需求都不到 100 件。如果固定批量设 100,跑完就是六张单、每张 100,总下单量 600 件,比真实需求多出 365 件。多出来的这些不是"迟早要用",因为有相当一部分是本来下个月才需要、现在提前买回来的,资金占用和仓租都得算进去。所以 FX 的固定批量怎么定,不能拍脑袋,建议这么算:固定批量略大于供应商最小起订量和包装量的最小公倍数,同时控制在"半到一个平均月用量"之间,超过一个月的用量基本就是在替仓库订货了。

2.3 最小批量、最大批量、舍入值:和 EX、FX 的先后顺序

这几个字段是批量程序最容易缠在一起的伴生参数,我按我实测的顺序说一遍(顺序在不同版本和场景下会有细微差别,结论以你自己跑 MD04 为准)。

  • 最小批量(常为 BSTMI):算出来的数量低于它,就被抬到它。它是下限约束,不参与合并。
  • 舍入值(常为 BSTRF):把数量向上取整到它的整数倍。设成 25,算出 62 就变成 75。
  • 舍入参数文件:比单一舍入值灵活,可以按"起始数量 + 增量"分档,比如 1 到 100 取整到 10,100 到 1000 取整到 50。适合数量跨度大的物料。
  • 最大批量(常为 BSTMA):超过它,系统把订单拆成多张,每张不超过上限。

我实测里比较常见的一条链路是:批量程序算基础量 → 最小批量托底 → 舍入向上取整 → 最大批量拆分。但请注意,这不是圣旨,遇到"最大批量和舍入值同时存在,结果看起来既像又不像"的场景,我的做法是拿两三个典型数量点(比如刚好等于最大值、刚好超过最大值一点)各跑一次 MD02,看计划订单怎么拆的,比翻文档快。

最容易混淆的一组是EX 加最小批量和FX。很多人觉得两者等价,其实差得远。用一个例子说清楚:固定批量/最小批量都设 100。

参数组合净需求 40净需求 250逻辑差异
EX + 最小批量 100一张单 100一张单 250只托底,不补满
FX 固定批量 100一张单 100按 100 的倍数覆盖,共 300(可能是三张 100,也可能一张 300)每单都是固定量的整数倍

同样是"100",需求小于下限时结果一样,需求大于下限时结果完全不同:EX 给 250,FX 给 300,多出的 50 就是库存。这组差异我拿来给业务部门解释过一次"为什么我们不改 FX 而改最小批量",对方立刻就懂了。

3. 期间批量:MB、WB、TB 怎么把零散需求打包

3.1 MB 月度批量:凑满一个月,代价是提前到货

MB 的规则是:把同一日历月内的净需求汇总成一张订单建议,订单日期按这个月里最早的那笔需求日期倒推提前期。用数字感受一下:三月的净需求依次是 05 日 40 件、06 日 30 件、20 日 25 件、21 日 60 件,总 155 件;四月的净需求是 02 日 45 件、15 日 35 件,总 80 件。用 MB 跑出来就是两张计划订单:155 和 80,而不是六张。

表面上很划算:单据从 6 张降到 2 张,采购处理成本和供应商的送货次数都降了。但你要明白一件事——那张 155 的计划订单,可用日期是 05 日,也就是 06 日的 30 件、20 日的 25 件、21 日的 60 件,全部被假设成 05 日就到货了。最多提前了半个月,多持有约 115 件库存。这笔账值不值得,得算。

我拿一个常见的口径算给你看:假设单价 100 元,年持有成本率 15%(含资金、仓租、损耗),那么 115 件占用资金 11,500 元,一年的持有成本是 1,725 元,摊到 16 天大约是 (11500 \times 15% \times 16 / 365 \approx 76) 元。而省下来的四张单据,按每张 50 元的采购处理成本算,省了 200 元。这种情况下 MB 是赚的,结论很清楚。反过来说,如果这是个单价 5,000 元的贵重件,同样的提前量,持有成本瞬间翻五十倍,MB 立刻变成亏本买卖——这也解释了为什么贵重料基本都在用 EX。批量程序选型从来不是技术问题,是一笔账。

3.2 WB 周批量:周是怎么切的,由工厂日历说话

WB 汇总的是同一个工厂日历周内的净需求。这里有个细节值得说清楚:"周"不是你理解的自然周那么简单,周的划分来自工厂日历的定义——一周从星期几开始、哪些天算工作日,都是工厂日历在管。同一家公司不同工厂用了不同工厂日历,同一个物料在 A 厂跑出来的周分组和 B 厂可能就不一样,跨年那几天的第一周切法更是容易让人困惑。

用上一节的例子跑 WB:05 日和 06 日的需求落在同一周(以周一到周日为一周的话),合并成 70 件;20 日和 21 日的需求同一周,合并成 85 件;04 月 02 日单独一周 45 件;04 月 15 日单独一周 35 件。一共四张单,总下单量还是 235 件。可以看到 WB 的效果介于 EX 和 MB 之间,是一个比较中庸的选择:单据量明显下降,提前到货的天数最多不超过一周,库存风险可控。

WB 特别适合两类场景:一是供应商本来就按周安排班车或者按周集货;二是内部生产按周排产、按周领料。这时候批量程序和实际业务节奏是对齐的,不会出现"系统让我下单但车间这周不排这个料"的尴尬。反过来,如果供应商是随叫随到的本地供应商,WB 反而让你每周多存一点货,收益不明显。

3.3 TB 日批量:和 EX 长得像,但不是一回事

TB 汇总的是同一日历日内的净需求。很多人第一反应是"那不就是 EX 吗"。如果每个需求日只有一笔需求,结果确实和 EX 一模一样——我在算例里跑的六笔需求分布在六个不同的日子,TB 出来的就是六张单,和 EX 完全一致。这是最直观的教材:TB 的价值只有在同一天有多笔需求时才体现出来。

同一天出现多笔需求是很常见的事:多个销售订单同一天到期、多个生产订单同一天需要同一个组件、多个 MRP 区域的需求汇总到同一物料。这时候 EX 会开出多张单,TB 会合成一张。所以在需求密集、每日跑 MRP 的环境里,TB 是"零成本优化"——它不改变到货时间,不增加任何提前库存,只是把同一天的碎片合并掉。如果你现在用的是 EX,而 MD04 里经常看到同一天好几张计划订单,把批量程序换成 TB 几乎是纯赚的。我自己的习惯是:便宜、笔数多、单笔量小的物料,先上 TB 试试,看看单据量能降多少,再决定要不要进一步用 WB 或 MB。

3.4 期间批量"有时不合并"的几种情况

这是计划员抱怨最多的地方:配置上明明写着月度批量,MD04 里怎么还是五张单?根据我的实操经验,主要就这么几种原因。

一是补货提前期内的需求不参与合并。期间批量的合并有个前提——那些需求要在补货提前期之外。落在提前期里面、也就是"现在不订就来不及"的需求,系统会按准确批量单独处理,不会为了凑一个月而硬等。这条规则很少有人在文档里注意到,但它解释了大量"配置没错、结果不对"的疑惑。所以看到一个物料用 MB 却出现多张单,第一件事是看这几张单的日期是不是都落在提前期以内。

二是期间边界天然切开。跨月、跨周的需求注定分到两张单,月末最后一天和次月第一天的两笔需求,哪怕只差一天也不会合并。所以需求日期越靠近期间边界,MB 或 WB 降单据的效果就越差。规划物料时如果有得选,把需求日期往期间中段拉一拉,效果会好不少。

三是净需求被收据吃掉了。如果一个月里有在途采购到货,净需求本身变小甚至为零,自然也就没有合并的机会。这时候要看的是净需求,不是毛需求。

四是已经固定的订单不参与重组。手工固定过的计划订单、已转采购申请的单据,重跑 MRP 也不会被重新打包,数量和日期都保持不变。

另外还有一类是 PB 期间批量配了期间标识但期间分组没维护对,导致合并窗口和预期不符,这种属于配置问题,下面配置章节会讲。

4. 配置与实操:从定义批量程序到 MD04 验证

4.1 配置路径和几张关键表

批量程序的配置主要落在三个地方,我是按这个顺序配的。

批量程序本身的定义。走 SPRO 路径:生产 → 物料需求计划 → 计划 → 批量计算 → 定义批量程序(也有版本翻译成"批量程序维护",常用事务码 OPPQ,找不到就用 SPRO 里的搜索框敲"批量程序",比记事务码靠谱)。这里能看到标准的 EX、FX、HB、TB、WB、MB、PB,也能自己复制一个自定义键值,比如给某个事业部做一个特殊的批量逻辑。存放这些定义的表是T399D,用 SE16N 直接看这张表,能一次看到所有批量程序的定义和它们的静态/期间标识,排查"这个字母到底代表什么"很快。

期间分组。PB 期间批量要用到物料主数据上的"期间标识"(字段名以你系统版本为准),这个标识指向一组自定义的期间划分。配置路径在批量计算下面,存放的表是MRPPP这一类。它的定义方式一般是"起始日期 + 天数 + 重复次数",所以你可以做出"每月 1 号到 10 号、11 号到 20 号、21 号到月末"这种不规则但符合业务节奏的期间,也可以做"每 14 天一个期间"的双周节奏。国内不少企业的供应商是半个月送一次货,这种场景用 PB 比用 WB 或 MB 都更贴合。

工厂日历。TB 和 WB 的日、周划分依赖工厂日历,配置在 SAP 基础设置里。这一项通常上线时就配好了,但迁移或新增工厂时容易漏,一旦工厂日历没配好,期间批量的分组会变得毫无规律。

另外还有一个容易忽略的地方:物料主数据上的批量程序,默认值可能来自 MRP 参数文件或工厂参数。新建物料时如果参数文件里带了默认值,你可能根本没注意到批量程序被自动填成了 EX。批量程序是自己配的没错,但生效的是物料主数据上那个值,这两者要分清楚。

4.2 物料主数据上要盯住的几个字段

所有批量行为最终都落在物料主数据的几个字段上,我按视图整理一下,方便对照检查。

字段(常见技术名)含义所在视图备注
MARC-DISLS批量程序MRP1核心字段,决定用 EX/FX/MB 等
MARC-BSTFE固定批量MRP1FX 用,也可能叫"固定的批量"
MARC-BSTMI最小批量MRP1下限托底
MARC-BSTMA最大批量MRP1超限拆单
MARC-BSTRF舍入值MRP1向上取整
期间标识相关字段期间标识MRP1PB 用,指向期间分组
MARC-PLIFZ / MARC-DZEIT计划交货时间 / 自制生产时间MRP2决定补货提前期,间接影响期间合并

这些字段有个共同点:它们是按工厂维护的。同一个物料在 A 厂用 FX、在 B 厂用 MB,完全合法,也很常见。所以在排查问题时,一定要确认你看的是不是目标工厂的那条记录,我见过不止一次"配置对了但物料跑错工厂"的乌龙。

还有个很实用的技巧:想找出全工厂所有在用某个批量程序的物料,直接 SE16N 查 MARC 就好,不用一个个翻物料主数据。

" 找出工厂 1000 下所有使用固定批量 FX、且未标记删除的物料 SELECT matnr, werks, disls, bstfe, bstmi, bstma, bstrf FROM marc INTO TABLE @DATA(lt_marc) WHERE werks = '1000' AND disls = 'FX' AND lvorm = ''. " 顺手看一下这些物料的固定批量是不是都维护了, " FX 没填固定批量,跑出来的结果会让你怀疑人生 LOOP AT lt_marc ASSIGNING FIELD-SYMBOL(<ls_marc>). IF <ls_marc>-bstfe IS INITIAL. WRITE: / '缺少固定批量:', <ls_marc>-matnr. ENDIF. ENDLOOP.

这段查询我在每次批量策略梳理时都会跑一遍,尤其适合 S/4HANA 迁移前的盘点:哪些物料在用什么批量程序、参数有没有缺失、有没有一堆物料悄悄用了 EX。缺固定批量是 FX 最常见的低级错误——字段空着,系统只能按需求走,实际效果就退化成 EX,但责任部门还以为自己设了固定批量。

4.3 一个可以复现的算例:同一组需求在六种批量程序下的结果

光讲原理不够,我把前面提到的场景完整跑一遍,这组数据我在培训内部顾问时反复用过,因为它能一次说清所有差异。设定:某物料在工厂 1000,补货提前期足够短(不影响分组观察),六笔净需求如下。

需求日期净需求数量所属周(周一至周日)所属月
03-054003-03 至 03-093 月
03-063003-03 至 03-093 月
03-202503-17 至 03-233 月
03-216003-17 至 03-233 月
04-024503-31 至 04-064 月
04-153504-14 至 04-204 月

净需求合计 235 件,六笔。下面是六种批量程序的运行结果对比。

批量程序生成的计划订单数量(按日期顺序)单据数总下单量相对净需求的增量
EX 精确批量40 / 30 / 25 / 60 / 45 / 3562350
FX 固定批量 100100 / 100 / 100 / 100 / 100 / 1006600+365
TB 日批量40 / 30 / 25 / 60 / 45 / 3562350
WB 周批量70(03-05、03-06 合并)/ 85(03-20、03-21 合并)/ 45 / 3542350
MB 月度批量155(3 月合并)/ 80(4 月合并)22350
PB 期间批量(10 天为一期间)70(03-01 至 03-10)/ 85(03-21 至 03-31)/ 45(04-01 至 04-10)/ 35(04-11 至 04-20)42350

这张表里有三个值得琢磨的地方。

第一,只有 FX 改变了总下单量。其他五种批量程序都是"零增量"的——它们只是把同一批需求重新打包,没有额外买东西。这是判断批量程序性质的一个好角度:如果业务部门抱怨"换了批量程序库存就上去了",八成换的是 FX 或者加了最小批量、舍入值。纯期间批量和 EX、TB 不会凭空增加总量,只会改变到货时间的分布。

第二,TB 在这组数据上和 EX 完全一样。因为六笔需求分别落在六个不同的日子,没有同日的多笔需求可合并。这恰好说明 TB 的效果完全取决于需求密集度:同一天需求越密集,TB 省下的单据越多。反过来,如果需求本来就稀疏,把 EX 换成 TB 是白折腾。

第三,PB 和 WB 在这组数据下结果相同,但这是巧合。10 天划分的期间在这组需求上刚好和自然周切出了同样的组合。真实的差异会出现在需求落在"周三到次周二"这种跨周场景里——WB 会切开,10 天的 PB 会合并。这也是为什么要选 PB:它给你的是按业务节奏自定义的自由度,代价是配置和维护都更重。

再看一下提前库存的账。MB 方案下那张 155 的计划订单,可用日期是 03-05,等于把 03-06 的 30 件、03-20 的 25 件、03-21 的 60 件总共 115 件都提前到了 03-05 附近。按前面说的单价 100 元、年持有成本率 15% 算,这部分大约多花 76 元的持有成本,换来的是少开四张采购单据(按每张 50 元约省 200 元)。FX 方案下多买的 365 件,占用资金 36,500 元,年持有成本约 5,475 元,这个数字就不是"省几张单据"能盖住的了——除非供应商起订量真的卡在那里,否则固定批量设 100 就是不划算。这就是我最想让读者带走的判断方法:把多出来的库存换成钱,把省下来的单据换成钱,两边一对比,答案自己就出来了。

4.4 跑 MRP 和结果验证:MD04、MD05、MD07 各看什么

参数配好了,怎么验证效果?我的流程一般是这样。

先做小范围试跑。别一上来就全厂 MRP。用 MD02 只针对这一个物料、这一个工厂跑一次单物料计划,几秒钟出结果,然后进 MD04 看计划订单的数量和日期。这一步能省掉大量返工——我曾经陪一个客户排查过"全厂 MRP 跑了六个小时,跑完发现批量程序设错了"的事故,那六个小时的窗口期是很贵的。

MD04 看的是实时清单,也就是当前系统里真实存在的库存、收据、需求和订单,是验证批量程序效果最直接的地方。重点看三样:计划订单的数量、可用日期、以及有没有意外的多张订单。如果批量程序是 MB,却出现了五张计划订单,第一件事就是核对每张单的日期是否落在补货提前期内,以及需求是不是跨月了。

MD07 是 MRP 清单的集中显示(MD05 单个物料、MD06 按 MRP 控制者),这里有一个必须知道的坑:S/4HANA 的 MRP Live(MD01N)默认不生成 MRP 清单。也就是说你跑完 MRP Live 之后进 MD07 可能是空的,一堆人以为程序出错了。要用 MD05/MD06/MD07 看清单,要么在参数里显式要求生成 MRP 清单,要么用经典的 MD01/MDBT 流程。这个差异在升级项目里造成的"系统坏了"误报特别多,建议直接写进测试用例。

最后是批量排查。用 4.2 里那段 SE16N 或者 ABAP 查询,把所有用某个批量程序的物料拉出来,逐条核对参数完整性。批量程序这种东西,散落在几百上千个物料上,靠一个个点开看是不可能查干净的。

5. 常见问题与排查技巧实录

5.1 问题速查表

下面这张表是我这些年问题的沉淀,基本上覆盖了日常遇到的八成情况。

现象常见原因排查动作
改成 MB 了,MD04 里还是多张计划订单需求落在补货提前期内,或跨月,或已被收据冲掉看每张单的日期;核净需求而不是毛需求
FX 跑出来的数量不是固定批量的整数倍最小批量、舍入值、舍入参数文件叠加;或最大批量拆单用 SE16N 查 MARC 的几个批量字段,逐个关掉试跑
FX 跑出来数量和需求一样固定批量字段是空的查 MARC-BSTFE
数量被取整成奇怪的数舍入参数文件按档位取整查物料主数据上的舍入参数文件设置
MD07 是空的MRP Live 默认不生成 MRP 清单改用带清单生成的参数,或走经典 MRP
改完配置重跑 MRP 没变化计划订单被固定;或没重跑;或物料主数据被参数文件带回了旧值检查固定标识;MD02 单物料重跑后再看
同一物料在 A 厂对、B 厂不对批量字段是按工厂维护的核对 MARC 的 WERKS 维度
期间批量的周/月划分和预期不符工厂日历、期间分组没维护对检查工厂日历与 MRPPP 定义

5.2 三个我踩过的坑

第一个坑是把 FX 当成"最小批量"。我在早期项目里给一个供应商起订量 500 的物料设了 FX 500,需求是 480,结果系统做了 500,没问题;但当需求变成 1,200 时,系统按 500 的倍数给到 1,500,多压了 300 件。当时业务方问"我们只是想要个起订量,怎么多买了",我才意识到他们要的是最小批量,不是固定批量。这两个字段长得像,语义完全不同:最小批量是下限,固定批量是单位。后来我给业务解释就一句话——"最小批量是'不够就补到 500',固定批量是'每次都必须买 500 的整数倍'"。

第二个坑是期间批量带来的日期偏移,被生产部投诉。一个共用料的批量程序从 EX 改成 MB 之后,生产计划员发现三月底的几笔需求全部提前到了月初到货,仓库没地方放,还在早会上说"顾问把系统改坏了"。其实系统没错,MB 就是这么工作的。这件事让我学到一个教训:改批量程序之前,先跟仓库和计划员说清楚"到货日期会提前",让他们有准备。技术上正确的事,业务上不沟通也会变成事故。

第三个坑是升级后 MRP 清单不见了。一个客户从老版本升到 S/4HANA,计划员每天早上习惯性打开 MD07 看清单,升级后连续几天都是空白,以为是权限问题,还提了工单。最后发现是 MRP Live 的默认行为变化。这类"行为变化"比配置变化更隐蔽,因为配置一样、字段一样,只有运行结果不同。所以 S/4 迁移的测试清单里,我现在的习惯是把 MD04、MD05、MD07、MD01N 这几个入口都列上,逐项确认。

5.3 批量程序怎么选:一套可以照着走的判断顺序

每次有新物料要定批量程序,我基本按这个顺序问自己几个问题。

先看单价和体积。单价高、占空间的,直接往 EX 走,因为持有成本太贵,不值得为省几张单据去压库存。单价几块钱、体积小的,可以大胆往期间批量走。

再看外部约束。供应商有起订量、有包装倍数、有整托整箱要求的,用 FX 或者 FX 加舍入值,把约束写进系统而不是靠人工记忆。注意是"起订量"就用最小批量,"固定包装倍数"才用固定批量或舍入值。

然后看需求形态。同一天多笔需求的,TB 是免费的优化;需求按周集中的,WB 合适;供应商按月送货的,MB 合适;半天、双周这种非标节奏的,上 PB 或者自己定义期间分组。

最后看单据处理成本。内部生产订单的开单成本、采购申请的处理成本、收货的工作量,这些隐形成本往往被低估。如果一个物料的单据量已经让采购部天天加班,那就是明确的信号:该合并了。

6. 影响范围分析:改一个字母,牵动多少环节

6.1 对库存水平和资金占用的影响

批量程序对财务报表的影响,是通过库存这条路径传导的。EX 和 TB 基本不产生额外库存,期间批量产生的是"提前库存"——总采购量不变,但在途变成在库的时间点提前了;FX 产生的是"超额库存"——总量本身增加了,这部分要靠后续需求慢慢消化,而且在需求下滑的时候会变成呆滞料。

量化这件事其实不难,我做方案评审时常用的口径是三个数:多出来的数量、这些数量的账面价值、以及提前或额外持有的天数。三数相乘再乘年持有成本率,就是一个可以拿去和财务对话的数字。前面算例里 FX 那 365 件的年持有成本约 5,475 元,这个数字摆在采购部面前,比讲十分钟理论都有用。另外要提醒的是,提前库存还会影响安全库存的评估:仓库里堆着提前到的货,MRP 算净需求时把它们当成了可用库存,安全库存的触发就被推迟了,久而久之你会觉得"安全库存设了没什么用",其实是批量程序把它的作用掩盖了。

6.2 对计划、采购、生产执行端的影响

批量程序往执行端传导,最直接的体现是单据量和到货节奏。EX 转 MB 这类改动,采购部的感受最明显:单据少了、送货次数少了、和供应商谈年度框架的时候更有底气;但仓库的感受可能相反,一次到一大批,收货、上架、质检的峰值压力变大,如果仓库人力按平均量配的,月末那几天就会堵。生产端同理:FX 让一个工单的投料量变大,换产次数少了,但工单周期内的在制品会变多,占用的线边库存也跟着涨。

还有一个间接影响容易被忽略:批量程序会影响 MRP 运行的稳定性。批量越大,订单日期越集中,MRP 重跑时结果跳变的概率反而更高——举个例子,一个 15 号的需求,按 MB 被合并到月初,重跑时如果这个需求往后挪了几天但没跨月,结果不变;一旦跨月了,整个订单的日期和数量都会跳一下,下游的采购和生产跟着一起改。所以用大期间批量的物料,我建议把"已固定的计划订单"用起来,把临近执行的那部分锁住,减少重跑带来的抖动。

6.3 S/4HANA 与 MRP Live 下要注意的几个点

批量计算的核心逻辑在 S/4HANA 里和经典版本是一致的,EX 还是 EX,MB 还是 MB,MARC 表也还在,DISLS 这些字段没动。但有几个行为和性能上的差异,是迁移项目里必须提前知道的。

MRP 清单生成机制变了。前面提过,MRP Live 默认不生成 MRP 清单,MD05/MD06/MD07 依赖的清单数据可能为空。习惯用清单做日常跟踪的计划员,需要重新建立工作习惯,或者显式开启清单生成(代价是运行时间变长)。

BAdI 和用户出口的触发点变了。如果你们在批量计算上做过增强——比如按订单量阶梯、按季节性系数动态调整批量——迁移时一定要把这些增强点找出来逐条验证。经典 MRP 和 MRP Live 的执行路径不同,有些依赖内部处理顺序的增强在 MRP Live 下可能不会被触发,或者触发时机不一样。迁移前的代码扫描里,这类增强是重点对象,别等到上线后跑出错误批量才发现。

DDMRP 会对批量程序"越权"。如果物料被纳入 DDMRP 的管理方式,补充量由缓冲区的设置决定,经典的批量程序在这些物料上就不起作用了。所以做批量策略梳理时,要先把这批物料单独拉出来,否则你会对着一堆"配置没错但结果完全不符"的物料干瞪眼。

自定义批量程序的搬迁要连带配置一起走。自己在 T399D 里新建的批量程序、MRPPP 里的期间分组、自定义舍入参数文件,这些都是配置对象,传输时要确认一起进了传输请求。我在一个迁移项目里见过传输漏了期间分组定义,结果 PB 批量在 QAS 里合并出的期间和生产环境完全不同,测试结论直接作废。

写到这里,关于这几个标准批量程序的东西基本说完了。这个系列后面我还会接着写批量计算的自定义实现,包括通过用户出口和 BAdI 实现的阶梯批量、季节批量,以及怎么在不写代码的前提下用舍入参数文件模拟出接近 EOQ 的效果。批量程序这个字段,看着只有一个字母,背后却是一整套库存策略,值得多花点时间把它吃透。

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

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

立即咨询