ZCMM01-8

*&--------------------------------------------------------------

*&      Form  check_item_data
*&--------------------------------------------------------------

***lbg200806060934.add.sn
FORM. RETURN_CONTROL.
  DATA:L_FAQTY LIKE RESB-BDMNG.
  DATA:L_REQQTY LIKE RESB-BDMNG.
  DATA: L_NOPOSTRETURN LIKE ZCM04-ERFMG."wo no post return qty
  DATA:L_ALPGR LIKE RESB-ALPGR.
  DATA:L_ALPOS LIKE RESB-ALPOS.
  DATA:L_BAUGR LIKE RESB-BAUGR.
  DATA:L_YINGFA LIKE ZCM04-ERFMG. " account gr
  DATA:C_YINGFA(16) TYPE C.
  DATA:L_ENMNG LIKE RESB-ENMNG.
  DATA:L_REQUIREQTY LIKE RESB-BDMNG.
  DATA:L_QPA LIKE RESB-ESMNG.
  DATA:L_MATNR LIKE RESB-MATNR.
  DATA:RE_POSTQTY LIKE ZCM04-ERFMG.
  DATA:L_TOTALISSUE LIKE ZCM04-ERFMG.
  DATA:L_ALLOWRETURN LIKE ZCM04-ERFMG.
  DATA:C_RETURNQTY(16) TYPE C.
  DATA:C_ALLOWRETURN(16) TYPE C.
  DATA:L_RSNUM LIKE ZCM04-RSNUM.
  DATA:L_RSPOS LIKE RESB-RSPOS.
  DATA: L_ERROR(50) TYPE C.
  DATA: L_ERROR2(50) TYPE C.
  DATA: L_DOCNUM LIKE ZCM04-DOCNUMBER. "kelly 100423
  DATA: L_DOCITEM LIKE ZCM04-DOCITEM. "kelly 100423
  L_ENMNG = 0.
  L_REQUIREQTY = 0.
  L_QPA = 0.
  L_FAQTY = 0.
  L_REQQTY = 0.
  CLEAR L_ALPGR.
  CLEAR L_ALPOS.
  CLEAR L_BAUGR.
  CLEAR L_RSNUM.
  CLEAR L_ALPOS.
  CLEAR: L_PSMNG, L_WEMNG, L_DAUAT.
  SELECT SINGLE AFPO~PSMNG AFPO~WEMNG AFPO~DAUAT
   INTO (L_PSMNG, L_WEMNG, L_DAUAT ) FROM AFPO
   WHERE AUFNR EQ ZCM03-AUFNR
    AND POSNR EQ '0001'.
  IF NOT ZCM04TAB-RSPOS IS INITIAL."if have item,by this itemQTY
    SELECT SINGLE RESB~RSNUM RESB~RSPOS RESB~ENMNG
      RESB~BDMNG RESB~ALPGR RESB~ALPOS RESB~BAUGR
      RESB~ESMNG INTO (L_RSNUM ,L_RSPOS ,
      L_FAQTY , L_REQQTY,L_ALPGR ,L_ALPOS ,
      L_BAUGR,L_QPA) FROM RESB
      INNER JOIN AFKO ON RESB~RSNUM = AFKO~RSNUM
       WHERE AFKO~AUFNR EQ ZCM03-AUFNR
       AND RESB~MATNR EQ ZCM04TAB-MATNR
       AND RESB~XLOEK NE 'X'
       AND RESB~RSNUM = ZCM04TAB-RSNUM AND
       RESB~RSPOS = ZCM04TAB-RSPOS
       AND RESB~CHARG EQ ZCM04TAB-CHARG.
