hi Friends,
I am Using ME_PROCESS_PO_CUST badi for validation in Purchase order (ME21N),
For that I implemented PROCESS_ITEM method which fires during each row now i add another validation in same implementation for plant should be same through out the all line item. Now following code is woking fine but when for second line item user changese plant then it shows error message as per logic which is fine but even after changing plant to correct one the error message is still coming why is it so?
following is my current validation code
method IF_EX_ME_PROCESS_PO_CUST~PROCESS_ITEM.
DATA:ls_poitem TYPE mepoitem,
ls_poitem_set TYPE mepoitem.
DATA:ls_poheader TYPE MEPOHEADER.
DATA:lm_poheader TYPE ref to IF_PURCHASE_ORDER_MM.
DATA:w_mara TYPE mara.
DATA:IT_ZMMTBL039 TYPE STANDARD TABLE OF ZMMTBL039 ,
WA_ZMMTBL039 TYPE ZMMTBL039 .
DATA:ls_poitem1 TYPE mepoitem.
DATA:V_KUNNR1 TYPE KNA1-KUNNR.
DATA:V_KUNNR2 TYPE KNA1-KUNNR.
DATA:W_WERKS(4),
w_werks_tmp(4),
w_flag(1).
ls_poitem = im_item->get_data( ).
lm_poheader = im_item->GET_HEADER( ).
ls_poheader = lm_poheader->GET_DATA( ).
IF ls_poitem-werks IS NOT INITIAL.
w_werks = ls_poitem-werks.
import w_flag to w_flag from MEMORY ID 'FLAG'.
if w_flag is initial.
w_flag = 'X'.
EXPORT w_werks_tmp FROM w_werks TO MEMORY ID 'MEMO1'.
export w_flag from w_flag to MEMORY ID 'FLAG'.
clear: w_flag.
endif.
ENDIF.
IMPORT w_werks_tmp TO w_werks FROM MEMORY ID 'MEMO1'.
break swaroopb.
IF ls_poitem-werks NE w_werks.
MESSAGE E010(zparts) with 'Different plants are not allowed in single PO.'.
ENDIF.
CLEAR: WA_ZMMTBL039,w_mara.
REFRESH:IT_ZMMTBL039[] .
SELECT *
INTO TABLE IT_ZMMTBL039
FROM ZMMTBL039
WHERE bsart EQ ls_poheader-bsart.
IF sy-subrc EQ 0.
CLEAR: WA_ZMMTBL039,w_mara.
SELECT SINGLE *
INTO w_mara
FROM mara
WHERE matnr EQ ls_poitem-MATNR.
IF SY-SUBRC EQ 0.
READ TABLE IT_ZMMTBL039 INTO WA_ZMMTBL039 WITH KEY bsart = ls_poheader-bsart
mtart = w_mara-mtart
spart = w_mara-spart.
IF SY-SUBRC NE 0.
MESSAGE E009(zparts) WITH ls_poitem-MATNR w_mara-spart ls_poheader-bsart .
ENDIF.
ENDIF.
ENDIF.
end method