Views 190
Visitors 103

CHECK

Home 
| Top Page | Threads |
Previous  Next

METHOD if_ex_me_process_po_cust~check .
 
DATA: lif_head  TYPE purchase_order_items,
       lw_head   LIKE LINE OF lif_head,
       lw_header TYPE mepoheader.
 
DATA: li_poitem TYPE TABLE OF mepoitem,
       lw_poitem TYPE mepoitem,
       li_read   TYPE TABLE OF mepoitem,
       lw_read   TYPE mepoitem.
DATA: lv_bsart  TYPE bsart.
 
DATA: lw_mbew   TYPE mbew,
       lv_menge  TYPE menge_d,
       lv_peinh  TYPE menge_d,
       lv_hrgrp  TYPE netpr,
       lv_wkurs  TYPE netpr,
       lv_subtot TYPE netpr,
       lv_maxdsc TYPE netpr,
       lv_disc   TYPE netpr.
 
INCLUDE mm_messages_mac. "useful macros for message handling
 
*--------------------------------------------------------------
* START OF PROGRAM
*--------------------------------------------------------------
CALL FUNCTION 'ZFN_PO_GET_BSART'
   IMPORTING
     e_bsart = lv_bsart.
 
lw_header  = im_header->get_data( ).
 
lif_head   = im_header->get_items( ).
 
LOOP AT lif_head INTO lw_head.
   lw_poitem = lw_head-item->get_data( ).
   APPEND lw_poitem TO li_poitem.
ENDLOOP.
 
* Di-remark sementara permintaan MM (27/10/06)
**  IF lv_bsart = 'ZNB1' AND lv_bsart = 'ZNB2' AND lv_bsart = 'ZNB3'
**    AND lv_bsart = 'ZNB4' AND lv_bsart = 'ZNB7'.
*  CLEAR: lw_poitem, lw_read.
*  li_read[] = li_poitem[].
*  LOOP AT li_read INTO lw_read.
*    LOOP AT li_poitem INTO lw_poitem.
**     pivana(25/09/06)
*      IF lw_poitem-werks <> lw_read-werks
*         AND lv_bsart NE 'ZNB3' AND lw_poitem-mtart NE 'Z1RO'.
*        MESSAGE e906(me).
*        EXIT.
*      ENDIF.
*    ENDLOOP.
*  ENDLOOP.
**  ENDIF.
 
*------------------------------------------------------------
* Cek harga apakah beda lebih dari 20% dgn moving average
*------------------------------------------------------------
IF lw_header-bsart NE 'ZNB3'.
   LOOP AT li_poitem INTO lw_poitem .
     IF lw_poitem-loekz EQ space AND lw_poitem-retpo EQ space AND lw_poitem-umson EQ space.
       IF ( lw_poitem-pstyp NE '7' AND lw_poitem-pstyp NE '9' AND lw_poitem-pstyp NE '3' ).
         IF     lw_poitem-matkl NE '0501' AND lw_poitem-matkl NE '0502'
            AND lw_poitem-matkl NE '0503' AND lw_poitem-matkl NE '0504'.
 
*         ambil harga satuan per base unit
           SELECT SINGLE * INTO lw_mbew
                  FROM mbew
                  WHERE matnr EQ lw_poitem-matnr
                    AND bwkey EQ lw_poitem-werks.
 
           CLEAR: lv_menge, lv_peinh, lv_subtot, lv_wkurs,
                  lv_maxdsc, lv_disc.
*         hitung jumlah PO dalam base unit
           CALL FUNCTION 'ZFN_QTY_CONVERSION_TO_BASE'
             EXPORTING
               i_matnr         = lw_poitem-matnr
               i_erfmg         = lw_poitem-menge
               i_erfme         = lw_poitem-meins
             IMPORTING
               o_menge         = lv_menge
             EXCEPTIONS
               erfme_not_found = 1
               OTHERS          = 2.
           IF sy-subrc <> 0.
*                MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*                   WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
           ENDIF.
 
*         hitung jumlah satuan (PEINH)
           MOVE lw_poitem-peinh TO lv_peinh.
           CALL FUNCTION 'ZFN_QTY_CONVERSION_TO_BASE'
             EXPORTING
               i_matnr         = lw_poitem-matnr
               i_erfmg         = lv_peinh
               i_erfme         = lw_poitem-bprme
             IMPORTING
               o_menge         = lv_peinh
             EXCEPTIONS
               erfme_not_found = 1
               OTHERS          = 2.
           IF sy-subrc <> 0.
*                MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*                   WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
           ENDIF.
 
*         total nilai dr line item, hitung dalam rupiah
           IF lw_header-wkurs NE 1.
             lv_wkurs = lw_header-wkurs * 10.
           ELSE.
             lv_wkurs = lw_header-wkurs.
           ENDIF.
 
           lv_hrgrp  = lw_poitem-netpr * lv_wkurs.
           IF lv_peinh GT 0.
             lv_subtot = ( lv_hrgrp / lv_peinh ) * lv_menge.
           ENDIF.
 
           break abap03.
           CASE lw_mbew-vprsv.
             WHEN 'V'.
               IF lw_mbew-verpr GT 0 .
                 lv_maxdsc = ( lw_mbew-verpr * lv_menge ) * ( 25 / 100 ).
                 lv_disc   = ( lw_mbew-verpr * lv_menge ) - lv_subtot.
                 lv_disc   = ABS( lv_disc ).
                 IF lv_disc GT lv_maxdsc.
                   IF     sy-uname NE 'SRIMULY' AND sy-uname NE 'TRESRETN' AND sy-uname NE 'NJOOHAUW'
                      AND sy-uname NE 'ZSUPMM' AND sy-uname NE 'MULYBASU' AND sy-uname NE 'LILYCHAR'
                      AND sy-uname NE 'GYPSO'.
                     MESSAGE e912(me).
                   ELSE.
                     MESSAGE w913(me).
                   ENDIF. "sy-uname
                 ENDIF.
               ENDIF. "lw_mbew-verpr GT 0
             WHEN 'U'.
               IF lw_mbew-stprs GT 0.
                 lv_maxdsc = ( lw_mbew-stprs * lv_menge ) * ( 25 / 100 ).
                 lv_disc   = ( lw_mbew-stprs * lv_menge ) - lv_subtot.
                 lv_disc   = ABS( lv_disc ).
                 IF lv_disc GT lv_maxdsc.
                   IF     sy-uname NE 'SRIMULY' AND sy-uname NE 'TRESRETN' AND sy-uname NE 'NJOOHAUW'
                      AND sy-uname NE 'ZSUPMM' AND sy-uname NE 'MULYBASU' AND sy-uname NE 'LILYCHAR'
                      AND sy-uname NE 'GYPSO'.
                     MESSAGE e912(me).
                   ELSE.
                     MESSAGE w913(me).
                   ENDIF. "sy-uname
                 ENDIF.
               ENDIF. "IF lw_mbew-stprs GT 0
           ENDCASE.
 
         ENDIF. "lw_poitem-matkl
       ENDIF. "lw_poitem-pstyp
     ENDIF. "lw_poitem-loekz
   ENDLOOP.
ENDIF. "lw_header-bsart
 
ENDMETHOD.

User Threads | New Thread ( Only for Donators )

Threads Last Post Replies Views