According to SAP Note 493900 Q3 reset of the release strategy for purchase order only takes place if CEKKO-GNETW is higher than the old one or CEKKO-GNETW fall off a lower interval if there is no tolerance limit maintained.
Here is how it is done besides of the standard; copy Badi “ME_PURCHDOC_POSTED” and in the method code as follows;
DATA: LINE_EKPO TYPE I ,
LINE_EKPO_OLD TYPE I ,
EKPO_CHANGED TYPE C LENGTH 1,
LS_EKPO_OLD TYPE UEKPO,
LS_EKPO TYPE UEKPO.
CLEAR EKPO_CHANGED.
LOOP AT IM_EKPO INTO LS_EKPO.
LOOP AT IM_EKPO_OLD INTO LS_EKPO_OLD WHERE EBELP = LS_EKPO-EBELP.
IF LS_EKPO-NETWR NE LS_EKPO_OLD-NETWR OR
LS_EKPO-MENGE NE LS_EKPO_OLD-MENGE .
EKPO_CHANGED = 'X'.
ENDIF.
ENDLOOP.
ENDLOOP.
DESCRIBE TABLE IM_EKPO LINES LINE_EKPO .
DESCRIBE TABLE IM_EKPO_OLD LINES LINE_EKPO_OLD .
FIELD-SYMBOLS: <LF_REL_CODE> TYPE BAPIMMPARA-REL_CODE.
DATA :
REL_STATUS_NEW TYPE BAPIMMPARA-REL_STATUS,
REL_INDICATOR_NEW TYPE BAPIMMPARA-PO_REL_IND,
RETURN TYPE TABLE OF BAPIRETURN .
DATA: LS_RETURN TYPE BAPIRETURN,
LT_BAPIRETURN TYPE TABLE OF BAPIRETURN,
LS_RELEASE_INFO TYPE BAPIRLGNPO,
LS_RELEASE_POSTED TYPE BAPIRLCOPO,
LF_COMP_NUM TYPE I,
LF_STRING TYPE STRING,
LF_ERROR TYPE FLAG,
LV_UNAME TYPE SY-UNAME.
*if quantity or net price is changed
( IM_EKKO_OLD-FRGSX EQ IM_EKKO-FRGSX AND
EKPO_CHANGED EQ 'X' AND
IM_EKKO_OLD-EBELN IS NOT INITIAL ) .
IF IM_EKKO-FRGZU = IM_EKKO_OLD-FRGZU .
CALL FUNCTION 'ZMM_PO_RESET_RELEASE'
EXPORTING
IM_EKKO = IM_EKKO
.
ENDIF.
ENDIF.
ENDIF.
Function ZMM_PO_RESET_RELEASE contains;
FIELD-SYMBOLS: <LF_REL_CODE> TYPE BAPIMMPARA-REL_CODE.
DATA :
REL_STATUS_NEW TYPE BAPIMMPARA-REL_STATUS,
REL_INDICATOR_NEW TYPE BAPIMMPARA-PO_REL_IND,
RETURN TYPE TABLE OF BAPIRETURN .
DATA: LS_RETURN TYPE BAPIRETURN,
LT_BAPIRETURN TYPE TABLE OF BAPIRETURN,
LS_RELEASE_INFO TYPE BAPIRLGNPO,
LS_RELEASE_POSTED TYPE BAPIRLCOPO,
LF_COMP_NUM TYPE I,
LF_STRING TYPE STRING,
LF_ERROR TYPE FLAG,
CALL FUNCTION 'BAPI_PO_GETRELINFO'
EXPORTING
PURCHASEORDER = IM_EKKO-EBELN
IMPORTING
GENERAL_RELEASE_INFO = LS_RELEASE_INFO
RELEASE_ALREADY_POSTED = LS_RELEASE_POSTED
TABLES
RETURN = LT_BAPIRETURN.
LF_COMP_NUM = 2.
DO 8 TIMES.
ASSIGN COMPONENT LF_COMP_NUM OF STRUCTURE LS_RELEASE_POSTED
TO <LF_REL_CODE>.
IF <LF_REL_CODE> IS NOT INITIAL.
CALL FUNCTION 'BAPI_PO_RESET_RELEASE'
EXPORTING
PURCHASEORDER = IM_EKKO-EBELN
PO_REL_CODE = <LF_REL_CODE>
USE_EXCEPTIONS = SPACE
IMPORTING
REL_STATUS_NEW = REL_STATUS_NEW
REL_INDICATOR_NEW = REL_INDICATOR_NEW
TABLES
RETURN = RETURN.
LOOP AT RETURN INTO ls_return WHERE TYPE = 'E' OR TYPE = 'A' .
EXIT.
ENDLOOP.
IF SY-SUBRC NE 0 .
WAIT UP TO 3 SECONDS.
ENDIF.
ENDIF.
LF_COMP_NUM = LF_COMP_NUM - 1.
ENDDO.
ENDFUNCTION.
Regards
Melih
P.S. You may need to copy and change BAPI_PO_RESET_RELEASE if you do not want to stuck with standard authority checks.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
3 | |
2 | |
2 | |
2 | |
2 | |
2 | |
1 | |
1 | |
1 | |
1 |