news 2026/10/2 7:39:32

SAP生产订单状态读取实战:JEST表、TECO判断与避坑指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SAP生产订单状态读取实战:JEST表、TECO判断与避坑指南

干过几年SAP PP/后勤的朋友,大概率都遇到过这种对话:业务指着CO03屏幕问你“这个订单现在算什么状态?为什么我的报表里看不到?”你能看懂CRTD、REL、TECO这些单词,但等你真要去写查询、做增强、导接口数据的时候,翻到JEST表,才发现状态这东西远比屏幕上那一行复杂。这个主题就是来解决实际问题的:SAP生产订单状态到底存在哪里、怎么取、怎么判断,以及那些让你排查半天的坑都在什么地方。

这篇文章适合正在折腾报表开发、接口取数、状态增强的ABAP顾问,也适合刚接手PP模块想搞懂状态机制的业务顾问。我尽量按实战来写,不摆教科书框架,直接说我在项目里怎么查、怎么写、怎么避坑。这里的所有内容都基于SAP标准表结构和标准函数,你拿到自己系统里基本都能直接试。

1. 搞懂状态背后的存储逻辑:SAP不是给你存了一个“当前状态”字段

提到状态取值,第一反应是去AUFK表里找一个“状态字段”,翻遍了表结构你会发现根本没有。这不是SAP漏了,而是状态本身就是一种“集合型数据”,而且它支持多状态并行,SAP的设计是用状态管理对象(Status Object)加一条条状态记录来存。

1.1 状态对象号OBJNR是理解一切的钥匙

SAP里所有能被“贴状态”的对象,都有一个22位的对象编号OBJNR。生产订单抬头、生产订单工序、物料主数据、采购订单、销售订单,都是这个套路。JEST表就是状态记录的主表,里面的主键之一就是OBJNR,另外一个关键字段是STAT,即状态编号。

生产订单最常用的抬头状态对象,固定前缀是ORDR;工序状态对象前缀是ORUF;物料状态对象前缀是PRD。所以你在SE16N里查JEST表时,如果看到OBJNR以ORDR开头,基本就是订单抬头状态;看到ORUF开头,就是和工序相关。

实际开发里,我不太建议自己用字符串拼接OBJNR,尤其拼工序对象号的时候很容易出错。订单抬头有个更稳妥的做法:从AUFK表直接取出OBJNR字段,这个字段就是用来关联状态对象的。换句话说,AUFK里的对象号已经帮你拼好了,不需要你手工处理。很多刚接触状态的人在这里栽过跟头,非要用“ORDR+订单号”拼一遍,结果是SQL查出来的记录对不上,这种问题非常常见。

1.2 系统状态和用户状态,存储上其实没什么区别

生产订单里的状态大致分两类:系统状态(System Status)和用户状态(User Status)。系统状态由SAP根据业务操作自动触发,比如创建订单后给你CRTD,下达后给你REL,报工后给你CNF,技术性完成后给你TECO。用户状态则是你通过BS02、BS52这些事务码自己定义的,属于项目级定制,业务上习惯用用户状态来区分“线上试产”“批量生产”“暂停”“归档”这类有业务含义的标记。

但在JEST表里,两者没有任何结构上的区别,都是OBJNR+STAT+INACT那一套。系统状态的STAT编号通常以I开头,用户状态一般以E开头。这里有个非常容易踩的坑:很多人以为一个订单只有一个“当前状态”,实际上JEST里同一订单可以同时有几十条有效状态记录。比如一个订单已经技术性完成,但同时又处于CLSD(关闭)状态,再叠加你自定义的用户状态“已归档”,这三条会同时存在,且INACT标记都是未失效的。所以表达“订单等于某个状态”基本是伪命题,更准确的说法是“订单是否存在某个状态”。

1.3 状态是历史集合,不是瞬时快照

JEST表本质上是“当前和历史状态的集合”,不是“当前状态快照”。这也是很多SQL写错的最核心原因。你查某个订单的状态,不排除INACT字段,查出来的可能是它曾经走过的所有状态,甚至包括创建后被取代、被清除的历史状态记录。所以后面所有查询模板里,都必须把INACT字段作为第一关注点。

2. 状态相关的数据和代码实操:一张JEST表打天下

