news 2026/9/13 8:15:22

SAP MM模块解析:从采购到库存的制造数据流核心

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SAP MM模块解析:从采购到库存的制造数据流核心

1. 别把MM想小了:它才是制造业数据流的"主动脉"

很多人第一次听到"MM模块",第一反应是:哦,就是那个管采购的模块吧。这种理解不能算错,但大大低估了MM在企业里的分量。我碰到过不少零基础入行SAP的朋友,一开始觉得MM就是下订单、收货、打发票,结果真正上了项目才发现,整条供应链的库存账、成本账、往来账,几乎都要在MM里产生凭证,再流到财务手里。SAP的MM模块,全称Materials Management,物料管理,它管的不只是"买东西"这件事,而是从采购申请、寻源定价、采购订单、收货、质检、入库、库存转移、库存盘点、发票校验,一直到应付账款确认的完整链条。这是制造业、流通业里数据量最大、业务最复杂、出错率最高的领域之一。

为什么零基础学SAP,我建议从MM入手?因为它介于业务和财务之间,既看得见摸得着(有单据、有实物、有流程),又能让你理解ERP的底层记账逻辑。你不需要一开始就懂资产负债表和损益表,但你能通过一次收货看清楚"借库存、贷GR/IR"是怎么回事,这个基础打好了,后面学FICO、PP、SD都会轻松很多。

这篇是系列第一篇,先把MM模块的轮廓讲清楚。如果你是刚毕业想进ERP咨询行业的新人、企业内部IT想转业务顾问、或者是财务/供应链岗位想弄明白系统背后逻辑的人,这篇文章都适合你。咱们不整虚的,我把实际项目里最常用的组织架构、主数据、流程和那些网上被搜爆了的热门话题一次说透。

1.1 为什么制造型企业每天都在"烧钱"和"省钱"之间纠结

想理解MM的价值,你把自己想象成一家冰箱厂的老板。你每天要买铜管、压缩机、塑料粒子,要管原料仓库里几万种物料的库存,还要防止产线因为缺料而停线——停线一分钟就是几十万的损失。可另一方面,你也不能囤太多料,资金压在那里,现金流会出问题。这时候,你需要一个系统帮你回答几个问题:现在每种料还有多少?哪些料快要不够了?上次找哪家供应商买是什么价格?到货了没有?质量问题退货该走什么流程?

这一连串问题,SAP MM就是答案。它把"物料"当成企业的主数据核心,所有和物料打交道的人——采购员、仓管员、计划员、财务、质检——都在同一个系统里操作同一套数据。你下了一张采购订单,仓库收货的时候能看见;你收了一笔货,财务的库存科目会自动变化;你发现料有质量问题,可以先挂到质检库存,不让产线用。这种数据流的打通,就是ERP和普通Excel管理最大的区别。

1.2 MM在企业里的真实定位:连接采购、库存、生产与财务的枢纽

MM在SAP里的位置,就像人体的血液循环系统。它对上服务财务(所有物料移动都会生成财务凭证),对下支撑生产(PP模块的投料、入库都得调MM的库存),对外连接供应商(采购订单、发票信息),对内协同仓库(WM模块、盘点)。

实际项目里,MM顾问的活儿也远不止配几个事务码那么简单。我做过的一些项目里,最耗时的工作常常是:梳理采购流程中的定价逻辑——不同供应商、不同物料、不同数量区间,价格怎么取;设计收货流程中的质检环节——哪些物料要批次管理、要不要启用质检库存;处理特殊业务——寄售、委外加工、公司间调拨、退货、赠品。每一个听起来不大的名词,背后都是一堆后台配置和用户培训。

所以这篇简介,我不会只给你罗列功能菜单,而是把MM最核心的几条业务线串起来讲。你按着这个思路去看系统,会发现自己能少走很多弯路。

2. 开局先建底子:组织架构与主数据,看不懂这些后面全是坑

很多零基础同学学MM,上来就背事务码:ME21N建采购订单、MIGO收货、MIRO发票校验……背得滚瓜烂熟,但一到项目现场就傻眼:为什么这个采购订单类型要配这个号码段?为什么物料在A工厂能看到、B工厂找不到?为什么供应商的价格没有自动带出来?这些问题的根源,全在组织架构和主数据上。

