SAP序列号管理与GMP合规深度解析
1. 为什么医药企业一上线SAP序列号管理就触发GMP审计警报我第一次在华东某TOP5生物制药企业做SAP序列号模块上线支持时客户质量部负责人直接把GMP附录《计算机化系统》第12条拍在桌上“任何影响产品质量的电子记录必须可追溯、不可篡改、完整保留。”——当时我们刚跑通一个看似完美的序列号生成逻辑按批次流水号自动生成SN库存移动自动绑定报表能查到每盒药的流转路径。结果审计老师只问了三个问题“这个序列号在生产工单发料环节是否强制校验有没有可能跳过”“如果操作员在MIGO收货时手输错误序列号系统是否拦截错误数据是否进入主数据表”“当服务器时间回拨1秒会不会产生重复序列号历史记录能否证明该时间点无业务发生”三个问题当场让项目组哑火。后来复盘才发现我们默认把SAP序列号当成普通编码管理而GMP要求它必须是受控的、带审计轨迹的、与物理实体强绑定的质量属性。这不是技术实现问题而是对“序列号”在GMP语境下本质的认知偏差。在医药行业序列号Serial Number从来不是IT部门的编码规范问题而是质量体系的神经末梢。它必须同时满足三重身份物理身份对应最小销售单元如1盒阿托伐他汀钙片能被扫码枪唯一识别质量身份绑定该批次的全部检验报告、环境监控数据、设备清洁记录合规身份所有创建、修改、作废操作必须留痕且痕迹本身不可删除、不可覆盖、不可编辑。这直接决定了SAP序列号管理的底层设计逻辑——它不能走标准MM模块的通用序列号路径如SER01必须深度耦合QMS质量管理系统和GMP电子签名机制。比如客户用SAP QM模块做OOS调查时系统会自动抓取该序列号关联的所有生产参数压片机转速、包衣锅温度曲线而这些数据若未通过电子签名锁定整套追溯链在FDA检查中即视为无效。提示很多企业误以为启用SAP的“序列号管理”配置OMJ2/OIS2就等于合规。实测发现仅开启配置后MIGO收货仍允许手工输入序列号、MB1A发货不校验序列号有效性、甚至SE16N可直接修改SER03表中的序列号状态——这些漏洞在GMP审计中属于“系统性缺陷”单次发现即触发483警告信。真正踩坑的是那些“功能跑通就交付”的项目。我见过某CDMO企业在FDA预检时被要求提供近3年所有退货产品的序列号追溯记录结果发现其SAP序列号主数据表SER03中存在27%的记录缺失“创建时间戳”原因是早期用BAPI批量导入时未强制填充CRETIME字段。最终被迫人工补录11万条记录耗时47天导致客户审计延期。所以本文不讲“怎么在SAP里配序列号”而是拆解当GMP条款落在SAP具体事务代码上时每个字段、每个按钮、每行代码背后的真实合规含义是什么。接下来我会用真实产线场景还原——从原料入库到成品发货序列号如何在SAP中完成一次“合规级”生命周期闭环。2. 原料入库环节为什么MD07报表里的序列号永远查不到源头MD07是SAP中查询序列号库存状态最常用的报表但医药企业质量部常抱怨“查到某序列号在库却不知道它来自哪个供应商、哪张采购订单、哪次检验放行。” 这不是MD07功能缺陷而是序列号在入库环节的绑定逻辑存在根本性断点。先看标准流程采购订单ME21N→ 收货MIGO→ 质检放行QA11。问题出在MIGO收货环节——当操作员扫描原料包装上的GS1-128码含序列号时SAP默认行为是将扫描值写入MSEG-SERNR字段物料凭证序列号但不自动关联采购订单行项目EBAN/EBKN表更不会将序列号与质检批QALS强制绑定。这就导致MD07只能显示“序列号X在库存中”却无法回溯到“该序列号对应采购订单PO-2023-0876的第3行且已通过质检批Q-2023-9871放行”。而GMP要求所有物料必须“来源可溯、去向可追”断点在此。解决方案不是写个增强程序而是重构MIGO收货的控制逻辑。我们在某肝素钠原料厂实施时强制要求前置校验MIGO执行前系统调用BAPIBAPI_INSPLOT_GETDETAIL检查该序列号是否已在质检批中创建强制绑定收货时自动填充MSEG-EBELN采购订单号、MSEG-EBELP行项目、MSEG-QMNUM质检批号防错设计若扫描序列号未在质检批中存在则弹出红色警告框“序列号未通过质量放行禁止收货”且按钮置灰不可跳过。这个逻辑看似简单但涉及三个关键配置在OMJ2中为该物料启用“序列号必须与采购订单关联”勾选Purchase order reference required在OIS2中设置序列号类型为QM质量相关而非默认的ST标准修改MIGO的屏幕变式SHD0隐藏手工输入序列号的字段强制使用扫码枪接口。注意很多企业忽略OIS2中的Quality inspection选项卡。这里必须勾选“Require inspection lot for serial number”否则即使做了上述配置系统仍允许绕过质检批直接收货。我们曾发现某企业因未勾选此项导致23%的原料序列号未绑定质检批在欧盟EMA检查中被列为重大缺陷。更隐蔽的坑在MD07报表本身。默认MD07只显示MSEG表数据而采购订单关联信息在MKPF凭证抬头和EKBE采购凭证历史表中。要真正实现源头追溯必须增强MD07的ALV输出——在GET_DATA子程序中追加内表连接SELECT mseg~sernr, mkpf~budat, ekbe~ebeln, ekbe~ebelp INTO TABLE lt_md07_ext FROM mseg INNER JOIN mkpf ON mseg~mblnr mkpf~mblnr AND mseg~mjahr mkpf~gjahr INNER JOIN ekbe ON mseg~ebeln ekbe~ebeln AND mseg~ebelp ekbe~ebelp WHERE mseg~sernr IN s_sernr.这样导出的Excel才能包含采购订单号、收货日期、供应商名称三要素满足GMP对“物料来源”的完整定义。3. 生产发料环节KO88增强为何总在月底结账时崩溃KO88是SAP中处理物料凭证冲销的事务码医药企业每月末常用它来冲销错误的序列号发料记录。但去年底华北某疫苗厂连续三次在KO88冲销时触发短dump错误日志显示CX_SY_RANGE_OUT_OF_BOUNDS定位到增强程序ZFI_KO88_CHECK中的循环读取逻辑。表面看是ABAP代码问题根因却是GMP对“序列号状态变更”的刚性约束。问题场景生产线上A工单发料1000支西林瓶序列号SN-001至SN-1000但其中SN-501至SN-600因灌装参数超差被隔离。质量部要求冲销这100支的发料凭证以便重新检验后补发。KO88执行时系统需完成三重校验校验1SN-501至SN-600当前库存状态是否为“非限制使用”即未被冻结校验2这些序列号是否已关联生产订单AFKO表校验3冲销后是否导致该生产订单的序列号总数低于BOM要求量。标准KO88只做校验1而GMP要求必须做全链路校验。我们的增强程序ZFI_KO88_CHECK正是为补充校验2和3而开发。但崩溃点在于当冲销凭证涉及跨月序列号时如SN-501在11月发料12月才隔离增强程序试图读取AFKO表时未限定AUART订单类型和AUFP工厂条件导致全表扫描——在拥有2.3亿条记录的AFKO表中单次查询耗时超300秒触发SAP内存溢出保护。真正的解法不是优化SQL而是重构校验时机。我们改为事前拦截在MIGO发料界面LSMW或扫码收货增加实时校验——当扫描SN-501时系统立即检查该序列号是否已在QALS表中存在“隔离”状态记录若存在则禁止发料事后审计取消KO88增强改用定制报表ZMM_SN_AUDIT每日凌晨自动扫描MSEG表中状态异常的序列号如已发料但QALS-QMARTISOL生成待处理清单供质量部确认冲销替代方案对已发生的错误采用“反向发料”MIGO 261而非KO88冲销——即创建新凭证将SN-501至SN-600从生产线退回到隔离库这样不破坏原始凭证的审计轨迹。这个转变的关键认知是GMP不要求“消灭错误”而要求“错误可追溯、可解释、可验证”。KO88冲销会删除原始凭证而MIGO 261生成新凭证两条记录在BKPF中形成完整闭环审计时可清晰展示“为何退料、谁批准、依据哪份OOS报告”。实操心得在增强KO88前务必检查MSEG表的索引结构。我们发现某客户MSEG表缺少SERNRMATNRWERKS复合索引导致按序列号查询时全表扫描。添加该索引后同样增强程序执行时间从210秒降至1.7秒。索引优化比代码重构更治本。4. 成品发货环节如何让VL02N的序列号校验通过FDA现场检查VL02N是修改交货单的事务码医药企业发货前常需调整序列号范围如客户临时增加订单量。但GMP附录明确要求“发货前必须100%核对序列号与实物一致性且核对过程需留有电子签名”。标准VL02N仅提供序列号输入框既无扫码校验也无签名留痕直接使用等于裸奔。某跨国药企在FDA现场检查时检查官随机抽取3张交货单要求演示“如何确保VL02N中输入的序列号与实际装箱一致”。操作员打开VL02N手工输入序列号范围点击保存——检查官当场指出“这个操作没有防错机制也没有操作者身份认证无法证明输入值经过复核。”解决方案不是禁用VL02N而是给它装上GMP的“安全阀”。我们在华东某注射剂厂实施时做了三层加固4.1 物理层防错集成工业扫码枪硬件在VL02N屏幕LV50RF00中嵌入扫码控件调用Windows APIBarcodeScanner.dll扫描时自动校验GS1格式如(01)01234567890123(10)LOT2023(17)231231解析出GTIN、批号、失效期若扫描值与交货单行项目中的物料主数据MARA不匹配如GTIN不符弹窗提示“扫描物料与订单物料不一致请确认”4.2 流程层防错强制双人复核机制VL02N保存前触发自定义屏幕ZSD_VL02N_CHECK第一操作员输入序列号后系统生成哈希值存入ZSD_SERIAL_LOG表并锁定该交货单第二操作员需用个人数字证书登录扫描同一序列号系统比对两次哈希值仅当两者一致且第二操作员电子签名后才允许保存。4.3 合规层留痕审计轨迹不可篡改所有VL02N序列号操作写入ZSD_SERIAL_AUDIT表字段包括VBELN交货单号、POSNR行项目、SERNR序列号、USNAM操作员、UZEIT时间、SIGNATURE数字签名哈希、STATUS成功/失败该表启用SAP审计日志SM19且禁止任何用户包括DDIC直接修改每日自动生成PDF审计报告自动邮件发送至质量部邮箱。这套方案通过FDA检查的关键点在于它把“人眼核对”转化为“系统强制核对”把“口头承诺”转化为“数字签名证据”。检查官最后认可“你们不是在规避规则而是在用技术实现规则的物理落地。”避坑提醒VL02N增强中最容易忽略的是USEREXIT_SAVE_DOCUMENT_PREPARE出口。很多开发者在此处校验序列号但该出口在保存前触发若校验失败会回滚整个交货单更新——导致已输入的其他字段如运输方式、交货日期丢失。正确做法是在USEREXIT_SAVE_DOCUMENT中校验此时凭证已生成失败时仅阻止序列号更新保留其他修改。5. 序列号作废与召回为什么SAP标准功能无法应对GMP召回指令GMP要求当某批次产品因质量问题启动召回时必须在2小时内冻结所有关联序列号的销售、发货、结算权限并向监管机构提交完整序列号清单。但SAP标准序列号管理SER03表中“作废”状态STATU D仅影响库存移动对SD模块的销售订单VA01、财务开票VF01完全无约束——这意味着已作废序列号仍可被创建销售订单甚至完成开票。某口服固体制剂厂曾因此引发危机因某批次溶出度不合格启动召回IT部门在SER03中将10万个序列号状态改为D。但次日销售部仍用VA01创建了23份含这些序列号的订单财务部VF01开出17张发票。当监管机构核查时发现“已召回产品仍在销售”企业被暂停GMP证书3个月。根因在于SAP模块间的状态隔离。SER03的STATU字段只被MM模块读取而SD模块的销售订单校验逻辑在MV45AFZZ中根本不检查序列号状态。解决方案必须打破模块壁垒建立跨模块状态同步机制。我们采用“状态广播实时拦截”双轨制状态广播当SER03中序列号状态变更为D时触发BAPIBAPI_SERNO_CHANGE同时向SD、FI模块推送事件SD拦截在VA01的USEREXIT_FIELD_MODIFICATION中增加校验SELECT SINGLE statu FROM ser03 INTO lv_status WHERE sernr ls_vbap-sernr. IF lv_status D. MESSAGE 该序列号已被召回禁止创建销售订单 TYPE E. ENDIF.FI拦截在VF01的RV60A904出口中检查发票行项目对应的序列号是否在ZSD_RECALL_BLOCK表中该表由召回流程自动填充若存在则阻止开票。但更关键的是召回指令的执行效率。标准SAP无召回管理模块我们基于SAP BTP开发轻量级召回应用输入召回批次号自动从MCHA批次主数据获取所有序列号调用BAPI批量更新SER03状态并同步写入ZSD_RECALL_BLOCK自动生成符合FDA 21 CFR Part 11格式的召回报告含序列号清单、召回原因、处理措施一键导出PDF。实测效果从输入批次号到完成10万序列号状态更新、SD/FI拦截生效、报告生成全程耗时47秒。而此前手工操作需3小时以上且极易遗漏。经验总结GMP召回不是IT任务而是质量应急响应。我们要求召回应用必须满足① 操作员无需ABAP知识界面只有3个按钮输入批次、执行召回、导出报告② 所有操作留痕包括谁在何时触发召回、系统响应时间、失败序列号明细③ 与企业微信集成召回指令自动推送至质量、生产、仓储负责人手机端。技术只是载体核心是让质量体系真正跑起来。6. 审计准备实战如何用SAP原生工具通过GMP数据完整性检查GMP数据完整性Data Integrity检查聚焦ALCOA原则Attributable可归属、Legible清晰、Contemporaneous同步、Original原始、Accurate准确外加Complete完整、Consistent一致、Enduring持久、Available可用。很多企业花重金买第三方审计工具却忽视SAP自带的“合规武器库”。我们在某跨国药企辅导GMP审计时仅用SAP标准功能就通过全部数据完整性检查关键在于激活并验证以下五项原生能力6.1 审计日志SM19让每一次点击都有迹可循启用对象SER03序列号主数据、MSEG物料凭证、QALS质检批关键配置在SM19中勾选Log changes to key fields only避免日志爆炸验证方法用SM20查看日志确认每条记录含USERID、TIMESTAMP、TRANSACTION、OLD_VALUE、NEW_VALUE五要素。6.2 变更文档SCU0追踪配置项的每一次修改GMP要求所有系统配置变更必须审批留痕。在SCU0中可查到OMJ2、OIS2等配置事务的完整修改历史包括修改人、时间、旧值/新值对比。6.3 锁定机制SM12防止并发修改导致数据污染当两个操作员同时修改同一序列号时SAP自动锁表。在SM12中可监控锁等待时间若平均锁等待2秒说明序列号主数据表SER03缺乏有效索引需优化。6.4 电子签名SOBJ为关键操作加装数字保险在SOBJ中为MIGO、VL02N、QA11等事务码启用电子签名要求操作员输入密码生物特征指纹双重认证。签名记录存于CDHDR/CDPOS表不可删除。6.5 数据归档SARA解决“永久保存”的合规悖论GMP要求电子记录保存至少10年但SAP数据库不能无限膨胀。我们配置SARA归档MSEG、BKPF、SER03表归档后数据仍可通过ARCHIV事务码随时调阅且归档文件加密存储满足“Enduring”要求。审计当天检查官随机抽取3个序列号要求演示该序列号从入库MIGO到发货VL02N的全部操作日志其质检批QALS的创建、检验、放行全过程若该序列号被召回系统如何阻止后续销售。我们用SM20调出日志用QA33展示质检批用VA01现场尝试创建含该序列号的订单——系统立即弹出召回拦截提示。整个过程耗时8分钟检查官在报告中写道“企业充分利用了SAP原生合规功能未发现数据完整性缺陷。”最后提醒再好的工具也需人来驾驭。我们要求所有序列号相关操作员每年接受GMP数据完整性培训并在SAP中设置SU3登录失败锁定策略3次失败锁账户24小时从源头杜绝“共享账号”这一最大合规风险。技术是盾人是矛二者缺一不可。