真正写报表时,你会发现要打交道的表就那么几张:AUFK(订单抬头)、JEST(状态存储)、TJ02/TJ02T(状态编号翻译)、JCDO(状态变更历史)。搞透这几张表,90%的需求都能解。

2.1 JEST表结构重点字段解析

JEST表并不复杂,核心字段就这么几个,我列出来是希望大家写代码前先把字段含义理清楚,尤其是INACT和DATUV。

MANDT:客户端。所有查询都默认带上,这是SAP审计和权限的基本要求。

OBJNR:对象号,22位。订单抬头就是AUFK里的那个OBJNR,把它拿出来直接关联JEST。

STAT:状态编号,5位字符。比如CRTD在标准系统里通常显示为I0001,REL是I0002,TECO在不少版本里可能是I0005或者I0045。这个编号每家系统可能不一样,尤其项目里做过状态增强的,千万别在报表代码里硬编码某个编号。我后面给的方案都是基于TJ02T做翻译,就是为了避开这个雷。

INACT:非活动标记。空格表示“当前有效状态”,X表示“已经不生效的状态”。写查询一定记住:WHERE inactive = ''。

DATUV:状态生效日期。用于看“什么时候进入这个状态”,但要注意它只有日期没有时间,碰上同一天多次状态切换,需要配合JCDO去查历史。

调用函数读取状态时,通常还要注意返回的状态表同样带INACT字段,不能只读STAT,必须过滤掉INACT为X的记录。

2.2 状态文本的翻译:TJ02T是唯一推荐方式

STAT字段那些编号人没法直接读,必须翻译成CRTD、REL、TECO这类可读文本。标准逻辑是:

JEST.STAT 关联 TJ02T.STAT,TJ02T里按语言SPRAS筛选,取TXT04或者TXT30。TXT04是短文本,TXT30是长文本。做报表展示时,短文本已经足够,而且它正好对应界面上显示的四个字母状态码。

我见过不少人在程序里写死“IF stat = 'I0001' THEN 状态 = '创建'”,这种方式非常脆弱,因为状态编号并不是百分百固定的,一旦项目里做状态调整或系统版本不同,轻则显示错乱,重则整个报表判断逻辑失效。最好的做法永远是运行时动态翻译:

SELECT stat, txt04, txt30 FROM tj02t WHERE spras = '1' AND stat IN (状态编号集合)

这样哪怕状态编号变化,程序逻辑不需要动。这是一个很基本的习惯,但我在项目里确实碰到过很多次因为硬编码状态编号导致的功能故障。

2.3 JCDO表用来查“状态从哪来、什么时候变”

业务经常问“这个订单什么时候TECO的?”、“TECO是谁操作的?”JEST表只能告诉你当前状态集合和DATUV生效日期,但真正的变更历史在JCDO表里。

JCDO同样以OBJNR为主线索,记录了对象每一次状态变化的内容,包括新状态、旧状态、变更时间、变更用户。查“何时TECO”这种需求,就是按OBJNR查JCDO,再加STAT条件,然后按时间排序取最新记录。这里提醒一下,JCDO表数据量通常不小,查询时一定要把OBJNR、时间范围这些条件带全,别直接全表扫。

那标准事务码呢?CO03里查看订单抬头状态是最直观的。但如果你要做批量报表,不可能靠人肉复制粘贴。COOIS虽然是标准信息系统,能按状态筛选,但它对自定义状态判断非常局限,很多时候还是得写ABAP或SE16N直接摸表。

2.4 状态相关标准事务码和函数速查

  • CO03:查看生产订单状态。
  • COOIS:生产订单信息系统,可以按状态文本筛选订单,但条件组合能力有限。
  • BS02 / BS52:维护用户状态和状态配置文件。
  • SE16N / SQVI:快速查JEST、AUFK、TJ02T。
  • STATUS_READ:标准RFC函数,按OBJNR读取一个对象当前全部有效状态。
  • CL_STATUS=>GET_STATUS_LIST_FOR_OBJNR:ABAP面向对象方式读取状态,封装程度更高,推荐使用。

搞懂这些,你已经能解决大部分“状态取值”的场景。接下来重点讲代码和SQL。

3. 生产订单常见状态清单与业务含义