*kelly add IF not find THEN get resb data again (no resb-charg)
*for npd zcm04tab-charg = valation type but resb~charg is null
*add by 20100417 .....sn
    IF SY-SUBRC <> 0.
      SELECT SINGLE RESB~RSNUM RESB~RSPOS RESB~ENMNG
  RESB~BDMNG RESB~ALPGR RESB~ALPOS RESB~BAUGR
  RESB~ESMNG INTO (L_RSNUM ,L_RSPOS ,
  L_FAQTY , L_REQQTY,L_ALPGR ,L_ALPOS ,
  L_BAUGR,L_QPA) FROM RESB
  INNER JOIN AFKO ON RESB~RSNUM = AFKO~RSNUM
   WHERE AFKO~AUFNR EQ ZCM03-AUFNR
   AND RESB~MATNR EQ ZCM04TAB-MATNR
   AND RESB~XLOEK NE 'X'
   AND RESB~RSNUM = ZCM04TAB-RSNUM AND
   RESB~RSPOS = ZCM04TAB-RSPOS.
    ENDIF.
*kelly add by 20100417 .....en
    IF NOT L_ALPGR IS INITIAL AND L_ALPGR <> ''
      AND L_ALPOS EQ 'X'.
      SELECT RESB~ENMNG RESB~BDMNG RESB~MATNR
      INTO (L_FAQTY , L_REQQTY , L_MATNR )  FROM RESB
         INNER JOIN AFKO ON RESB~RSNUM = AFKO~RSNUM
         WHERE AFKO~AUFNR EQ ZCM03-AUFNR AND
         RESB~ALPGR EQ L_ALPGR AND RESB~ALPOS = L_ALPOS
         AND RESB~BAUGR EQ L_BAUGR.
        L_ENMNG = L_FAQTY + L_ENMNG.
        L_REQUIREQTY = L_REQQTY + L_REQUIREQTY.
        L_FAQTY = 0.
        L_REQQTY = 0.
      ENDSELECT.
      CLEAR: L_ALPGR.
      CLEAR: L_ALPOS.
      CLEAR: L_BAUGR.
    ELSE.
      L_ENMNG = L_ENMNG + L_FAQTY.
      L_REQUIREQTY = L_REQUIREQTY + L_REQQTY.
    ENDIF.
  ELSE."if have no item,by this material total qty
*kelly 2010417 add user must click 'components' to get resb-num .sn
    MESSAGE E000 WITH 'No Reservation info of '
               ZCM04TAB-DOCITEM  "kelly 100203
               ZCM04TAB-MATNR
               ZCM04TAB-CHARG.
*kelly 20100417 add ser must click 'components' to get resb-num .en

    SELECT RESB~RSNUM RESB~RSPOS RESB~ENMNG
     RESB~BDMNG RESB~ALPGR RESB~ALPOS RESB~BAUGR
     RESB~ESMNG INTO (L_RSNUM ,L_RSPOS ,
     L_FAQTY , L_REQQTY,L_ALPGR ,L_ALPOS ,
     L_BAUGR,L_QPA) FROM RESB
     INNER JOIN AFKO ON RESB~RSNUM = AFKO~RSNUM
      WHERE AFKO~AUFNR EQ ZCM03-AUFNR
      AND RESB~MATNR EQ ZCM04TAB-MATNR
      AND RESB~XLOEK NE 'X' AND RESB~BDMNG > 0
      AND RESB~CHARG EQ ZCM04TAB-CHARG.
*     if zcm04tab-rsnum is initial.
      ZCM04TAB-RSNUM = L_RSNUM.
*     endif.
*     if zcm04tab-rspos is initial.
      ZCM04TAB-RSPOS = L_RSPOS.