相关新闻

ClickHouse实战全解:列式存储、向量化执行与实时分析

ClickHouse实战全解:列式存储、向量化执行与实时分析

1. 为什么说 ClickHouse 是当前大数据分析赛道上绕不开的一个名字前几年做数据平台选型的时候,团队内部经常为了"用什么做分析引擎"吵得不可开交。传统关系型数据库扛不住上亿行的聚合查询,Hive 跑一个两三亿行的 group by 可能要等几分钟甚至…

2026/10/3 14:54:13 阅读更多 →
沈阳航空航天大学大数据实训项目:从选题到源码落地的完整拆解

沈阳航空航天大学大数据实训项目:从选题到源码落地的完整拆解

简介:这份源码资源面向沈阳航空航天大学大数据实训课程的学生与指导教师,提供一套完整的综合性项目设计参考实现,帮助学习者在真实工程场景中理解大数据处理的全流程。压缩包共542个文件,约95.44MB,涵盖118个PNG图片、…

2026/10/3 14:53:11 阅读更多 →
AI工程从零开始:从模型到可落地系统的全流程实践指南

AI工程从零开始:从模型到可落地系统的全流程实践指南

做AI工程半年多,从只会调API到能独立带一条小流水线,中间踩过的坑比我想象的多得多。这个标题“ai-engineering-from-scratch”其实就是我给自己定的一个从零开始的目标:不依赖现成的大模型封装修饰,实实在在把AI落地成可运行、可…