这些状态文本是标准SAP里出现频率最高的,我按抬头状态列出来。这里说的是TXT04短文本,也就是界面上显示的那四个字母。请注意,同一个短文本在不同对象上可能含义类似,但订单状态需要结合具体业务节点理解。

3.1 抬头常见系统状态

CRTD(已创建):订单刚保存时的初始状态,此时还没有下达,不能执行发料和报工。这个状态下业务的常见动作是改数量、改日期,甚至删除订单。注意删除订单不是所有状态都能删的,CRTD状态通常可以删除。

REL(已下达/已释放):订单可以开始执行了。下达不仅是操作上的“放行”,它还会触发很多后续逻辑,比如MRP重新计算、物料可用性检查、生产能力检查、打印订单等。绝大多数报表判断“订单要不要进入生产执行”,第一个看的就是REL状态。

PRC(部分确认):订单某道工序已经被部分确认过。这是个很微妙的信号,当订单同时存在PRC时,说明该订单已经产生过报工记录,但还没达到最终确认。

CNF(最终确认):订单所有工序都已确认完成。这个状态对成本核算和工时统计很关键,因为CNF意味着实际工时已经有了完整的归集基础。不过要注意,CNF不是“订单结束”的代名词,很多业务上已经做完的订单仍然挂着CNF而忘记做TECO。

DLV(已交货/已全部交货):这个状态通常和订单相关的收货/交货动作有关。装配订单里,DLV往往意味着最终成品已经完成入库或交货。出现DLV状态,业务基本可以认为“实物已经出去了”。

TECO(技术性完成):这是生产订单最常用的“业务终态”之一。TECO后,订单不再允许报工、发料等后续操作,未结算的差异会进入后续结算流程。但TECO不等于CLSD,很多公司习惯“先TECO,月底统一CLSD”。

CLSD(已关闭):订单彻底关闭,系统层面不再允许任何业务操作,结算也已完成。这个状态下的订单基本就是“历史档案”了。

3.2 和物料移动相关的状态标记

还有一种状态也经常被业务问到,那就是GMPS(已完全发料)或类似标记。物料全部发料后,SAP会给订单打上相关状态,但这属于物资流状态,不一定在每个系统版本里都存在。判断“这个订单发料是否完整”,更可靠的方式还是去查物料凭证和预留,不能只看状态。毕竟状态更新有前提条件,如果业务操作顺序异常,状态偶尔会和实物不同步。

3.3 用户状态的实际取舍

用户状态是项目定制的大头。比如有些工厂用“ZPRD”表示试产状态,用“ZPAU”表示暂停状态。这类状态同样存在JEST里,同样按STAT存储。判断用户状态时,我建议把它和系统状态分开看,不要混在一个逻辑里。

曾经有个项目的需求是“查询所有处于暂停状态的订单”,业务口中的“暂停”是用户状态ZPAU,但报表里同时过滤了“没有TECO”这个条件,最终把一大批已经TECO但暂停标记还没清除的订单漏掉了。所以遇到状态需求,我第一句话永远是:你说的状态,是系统状态还是你自定义的用户状态?两种状态共存,业务侧很容易只描述一半。

4. 状态取值SQL与ABAP实现模板

到了真正动手环节,我分享几个我反复用的写法。这些代码不需要硬编码状态编号,直接拿状态文本去关联,能适应大多数SAP环境。

4.1 最安全的SQL方式:通过TJ02T翻译后筛选

需求场景:查某工厂下所有处于TECO状态的生产订单。

不建议的写法是:

SELECT aufnr FROM aufk WHERE ... AND EXISTS ( SELECT * FROM jest WHERE objnr = aufk~objnr AND stat = 'I0005' AND inactive = '' )

因为I0005这个编号不一定对。但如果你先查TJ02T得到TECO对应的STAT,再拿它去过滤,就稳妥多了。ABAP里可以这样组织:

DATA: lt_tecostat TYPE TABLE OF tj02t-stat.

SELECT stat INTO TABLE lt_tecostat FROM tj02t WHERE spras = '1' AND txt04 = 'TECO'.

