ABAP BOM 展开 CS_BOM_EXPL_MAT_V2

tcode cs12 可以展开BOM 

程序展开BOM 的函数则是 CS_BOM_EXPL_MAT_V2

 实现多级展开实例--

*  - 1  取物料BOM信息
  SELECT stko~stlty
         stko~stlnr
         stko~labor
         stko~stktx
         mast~matnr
         mast~werks
         mast~stlan
         mast~stlal
         stko~stlst
         stko~bmeng
         stko~bmein
    INTO CORRESPONDING FIELDS OF TABLE it_stpu
    FROM mast
    JOIN mara ON mast~matnr = mara~matnr
    INNER JOIN stko ON mast~stlnr = stko~stlnr AND mast~stlal = stko~stlal
   WHERE mast~werks EQ p_werks
     AND mast~matnr IN s_matnr
     AND mast~stlan = p_stlan
     AND mara~mtart = 'FG'
     AND stko~stlst IN s_stlst
     AND stko~stlty EQ 'M'
     AND stko~datuv <= p_datuv.

循环第一层物料,针对第一个物料M1 展开BOM 放进内表A,loop A表,逐个展开中物料追加到A表,直到M1下级完全展开,再进行物料M2

逐步扩大A表。

2,逐个物料展开 追加到内表

  n1 = 1.
  LOOP AT it_stpu.  “
*- BOM展开
    CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'
      EXPORTING
        auskz                 = 'X'
        emeng                 = it_stpu-bmeng
        capid                 = 'PP01'        " Application ID
        datuv                 = p_datuv        " Validity date
        werks                 = p_werks        " Plant
        mtnrv                 = it_stpu-matnr  " Material
        stlan                 = p_stlan            " BOM usage
        mehrs                 = '' "l_mehrs        " Multi-level explosion
      TABLES
        stb                   = it_stpox
      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.

    IF sy-subrc = 0.

      LOOP AT it_stpox.
        n1 = sy-tabix.
        CLEAR gt_maktx.
        READ TABLE gt_maktx WITH KEY matnr = it_stpox-idnrk BINARY SEARCH.
        IF gt_maktx-mtart = 'COMP' AND gt_maktx-werks <> ''."半成品取自制件工厂BOM
          it_stpox-werks = gt_maktx-werks.
          MODIFY it_stpox.
        ENDIF.
        "取下阶
        CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'
          EXPORTING
            auskz                 = 'X'
            emeng                 = it_stpox-mnglg
            capid                 = 'PP01'        " Application ID
            datuv                 = p_datuv        " Validity date
            werks                 = it_stpox-werks        " Plant
            mtnrv                 = it_stpox-idnrk  " Material
            stlan                 = p_stlan            " BOM usage
            mehrs                 = '' "l_mehrs        " Multi-level explosion
          TABLES
            stb                   = it_stpox1
          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.
        LOOP AT it_stpox1.
          n1 = n1 + 1.
          it_stpox1-stufe = it_stpox-stufe + 1.
          INSERT it_stpox1 INTO it_stpox INDEX n1.
        ENDLOOP.

        MOVE-CORRESPONDING it_stpox TO itab.
        MOVE : it_stpu-matnr TO itab-matnr,
               it_stpu-bmeng TO itab-bmeng,
               it_stpu-bmein TO itab-bmein,
               it_stpox-ojtxp TO itab-makta,"组件物料描述
               it_stpox-matkl TO itab-matkl,
               it_stpox-stufe TO itab-stufe.
        IF it_stpox-alpgr = ''.
          itab-ewahr = 100.
        ENDIF.
        IF it_stpox1[] IS NOT INITIAL.
          itab-nexts = 1."有下阶
        ENDIF.
        itab-menge = it_stpox-mnglg."MNGLG包含报废 * ( 1 + it_stpox-ausch / 100 )."考虑报废率
        APPEND itab.

        CLEAR r_matnr.
        r_matnr(3) = 'IEQ'.
        r_matnr-low = it_stpox-idnrk.
        COLLECT r_matnr.

        CLEAR it_stpox1[].

        CLEAR : itab, it_stpox.
      ENDLOOP.
    ENDIF.
    CLEAR: it_stpox[].

  ENDLOOP.

  IF itab[] IS INITIAL.
    MESSAGE i208(00) WITH '没有符合条件的数据,请重新输入!'.
    STOP.
  ENDIF.

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值