# SAP小技巧 BOM数据查询
原创 无峰 [ ABAP 技巧与实战 ](javascript:void\(0\);)
__ _ _ _ _
**点击蓝字** 关注我们
一
前言
BOM(物料清单)是SAP中一个基本概念,
用于把产品(或半成品)与原材料(或半成品)构筑关系.在生产,采购,销售等环节可以通过展开获取产品对应的原材料的内容.
**本文主要介绍BOM相关的内容并尝试通过视图实现BOM清单查询**
_本文为了详述BOM分析过程,写的比较啰嗦. 可以跳过相关章节阅读,文末付费部分是视图源代码,截图中已经包含._
二
标准功能
CS01/CS02/CS03 用于创建/修改/显示BOM
输入 物料/工厂/BOM用途/
备选物料清单 (可以理解为BOM的版本,BOM抬头/明细内容查询也依赖与备选物料清单值)
三
相关表
暂未收录其它特殊业务的BOM相关表,只考虑了BOM基本数据表
• MAST BOM 链接物料
• STKO BOM 表头
• STAS BOMs - 项选择
• STPO BOM 项目
表之间的基本关系
视图ZV_BOM
四
创建/修改过程
记录了BOM创建/修改的全过程及对应表的内容,以便分析数据变化的特点及数据关系.
过程有点啰嗦,如果你熟悉这个过程, 可以跳过本章节
_**01** _
**初始状态的BOM**
下面是一个新创建的BOM及BOM相关表的内容.
_**02** _
**备选BOM**
创建一个新的备选BOM后的相关表内容
创建备选,从下图可以看出, 备选作为关键字, 增加了一组属于备选的内容(此时MAST 不能直接关联STPO了,可以关联STAS 再关联STPO)
_**03** _
**BOM的变更**
BOM的变更有两种方式
• 无变更号的变更
• 有变更号的变更
无变更号变更就是在原数据上修改内容,表内容和新建时大概一致,无需赘述.
系统可以通过变更号记录BOM的变更情况, (类似与定价,新增的数据会记录不同的开始/结束日期,可以查询不同日期的定价).BOM的变更也有期间概念,
只是这个期间依赖与BOM变更号存在,并且没有明确的结束日期(下次变更的开始日期作为前面记录的结束日期)
_**04** _
**变更号的创建/修改**
CC01/CC02/CC03创建/修改/显示变更号
创建如下变更号,为了方便后续查询,使用如下名称规则命名
• TEST_H 测试BOM抬头变更
• TEST_H_2 测试BOM抬头变更2
• TEST_H_3 测试BOM抬头变更3
• TEST_I 测试BOM行项目变更
• TEST_I_2 测试BOM行项目再次变更
_**05** _
**变更号所在的表**
AENR 更改文档
_**06** _
**使用变更号修改BOM**
有些变更号不能修改BOM抬头的数量,有些变更号可以修改
新建一个TEST_H_3 , 如果TEST_H_3和TEST_H_2的有效开始日期一致, 将无法修改抬头基本数量.
如果TEST_H_3日期和之前的日期不一致, 则允许修改抬头基本日期( 估计不希望同一个日期存在两个基本数量, 这样指定该日期将无法确定抬头数量)
后面记录了每次变更BOM后的各表的数据情况. 过程有点啰嗦.
测试使用TEST_H修改BOM描述,BOM分组,
该变更文档没有记录在STKO中.因为该变更号的有效起始日期与BOM本身的有效起始日期相同,所以无法修改基本数量
变更数据记录在表,该表有BOM分组/BOM描述字段
尝试使用TEST_I变更号修改BOM明细
STKO没变,STAS改变
STPO改变
ZV_BOM数据异常,该异常是因为修改行项目时,STAS中记录了更多变更相关的信息
再次变更行项目 其中0010项目被两次变更
_**07** _
**变更的最终情况**
BOM创建日期 2022-06-29 两个变更号的有效起始日期都是2022-06-30 .
调查变更后, CS03查询BOM时,根据输入的日期不同,出现不同的结果
CS03查询使用不同的日期查询结果不同
CS03如果输入一个日期范围 2022-06-29 -> 2022-06-30 ,可以查询到所有变更的情况
五
标准函数查询
标准函数查询BOM CS_BOM_EXPL_MAT_V2
或 CS_BOM_EXPL_MAT_V2_HANA
结果与CS03一致. 不同的日期查询结果不同.
输入项
CAPID PP01 固定使用
DATUV 2022-06-29 有效日期
MTNRV 254 物料
WERKS 5981 地点
STLAL 2 备选
六
CDS视图
基于上述分析,可以看到 ZV_BOM视图内容在存在变更号变更BOM的情况下,已经无法使用. 需要分析所有数据的特点, 创建新的视图来解决BOM数据查询问题.
有两个思路
• 仅考虑BOM最终生效的内容
• 考虑每个期间BOM的内容
_**01** _
**ZDDL_BOM_M**
ZDDL_BOM_M 作为BOM的最终版本, 如果修改编号的有效开始日期都是过去, 那么使用这个视图可以获取当前及以后BOM的最终版本.
• 使用有效开始日期最大的行作为抬头STKO内容
• 使用有效的STAS内容:通过变更号变更明细后, STAS中会对原行也增加一条记录(有删除标记),把原行合并,保留有删除标记的行,参与数据关联
_**02** _
**ZDDL_BOM_M结果**
对于上述多次变更的BOM 该视图的呈现结果如下图. 如果所有的变更都在过去, 忽略日期因素, 该视图可以获取当前/将来有效的BOM信息
_**03** _
**标准查询功能**
查询历史情况的BOM视图
怎么才能模拟标准功能 CS12(或CS11) 呈现的效果.
如下图, 使用不同的查询日期, 可以查询出不同的结果(这些不同的结果是因为使用变更号修改BOM产生了不同期间的数据)
查询日期 2022-06-29
查询日期 2022-06-30
查询日期2022-07-01
_**04** _
**ZDDL_BOMD**
补充一个视图用来查询历史版本: 补充有效开始/结束日期,使用视图时,需要限制一个日期
最终发现通过STKO的变更行和原行的关联关系,及STPO的变更行和原行的关联关系, 可以计算出行的结束日期.
计算STKO的有效期间
计算STPO的有效期间
整合的视图
_**05** _
**ZDDL_BOMD结果**
分别限制不同的日期, 查询结果和CS03/CS12的结果一致.
.textContent = new Date().getFullYear();