SELECT a~aufnr, a~objnr INTO TABLE @DATA(lt_orders) FROM aufk AS a WHERE a~werks = @p_werks AND a~autyp = @p_autyp AND EXISTS ( SELECT * FROM jest AS j WHERE j~objnr = a~objnr AND j~stat IN (SELECT * FROM @lt_tecostat AS s) AND j~inactive = '' ).

先是把文本翻译成编号集合,然后用EXISTS判断“存在这个状态”。这里特意用了EXISTS而不是IN,是因为同一个订单可能有多条状态记录,用EXISTS可以避免结果集重复展开。

4.2 查“未TECO且未CLSD”的订单:别用不等于,要用不存在

这是最常见的犯错误场景。很多人想表达“排除TECO和CLSD”,第一反应是:

AND stat NOT IN ('TECO对应的编号', 'CLSD对应的编号')

但JEST里一个订单有多条状态记录,你这样写会把所有订单都排除掉或者完全查不出来,因为你没有办法用一行JEST记录同时满足“有REL且无TECO”这类集合判断。正确逻辑一定是用NOT EXISTS:

SELECT a~aufnr INTO TABLE @DATA(lt_open_orders) FROM aufk AS a WHERE a~werks = @p_werks AND a~autyp = @p_autyp AND EXISTS ( SELECT * FROM jest AS j WHERE j~objnr = a~aufnr... ).

这里注意别把对象号写错,正确关联是j~objnr = a~objnr。然后“未TECO未CLSD”的完整代码逻辑是:

DATA: lt_done_stat TYPE TABLE OF tj02t-stat.

SELECT stat INTO TABLE lt_done_stat FROM tj02t WHERE spras = '1' AND ( txt04 = 'TECO' OR txt04 = 'CLSD' ).

SELECT a~aufnr INTO TABLE @DATA(lt_open_orders) FROM aufk AS a WHERE a~werks = @p_werks AND a~autyp = @p_autyp AND NOT EXISTS ( SELECT * FROM jest AS j WHERE j~objnr = a~objnr AND j~stat IN (SELECT * FROM @lt_done_stat AS s) AND j~inactive = '' ).

这里NOT EXISTS的语义是“这批订单里不存在TECO或CLSD状态”,也就是订单仍在执行中或未关闭。注意这个写法在需要排除多个状态时比NOT IN安全得多,因为NOT IN一旦子查询结果里有空值就会导出空结果,NOT EXISTS不会。

4.3 用标准函数读取状态,适配ALV报表加列

如果你在做自定义报表,需要在输出ALV里展示一个“当前状态”列,最简单的办法是读完订单数据后循环调用标准函数。示例逻辑如下:

LOOP AT lt_orders INTO ls_order. CALL FUNCTION 'STATUS_READ' EXPORTING objnr = ls_order-objnr only_active = 'X' IMPORTING ... TABLES status = lt_status.

LOOP AT lt_status INTO ls_status. SELECT SINGLE txt04 INTO ls_order-status_txt FROM tj02t WHERE spras = '1' AND stat = ls_status-stat. ... ENDLOOP. ENDLOOP.

only_active这个参数会把INACT=X的历史状态过滤掉,效果等同于SQL里手动加inactive = ''。不过STATUS_READ返回的是状态集合,一个订单可能返回多个状态,拼成展示字符串时建议把系统状态和用户状态分开,或者按业务优先级只展示最关键的几个。直接用类方式CL_STATUS=>GET_STATUS_LIST_FOR_OBJNR也可以达到同样效果,只是需要在类池里配置好,老项目里用函数更通用。

4.4 批量性能优化与对象号准备

如果你处理几千个订单,逐条调STATUS_READ会有明显性能压力。推荐的做法是:

内表里先把所有订单的OBJNR去重,一次性按工厂和相关对象范围去查JEST和TJ02T,把状态翻译工作放到数据准备阶段。

SELECT a~aufnr, a~objnr, j~stat, t~txt04 FROM aufk AS a INNER JOIN jest AS j ON j~objnr = a~objnr AND j~inactive = '' INNER JOIN tj02t AS t ON t~stat = j~stat AND t~spras = '1' INTO TABLE @DATA(lt_status_all) WHERE a~werks = @p_werks AND a~autyp = @p_autyp.