2.1 四个层级:Client、Company Code、Plant、Storage Location

SAP里有个经典比喻:Client像一栋写字楼,整栋楼里的公司都在同一栋楼办公但互相看不到对方的房间;Company Code像一层楼,是出法定报表的会计主体;Plant像一层楼里的一个房间,对应一个工厂;Storage Location则是房间里一个个抽屉,对应工厂下的库存地点。

实际项目中,划分Plant的依据很灵活。有的企业一个生产基地就是一个Plant,有的企业一个生产基地里不同车间也算不同的Plant,因为它们的库存要分开管理、成本要分开核算。Storage Location则更像物理库位的逻辑分组,比如原料库、成品库、退货库、线边库。

零基础阶段,你只需要记住一个原则:物料和库存的数据,在SAP里都是从Plant往下切的。同一种物料,在A工厂有库存,在B工厂可能库存为零,而且这俩井水不犯河水,互不干扰。信息记录、采购订单这些单据也都挂在Plant下。所以你在系统里操作,永远要先选对工厂,不然就会出现"明明收了货,报表里却查不到"这种乌龙。

2.2 物料主数据:一个物料在系统里其实是"好几条记录"

这是初学者又一个容易懵的地方。你在SAP里创建一个物料(事务码MM01),你会发现它不是简单填一个名称和规格就完事了。它被拆成了很多个视图:基本数据视图、销售视图、采购视图、MRP视图、会计视图、成本视图……

为什么这么设计?因为不同部门关心物料的不同属性。采购关心采购组、采购单位、订货时间;计划关心MRP类型、批量规则、提前期;财务关心标准价格、评估类;仓库关心计量单位、重量体积。这么多种信息放在一张表里会乱套,所以SAP用"视图+工厂"两个维度把物料主数据切成了很多块。

最常见的坑是:用户说"我明明维护了物料,为什么录采购订单的时候找不到?"原因往往是只扩展了基本数据视图,没有扩展采购视图,或者没有在对应的工厂下扩展。记住这句话:物料主数据的"工厂视图"决定它在哪个工厂可用。我给新人的建议是,创建物料的时候别嫌麻烦,基础数据、采购、MRP、会计这几个视图一次性扩展齐,后面少很多麻烦。

2.3 供应商主数据与信息记录:采购价格从哪里来

采购价格是供应链里最敏感的字段。SAP里价格不是你在采购订单上随手敲的,而是有来源的。最常用的是信息记录(Info Record),它把"物料+供应商+工厂"三者绑定在一起,维护一个有效采购价(条件类型PB00)。

举个实际场景:采购员创建采购订单时,输入物料和供应商,系统自动带出单价。这个单价来自信息记录。如果信息记录没维护,或者维护的价格有效期过了,采购订单上的价格就会空着或取默认值。所以上线初期最忙的往往是采购主数据团队,要把成千上万条物料-供应商关系的信息记录整理进系统。

网上那些热搜词里频繁出现的"sap采购定价""sap po update",本质上都是围绕这一套"条件技术"在工作。SAP的条件技术就像查参数表:你先定义条件类型(比如PB00就是最常见的一种条件类型),再给这个条件类型维护条件记录(哪个物料+哪个供应商多少钱),最后在采购订单里自动匹配。理解了这一层,你再看网上那些帖子就豁然开朗了。

2.4 主数据里最容易忽略的"评估类"和"批次管理"

再补充两个主数据里的关键点,虽然零基础时候接触不多,但后面一定会遇到。

评估类(Valuation Class)决定了物料入库时记到财务的哪个存货科目。SAP里不是按物料本身来判断科目,而是通过"评估类+工厂"的配置组合映射到具体的总账科目。所以管物料主数据的人如果评估类选错了,财务的库存账就乱了。这种事我见过不止一次,发生的当下真是焦头烂额。

批次管理则是"要不要在物料里再按生产批次细分库存"。启用批次后,每一次收货都要录一个批次号,库存、质检、追溯都跟着批次走。它很强大但也很繁琐,零基础阶段先知道有这回事,等真正遇到项目需求再深挖。

3. 一张采购订单的完整旅程,看完你就理解SAP的记账逻辑

