SAP CS01 BADI:BOM_UPDATE

21 篇文章 0 订阅
METHOD IF_EX_BOM_UPDATE~CHANGE_AT_SAVE.
*DELTA_STZUB  Importing CS01_STZUB_TAB
*DELTA_CLRKB  Importing CS01_CLRKB_TAB
*DELTA_CLSTB  Importing CS01_CLSTB_TAB
*DELTA_DOSTB  Importing CS01_DOSTB_TAB
*DELTA_EQSTB  Importing CS01_EQSTB_TAB
*DELTA_KDSTB  Importing CS01_KDSTB_TAB
*DELTA_MASTB  Importing CS01_MASTB_TAB
*DELTA_PRSTB  Importing CS01_PRSTB_TAB
*DELTA_STASB  Importing CS01_STASB_TAB
*DELTA_STKOB  Importing CS01_STKOB_TAB
*DELTA_STPOB  Importing CS01_STPOB_TAB
*DELTA_STPUB  Importing CS01_STPUB_TAB
*DELTA_STSTB  Importing CS01_STSTB_TAB
*DELTA_TPSTB  Importing CS01_TPSTB_TAB
*I_AENNR  Importing AENNR
*I_DATUV  Importing DATUV
*I_STLAL  Importing STLAL

  IF SY-TCODE 'CS02' OR SY-TCODE 'CS01' .
    DATA: WA_STPOB TYPE STPOB.
    DATA: WA_STPOB1 TYPE STPOB.
    DATA: WA_STASB TYPE STASB.
    DATA: BEGIN OF WA_EWAHR,
        ALPGR TYPE CS_ALPGR,
        POSNR TYPE POSNR,
        EWAHR TYPE EWAHR,
        VBKZ TYPE VBKZ,
        ALPRF TYPE CS_ALPRF,
      END OF WA_EWAHR.
    DATA: IT_STPOB LIKE TABLE OF  WA_STPOB.
    DATA: IT_EWAHR LIKE TABLE OF WA_EWAHR.
    DATA: IT_EWAHR_UP LIKE TABLE OF WA_EWAHR.
    DATA: BEGIN OF WA_ALPGR,
        ALPGR TYPE CS_ALPGR,
        EWAHR TYPE EWAHR,
      END OF WA_ALPGR.
    DATA: IT_ALPGR LIKE TABLE OF WA_ALPGR.
    DATA:LV_FLAG TYPE C,
         LV_FLAG1 TYPE C,
         LV_FLAG2 TYPE C,
         LV_ALPGR TYPE CS_ALPGR,
         LV_EWAHR TYPE EWAHR,
         LV_MTART TYPE MTART,
         LV_POSNR TYPE LENGTH 6,
         LV_DATUB TYPE SY-DATUM.
    DATA:WA_MASTB TYPE MASTB.

    " zlgp Alternative item: group not is empty
    LOOP AT DELTA_MASTB INTO WA_MASTB.
      SELECT MTART INTO LV_MTART  FROM MARA
        WHERE MATNR WA_MASTB-MATNR.
      ENDSELECT.
    ENDLOOP.

    CHECK LV_MTART 'ZLGP'.

    " Usage probability percent = 100
    CLEAR:IT_EWAHR_UP,IT_EWAHR_UP[],IT_EWAHR,IT_EWAHR[],LV_FLAG,LV_FLAG1,LV_FLAG2.
    IT_STPOB[] DELTA_STPOB[].
    LOOP AT DELTA_STPOB  INTO WA_STPOB .
      IF WA_STPOB-VBKZ NE 'D'.
*check valid to date
        IF WA_STPOB-VBKZ 'U'.
          READ TABLE IT_STPOB INTO WA_STPOB1 WITH KEY IDNRK WA_STPOB-IDNRK POSNR WA_STPOB-POSNR.
          IF SY-SUBRC EQ 0.
            LOOP AT DELTA_STASB  INTO WA_STASB
                 WHERE STLTY WA_STPOB-STLTY
                  AND STLNR WA_STPOB-STLNR
                  AND STLKN WA_STPOB1-STLKN
                  AND DATUB NE '00000000'.
              IF LV_DATUB '00000000'.
                LV_DATUB WA_STASB-DATUB.
              ELSE.
                IF LV_DATUB < WA_STASB-DATUB.
                  LV_DATUB WA_STASB-DATUB.
                ENDIF.
              ENDIF.
            ENDLOOP.
          ENDIF.
        ELSEIF  WA_STPOB-VBKZ 'I'.
          LV_DATUB I_DATUV.
        ELSE.
          READ TABLE IT_STPOB INTO WA_STPOB1 WITH KEY IDNRK WA_STPOB-IDNRK POSNR WA_STPOB-POSNR VBKZ 'U'.
          IF SY-SUBRC EQ 0.
            CONTINUE.
          ENDIF .
          LOOP AT DELTA_STASB  INTO WA_STASB
               WHERE STLTY WA_STPOB-STLTY
                AND STLNR WA_STPOB-STLNR
                AND STLKN WA_STPOB-STLKN
                AND DATUB NE '00000000'.
            IF LV_DATUB '00000000'.
              LV_DATUB WA_STASB-DATUB.
            ELSE.
              IF LV_DATUB < WA_STASB-DATUB.
                LV_DATUB WA_STASB-DATUB.
              ENDIF.
            ENDIF.
          ENDLOOP.
        ENDIF.
