You are on page 1of 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