生产订单BOM、销售订单BOM、标准BOM
SELECT SINGLE MAST~STLNR
INTO L_STLNR
FROM MAST
WHERE MAST~MATNR = WA_OUTPUT-MATNR
AND MAST~WERKS = WA_OUTPUT-WERKS
AND MAST~STLAN = '1'
.
IF SY-SUBRC = 0. "存在该BOM
CLEAR: L_MENGE.
SELECT SINGLE STPO~STLNR STPO~MENGE
INTO (L_STLNR,L_MENGE)
FROM STPO
WHERE STPO~STLNR = L_STLNR
AND STPO~STLTY = 'M' "物料BOM
AND STPO~SORTF = '1240' "排序字符串
.
IF SY-SUBRC = 0. "可以定位到1240的排序字符串记录
*--------------------------------------------------------
* 使用该报费率创建生产BOM,并返回物料单(BOM)
* 输入参数报废率 L_KBETR 工厂 WA_OUTPUT-WERKS BOM创建日期 当前月初 SY-DATUM
CONSTANTS: CNS_MODE TYPE C VALUE 'N',
CNS_TCODE TYPE TCODE VALUE 'CS61'.
L_MENGE = ( L_MENGE + L_MENGE * L_KBETR2 / 100 ) * WA_OUTPUT-KWMENG / L_BMENG. "组件数量 = 原组件数量*S.O数量*报废率/表头基本数量
L_MENGE_INT = L_MENGE.
WRITE L_MENGE_INT TO L_MENGE_CHAR.
ENDIF.
CALL TRANSACTION CNS_TCODE USING BDCDATA[]
MODE CNS_MODE
UPDATE 'S'
MESSAGES INTO BDCMSGCOLL[].
BOM: 是實際生產時用的BOM, 在標準BOM和銷售BOM基礎上增減物料的BOM
銷售BOM: 是為特定客戶設定的BOM, 在主檔數據層次上的BOM, 在生產時是帶到訂單BOM中去的.
標準BOM: 是公司為標準生產的BOM, 在主檔數據層次上的BOM, 在生產時是帶到訂單BOM中去的.
訂單BOM >= 銷售BOM >= 標準BOM
一般使用中:
訂單BOM是在銷售BOM的基礎或標準BOM基礎上添加部分物料或減少或修改實際需求數量,
銷售BOM是在標準BOM基礎上增加特定客戶需要的BOM, 例如顏色,
標準BOM是公司在標準生產中使用的BOM, 通常由工程設計BOM產出再進行修正, 在SAP的標準成本計算是需要用到的.
工程設計BOM(應該很少公司用)是工程設計的BOM, 即將工程師畫的爆炸圖進行系統化.
SAP還有幾種BOM.
標準BOM維護: CS01/CS02/CS03, 查詢CS12
銷售BOM維護: CS61/CS62/CS63, 查詢CSK2
訂單BOM維護: CO01/CO02/CO03
銷售BOM使用前提是產品必須是MAKE TO ORDER, 否則系統在展開BOM時只會拿標準BOM, 不會拿銷售BOM的數據.
標準BOM的表: MAST
銷售BOM的表: KDST
訂單BOM的表: 沒有, 我的理解就是RESB中工單需求清單
在MTO方式来说,才会产生销售订单BOM。业务部门根据客户要求,配置产生的成品特性,从而自动从标准的最大BOM中选择组件,生成销售订单BOM
这其中就明确了两个概念,销售订单BOM是在建立配置特性的基础上的,从最大化的标准BOM中选择相关特性限制的组件而产生的BOM。可以说,销售BOM是标准BOM的一个特例。这时候的标准BOM罗列了所有可能的配置。
订单BOM则是生产中使用的BOM,是MRP根据销售订单配置和标准BOM计算产生的BOM,订单BOM在下达生产之前,可以通过计划员的调整以及设置替代,更换组件或数量,而下达时依此生产的BOM。此BOM用于生产和发料,并是成本BOM的直接来源。
----------------------------------------------
CS_BOM_EXPL_KND_V1 展销售订单bom
CS_BOM_EXPL_MAT_V2 展物料bom
CS_BOM_EXPLOSION
CS_BOM_EXPLOSION_EQUI
CS_BOM_EXPLOSION_MAT
CS_BOM_EXPL_EQU_V2
CS_BOM_EXPL_KND_V1
CS_BOM_EXPL_MAT_V2
CS_BOM_EXPL_PSP_V1
CS_BOM_EXPL_TPL_V1
输出未激活的BOM的function
CSAP_MAT_BOM_READ
15 .函数CS_WHERE_USED_MAT(逆查BOM)
说明﹕取的物料的上层物料
CALL FUNCTION 'CS_WHERE_USED_MAT'
EXPORTING
datub = sy-datum
datuv = sy-datum
matnr = t_afru-matnr
* POSTP = ' '
* RETCODE_ONLY = ' '
* STLAN = ' '
werks = '1000'
* IMPORTING
* TOPMAT =
TABLES
wultb = ltb
equicat = equicat
kndcat = kndcat
matcat = matcat
stdcat = stdcat
tplcat = tplcat
EXCEPTIONS
call_invalid = 1
material_not_found = 2
no_where_used_rec_found = 3
no_where_used_rec_selected = 4
no_where_used_rec_valid = 5
OTHERS = 6.
参数﹕datub: 当前日期
datuv: 当前日期
matnr: 要找回上层BOM物料的物料
werks: 工厂通常取’1000’
wultb: 所有的上层BOM物料存放在该表中(该表结构固定)
equicat: 固定结构﹐一定要
kndcat : 固定结构﹐一定要
matcat: 固定结构﹐一定要
stdcat : 固定结构﹐一定要
tplcat : 固定结构﹐一定要
示例: ZBAK_ZPP000222_LSL
BOM 展开函数(顺查BOM)
16 .只展开 BOM 的函数
CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'
EXPORTING
capid = pm_capid “应用程序 一般为 PP01
datuv = pm_datuv “通常为系统的当前日期
mtnrv = pm_mtnrv “要展开BOM 的物料
mehrs = 'X' “ x 表示多层展开﹐space 表示只展开第一层
werks = pm_werks “ 通常为 1000
IMPORTING
topmat = selpool
dstst = dstst_flg
TABLES
stb = stb “展开的 BOM 存放在该内表
matcat = matcat “下面含有组件的物料存放在该内表
17 .展开与特性相关的特定款号的 BOM
CALL FUNCTION 'CS_BOM_EXPL_ KND_V1'
EXPORTING
capid = pm_capid “应用程序 一般为 PP01
datuv = pm_datuv “通常为系统的当前日期
mtnrv = pm_mtnrv “要展开BOM 的物料
cuobj = vbap_wa-cuobj “与特性相关的组态
mehrs = 'X' “ x 表示多层展开﹐space 表示只展开第一层
werks = pm_werks “ 通常为 1000
IMPORTING
topmat = selpool
dstst = dstst_flg
TABLES
stb = stb “展开的 BOM 存放在该内表
matcat = matcat “下面含有组件的物料存放在该内表
范例见系统报表程序 RCS12001
1 说明﹕内表 stb, matcat 结构固定, 输出参数 selpool , dstst_flg 固定,
其固定结构如下:
内表:
DATA: BEGIN OF stb OCCURS 1000.
INCLUDE STRUCTURE stpox.
DATA: END OF stb.
DATA: BEGIN OF matcat OCCURS 50.
INCLUDE STRUCTURE cscmat.
DATA: END OF matcat.
输出参数:
DATA: BEGIN OF selpool.
INCLUDE STRUCTURE cstmat.
DATA: END OF selpool.
DATA: dstst_flg LIKE csdata-xfeld.
2 说明﹕内表 stb 中的数据按第一层顺序号排序﹐如第一层组件下还有BOM,
则其BOM显示在其下面﹐并依次分层(下面BOM 也按顺序号排列)
stb 下的重要字段说明如下﹕
stufe : 在整个 BOM 中的层次
tdidx : 对应 matcat-index ﹐标志直属哪个物料下的 BOM
ojtxb : 上层物料的物料说明
ojtxp : 本身物料说明
idnrk : 组件名(即物料)
stlkn : 在各自 BOM 中的顺序号
matkl : 该物料群组
mtart : 物料类型 (成品﹐半成品﹐原料)
matcat 下的重要字段 (表matcat 存放下面还有BOM 的物料)
matnr : 物料号
index : 顺序号