前面铺了那么多底子,现在咱们走一遍最经典的端到端流程:采购申请→采购订单→收货→发票校验→付款。这一步走通了,MM模块的"骨架"你就搭起来了。

3.1 流程起点:从PR到PO,为什么不能省

采购申请(PR,Purchase Requisition)是业务部门提出的需求,比如生产计划员跑完MRP发现某原料缺1000公斤,系统会自动生成一张PR。采购员拿到PR后,通过事务码ME21N把它转成采购订单(PO,Purchase Order)。PO上有供应商、物料、数量、价格、交货日期、工厂、库存地点,这些信息就是后续业务的"合同"。

我见过不少企业上线初期想省事,让用户直接录PO,不走PR。短期看是快了,但长期看流程失控——没有PR做源头,你无法追踪需求是从哪个生产计划、哪个成本中心来的,审计也过不了。所以除非有很强的理由,PR到PO这个链路不要砍。

PO创建后也不是一成不变的。"sap po update"就是你后期会频繁操作的事:改数量、改价格、改交期。每一次改动系统都会记录变更历史,这是审计追溯的基本功。

3.2 收货那一刻:MIGO与101移动类型

采购订单发给供应商后,供应商送货过来,仓库收货。SAP里用MIGO这个事务码做收货,输入采购订单号,系统会把PO上的物料、数量带出来,仓管员确认无误后过账。过账瞬间,会发生两件事:一是库存数量增加,二是生成一张财务凭证。

这里必须讲清楚移动类型(Movement Type)的概念。移动类型是SAP给每一种库存变化编的代码:101表示采购订单收货,102是101的冲销,201是成本中心领料,261是生产订单投料,301是工厂间转储,561是期初库存导入。移动类型决定了这笔出入库怎么记账。你收货时系统默认带出101,这是最常用的,也是初学者一定要记牢的。

收货过账后,财务凭证是:借:原材料库存,贷:GR/IR(收货/发票校验的过渡科目)。为什么贷方不是"应付账款"?因为发票还没来。供应商的发票可能在三天后才寄到你手里,到那时系统才会做发票校验,把GR/IR清掉,真正确认应付账款。这个GR/IR科目就是连接MM和FI的关键桥梁,以后你会无数次在FAGL03这类报表里看到它。

3.3 发票校验:MIRO里的“差异游戏”

发票校验用MIRO事务码。会计收到供应商寄来的发票,把它录入系统,系统会自动比对PO上的数量和金额与发票是否一致。这里有容差范围:如果差异在范围内,系统接受但可能产生小差异;如果超范围,系统要么报错要么提示需要特殊处理。

网上那些搜"MIRO发票校验过不去""FAGLL03报表展示收付款对方名称"的问题,实际都是在这个环节发生的。发票校验过不去最常见的原因有三个:数量超过收货数量(你没收到那么多货凭什么按那么多入账)、价格和PO不一致、收货还未做(系统不允许先做发票再做收货)。

还有一个概念必须提:预付款和特别总账。如果企业与供应商约定先付钱后交货,系统里会用特别总账标志处理,付款时产生一个"预付账款"科目,等发票来了再清账。这套逻辑要在FICO那边配置配合MM使用,MM顾问如果完全不懂,跟财务顾问沟通起来就会鸡同鸭讲。

4. 库存不只是“数量”:移动类型、库存状态与那些冷门编码

MM模块一多半的复杂度集中在库存管理。为什么?因为库存的背后不只是数字,而是钱。库存多了压资金,少了断生产;账实不符审计出问题;质检没过就被产线用了,出了质量事故更麻烦。所以SAP在库存上面做了非常细的控制。

4.1 移动类型的本质:库存变化的记账语言

刚才提到了101、201、261这些移动类型,值得再深入一层。每个移动类型不只是个编号,它还带着两个隐藏逻辑:一是它会触发哪种数量变化,二是它会找哪个科目做财务过账。

这两件事在后台配置里是分开的。数量逻辑在OMJJ这类配置里定义,财务科目则在OBYC(科目确定)里按事务关键字配置。零基础阶段,你不一定非要搞懂配置细节,但一定要知道这个关系。因为你在项目里最常遇到的场景是:用户做完一个移动,发现财务凭证上的科目不对,随后MM顾问和FICO顾问就开始排查OBYC配置。如果从一开始就知道科目和移动类型是两套逻辑,排查起来会快很多。

