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----

 

posted on 2007-04-19 22:53  封起De日子  阅读(201)  评论(0编辑  收藏  举报

导航