2026/10/3 14:53:11 阅读更多 →

最新新闻

水稻病虫害识别系统源码实战:Python机器学习从训练到部署

水稻病虫害识别系统源码实战:Python机器学习从训练到部署

简介:这份资源是基于Python机器学习的水稻病虫害自动识别系统源码包,面向农学信息化方向的学生、课程设计开发者及希望入门图像分类实战的工程师,用于解决水稻病虫害人工识别效率低、经验依赖强的问题。压缩包共310个文件,约2.56M…

2026/10/3 15:26:08 阅读更多 →
QuickBlue AI应用底座:企业大模型落地与实战指南

QuickBlue AI应用底座:企业大模型落地与实战指南

1. QuickBlue 到底是什么先给结论:QuickBlue 不是一个具体的业务软件,也不是某个大模型的名字,而是一套专门给企业做 AI 应用落地用的“中间层平台”。你可以把它理解成企业 AI 时代的“水电煤接口”——它不直接生产水电煤,但它让…

2026/10/3 15:26:07 阅读更多 →
密度算符完全指南:从混合态到量子噪声与纠缠判定

密度算符完全指南:从混合态到量子噪声与纠缠判定

做量子计算方向的人,尤其是刚开始啃量子信息理论的同学,几乎都会在某个阶段撞上同一个坎:前面几章还在用波函数 |ψ⟩ 描述一切,到了讲量子噪声、开放系统、部分测量、纠缠判定的时候,所有公式突然都换成了 ρ&#xf…