然后在内表里按AUFNR再做汇总或筛选。这种做法的好处是只查一次大表,后面的判断都在内存里完成,也方便同时抓出系统状态和用户状态,JCDO历史查询也可以接着同样的键值扩展。

5. 真实业务场景中的状态判断逻辑

光会SQL还不够,状态取值更多的难点在于“业务真正想问什么”。我这几年遇到最多的需求,整理出来供大家参考。

5.1 “哪些订单还没技术性完成?”并不等于“哪些订单还没做完”

业务说“没做完”,通常指的是实物没做完或账面没做完。但TECO只是系统层面不允许后续操作,不能直接代表“没做完”。曾有一个做机械加工的客户,他们把TECO当成了“完工”的代名词,结果每个月都有少数订单在实物刚下线、零件还在跨工序流转时就被误TECO了。后来报表里加上了CNF和DLV的组合判断,才真正贴近实物状态。

如果你也接到“未完工订单”的报表需求,建议先厘清口径,至少要跟业务确认:你是想要没有CNF的,还是没有DLV的,还是既没有TECO也没有CLSD的?三个口径查出来的结果差别非常大。

5.2 已TECO的订单不等于不能看状态,也不一定不能反操作

业务经常问“TECO之后为什么还能改?”、“TECO之后还能发料吗?”答案取决于状态配置文件配置和用户权限。标准系统里TECO后的订单,很多操作会被锁定,但在项目实际配置中,用户可以取消TECO,或者通过增强放行某些操作。此时JEST里会产生一条新的状态变更历史,TECO状态可能变成INACT=X,或者被某个后续状态取代。编写判断逻辑时,最好按业务口径明确“要当前TECO”还是“曾经TECO”,两种需求对应的代码条件完全不同。当前TECO用inactive='',曾经TECO则要去查JCDO。

5.3 报工状态和收货/入库状态经常错位

CNF代表报工确认,DLV或GMPS类状态代表物料流动,这两个状态在JEST里可能不是同一时间出现。很多装配行业是“先报工后入库”,也有“先入库后补报工”的例外流程。状态取值的报表如果只盯着CNF,很可能会漏掉那些已经入库但报工还未补齐的订单,这会直接影响月末结算和成本分析的准确性。

5.4 生产订单状态在接口场景里的典型问题

做过生产订单同步给MES或上下游系统的人,都会碰到状态字段映射问题。标准接口表里未必有“状态集合”这个结构,通常只能输出一个状态文本串,比如“REL CNF DLV”。碰到这种情况,我建议按照业务优先级把状态拼接,而不是简单罗列。比如对方系统只关心“能否下发”,那就只取REL和TECO;如果还关心“是否完工”,就要加CNF和DLV。无序罗列会让对方系统做判断时非常棘手,在接口文档里定义好状态优先级规则,比在代码里打补丁靠谱得多。

6. 状态取值高频问题和排查技巧

最后这部分是我踩过最多坑的地方,每个都能直接对上实际报错或结果异常,建议收藏当速查表。

6.1 同一个订单在JEST表里查出来几十条记录,正常吗?

正常。因为JEST保存的是状态集合加历史记录,包括当前有效状态和INACT置X的历史状态,再加上系统状态和用户状态叠加,几十条完全可能。千万不要试图“只取一条”。你需要做的永远是明确过滤条件:

对象号确定的情况下,先用inactive=''过滤当前有效状态,再按TJ02T翻译,最后按状态文本去判断。

6.2 为什么订单明明TECO了,报表里还是被业务叫“没关完”?

大概率是你把TECO和CLSD的条件写反了,或者漏掉了用户状态。订单可以先TECO后CLSD,也可以TECO后一直不CLSD。TECO和CLSD是两种状态,别把她们划等号。报表要分开展示,或者按业务需求明确哪个才算“关完”。

6.3 为什么SQL用NOT IN排除TECO状态,结果全是空?

这是新手最多出现的问题。NOT IN子查询中,只要结果集包含空值,最终结果就会是空集。排除多个状态,一定要用NOT EXISTS。我在第4.2节已经给出了完整写法,直接抄就行。另外,如果你的过滤条件是“订单状态不等于TECO”,这种写法从逻辑上就不成立,因为一个订单可以同时存在TECO和其他状态,你得用“不包含某个状态”来表达。

