SAP各種BOM詳解(包含常用BAPI)

kudcon發表於2021-03-02

生產訂單BOM、銷售訂單BOM、標準BOM

生產訂單BOM ,跑生產訂單時,子元件體現作用 。

銷售訂單BOM ,跑MRP 時體現子元件的作用 。
在這裡插入圖片描述

rcdf應用:真空管損耗率。

             銷售bom zpp020 

 CLEAR: L_STLNR.
        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'.

 IF L_BMENG IS NOT INITIAL.
              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 : 順序號

相關文章