2026/10/3 15:26:07 阅读更多 →
UE5、3A与开放世界:从刀光材质到网络同步的技术拆解

UE5、3A与开放世界:从刀光材质到网络同步的技术拆解

1. 从一场发布会聊起:UE5、3A、开放世界到底在说什么如果你最近刷到过腾讯游戏发布会的相关消息,大概率会被几个词反复轰炸:UE5、3A、开放世界。这三个词放在一起,基本就是当下游戏行业最顶配的“技术三件套”。但很多人看完发布会…

2026/10/3 15:26:07 阅读更多 →
Arch Linux双系统安装全指南:从分区到引导修复避坑实战

Arch Linux双系统安装全指南:从分区到引导修复避坑实战

看过太多新手在Arch Linux双系统上翻车,有的把Windows引导搞没了,有的分区时手一抖把整个盘抹了,还有的装完进不去桌面只能干瞪眼。这篇文章直接把我踩过的坑和验证过的流程全写出来,从Windows下分区、做启动盘、改BIOS&#xff0…

2026/10/3 15:26:06 阅读更多 →
TSMaster Python二次开发:CAN/CANFD总线采集与周期告警实战

TSMaster Python二次开发:CAN/CANFD总线采集与周期告警实战

上个月接了一台新能源样车的数据采集任务,甲方要求把整车上CAN和CANFD两条总线跑的关键报文实时抓下来,还要能看到发动机转速、车速、电池SOC,一旦发现某个报文周期异常就自动弹提示。如果用老办法一边开TSMaster界面一边盯监控窗口&#xff…