推荐一张常用移动类型速查表,新手建议抄下来贴在显示器边上:

移动类型业务含义备注
101采购订单收货最常用,入库到非限制库存
102冲销101收货收货录错时使用
201成本中心领料办公用品、非生产物料常用
261生产订单投料产线从仓库领原料
301工厂间转储库存从A工厂到B工厂
311库位间转储同一工厂不同库位移动
561期初库存导入上线时把期初库存录进系统
321质检库存转非限制质检合格后放行

4.2 非限制、质检、冻结:q库存为什么让人头疼

网上搜"sap中的q库存"的人特别多,说明很多初学者在这个概念上栽了跟头。实际项目的库存,远不止"有货"和"没货"两种状态。SAP把库存分成了至少三种状态:非限制使用库存(Unrestricted Use,这是正常可用的库存)、质检库存(Quality Inspection,简称QI,货到了但还没检验完)、冻结库存(Blocked Stock,有问题不能用,等待处理)。

你采购的原料到货了,如果有质检流程,收货的时候就别直接收到非限制库存,而是收到质检库存。等质检部门检验合格后,再通过MIGO把库存从质检状态转成非限制状态。这时候物料才真正可以投产使用。

为什么这个设计很重要?因为如果收到货直接进非限制库存,产线就可以立马领料,万一料有问题,追溯起来非常麻烦。有了质检库存这道闸门,不合格的东西根本进不了可用的池子。很多企业在ERP上线前没有这个习惯,线上后仓管员觉得"太麻烦"就想跳过质检库存,这种想法非常危险。

初学者看库存报表(比如MMBE、MB52)时,会看到每个物料下面挂着好几行数据:有非限制的、有质检的、有冻结的。很多人一开始都懵:明明只有一批货,为什么多了好几行?其实那几行是同一个物料的三种"状态池"。你只需要记住:什么时候能用的,看非限制;在检的,看质检;出问题的,看冻结

4.3 从521说起:那些行家才用得上的冷门移动类型

热搜词里频繁出现"sap 521移动类型",我估计是零基础同学在网上刷题或者看资料时碰到的。521这类编号在SAP标准移动类型家族里属于特殊场景的变体,很多项目甚至压根用不到。拿它举例是想提醒你:别掉进"背移动类型编号"的陷阱里

SAP标准移动类型几百个,加上项目自定义的,根本背不完。真正重要的就六七种,其余用到时查表就好。更重要的是理解移动类型的"家族逻辑":1开头的多为收货类,2开头多为发货类,3开头多为转储类,5开头多为库存初始化或特殊业务类,6开头多为销售发货类。后一位数字通常是正向业务和冲销业务的成对关系(比如101是正,102是冲)。

我刚入行时也干过背编号的傻事,后来才发现,一个项目里反复用的移动类型不超过二十个。与其背编号,不如搞清楚自己公司业务里哪些场景会触发库存变化,然后对应的移动类型自然就记住了。521这类问题,真到了项目上需要用到时,再打开OMJJ配置查后台定义,比死记硬背高效得多。

4.4 库存盘点:账实相符的最后防线

库存管理里还有一项不能忽视的活儿是盘点。SAP支持周期盘点和年度盘点,盘点单、盘盈盘亏、差异过账,每一项都有标准流程。盘盈盘亏在系统里通常会用多种移动类型处理,比如盘盈录561、盘亏损244? 这里我不展开具体编号了,你需要知道的是:盘点的差异是要过账到财务的,盘盈和盘亏都算营业外收支。

实际盘点中最大的痛点不是系统怎么操作,而是"账实不一致时怎么定责任"。我见过有的企业盘点差异特别大,最后发现是收发料漏记账、录入单位换算错误(公斤和吨搞混)之类的原因。所以MM顾问做用户培训时一定要强调:每一笔出入库都要及时过账,不要攒到月底一起录。攒单子一时爽,月底对账火葬场。

5. 采购之外的MM广阔世界:MRP、STO、寄售与跨模块集成

