ARTICLE DETAIL

资讯详情

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

SAP MRP 批量程序:EX/FX/MB/WB/TB 选型与避坑

SAP MRP 批量程序:EX/FX/MB/WB/TB 选型与避坑 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 取整到 10100 到 1000 取整到 50。适合数量跨度大的物料。最大批量常为 BSTMA超过它系统把订单拆成多张每张不超过上限。我实测里比较常见的一条链路是批量程序算基础量 → 最小批量托底 → 舍入向上取整 → 最大批量拆分。但请注意这不是圣旨遇到最大批量和舍入值同时存在结果看起来既像又不像的场景我的做法是拿两三个典型数量点比如刚好等于最大值、刚好超过最大值一点各跑一次 MD02看计划订单怎么拆的比翻文档快。最容易混淆的一组是EX 加最小批量和FX。很多人觉得两者等价其实差得远。用一个例子说清楚固定批量/最小批量都设 100。参数组合净需求 40净需求 250逻辑差异EX 最小批量 100一张单 100一张单 250只托底不补满FX 固定批量 100一张单 100按 100 的倍数覆盖共 300可能是三张 100也可能一张 300每单都是固定量的整数倍同样是100需求小于下限时结果一样需求大于下限时结果完全不同EX 给 250FX 给 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 厂可能就不一样跨年那几天的第一周切法更是容易让人困惑。用上一节的例子跑 WB05 日和 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 / 3562350FX 固定批量 100100 / 100 / 100 / 100 / 100 / 1006600365TB 日批量40 / 30 / 25 / 60 / 45 / 3562350WB 周批量7003-05、03-06 合并/ 8503-20、03-21 合并/ 45 / 3542350MB 月度批量1553 月合并/ 804 月合并22350PB 期间批量10 天为一期间7003-01 至 03-10/ 8503-21 至 03-31/ 4504-01 至 04-10/ 3504-11 至 04-2042350这张表里有三个值得琢磨的地方。第一只有 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 LiveMD01N默认不生成 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 还是 EXMB 还是 MBMARC 表也还在DISLS 这些字段没动。但有几个行为和性能上的差异是迁移项目里必须提前知道的。MRP 清单生成机制变了。前面提过MRP Live 默认不生成 MRP 清单MD05/MD06/MD07 依赖的清单数据可能为空。习惯用清单做日常跟踪的计划员需要重新建立工作习惯或者显式开启清单生成代价是运行时间变长。BAdI 和用户出口的触发点变了。如果你们在批量计算上做过增强——比如按订单量阶梯、按季节性系数动态调整批量——迁移时一定要把这些增强点找出来逐条验证。经典 MRP 和 MRP Live 的执行路径不同有些依赖内部处理顺序的增强在 MRP Live 下可能不会被触发或者触发时机不一样。迁移前的代码扫描里这类增强是重点对象别等到上线后跑出错误批量才发现。DDMRP 会对批量程序越权。如果物料被纳入 DDMRP 的管理方式补充量由缓冲区的设置决定经典的批量程序在这些物料上就不起作用了。所以做批量策略梳理时要先把这批物料单独拉出来否则你会对着一堆配置没错但结果完全不符的物料干瞪眼。自定义批量程序的搬迁要连带配置一起走。自己在 T399D 里新建的批量程序、MRPPP 里的期间分组、自定义舍入参数文件这些都是配置对象传输时要确认一起进了传输请求。我在一个迁移项目里见过传输漏了期间分组定义结果 PB 批量在 QAS 里合并出的期间和生产环境完全不同测试结论直接作废。写到这里关于这几个标准批量程序的东西基本说完了。这个系列后面我还会接着写批量计算的自定义实现包括通过用户出口和 BAdI 实现的阶梯批量、季节批量以及怎么在不写代码的前提下用舍入参数文件模拟出接近 EOQ 的效果。批量程序这个字段看着只有一个字母背后却是一整套库存策略值得多花点时间把它吃透。
返回列表