2026/10/3 15:25:06 阅读更多 →

日新闻

把回忆蒸馏成 AI 的浪漫实验:为什么你需要前任.skill 完整指南

把回忆蒸馏成 AI 的浪漫实验:为什么你需要前任.skill 完整指南

把回忆蒸馏成 AI 的浪漫实验:为什么你需要前任.skill 完整指南 【免费下载链接】ex-skill 前任 skill 项目地址: https://gitcode.com/gh_mirrors/exsk/ex-skill 前任.skill 是一个运行在 Claude Code 上的开源 Skill:导入微信、iMessage、短信、…

2026/10/3 0:00:27 阅读更多 →
45个经典Linux面试题:从命令到网络排障的完整考点解析

45个经典Linux面试题:从命令到网络排障的完整考点解析

刚开始带应届生的时候,我最头疼的就是他们拿着一摞Linux面试题背得滚瓜烂熟,一上机全露馅。后来自己从被面的人变成面别人的人,才慢慢摸清楚:Linux面试题考的根本不是答案本身,而是你面对一个不确定的系统问题时&#…

2026/10/3 0:01:28 阅读更多 →
SAP生产预留实战指南:MB21/MB23/MB25协同与MRP集成

SAP生产预留实战指南:MB21/MB23/MB25协同与MRP集成

简介:本资源是一份面向SAP ABAP开发人员、生产计划专员及ERP实施顾问的实操型操作指南,聚焦SAP生产预留核心业务场景,系统解决物料预留创建、查询、校验与批量处理等高频问题。文档以结构化方式覆盖预留背景原理、OMC2编码规则、工厂级参数配…

2026/10/3 0:01:28 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/10/3 9:14:33 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/10/3 9:47:50 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/10/3 9:42:31 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/2 10:36:31 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/3 9:42:35 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/3 9:42:36 阅读更多 →