MM模块如果只是采购和库存,那它和市面上的进销存软件没什么区别。SAP的厉害之处在于,它把计划、执行、核算串在了一条线上。这一节我们跳出采购订单,看看MM那些"进阶玩法",以及为什么网上一搜MM会出现那么多跨模块的名词。

5.1 MRP:MD07、MDVP这些报表在说什么

MRP(物料需求计划)是MM模块里最能提现ERP价值的部分。它做的事情可以通俗地理解为:系统根据生产计划(需求),结合现有库存、在途采购订单、生产订单,自动算出每种物料还缺多少、什么时候该下单采购。

零基础阶段不需要钻进MRP的参数细节里,但要看得懂MRP运行后的报表。MD04是查单个物料的库存/需求清单,把"现在有多少、未来什么时候有需求、系统建议什么时候买"全部列出来;MD07是汇总显示所有物料的需求情况,适合计划员做全局审视;MDVP则是MRP的异常/短缺清单,专门列出哪些物料有问题、哪些订单要催、哪些例外消息需要处理。

很多初学者一看到MD07、MDVP这种事务码就发怵,觉得难。其实它们的核心就是一张"供需平衡表"。你给自己做饭也天天用MRP的逻辑:看看冰箱里还剩什么(库存),想想明天吃什么(需求),缺什么去超市买(采购建议),只不过SAP把这件事扩大到了几万种物料、几百个供应商。

5.2 STO、寄售与委外加工:三种绕不开的特殊业务

先说STO(库存转储订单)。一个大集团里,A工厂可能产原料,B工厂用原料,两边都挂在同一个ERP里。A调货给B,不能像普通采购那样走外部供应商,因为货是自己的,钱也是自己的,但账还是要算清楚。STO就是干这个的:它本质上是一张内部采购订单,供应商抬头写的是自家工厂,通过301移动类型完成出库入库。跨公司代码的STO更复杂,还涉及内部结算价格和往来科目。网上搜"sap sto"的人特别多,说明做集团化企业的项目,STO几乎是标配。

再说寄售(Consignment)。供应商把货放在你仓库,但是没卖出去之前,货权还属于供应商,你不需要付钱。只有你把货领用消耗了,才触发采购结算。这种模式在汽车零部件、商超零售里特别常见,能大大降低企业资金占用和库存风险。但寄售的账务处理比较绕:寄售库存挂在特殊库存标志K下面,不属于你的存货资产,领用了才转入自己的库存并确认应付。移动类型541就是寄售领用里常用的一个。如果你做的是制造业项目,寄售流程很可能会碰到,值得提前了解。

委外加工(Subcontracting)则是你把原材料发给供应商,让他们加工成半成品或成品再送回来。看起来像采购,实则是一来一回:发料要记账,收货要冲减加工费。系统里发料和收货用的移动类型和普通采购不一样,还会涉及"组件消耗"的逻辑。我做过一个家电企业,委外加工占比特别高,项目一大半精力都花在这种流程的设计和测试上。

5.3 MM与FICO、PP、SD、QM的集成关系

这部分可能是零基础同学最想搞清楚的:为什么搜“MM”会出现一堆FICO、PP、SD的词条?因为这些模块和MM是深度耦合的,边界远没有教材里画的那么清楚。一张集成关系表给你:

关联模块主要集成点典型现象
MM-FI收货发票、GR/IR、库存科目、寄售应付每次收发料都生成财务凭证,FAGL03里能看到
MM-PP生产领料、产成品入库、MRP生产订单投料(261)、完工入库(101)
MM-SD销售发货过账、交货包装销售出库时的货物移动,牵动MM库存
MM-QM质检库存、检验批、使用决策收货到质检库存,放行后才可用
MM-CO成本中心领料、作业价格、订单结算KO88做生产订单结算,差异要分到产出

举两个现实中的例子。热搜词里"sap fagl_fcv 运行外币评估报错"看似纯FICO问题,但这类报错很多时候是因为MM那边的库存科目没有维护好外币评估的记账规则,导致MM月结时无法过账。再比如"生产订单底表"这个话题,看起来是PP的,但生产订单投料的数据源全在MM的物料凭证里。所以MM顾问不一定要精通FICO,但至少要听得懂对方在说什么,知道往哪个方向排查。

