0% found this document useful (0 votes)
255 views5 pages

MIRO Exit

This ABAP code is checking for inspection lots and their statuses when an invoice is updated or created. It loops through items in the invoice, checks if an inspection is required for the material and plant, then looks for inspection lots associated with the item. It verifies the status of any inspection lots found is allowed for invoice posting before allowing the invoice update to proceed.

Uploaded by

exitparag
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
255 views5 pages

MIRO Exit

This ABAP code is checking for inspection lots and their statuses when an invoice is updated or created. It loops through items in the invoice, checks if an inspection is required for the material and plant, then looks for inspection lots associated with the item. It verifies the status of any inspection lots found is allowed for invoice posting before allowing the invoice update to proceed.

Uploaded by

exitparag
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 5

METHOD IF_EX_INVOICE_UPDATE~CHANGE_AT_SAVE .

TYPES : BEGIN OF W_MSEG,


MBLNR TYPE MSEG-MBLNR,
MJAHR TYPE MSEG-MJAHR,
ZEILE TYPE MSEG-ZEILE,
BWART TYPE MSEG-BWART,
OBJNR TYPE QALS-OBJNR,
END OF W_MSEG.
DATA : IT_MSEG TYPE STANDARD TABLE OF W_MSEG.
DATA : WA_MSEG TYPE W_MSEG.
DATA : LS_OBJNR TYPE QALS-OBJNR,
LS_RSEG_NEW TYPE RSEG,
LI_RSEG_NEW TYPE RSEG,
LS_JEST TYPE JEST,
LI_JEST TYPE JEST,
LS_EKKN TYPE EKKN,
LS_MTART TYPE MARA-MTART,
LS_WEBRE TYPE EKPO-WEBRE,
W_ART TYPE QMAT-ART,
W_INSMK TYPE EKPO-INSMK,
W_LINES TYPE I,
W_OBJNR TYPE QALS-OBJNR.
* if any inspection lot is created, then logic is to block the invoice
* creation.
* in this case, invoice creation is allowed only if the postings are
* made.
* so ststus in jest is checked for I0220.
* CHECK FOR - iv IS BASED ON gr OR NOT
* check for inspection lot for each item
LOOP AT TI_RSEG_NEW INTO LS_RSEG_NEW.
* Start of Code added by Niraj on 07-03-2005
* Check if Inspection setup is not blank for the material and plant
* combination.
SELECT SINGLE ART FROM QMAT
INTO W_ART
WHERE WERKS = LS_RSEG_NEW-WERKS
AND MATNR = LS_RSEG_NEW-MATNR.
IF SY-SUBRC EQ 0.
IF W_ART IS NOT INITIAL.
* end of Code added by Niraj on 07-03-2005 to check the stock type from
* ekpo.
* Previous Code
SELECT SINGLE WEBRE
INTO LS_WEBRE
FROM EKPO CLIENT SPECIFIED
WHERE MANDT = SY-MANDT
AND EBELN = LS_RSEG_NEW-EBELN
AND EBELP = LS_RSEG_NEW-EBELP.
IF SY-SUBRC EQ 0 AND LS_WEBRE EQ 'X' .
* If invoice is not based on GR, do not check further.
IF NOT LS_RSEG_NEW-LFBNR IS INITIAL.
* select the inspection lot
SELECT SINGLE OBJNR INTO LS_OBJNR
FROM QALS CLIENT SPECIFIED
WHERE MANDANT = SY-MANDT
AND MBLNR = LS_RSEG_NEW-LFBNR
AND ZEILE = LS_RSEG_NEW-LFPOS
AND MJAHR = LS_RSEG_NEW-LFGJA.
* if found
IF SY-SUBRC EQ 0.
* check for account assignment
SELECT SINGLE *
FROM EKKN CLIENT SPECIFIED
INTO LS_EKKN
WHERE MANDT = SY-MANDT
AND EBELN = LS_RSEG_NEW-EBELN
AND EBELP = LS_RSEG_NEW-EBELP.
IF SY-SUBRC EQ 0.
SELECT SINGLE * FROM JEST CLIENT SPECIFIED
INTO LS_JEST
WHERE MANDT = SY-MANDT
AND OBJNR = LS_OBJNR
AND STAT = 'I0218'.
ELSE.
* get the status
SELECT SINGLE * FROM JEST CLIENT SPECIFIED
INTO LS_JEST
WHERE MANDT = SY-MANDT
AND OBJNR = LS_OBJNR
AND STAT = 'I0220'.
ENDIF.
* if stock is not posted/UD not made , do not allow the invoice creation
IF SY-SUBRC NE 0.
MESSAGE E116(ZMM).
* GR is still in quality inspection stage.
* RAISE ERROR_WITH_MESSAGE .
ENDIF.
ENDIF.
ENDIF.
ENDIF.
* Previous Code
* Start of Code addition by Niraj on 05-03-2005
* If reference document number exists then
IF NOT LS_RSEG_NEW-LFBNR IS INITIAL.
* Select all record from qals for movement type 105 into internal table
* it_mseg
SELECT A~MBLNR A~MJAHR A~BWART A~ZEILE B~OBJNR
FROM MSEG AS A INNER JOIN QALS AS B
ON A~MBLNR = B~MBLNR
AND A~MJAHR = B~MJAHR
AND A~ZEILE = B~ZEILE
INTO CORRESPONDING FIELDS OF WA_MSEG
WHERE A~LFBNR = LS_RSEG_NEW-LFBNR
AND A~MATNR = LS_RSEG_NEW-MATNR
AND A~WERKS = LS_RSEG_NEW-WERKS
AND A~BWART = '105'.
APPEND WA_MSEG TO IT_MSEG.
ENDSELECT.
IF SY-SUBRC = 0.
LOOP AT IT_MSEG INTO WA_MSEG.
* check for status 'I0224' in the jest table
SELECT SINGLE OBJNR FROM JEST
INTO W_OBJNR WHERE OBJNR = WA_MSEG-OBJNR
AND STAT ='I0224'.
* if found then the delete the document no from it_mseg
IF SY-SUBRC = 0.
DELETE TABLE IT_MSEG FROM WA_MSEG.
ENDIF.
ENDLOOP.
* check if atleast one record exists
DESCRIBE TABLE IT_MSEG LINES W_LINES.
* if no records found then check for movement type 103.
IF W_LINES = 0 .
SELECT SINGLE MBLNR MJAHR BWART ZEILE
FROM MSEG CLIENT SPECIFIED
INTO CORRESPONDING FIELDS OF WA_MSEG
WHERE LFBNR = LS_RSEG_NEW-LFBNR
AND MATNR = LS_RSEG_NEW-MATNR
AND WERKS = LS_RSEG_NEW-WERKS
AND BWART = '101'.
* check if stock has been released for inspection
IF SY-SUBRC <> 0 .
MESSAGE E117(ZMM).
ENDIF.
ENDIF.
LOOP AT IT_MSEG INTO WA_MSEG.
* select the inspection lot
SELECT SINGLE OBJNR INTO LS_OBJNR
FROM QALS CLIENT SPECIFIED
WHERE MANDANT = SY-MANDT
AND MBLNR = WA_MSEG-MBLNR
AND ZEILE = WA_MSEG-ZEILE
AND MJAHR = WA_MSEG-MJAHR.
* if found
IF SY-SUBRC EQ 0.
* check for account assignment
SELECT SINGLE *
FROM EKKN CLIENT SPECIFIED
INTO LS_EKKN
WHERE MANDT = SY-MANDT
AND EBELN = LI_RSEG_NEW-EBELN
AND EBELP = LI_RSEG_NEW-EBELP.
* IF SY-SUBRC EQ 0 AND LS_MTART NE 'ZNSK'.
IF SY-SUBRC EQ 0.
SELECT SINGLE * FROM JEST CLIENT SPECIFIED
INTO LI_JEST
WHERE MANDT = SY-MANDT
AND OBJNR = LS_OBJNR
AND STAT = 'I0218'.
ELSE.
* get the status
SELECT SINGLE * FROM JEST CLIENT SPECIFIED
INTO LI_JEST
WHERE MANDT = SY-MANDT
AND OBJNR = LS_OBJNR
AND STAT = 'I0220'.
ENDIF.
* if stock is not posted/UD not made , do not allow the invoice creation
IF SY-SUBRC NE 0.
MESSAGE E116(ZMM).
* GR is still in quality inspection stage.
* RAISE ERROR_WITH_MESSAGE.
ENDIF.
ENDIF.
endloop.
ELSE.
* break-point.
SELECT SINGLE MBLNR MJAHR BWART ZEILE
FROM MSEG CLIENT SPECIFIED
INTO CORRESPONDING FIELDS OF WA_MSEG
WHERE LFBNR = LS_RSEG_NEW-LFBNR
AND MATNR = LS_RSEG_NEW-MATNR
AND WERKS = LS_RSEG_NEW-WERKS
AND BWART = '101'.
IF SY-SUBRC <> 0 .
MESSAGE E117(ZMM).
ENDIF.
ENDIF.
ENDIF.
* End of Code addition by Niraj on 05-03-2005
* Start of Code added by Niraj on 07-03-2005 to check the stock type
* from ekpo.
ENDIF.
* endif.
ENDIF.
* end of Code addition by Niraj on 07-03-2005 to check the stock type
* from ekpo.
ENDLOOP.
ENDMETHOD.

You might also like