跨工厂展开BOM函数(开发笔记)

跨工厂展开BOM函数

1.根据预测物料+供货工厂,展开该预测物料的多层BOM表取得子件单个用量 ,子件清单中包含预测物料本身,预测物料供货工厂                       
展开BOM子件过滤条件:                            
A.固定标记FMENG为空                            
B.终止组NFEAG为空                            
C.优先级ALPRF为空或者为1                            
2.根据BOM展开的特殊采购类型做以下判断                            
A.如果特殊采购类型为空的子件不做处理                            
B.如特殊采购类型为31,则子件供货工厂=1202,该子件需到1202 工厂继续展开BOM得到该子件的BOM多层展开物料清单                            
C.如特殊采购类型不为空且不等于31,则通过子件供货工厂+特殊采购类型到表T460A获取WRK02转储工厂                            
如转储工厂不为空,则更新子件发货工厂为转储工厂;                            
再根据该子件+子件发货工厂到生产版本表MAKL 取出有效期范围包含查询日期  且 可选BOM  STALT 不为空数据行                            
如果有数据,则根据子件+子件供货工厂 继续展开BOM,得到下一层的                            

FUNCTION ZFCS_BOM_EXPL_MAT.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(I_MATNR) TYPE  MATNR
*"     VALUE(I_WERKS) TYPE  WERKS_D
*"     VALUE(I_EMENG) TYPE  BASMN
*"  TABLES
*"      STB STRUCTURE  STPOX OPTIONAL
*"----------------------------------------------------------------------
  DATA:TOPMAT  LIKE CSTMAT .
  DATA:DSTST   LIKE CSDATA-XFELD .
  DATA:STB_L   LIKE STPOX OCCURS 0 WITH HEADER LINE  .
  DATA:LV_T460A TYPE T460A  .
  DATA:LV_MKAL  TYPE MKAL  .
  DATA:LV_MARC  TYPE MARC  .
  DATA:LV_FLAG  TYPE C  .
  DATA:MATCAT  LIKE CSCMAT OCCURS 0 WITH HEADER LINE  .

  CLEAR STB[] .
  CLEAR MATCAT[] .
  CLEAR TOPMAT .
  CLEAR DSTST .
  CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'
    EXPORTING
      CAPID                 = 'PP01'
      DATUV                 = SY-DATUM
      MTNRV                 = I_MATNR
      MEHRS                 = ''
      WERKS                 = I_WERKS "
      EMENG                 = I_EMENG "需求数量
      RNDKZ                 = '1'
    IMPORTING
      TOPMAT                = TOPMAT
      DSTST                 = DSTST
    TABLES
      STB                   = STB "展开的BOM存放在该内表
*     MATCAT                = MATCAT "下面含有元件的物料存放在该内表
    EXCEPTIONS
      ALT_NOT_FOUND         = 1
      CALL_INVALID          = 2
      MATERIAL_NOT_FOUND    = 3
      MISSING_AUTHORIZATION = 4
      NO_BOM_FOUND          = 5
      NO_PLANT_DATA         = 6
      NO_SUITABLE_BOM_FOUND = 7
      CONVERSION_ERROR      = 8
      OTHERS                = 9.

*  CALL FUNCTION 'ZFCS_BOM_EXPL_MAT_SUB'
*    EXPORTING
*      I_MATNR = I_MATNR
*      I_WERKS = I_WERKS
*      I_EMENG = I_EMENG
*    TABLES
*      STB     = STB[].


  DELETE STB WHERE FMENG IS NOT INITIAL
                OR NFEAG IS NOT INITIAL
                OR ( ALPRF <> 1 AND ALPRF <> '' )
                .

  LOOP AT STB WHERE ZFLAGL IS INITIAL.
*    CLEAR lv_marc .
*    SELECT SINGLE sobsl INTO lv_marc-sobsl FROM marc
*              WHERE werks = stb-werks
*                AND matnr = stb-idnrk
*                .
    IF STB-SOBSL IS NOT INITIAL.
      CLEAR LV_FLAG .
      IF STB-SOBSL <> '31'.
        CLEAR LV_T460A .
        SELECT SINGLE WRK02 INTO LV_T460A-WRK02 FROM T460A
          WHERE WERKS = STB-WERKS
            AND SOBSL = STB-SOBSL
            .
        IF LV_T460A-WRK02 IS NOT INITIAL.
          STB-WERKS = LV_T460A-WRK02.
          CLEAR LV_MKAL .
          SELECT SINGLE * INTO CORRESPONDING FIELDS OF LV_MKAL FROM MKAL
            WHERE MATNR = STB-IDNRK
              AND WERKS = STB-WERKS
              AND BDATU >= SY-DATUM
              AND ADATU <= SY-DATUM
              AND STLAL <> ''
              .
*          IF LV_MKAL IS NOT INITIAL.
*            LV_FLAG = 'X'.
*          ENDIF.
        ENDIF.
      ENDIF.
    ENDIF.

*    IF lv_flag IS INITIAL.
    CLEAR STB_L[] .
    CLEAR TOPMAT .
    CLEAR DSTST .
    CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'
      EXPORTING
        CAPID                 = 'PP01'
        DATUV                 = SY-DATUM
        MTNRV                 = STB-IDNRK
        MEHRS                 = ''
        WERKS                 = STB-WERKS "
        EMENG                 = STB-MNGLG "需求数量
        RNDKZ                 = '1'
      IMPORTING
        TOPMAT                = TOPMAT
        DSTST                 = DSTST
      TABLES
        STB                   = STB_L[] "展开的BOM存放在该内表
      EXCEPTIONS
        ALT_NOT_FOUND         = 1
        CALL_INVALID          = 2
        MATERIAL_NOT_FOUND    = 3
        MISSING_AUTHORIZATION = 4
        NO_BOM_FOUND          = 5
        NO_PLANT_DATA         = 6
        NO_SUITABLE_BOM_FOUND = 7
        CONVERSION_ERROR      = 8
        OTHERS                = 9.

*        CALL FUNCTION 'ZFCS_BOM_EXPL_MAT_SUB'
*          EXPORTING
*            I_MATNR = STB-IDNRK
*            I_WERKS = STB-WERKS
*            I_EMENG = STB-MNGLG
*          TABLES
*            STB     = STB_L[].

    IF STB_L[] IS NOT INITIAL.
      DELETE STB_L WHERE FMENG IS NOT INITIAL
                      OR NFEAG IS NOT INITIAL
                      OR ( ALPRF <> 1 AND ALPRF <> '' )
                      .
      APPEND LINES OF STB_L TO STB.
    ENDIF.

    IF STB-SOBSL = '31'.
      IF STB-WERKS <> '1202'.
        STB-WERKS = '1202'.
        APPEND STB.
        STB-ZFLAGL1 = 'X'.
      ENDIF.
    ENDIF.

    STB-ZFLAGL = 'X'.
    MODIFY STB .
    CLEAR STB.
  ENDLOOP.

  DELETE STB WHERE ZFLAGL1 IS NOT INITIAL .
  LOOP AT STB .
    CLEAR STB-ZFLAGL.
    MODIFY STB TRANSPORTING ZFLAGL.
    CLEAR STB.
  ENDLOOP.

ENDFUNCTION.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值