跨模块衔接还有一个常见的术语就是"平行分类账"和"特别总账"。平行分类账是为了满足不同会计准则(比如中国准则和国际准则)并存,同一笔MM收货可能同时产生两套凭证。特别总账则是应收账款和应付账款里的特殊业务标志,比如预付款、银行承兑汇票等,都用特别的记账码处理。这些概念初次接触会觉得头晕,但等你真正参与月结、年结(热搜词里还有"sap ecc 年结")时,它们全都会浮出水面。

6. 零基础入坑MM的三条建议,都是过来人的亲身体会

这篇文章快结束了,最后给你三条最实在的建议。不是我纸上谈兵,而是我见过太多新人在这三个地方跌跟头,也看太多人因为方法不对,学了一个月还在原地打转。

6.1 不要急着背事务码,先学会读屏幕

零基础同学最常见的错误是拿着一张事务码清单猛背:ME21N是什么、MIGO是什么、MB52是什么……背完第三天就忘了。我的建议恰恰相反:先把一个事务码用熟,搞懂屏幕上的每一个字段是什么意思、从哪里来、会去哪里,然后再学下一个。

举个例子:你打开MIGO,第一行是"物料凭证"还是"采购订单"?这个下拉框里每个选项对应什么业务?界面上那么多字段,哪些是必输的、哪些是自动带出来的?搞懂这些比背十个事务码都有用。因为SAP的每个屏幕都是一个业务场景的缩影,读懂了屏幕,你就读懂了业务流程。

6.2 用一个“玩具公司”把端到端流程走三遍

学MM最忌讳只看不练。建议你在SAP的练习系统里建一个虚拟公司、一个工厂,自己当采购员、仓管员、会计,把"创建物料→维护供应商→录信息记录→创建PR→转PO→收货→发票校验→付款"完整走三遍。第一遍照着操作手册走;第二遍不看手册自己走,卡住了再翻;第三遍故意制造错误(比如收货数量超PO、发票金额不对),看看系统怎么报错,再练习冲销和纠正。

这三遍走完,你对MM的骨架就有了肌肉记忆。后面再遇到复杂的特殊业务(STO、寄售、委外),都是在这个骨架上添砖加瓦。

6.3 多问“这笔业务记在哪个科目”:从财务视角理解MM

最后这条可能是最劝退新人但最有价值的建议:MM的每一次库存移动和发票操作,最终都会变成财务凭证。零基础学MM,千万不要只停留在"怎么操作"层面,要追问"为什么这么操作"。

具体来说,你每做完一次收货,就按凭证流水的图标打开财务凭证看一眼:借了什么科目、贷了什么科目、金额怎么来的。刚开始肯定看不懂,但看多了你会慢慢建立起"业务事件→会计科目"的映射直觉。等你有了这个直觉,你就不再是只会点按钮的操作员,而是真正理解ERP设计逻辑的顾问。这种视角转换,是零基础到入门的标志,也是你后面面试、做项目时最能加分的底气。

MM模块的入门介绍到这里就差不多了。下一篇会讲SAP MM的主数据细节,重点聊聊物料主数据各个视图字段背后的业务含义,以及零基础怎么一步步在系统里创建和维护一份合格的物料主数据。学ERP没有捷径,但有一条对的路:先搭框架、再填细节、多动手、多问为什么。希望这篇简介能帮你把框架搭起来。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/13 8:11:40

Activiti7云原生工作流引擎核心解析与实践

1. Activiti7概述:轻量级开源BPMN引擎Activiti7是目前Java领域最主流的轻量级开源BPMN(Business Process Model and Notation)工作流引擎,由Alfresco公司主导开发。作为Activiti6的云原生升级版本,它专门为现代分布式架…

作者头像 李华
网站建设 2026/9/13 8:10:47

LunaTranslator 新手教程:3 种捕获模式搞定日系游戏实时翻译

LunaTranslator 新手教程:3 种捕获模式搞定日系游戏实时翻译 【免费下载链接】LunaTranslator 视觉小说翻译器 / Visual Novel Translator 项目地址: https://gitcode.com/GitHub_Trending/lu/LunaTranslator 屏幕上是一部日语视觉小说,对话框里全…

作者头像 李华
网站建设 2026/9/13 8:10:22

用Codex Agent Harness套壳AI Agent:运行时、编排与踩坑总结

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华