*end
        IF LV_DATUB >= I_DATUV.
          IF WA_STPOB-ALPRF '01' AND WA_STPOB-EWAHR 100 )
            OR WA_STPOB-ALPRF NE '01' AND WA_STPOB-EWAHR NE 100 ) .

            MOVE-CORRESPONDING WA_STPOB TO WA_EWAHR.
            APPEND WA_EWAHR TO IT_EWAHR.
*            if wa_stpob-vbkz eq 'U'.
*              append wa_ewahr to it_ewahr_up.
*            endif.
          ELSE.
            IF WA_STPOB-ALPRF '01'  .
              IF WA_STPOB-EWAHR NE 100 .
                LV_FLAG1  'X'.
              ENDIF.
            ELSE.
              IF WA_STPOB-EWAHR EQ 100 .
                LV_FLAG2  'X'.
              ENDIF.
            ENDIF.
            LV_POSNR WA_STPOB-POSNR.
            EXIT.
          ENDIF.
        ENDIF.
      ENDIF.
      CLEAR: WA_STPOB,WA_EWAHR,LV_DATUB,WA_STPOB1.
    ENDLOOP.

    IF LV_FLAG1 'X'.
      MESSAGE E008(ZMMWITH  LV_POSNR.
    ENDIF.
    IF LV_FLAG2 'X'.
      MESSAGE E009(ZMMWITH  LV_POSNR .
    ENDIF.
** Check percentage first , Lisa wong 02/19/2013

    CLEAR: LV_FLAG.
    SORT IT_EWAHR BY ALPGR.
    LOOP AT IT_EWAHR INTO WA_EWAHR .
      LV_EWAHR LV_EWAHR + WA_EWAHR-EWAHR.
      AT END OF ALPGR.
        IF LV_EWAHR > 100.
          LV_FLAG 'X'.
          LV_ALPGR WA_EWAHR-ALPGR.
          EXIT.
        ENDIF.
        CLEAR:LV_EWAHR.
      ENDAT.
    ENDLOOP.

    IF LV_FLAG 'X'.
      MESSAGE E005(ZMMWITH  LV_ALPGR .
    ENDIF.
  ENDIF.


*    loop at it_ewahr_up into wa_ewahr .
*      delete it_ewahr where posnr = wa_ewahr-posnr and vbkz = space.
*      clear:wa_ewahr.
*    endloop.
*Add by Lisa wong 02/19/2013 start
*   SORT IT_EWAHR BY POSNR VBKZ DESCENDING.
*   DELETE ADJACENT DUPLICATES FROM IT_EWAHR COMPARING POSNR VBKZ.          "Restore on 02/20/2013
  DELETE IT_EWAHR WHERE ALPGR  SPACE AND VBKZ SPACE. "Add by Lisa wong 02/25/2013
*Add by Lisa wong 02/19/2013 End
  LOOP AT IT_EWAHR INTO WA_EWAHR .
    " if wa_ewahr-alpgr is not initial.
    IF WA_EWAHR-ALPGR NE '01'.
      LV_POSNR WA_EWAHR-POSNR.
      LV_FLAG 'X'.
      EXIT.
    ENDIF.
    "endif.
  ENDLOOP.
  IF LV_FLAG 'X'.
    MESSAGE E006(ZMMWITH  LV_POSNR .
  ENDIF.


*    clear: lv_flag.
*    read table  it_ewahr into wa_ewahr  with key ALPRF = '01' .
*    if sy-subrc ne 0.
*      lv_flag = 'X'.
*    endif.
*    if lv_flag = 'X'.
*      message e010(zmm)   .
*    endif.


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值