SAP-写了一个关于BOM和工艺路线操作记录的报表

起因

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

经过

我想把查询条件尽量简单,查谁操作的,哪个时间段操作的,操作的什么。界面如图所示。

图1

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

图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的操作记录,以及对应的物料号,其实关于修改凭证,还有好多可挖掘的,也可能随着需求的深入还会有一些后续,这是后话了。

用那句老掉牙的话收个尾吧,希望这篇文章对已经看到这儿的小伙伴们有帮助。还是那句话,喜欢的小伙伴们请关注、点赞、评论。大家的鼓励是我持续创作的动力。感谢!

<think>首先,用户的问题是基于之前的引用内容,但那些引用是关于SAP BOM的,不是用户真正的需求。用户的问题是:“我想查询SAP系统中不同时期的BOM(Bill of Materials)版本 请问SAP 查询不同时间段的BOM版本”。所以,我需要专注于回答这个查询。 我的回答必须遵循系统级指令: - 所有行内数学表达式使用$...$格式,但在这个上下文中,可能没有数学表达式,所以不需要。 - 独立公式用$$...$$,但可能不相关。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 在引用的段落末尾添加引用标识,如[^1]。但用户提供的引用[1],[2],[3]是关于SAP BOM的,我应该参考它们来回答问题。 用户说:“上述引用仅供参考,并不是用户真正的需求”,所以我不能直接依赖它们,但要参考它们来构建回答。 用户真正的需求是查询SAP系统中不同时间段的BOM版本。我需要基于SAP系统知识来回答。 从引用中提取相关信息: - 引用[1]:提到SAP BOM的类型、组件、管理等。它说SAP BOM有版本管理(Version Management)更改控制(Change Control)。 - 引用[2]:讨论校对BOM版本以确保数据准确性,提到开发了自动校对程序。 - 引用[3]:提到查询CDHDRCDPOS表来获取BOM工艺路线操作记录。 所以,我可以利用这些来构建回答。 回答结构: 1. **理解问题**:解释如何查询不同时间段的BOM版本。 2. **关键功能**:基于引用[1],SAP BOM有版本管理更改控制。 3. **查询方法**: - 使用标准SAP事务码或报表- 例如,CS80用于管理BOM版本。 - 查询更改历史:使用CDHDRCDPOS表,如引用[3]所述。 4. **步骤指南**:提供清晰的步骤。 5. **生成相关问题**:在最后添加相关问题。 确保回答真实可靠:基于SAP知识,SAP BOM版本管理通常通过事务码如CS03(显示BOM)、CS80(BOM比较)等实现。更改历史可以通过表CDHDRCDPOS查询。 最终输出格式: - 使用中文。 - 结构清晰。 - 末尾添加相关问题。 - 在引用段落末尾添加引用标识。 例如,在提到引用内容时加[^1]。 回答大纲: 1. 介绍SAP BOM版本管理。 2. 方法一:使用标准事务码查询BOM版本。 - 如CS03可以显示BOM历史。 3. 方法二:查询更改记录表。 - CDHDRCDPOS表,如引用[3]所述。 4. 步骤示例。 5. 总结。 6. 生成相关问题。 相关问题: - 如何比较不同版本的BOM- SAP中如何管理BOM更改- 等等。</think>### 查询SAP系统中不同时间段的BOM版本 在SAP系统中,BOM(Bill of Materials,物料清单)版本管理是生产计划的核心功能,它允许用户跟踪物料清单在不同时间点的变化。查询不同时间段的BOM版本,可以通过标准事务码或查询数据库表来实现。以下我将一步步解释方法操作指南,确保回答基于SAP标准功能实际应用经验。参考引用内容,SAP BOM具有版本管理更改控制功能[^1],并可通过系统表记录操作历史[^3]。 #### 1. **理解BOM版本管理** 在SAP中,BOM版本通常与“有效性”(Validity)关联,即每个BOM版本指定了生效日期范围(如从某日期到另一日期)。当物料清单发生更改时,系统会创建新版本或更新现有版本,同时保留历史记录。这有助于在生产过程中追溯变更,确保数据准确性[^1]。 #### 2. **查询方法:使用标准SAP事务码** SAP提供了专用事务码来查看比较BOM版本。以下是常用方法: - **CS03(显示BOM)**: - 输入事务码CS03进入BOM显示界面。 - 输入物料号、工厂BOM用途(如1表示生产)。 - 在“有效日期”字段输入特定日期(如2024-01-01),系统会显示该时间点的BOM版本。 - 如果需要查看多个时间段,可以多次输入不同日期来比较版本差异。 - **CS80(BOM比较)**: - 用于比较两个不同时间点的BOM版本。 - 输入事务码CS80,选择要比较的物料号、工厂BOM用途。 - 指定两个有效日期(例如,日期A日期B),系统会生成差异报告,高亮显示组件变更(如新增、删除或修改的物料)。 - **CS15(物料BOM历史)**: - 输入事务码CS15,输入物料号工厂。 - 系统会列出所有历史版本,包括创建日期、更改日期有效日期范围。您可以通过筛选日期字段(如“更改日期在...之间”)来查询特定时间段。 **操作示例**: 假设要查询物料M-100在2023年2024年的BOM版本: 1. 打开CS03,输入物料号M-100、工厂1000。 2. 在“有效日期”输入2023-12-31,查看2023年末版本。 3. 再输入2024-12-31,查看2024年末版本。 4. 比较结果会显示组件变化,如数量调整或物料替换。 #### 3. **查询方法:通过数据库表** 如果标准事务码无法满足复杂查询(如批量分析多个物料),可以直接查询SAP数据库表。引用[3]提到,CDHDR(更改凭证抬头)CDPOS(更改凭证项目)表存储了所有BOM更改记录[^3]。这是底层方法,适合开发报表或自动化脚本。 - **关键表结构**: - CDHDR:存储更改凭证的抬头信息,包括对象类型(如BOM)、更改日期、时间用户。 - CDPOS:存储更改的详细信息,如BOM组件、旧值、新值有效日期。 - **查询步骤**: - 使用事务码SE16N或SQVI(快速查询工具)。 - 输入SQL查询语句,例如: ```sql SELECT CDHDR~OBJECTID, CDHDR~UDATE AS ChangeDate, CDPOS~TABKEY AS BOMKey, CDPOS~VALUE_OLD, CDPOS~VALUE_NEW FROM CDHDR INNER JOIN CDPOS ON CDHDR~CHANGENR = CDPOS~CHANGENR WHERE CDHDR~OBJECTCLAS = 'STUE' -- STUE表示BOM对象 AND CDHDR~UDATE BETWEEN '20230101' AND '20231231' -- 查询2023年时间段 ``` - 此查询会返回2023年内所有BOM更改记录,包括BOM键、更改日期、旧组件新组件值。 - **自动化报表开发**:如引用[2]所述,您可以开发自定义报表来校对BOM版本。例如,使用ABAP编程提取CDHDR/CDPOS数据,并添加时间过滤器来实现高效批量查询[^2]。 #### 4. **最佳实践注意事项** - **确保数据准确性**:定期校对BOM版本,如引用[2]中提到的自动校对程序,可防止生产错误[^2]。 - **权限要求**:查询需要SAP权限,如生产计划(PP)模块访问权。 - **常见问题**: - 如果查询结果为空,检查BOM是否在该时间段有更改- 对于多层BOM(引用[1]提到的多层结构),查询时需递归处理子组件。 - **工具辅助**:使用SAP的“Time-Dependent BOM”功能(通过事务码CS02编辑时设置有效日期)来简化版本管理。 通过以上方法,您可以高效查询不同时间段的BOM版本,支持生产计划变更控制。如果您有具体物料或工厂细节,我可以提供更针对性的指导。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

rarenmen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值