简介SAP-PP模块替代物料与后继物料配置的实操型手册面向已具备一定PP基础、需要在生产订单与BOM中落实物料切换方案的顾问、关键用户与计划人员重点解决物料短缺、供应商切换时的平滑过渡问题。内容围绕平行切换与非平行切换两类场景展开涵盖CS20b批量替换组件、只消耗不采购时的物料状态与安全库存管控、CS02中非连续标识与后继组的维护、可用性检查的启用条件以及多供应商供货下按比例拆分消耗的策略取值。文中还点明三种以上物料替换的适用边界以及物料全部无库存时MRP仍会跑出原始物料需求的风险并给出用BOM更改编号与生效时间加以控制的替代思路。资源包共1个docx文档、约871KB篇幅紧凑便于对照系统界面逐步操作或打印成桌面速查清单。目前已有2557人学习下载。1. 替代不是替换为什么 A、B、C 全没库存MRP 还是跑出 A 的需求很多人配完 SAP-PP 里的替代物料第一件事就是把库存清空做验证结果 MD01 跑完一看A、B、C 三个物料全部零库存采购申请还是稳稳挂在 A 头上。这不是配置漏了恰恰是这套机制的设计前提替代物料在系统里从来不是「拿一个换掉另一个」而是「给同一个需求多准备几个供给来源」。需求侧认的永远是 BOM 里那一行正主替代只发生在供给匹配的一瞬间。这条分界线搞不清楚后面所有字段——非连续标识、后继物料、使用可能性、优先级——都会变成玄学。SAP 的替代物料体系本质上是把「要什么」和「从哪来」拆成了两个时间点处理而绝大多数配置事故都是把这两个时间点混成了一件事。2. MRP 与非连续标识需求侧到底认哪个物料2.1 非连续标识 1 和 3一个管「自己是终端」一个管「跟着别人走」物料主数据 MRP4 视图里那个不起眼的「非连续标识」是整套后继物料机制的总开关。它的取值不是随意的勾选项而是定义了物料在 BOM 结构中扮演的角色。取值 1 对应「单一平行终端部分/物料」意思是这个物料自己就是一个终止点——它用完了就顺着「后继的物料」字段指向的那一个物料走下去。取值 3 对应「相关平行不连续部分/物料」意思是这个物料不是主角它属于某个后继组切换时点由组里那个标识为 1 的主控物料决定所以这类物料的「后继的物料」字段必须留空。这个 1 和 3 的二分法本质是在回答一个问题一组物料里谁有资格当「扳机」。设想一个主板套件下有四个组件两两成组A 组和 B 组功能等价。如果四个组件都设成 1系统就不知道到底该听谁的——每个物料都想独立触发切换组关系就散了。所以设计上必须指定一个「主控」承担触发责任其余的挂 3 号标识当跟随者。值得多说一句的是这个字段的作用域。非连续标识影响的是 MRP 的计划行为不是 BOM 展开行为。BOM 里写着 A 就是 A展开出来的需求行不会因为非连续标识而变成 B。设置这个字段之后MRP 会为 A 建立一条「中止记录」规划它在库存耗尽或到达中止日期之后的需求去向。但在库存真正清零之前需求仍然老老实实挂在 A 头上。提示非连续标识 3 的物料上如果误填了「后继的物料」后续组切换会失效而且系统不会报错。这是排查时最容易漏看的一处。2.2 后继物料字段与 MRP 的后继计划「后继的物料」这个字段承载的语义比字段名看上去要窄。它表达的是「我这个物料退役之后需求请转给谁」是一条单向的、计划层面的指针不是运行时的替换指令。MRP 在展开 BOM 时依然算出 A 的需求然后在中止逻辑里判断A 的库存还够不够撑到下次补货中止日期到了没有只有这些条件触发后续的需求才会被推到后继物料上。这就解释了开头那个反直觉现象。A、B、C 三件物料都零库存的时候MRP 跑出来的仍然是 A 的需求——因为「库存为零」这件事对 MRP 来说不是切换信号它只是「需要补货」的信号。真正的切换信号是生产订单执行可用性检查的那一刻那是另一套时钟。我一般会这么理解这个字段的设计动机MRP 是长周期的、批量跑的、面向未来的它天然保守不愿意轻易改变计划对象而可用性检查是短周期的、单订单的、面向当下的它必须灵活。让 MRP 保持稳定、让检查负责应变是 SAP 在这两个模块之间做的一次职责划分。代价就是计划员看到的计划和车间看到的执行会不一致这需要靠管理流程去弥合而不是靠配置去消除。2.3 为什么必须开可用性检查 02可用性检查的设置位置在物料主数据 MRP3 视图不是 MRP4。这个细节本身就说明了它的定位它不属于「中止数据」这套主数据语义而属于「库存与供给」这一侧。规则 02 是「单个需求/个别需求」检查针对单个订单行做 ATP 校验正好对应生产订单组件这个场景。规则留空表示不做检查那么订单保存和下达时根本不会去问「A 的库存够不够」自然也不会触发替代组的分配逻辑。原文里反复强调「如果不检查不会替代」说的就是这个因果关系——替代逻辑是挂在检查结果上的一个后处理步骤检查不跑后处理就不存在。把执行时序摊开看会更清楚CO01 创建生产订单BOM 展开生成组件需求行此时行里写明的是 A需求数量按 BOM 用量算订单保存或下达时执行可用性检查规则 02检查发现 A 的可用库存为 45需求是 100缺口 55系统拿着这个缺口去查 BOM 项目上的替代项目组按组内的策略、优先级、使用可能性挑选候选物料分配结果回写到订单组件行B 补 55A 保留 45。第 3 步和第 4 步之间是整条链路的咽喉。如果第 2 步没发生第 3 步无从谈起第 4、5 步全部静默跳过。这也是为什么很多配置看起来「设置全对但不生效」——字段都对就是开关没开。3. BOM 项目层替代组是怎么把多行 BOM 粘成一个整体的3.1 替代项目组、优先级、策略、使用可能性四个字段各管什么进入 CS02 双击组件行的数量字段弹出的明细界面里有四个字段它们的关系是层层递进的不是并列的选项。字段归属层级作用常见误用替代项目组组标识把多行 BOM 归入同一个替代关系组名拼写不一致导致彼此看不见优先级组内排序决定候选物料的尝试顺序策略为 1 时填了也没用策略组内算法选「按比例分摊」还是「按顺序择一」组内各行策略不一致使用可能性组内权重按比例分配时的百分比之和不为 100 导致数量偏差替代项目组是第一道门。组名相同几行 BOM 才互相可见组名不同哪怕物料完全一样系统也当它们毫无关系。这是纯粹的关系表设计——组名就是那个 join key。优先级和策略是一对绑定关系。策略为 1手工维护/按用途可能性时优先级形同虚设分配完全由使用可能性决定策略为 2100% 检查时优先级生效系统按 1、2、3 的顺序逐个尝试找到一个能覆盖全额的物料就停。原文里那个「优先级 1/2/3、策略 2、使用可能性留空」的配置就是典型的择一模式。使用可能性只在策略 1 下有实际意义。它的数值不要求总和等于 100系统内部会做归一化——这一点原文专门验证过50% 和 25% 的组合会算成 0.667 和 0.334。但归一化带来的是精度问题下面还会展开。3.2 策略 1 与策略 2比例拆分和 100% 检查是两种不同的分配算法这两种策略对应两种完全不同的业务假设混用是最常见的翻车来源。策略 1 假设「这些物料是可以混着用的」。典型场景是多供应商供货物料号不同但东西一样今天到这家明天到那家车间不在乎用哪个只要总量够。这种情况下系统按比例把总需求切成几份各物料各自承担自己的份额MRP 也各自跑各自的采购。原文里 503020 拆 200 个需求得到 100/60/40就是这个逻辑的直接体现。策略 2 假设「这些物料是替代关系不是并存关系」。物料 A 是正主A 没了才轮到 BB 没了才轮到 C。同一时刻订单上只有一个物料在供货不会出现 A 供一半 B 供一半的混合状态。原文的连续替代场景——66000031 用完用 66000032用完再用 66000034——严格来说每次只能消耗一个物料的库存量超出就报错订单都下达不了。两者的运行差异用一句话概括策略 1 是「分摊」策略 2 是「择一」。分摊关心的是总量守恒择一关心的是单料可满足性。注意同一替代组内的各行必须使用相同的策略。如果一行填 1 一行填 2系统的行为会退化成按行独立判断组关系名存实亡。3.3 终止数据 / 中止组 / 后继组组对组切换的键值设计这是整套机制里设计感最强的一块。操作路径是CS02 双击 66000031 的数量进入子项目点「终止数据」在「中止组」里填 A再双击 66000034 进入子项目点「物料后继数据」在「后继组」里填 A。两组代码必须一模一样否则链接不上。为什么用「组代码」而不是直接指定「31 换成 34」因为业务上要换的是整组。主板套件里 A 组是两个零件B 组也是两个零件切换时必须整组换不能让 31 配 35 这种跨组组合出现——那在物理装配上就是错的。用组代码做键SAP 表达的语义是「A 组整体被 B 组整体替代」至于组内谁对谁系统不关心也不需要关心。这个设计带来的直接后果就是整组触发。原文的测试数据很能说明问题31 库存 0、32 库存 10034 库存 200、35 库存 300下 100 台的生产订单各需 200检查后 31 和 32 一起切到 34 和 35。32 明明还有 100 的库存照样被切走了。原因就是扳机在 31 身上——31 是标识为 1 的主控物料它断料整组跟着走。从工程角度看这是一个典型的「牺牲局部最优换整体一致性」的取舍。如果允许 32 继续用、只切 31库存利用率会更高但装配线上就会出现 A 组零件新旧混用的情况追溯和质量管理都会变复杂。SAP 选择了保守方案。还有一个实操上的坑如果 BOM 项目上已经设置了替代项目组「终止数据」按钮会变灰点不动。必须先把替代项目组清空才能进入中止数据的维护界面。这两套机制在 BOM 项目层是互斥的不能并存。4. 三种典型形态的实现差异单料后继、后继组、比例拆分4.1 单料后继累加扣减为什么只适合两个物料单料后继的配置链路最短MM02 在 A 的 MRP4 视图设非连续标识 1、后继物料填 BA 的 MRP3 视图可用性检查设 02B 维护好工作计划视图BOM 里两行都留着搞定。它的分配行为是「累加扣减」需求 100A 有 45先扣光 A 的 45剩下的 55 记到 B 头上。A 和 B 各自算各自的账互不干扰。原文那个「需要 100 个A 只有 45自动补充 B 55 个」就是标准输出。这个方法的能力边界非常明确——只支持两个物料。原因藏在数据模型里「后继的物料」是物料主数据上的一个单值字段A 只能指向一个 BB 想再指向 C就得让 B 自己也变成非连续物料形成一条链。链式结构在数学上没问题但在可用性检查的实现上会退化成逐级递归每一级都要重新判断库存和缺口逻辑复杂度和出错面都上去了。SAP 显然没打算在这条路上走远三个及以上物料的场景直接用替代组更省事。原文还有一句关键提示如果 A 和 B 在 BOM 里的用量不相等比如 A 用 2 个、B 用 3 个这套设置就不够用了还得在 BOM 里做额外配置。这时候作者的建议是用第二种方法替代组更简单这个判断是对的——用量不等意味着换算关系存在而累加扣减的默认前提是 1:1。4.2 后继组为什么一个物料断料会触发整组切换后继组的完整配置分两层。物料主数据层66000031 设非连续标识 1、后继物料 6600003466000032 设非连续标识 3、后继物料留空。BOM 层31 和 32 在子项目里设中止组 A34 和 35 设后继组 A。这里有个容易被忽略的对称性要求物料主数据上的「后继的物料」指向和 BOM 项目上的组代码两条线都要通。主数据上的指针决定了 MRP 层面的计划流向BOM 上的组代码决定了订单执行时的切换范围缺一条链路就是不完整的。切换的触发点在第 2 章讲过的主控物料上。只要 31 的库存不足以覆盖本次需求整组立刻切到 B 组不管 32 还有多少存货。这个行为在前面的测试数据里已经验证过了。从库存管理角度看这个设计有个副作用值得提前想清楚被「连坐」切换掉的那部分库存本例中的 32 的 100 个会留在原地成为呆滞料。如果这种组切换在生产中频繁发生需要通过定期清理或者调整组划分来消化否则账面库存会越来越难看。提示用 CS02 进 BOM菜单「附加 - 更多的 - 终止信息」可以直观看到组切换后的效果预览。配置完先在这里看一眼比直接下生产订单验证快得多。4.3 比例拆分使用可能性不等于 100 时系统怎么算策略 1 下的分配算法本身很简单但归一化的分母选择决定了结果是否符合直觉。很多人以为分母固定是 100实际上是「组内实际使用可能性之和」。# 按使用可能性分配替代组需求数量对应策略 1 的场景 def split_by_usage(total_req, usage_map): total_usage sum(usage_map.values()) if total_usage 0: # 全为 0 时系统给警告不阻断退回默认分配 return {m: 0 for m in usage_map} # 关键分母是组内实际之和不是常量 100 return {m: round(total_req * u / total_usage, 3) for m, u in usage_map.items()} # 三个物料按 50:30:20 分摊 200 的需求 print(split_by_usage(200, {66000031: 50, 66000032: 30, 66000034: 20})) # {66000031: 100.0, 66000032: 60.0, 66000034: 40.0} # 原文验算50% 和 25% 分摊 1 个需求 print(split_by_usage(1, {A: 50, B: 25})) # {A: 0.667, B: 0.333}这段逻辑说清楚了两件事。第一分母用的是实际和所以 5025 这种不满 100 的组合不会算出「半个需求」的荒唐结果系统会自动把比例拉回 100%。第二round到三位小数之后如果计量单位是 PC 这种整数单位0.667 和 0.333 加起来的取整结果可能是 0 和 0需求数量直接归零——这就是原文说的「比例和不是 100 可能会有问题所需物料数量不足」。更隐蔽的一层是当比例为 0 时系统会弹警告要求输入使用可能性但按回车就能过。这个警告容易被当成噪音忽略实际上它提示的是「这一行物料在本次订单里不会分到任何需求」。如果这一行的物料是必须装配的后果就是订单缺件。工程上的稳妥做法是让组内使用可能性之和严格等于 100同时保证每个非零比例乘以总需求后不小于 1 个最小计量单位。这两条不满足比例拆分迟早给你颜色看。5. 避坑与排查替代没生效时按这个顺序看5.1 五条踩坑记录第一条配置全对替代完全不触发。现象是生产订单下出来组件行还是原物料库存明明不够也不切换。原因是可用性检查规则留空。替代逻辑是挂在检查结果上的后处理检查不跑就什么都没有。解决方式是 MM02 进 MRP3 视图把「可用性检查」设为 02然后重新创建订单验证——已经存在的订单不会回溯生效必须重建。第二条后继组配好了CS02 里看不到效果。现象是在 BOM 子项目里设了中止组 A 和后继组 A但「终止信息」里空空如也。原因有两种一是中止组和后继组的代码大小写或空格不一致系统认为是两个组二是 BOM 项目上残留了替代项目组导致「终止数据」按钮置灰配置根本没存进去。解决方式是先把替代项目组清空再重新维护两组代码确保逐字符一致。第三条三个物料想用后继物料法怎么都配不通。现象是 A 的后继设成 B、B 的后继设成 C结果订单只切了一级。原因是这个方法的数据模型就是单值的链式后继不是它的设计目标。解决方式有两个换成替代组加策略 2 的连续替代方案或者直接走 BOM 更改编号做版本切换。第四条使用可能性加不到 100订单数量算出来偏小。现象是 BOM 里填了 50 和 25订单需求 1 个结果两行各算 0.667 和 0.333取整后变成 0。原因是归一化后不足一个最小计量单位。解决方式是补齐到 100或者调整订单批量让每一份都至少覆盖 1 个计量单位。第五条BOM 冻结后再改物料一改就报错。现象是原物料已经冻结想更新 BOM 里的组件系统拒绝。原因是冻结状态锁定了 BOM 的可维护性这是设计上的保护而非缺陷。解决方式是先解冻再改或者更规范的做法——用 CS20 做批量组件替换一次性把涉及的所有 BOM 全部换掉配合更改编号记录变更。批量替换时执行结果会以颜色反馈绿色成功红色失败失败项要逐条查原因通常是 BOM 本身已冻结或物料状态不允许。5.2 一个可复现的验证手法排查这类问题我习惯按「主数据 → BOM → 库存 → 订单」的顺序走一遍每一步都有明确的观察点不靠猜。顺序检查项事务码观察点1可用性检查规则MM02 → MRP3是否为 02 或等效规则2非连续标识与后继物料MM02 → MRP4主控物料为 1跟随物料为 3 且后继留空3替代项目组 / 中止组 / 后继组CS02 → 子项目组代码一致替代项目组已清空4工作计划视图MM02 → 工作调度被替换后的物料也能下订单5可用库存MMBE主控物料库存是否真的低于需求6订单下达后的组件行CO02 / CO03切换是否回写到了组件行第 5 步是最容易被跳过的一步。很多人以为「库存为零」才会触发实际上触发条件是「可用库存低于本单需求」两者不是一回事。另外还要注意非限制库存和质检库存的区别可用性检查只认前者。6. 运行时替代与版本控制两套方案的分界线在哪配置做到这一步会遇到一个绕不开的判断这个物料到底是「暂时缺」还是「以后不用了」。运行时替代可用性检查驱动的这一整套解决的是前者。它的优势是零人工干预订单下下去自动找料车间不用等计划员改单。代价则藏在 MRP 那一侧——需求永远认主料只要主料还有一丁点库存或者中止条件没触发MRP 就会持续为它跑需求、跑采购申请。一个已经事实上停用两年的物料如果主数据没清理干净系统仍然会年复一年地给它生成计划。原文作者的提醒「A、B 物料长久不用的情况下直接用 BOM 的更改编号、生效时间来控制」说的就是这个成本。版本控制走的是另一条路。BOM 的更改编号配合生效日期可以在某个时间点之后让 BOM 里彻底没有 A只有 B。这是工程变更管理的标准做法优点是从源头切断MRP 从切换日起就只会看到 B不会再产生任何 A 的需求。缺点是不够灵活——变更时点必须提前定好中途想反悔得再开一个更改编号。维度运行时替代版本控制更改编号 生效日期触发方式可用性检查自动触发到达生效日期自动切换MRP 行为仍为原物料跑需求生效后只为新物料跑需求适用周期短期、临时、可逆长期、永久、不可逆人工成本低但需定期清理呆滞料高每次变更要开单据风险点主数据残留导致幽灵需求时点定错导致断料或积压我倾向于用一条很朴素的判断标准划线这个物料一年内还会不会回来。会回来用运行时替代保留回旋余地不回来走版本控制把历史包袱彻底切干净。最怕的是两种方案混着用——既配了替代组又在 BOM 里留着一堆过期物料不做版本切换最后计划员看到的数字谁也解释不清。早些年我在一个模拟项目上就吃过这个亏。当时为了图省事把一批已经停用半年的物料保留了替代组配置只把库存清零了事结果每个月 MRP 都在给这些物料跑采购申请采购员以为是系统 bug来回折腾了好几轮。从那以后我每次做替代物料配置都会强制走一遍「这个料还会不会回来」的确认回不来的直接开更改编号切版本绝不留后门。希望这些经验能帮到你少绕几圈。本文还有配套的精品资源点击获取
企业数字化 ERP 产品动态
相关推荐
ARTEMIS:面向Android的语义驱动AI自动化框架 1. 项目概述:ARTEMIS不是“手机遥控器”,而是让AI真正理解操作意图的底层引擎你有没有试过让AI帮你点开微信,找到某个群,翻到三天前的聊天记录,截图发到钉钉?不是靠预设脚本,不是靠固定坐标点击… · 2026/11/4 14:49:24
2kg手提秤1g分辨率:应变式传感器电桥与LM358+ICL7107链路设计 简介:《基于电阻应变式传感器电子秤设计》面向电子测量、传感器与单片机课程设计的学习者,围绕2kg手提电子秤给出从测量电桥、差动放大、A/D转换到LED显示的系统设计方案。压缩包内含1个doc文档,约91KB,集中呈现设计内容提要、总体… · 2026/11/4 14:48:23
PCDN技术解析:家庭宽带变IDC的利与弊 1. 背景与行业现状最近两年,国内宽带市场出现了一个有趣的现象:普通家庭宽带用户突然发现自己的网速变慢了,甚至有些地区出现了频繁断网的情况。而与此同时,一些"聪明"的用户却通过某种技术手段,利用家庭宽带… · 2026/11/4 18:33:54
无人机集群动态任务分配:两阶段贪婪拍卖算法解析 1. 项目背景与核心挑战无人机集群协同目标分配是当前智能无人系统领域的前沿研究方向。2024年AST SCI1区TOP期刊最新发表的这项研究,针对大规模无人机群(1000节点)在复杂战场环境下的动态任务分配问题,提出了创新的两阶段贪婪拍卖… · 2026/11/4 18:33:54
光通信系统仿真:OptiSystem工程实践与性能优化 1. 项目概述:光通信仿真的工程价值在光纤通信系统设计中,工程师们常常面临一个关键矛盾:如何在实验室环境下验证复杂的光网络性能,又不必承担高昂的实物测试成本?这正是OptiSystem这类专业仿真工具大显身手的领域。作为… · 2026/11/4 18:33:54
Linux 下 Docker 部署 PostgreSQL 16 与 pgvector 向量检索 上周有人丢给我一个问题:手上堆了几百万条 1536 维的 embedding,究竟该塞进哪个库。聊天工具里聊了半小时,我给的答案还是那套:在 Linux 机器上拉一个 Docker 镜像,镜像名pgvector/pgvector:pg16,把pgvecto… · 2026/11/4 18:33:53
选择性重建记忆:如何给大模型装上真正的长期记忆 我们的对话应用跑得越久,越能感觉到大模型记忆这件事被严重低估了。上下文窗口再大,塞满之后照样失忆;RAG 接上去,向量库检索出来的又是一段段割裂的原文,离"懂事"差着十万八千里。最近在 Hacker News 上看到… · 2026/11/4 18:32:53
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38
AI辅助技术栈评估:提升研发决策效率60% 1. 项目背景与核心价值技术决策一直是研发团队面临的重大挑战。随着技术生态的快速演进,技术栈的选择、维护和迭代变得愈发复杂。我们团队在过去两年里,先后经历了三次重大技术栈迁移,每次都需要投入大量人力进行技术评估和风险分析。直到去年… · 2026/11/4 0:00:17
从生成Token到直接决策:Jev如何重塑AI Agent工程实践 1. 从"生成文字"到"拍板决策":Jev 到底在解决什么问题大多数人第一次接触大模型,脑子里建立的模型是"输入问题、输出文字"。你问它今天天气怎么样,它给你一段描述;你让它写个周报,它给你… · 2026/11/4 0:00:17
32G统一内存跑大模型:内存账、TPS实测与端云分流 想在一台 32G 统一内存的小主机上把大模型跑成"日常可用",这件事我前后折腾了小半年。标题里说的这台 Mac mini M6,是我们这次讨论的目标平台,具体到手规格以实物为准;但下面这套推算方法和实测思路,对任何统… · 2026/11/4 0:00:17
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38