*     endif.
      IF NOT L_ALPGR IS INITIAL AND L_ALPGR <> ''
           AND L_ALPOS EQ 'X'.
        SELECT RESB~ENMNG RESB~BDMNG RESB~MATNR
        INTO (L_FAQTY , L_REQQTY , L_MATNR )  FROM RESB
           INNER JOIN AFKO ON RESB~RSNUM = AFKO~RSNUM
           WHERE AFKO~AUFNR EQ ZCM03-AUFNR AND
           RESB~ALPGR EQ L_ALPGR AND RESB~ALPOS = L_ALPOS
           AND RESB~BAUGR EQ L_BAUGR.
          L_ENMNG = L_FAQTY + L_ENMNG.
          L_REQUIREQTY = L_REQQTY + L_REQUIREQTY.
          L_FAQTY = 0.
          L_REQQTY = 0.
        ENDSELECT.
        CLEAR: L_ALPGR.
        CLEAR: L_ALPOS.
        CLEAR: L_BAUGR.
      ELSE.
        L_ENMNG = L_ENMNG + L_FAQTY.
        L_REQUIREQTY = L_REQUIREQTY + L_REQQTY.
      ENDIF.
    ENDSELECT.
  ENDIF.
  L_NOPOSTRETURN = 0.
  RE_POSTQTY = 0.
*kelly add by 20100428  .sn
* return qty by resb item calculate
* get unpost qty INTO  RE_POSTQTY by resb-item
  SELECT SUM( ZCM04~ERFMG ) INTO RE_POSTQTY FROM ZCM04
 INNER JOIN ZCM03 ON ZCM04~DOCNUMBER = ZCM03~DOCNUMBER
 AND ZCM04~DOCYEAR = ZCM03~DOCYEAR WHERE
 ZCM03~AUFNR = ZCM03-AUFNR AND ZCM03~DOCSTAS = '0'
 AND ZCM03~DOCTYPE = '2' AND ZCM04~MATNR = ZCM04TAB-MATNR
 AND ZCM04~WERKS = ZCM04TAB-WERKS AND
 ZCM04~MARKDELETION NE 'X' AND
 ZCM03~DOCNUMBER NE ZCM03-DOCNUMBER AND
 ZCM04~RSNUM = ZCM04TAB-RSNUM AND
 ZCM04~RSPOS = ZCM04TAB-RSPOS.
  L_NOPOSTRETURN = L_NOPOSTRETURN + RE_POSTQTY.
  RE_POSTQTY = 0.
*kelly add by 20100428  .sn

 


****kelly mark by 20100428 .sn

***no valuation type do this
**  IF ZCM04TAB-CHARG = ''.
**    SELECT DISTINCT MATNR INTO L_MATNR FROM RESB
**       INNER JOIN AFKO ON RESB~RSNUM = AFKO~RSNUM
**     WHERE RESB~RSNUM = ZCM04TAB-RSNUM
**      AND AFKO~AUFNR EQ ZCM03-AUFNR
**      AND RESB~MATNR EQ ZCM04TAB-MATNR
**      AND RESB~XLOEK NE 'X' AND RESB~BDMNG > 0
**      AND RESB~CHARG EQ ZCM04TAB-CHARG.
**      SELECT SUM( ZCM04~ERFMG ) INTO RE_POSTQTY FROM ZCM04
**       INNER JOIN ZCM03 ON ZCM04~DOCNUMBER = ZCM03~DOCNUMBER
**       AND ZCM04~DOCYEAR = ZCM03~DOCYEAR WHERE
**       ZCM03~AUFNR = ZCM03-AUFNR AND ZCM03~DOCSTAS = '0'
**       AND ZCM03~DOCTYPE = '2' AND ZCM04~MATNR = L_MATNR
**       AND ZCM04~WERKS = ZCM04TAB-WERKS AND
**       ZCM04~MARKDELETION NE 'X' AND
**       ZCM03~DOCNUMBER NE ZCM03-DOCNUMBER.
**      L_NOPOSTRETURN = L_NOPOSTRETURN + RE_POSTQTY.
**      RE_POSTQTY = 0.
**    ENDSELECT.
**  ELSE. "have valuation type kelly
**    SELECT DISTINCT MATNR INTO L_MATNR FROM RESB
**   INNER JOIN AFKO ON RESB~RSNUM = AFKO~RSNUM
** WHERE RESB~RSNUM = ZCM04TAB-RSNUM
**  AND AFKO~AUFNR EQ ZCM03-AUFNR
**  AND RESB~MATNR EQ ZCM04TAB-MATNR
**  AND RESB~XLOEK NE 'X' AND RESB~BDMNG > 0.
**      SELECT SUM( ZCM04~ERFMG ) INTO RE_POSTQTY FROM ZCM04
**       INNER JOIN ZCM03 ON ZCM04~DOCNUMBER = ZCM03~DOCNUMBER
**       AND ZCM04~DOCYEAR = ZCM03~DOCYEAR WHERE
**       ZCM03~AUFNR = ZCM03-AUFNR AND ZCM03~DOCSTAS = '0'
**       AND ZCM03~DOCTYPE = '2' AND ZCM04~MATNR = L_MATNR
**       AND ZCM04~WERKS = ZCM04TAB-WERKS AND
**       ZCM04~MARKDELETION NE 'X' AND
**       ZCM03~DOCNUMBER NE ZCM03-DOCNUMBER.
**      L_NOPOSTRETURN = L_NOPOSTRETURN + RE_POSTQTY.
**      RE_POSTQTY = 0.
**    ENDSELECT.
**  ENDIF.
**

