起因
技术部门要量化考核技术员的工作量。想查各个技术员在系统里新增和修改了多少BOM或者工艺路线,于是做了这个报表。我认为的难点是虽然找到了CDHDR(更改凭证抬头)和CDPOS(更改凭证项目)这两张透明表之后,怎么分析出记录的是和哪个物料相关的,操作的是BOM还是工艺路线。经过了一系列的分析和验证,完成了以上的需求,特此把其中一些数据之间的关联关系记录下来,希望能帮助到有相关需求的小伙伴。
经过
我想把查询条件尽量简单,查谁操作的,哪个时间段操作的,操作的什么。界面如图所示。

结果页面我也尽量做了简化。展示哪个用户在什么时候,通过哪个事务码,改了哪个物料的哪部份信息。界面如图2。

然后是数据从哪取的问题,DEEPSEEK告诉我,可以看CDHDR(更改凭证抬头)和CDPOS(更改凭证项目)这两张透明表。这两张表的格式可以去SAP数据字典【查询语句进行了完善】_sap hana 数据字典-CSDN博客里看一看。
第一个问题是在CDHDR里,哪些记录代着改了什么,是通过OBJECTCLAS区分的。比如说,STUE和STUE_V的,是和修改BOM有关的记录; PLAN和 CLASSIFY的,是和修改工艺路线有关的记录。这里不能通过TCODE的内容去判断记录的什么记录,我见过有OBJECTCLAS = 'STUE',TCODE = ‘SE38’的记录。在我做的报表里,基本就是按以上原则去判断是修改BOM的记录还是修改工艺路线的记录的。由于OBJECTCLAS = 'STUE'的记录和OBJECTCLAS = 'STUE_V'的记录,从日期和时间上判断是成对出现的,因此我在报表里只是取了OBJECTCLAS = 'STUE'的记录。
至于改了什么内容,要看对应的CDPOS里的数据。它和CDHDR通过OBJECTCLAS、OBJECTID、CHANGENR关联。CDHDR里的一条记录,可能在CDPOS里对应了若干条记录,至于记录的什么,老实说我没有具体分析,这里主要针对我涉及到的各种情况说说怎么找到对应的物料的。
这里有必要说一下我发现的CDPOS-TABKEY值的逻辑,它的值是把TABNAME里写的表的“键”的字段,按顺序的组合。
先说CDHDR-OBJECTCLAS in ( 'STUE' )的,就是我认为是BOM修改记录的记录。在对应的CDPOS里的记录里,看有没有TABNAME = 'MAST'的记录,因为如果有MAST的表的记录,在TABKEY表里就能直接找到物料号。其它的,TABNAME in ( 'STKO', ' STPO' , 'STUZ' ),以及和工艺路线有关的记录,TABNAME in ( ' MAPL', ' PLKO' , 'PLPO', ' PLKZ' )这些,都可以按以上的方法去拆解对应的KEY,MAPL和MAST同样,都可以直接拆出来物料号。无非PLPO和PLKZ复杂一点儿,需要到PLKO里找PLNAL,然后再关联到MAPL表里去找物料号。
这里想说有两个特殊的,CDPOS-TABNAME in ( 'ABAUSP', ' ABKSSK' )的,记录的是工艺路线的特性值的操作记录。这里的'ABAUSP', ' ABKSSK'是两个结构。
TABNAME in ( ABAUSP')的TABKEY,拆解出的是OBJEK、ATINN、ATZHL、MAFID,TABNAME in ( ABKSSK')的TABKEY,对应的是OBJEK、ATINN、ATZHL、MAFID。这一步主要是拿到了ATINN,接下来就可以到INOB表里找对应的记录,前面拿到的OBJEK要和INOB-CUOBJ去关联,这里主要用到INOB-OBJEK和INOB-OBTAB,判断OBTAB,如果OBTAB = 'PLKO', 那么用INOB-OBJEK拆分出来PLNTY、PLNNR、PLNAL,去找对应的MAPL表里的记录,获取物料号。如果OBTAB = 'PLPO',那么用INOB-OBJEK拆分出来PLNTY、PLNNR、PLNKN,这里缺少PLNAL,需要先用PLNTY、PLNNR作为条件到PLKO里获取到PLNAL,再去MAPL表里取物料号。
结果
以上过程看似不长,但可借鉴的材料非常少,摸索的过程大概消耗了三周,所以我觉得还是有必要记录它一下的。代码我写的有些乱,而且前后逻辑不是很一致,就不往外贴了。看到这里的小伙伴,如果还有疑问,可以私信我。以上我只挖掘了工艺路线、BOM的操作记录,以及对应的物料号,其实关于修改凭证,还有好多可挖掘的,也可能随着需求的深入还会有一些后续,这是后话了。
用那句老掉牙的话收个尾吧,希望这篇文章对已经看到这儿的小伙伴们有帮助。还是那句话,喜欢的小伙伴们请关注、点赞、评论。大家的鼓励是我持续创作的动力。感谢!