6.4 用户状态查不到,是不是判断条件错了?

先排查三件事。一是状态配置文件是否分配给了对应的生产订单类型,往往配置没生效时自定义状态根本不会打上去;二是在JEST里的STAT前缀是不是E开头,如果业务是用系统状态代替了用户状态,你的分析要跟着调整;三是用户状态也可能被置为INACT=X,查询时同样需要过滤。最常见的配置问题在OPJH或OPJK这些订单类型参数里,用户状态配置文件没有正确分配,JEST里自然不会有预期记录。

6.5 状态函数读取正常,但JEST直接查却少一条记录,为什么?

注意STATUS_READ默认可能只读活动状态,或者读的是经过状态参数合成后的“结果状态”,而JEST直接查询看到的是底层状态集合。两者之间在特定场景下会有差异,比如状态被抑制、状态被替代、用户状态配置为“非排他”。所以不要得出“函数是错的”这种结论,建议先确认查询口径:是要底层JEST记录,还是要业务上展示的状态?业务展示以函数或标准事务码为准,底层判断以JEST为准。

6.6 状态取值能直接用于财务结算判断吗?

慎用。财务判断订单是否可结算,通常更依赖结算规则、差异、成本归集情况,而不是单纯看TECO状态。TECO状态只是一个业务操作信号,如果操作不规范,它可能过早或过晚出现。我在项目里见过财务回冲单子,明明订单还没CNF却被TECO,导致后续成本处理一团乱。状态取值对财务报表而言,更适合做参考维度,而不是唯一依据。

6.7 状态取值和MRP相关?提醒一句MD04/MD07的误区

时常有人把状态和MD04/MD07的可用数量混在一起。生产订单状态会影响MRP对订单的认知,比如TECO的订单不再参与MRP运算,但MD04/MD07更关注的是订单是否下达、是否已完全收货、是否存在例外消息。取值时不要把“TECO”直接等同于“MRP不考虑”,还得看订单数量和收货数量是否匹配,否则你可能漏掉部分交货状态下的剩余数量需求。

6.8 状态时区、切换顺序和JCDO审计需求

JCDO里能查到状态变化的日志,但要注意它记录的是状态信息记录,不是操作事务日志。里头有DATUV、变更用户,但具体是谁通过哪个T-Code触发,可能需要再关联其他审计表。时间精度上,JCDO比JEST的DATUV更细,JEST的DATUV只精确到日期,JCDO通常记录到精确时间。

我在实际处理审计类需求时,会同时拉JEST和JCDO,JEST看当前状态集合,JCDO看状态变化轨迹。两边结合,才能回答业务“这个订单为什么变成TECO、什么时候变的、谁干的”。

结束前的一点个人体会

这套状态取值逻辑,我前前后后用了很多年,最大的感悟就是:SAP状态机制的设计是“集合”而不是“字段”,所有试图把它压成单一值的做法,最终都会在复杂业务场景下出问题。我现在的习惯是,凡是涉及状态的报表和接口,先定义口径,再写技术方案,而且一律通过TJ02T翻译状态编号,绝不硬编码。这样即使项目后续增强了用户状态、换了系统版本,代码依然能跑,业务逻辑也依然能解释得通。

最后分享一个小技巧:如果你们项目里状态判断逻辑要被很多地方复用,别把SQL撒得到处都是。封装一个通用的状态读取函数,输入订单号输出状态文本串和关键状态标志位,比如IS_TECO、IS_CLSD、IS_RELEASED,开发维护起来会轻松得多。这个函数做好了,PP顾问、ABAP顾问、甚至BASIS查看问题都会来问你复用,而不是各自写一份带坑的判断逻辑。

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

U盘DOS启动盘制作与BIOS刷写实战:老电脑升级UEFI指南

/* 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 7:38:41

Python批量下载Sentinel-2数据:2024年CDSE新接口与避坑指南

/* 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 7:38:41

嵌入式偶发故障三大诊断法:换机、录屏、批次对照

/* 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 7:38:41

Source Insight 使用教程:嵌入式代码阅读与符号跳转配置指南

/* 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 7:38:23

智能车竞赛卡丁快跑组:从感知到人车交互的自动驾驶实战指南

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

作者头像 李华