|
<< Click to Display Table of Contents >> Navigation: All About ABAP Technique > English > ABAP Tutorial > ABAP Workbench Tools > Enhancement > Business Add-Ins (BADI) > Business Add-Ins (BADI) Examples > ZME_PROCESS_PO_CUST > CHECK |
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.