Check Po Material Movment Type 261 - Z_BAPI_PO_MATERIAL_ISSUE
FUNCTION Z_BAPI_PO_MATERIAL_ISSUE.
*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" REFERENCE(I_PONUM) LIKE MSEG-AUFNR
*" EXPORTING
*" REFERENCE(E_RETURN) TYPE C
*"----------------------------------------------------------------------
* Author: Wei_Zhu
* Date: 2007-04-19
* Description: Check by PO if PO material 1, 2, 3 or 1000 has perform
* Good issue (movement type 261).
*
* Logic: 1) -> RESB-BDMNG "Requirement Qty
* -> RESB-BDMNG = 0
* <-'X'
* 2) -> MSEG-MENGE L_Qty_261 = 0
* <-'X'
* 3) -> MSEG-MENGE L_Qty_261 - L_Qty_262 < Requirement Qty
* <- ''
* ELSE <-'X'
*
* IN --> PO Order
* RETURN <-- 'X' Or ''
* X = Movment Type 261
*
*-----------------------------------------------------------------------
TABLES: MSEG,RESB .
DATA: I_PO LIKE I_PONUM,
L_ReqQTy Like RESB-BDMNG, "Requirement Qty
L_Qty_261 Like MSEG-MENGE, "Movement type 261 Qty
L_Qty_262 Like MSEG-MENGE. "Movement type 262 Qty
I_PO = I_PONUM.
Shift I_PO right deleting trailing ''.
IF STRLEN( I_PO ) > 12.
E_RETURN = ''.
ELSE.
overlay I_PO with '000000000000'.
select * FROM RESB
WHERE AUFNR = I_PO
And Matnr in ('000000000000000001',
'000000000000000002',
'000000000000000003',
'000000000000001000').
L_ReqQTy = L_ReqQTy + RESB-BDMNG.
endselect.
IF L_ReqQTy = 0.
E_RETURN = 'X'.
ELSE.
Select * From MSEG
Where AUFNR = I_PO
And Bwart = '261'
And Matnr in ('000000000000000001',
'000000000000000002',
'000000000000000003',
'000000000000001000').
L_Qty_261 = L_Qty_261 + MSEG-MENGE.
ENDSELECT.
IF L_Qty_261 = 0.
E_RETURN = ''.
ELSE.
Select * From MSEG
Where AUFNR = I_PO
And Bwart = '262'
And Matnr in ('000000000000000001',
'000000000000000002',
'000000000000000003',
'000000000000001000').
L_Qty_262 = L_Qty_262 + MSEG-MENGE.
EndSelect.
DATA: SWAP_QTY LIKE MSEG-MENGE.
SWAP_QTY = L_QTY_261 - L_QTY_262.
IF SWAP_QTY < L_ReqQTy.
E_RETURN = ''.
ELSE.
E_RETURN = 'X'.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDFUNCTION.
-----Test Result----