*&--------------------------------------------------------------
*& 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/