****kelly mark by 20100428 .en

  L_TOTALISSUE = L_ENMNG - L_NOPOSTRETURN.
  L_YINGFA = L_WEMNG * L_REQUIREQTY / L_PSMNG.
* kelly modify allow return qty logical 20100505 .sn
* allow return qty = RESB's withdraw qty - unpost qty(this resb,item)
  L_ALLOWRETURN = L_TOTALISSUE .
*  L_ALLOWRETURN = L_TOTALISSUE - L_YINGFA.
* kelly modify end .en

  C_ALLOWRETURN = L_ALLOWRETURN.
  CONDENSE C_ALLOWRETURN.
  C_RETURNQTY = ZCM04TAB-ERFMG.
  CONDENSE C_RETURNQTY.


  IF  ZCM04TAB-ERFMG > 0 AND ZCM04TAB-ERFMG > L_ALLOWRETURN .
*kelly modify by 20100423.sn
    CLEAR L_DOCNUM.
    SELECT  MAX( ZCM04~DOCNUMBER )
    INTO (L_DOCNUM)
    FROM ZCM04
    INNER JOIN ZCM03 ON ZCM04~DOCNUMBER = ZCM03~DOCNUMBER
                       AND ZCM04~DOCYEAR = ZCM03~DOCYEAR
     WHERE
     ZCM03~AUFNR = ZCM03-AUFNR
     AND ZCM03~DOCSTAS = '0'
     AND ZCM03~DOCTYPE = '2'
     AND ZCM04~MATNR = ZCM04TAB-MATNR
     AND ZCM04~WERKS = ZCM04TAB-WERKS
     AND ZCM04~MARKDELETION NE 'X'
     AND ZCM03~DOCNUMBER NE ZCM03-DOCNUMBER.
*     ORDER BY ZCM04~DOCNUMBER DESCENDING
*                ZCM04~DOCITEM DESCENDING.
*    ENDSELECT.
    CONCATENATE 'item:' ZCM04TAB-DOCITEM 'Error: Return Qty:'
     C_RETURNQTY '> Allow Qty:'
      C_ALLOWRETURN  INTO L_ERROR.
    CONCATENATE ZCM04TAB-MATNR ' Rev Item' ZCM04TAB-RSPOS
       ',Unptno:' L_DOCNUM
      INTO L_ERROR2.
    MESSAGE E000 WITH L_ERROR L_ERROR2.
*kelly modify by 20100423 .en
  ENDIF.
ENDFORM.

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14397246/viewspace-666156/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/14397246/viewspace-666156/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值