Skip to Content
avatar image
Former Member

reversal of Usage decision

Can any one suggest the process to reverse the usage decision.

my requirement is I did G.R mvt 105 on 31.03,08 and then QA11 for usage decison on 03.04.08 then stock moved from inspection to unrestricted. but as we need to close the audit on r before 31.03.08 i like to reverse the usage decision and re do it on 31.03.08 and then like to do Goods issue on 31.03.08

can any one suggest me the solution r the process of reversal of the usage decision( i am using 4.7 SAP R/3 Enterprise )

Full points will be awarded for correct solutioin

Regard,

Manu

Add comment
10|10000 characters needed characters exceeded

  • Get RSS Feed

3 Answers

  • Best Answer
    avatar image
    Former Member
    Aug 12, 2008 at 06:56 AM

    Hi,

    I do not think that reversal of usage decision is possible in 4.7. There are some user exits available that needs to be implemented for acheiving the same.

    Reversal of usage decision is possible from ECC 6 onwards.

    Regards

    Deepak

    Add comment
    10|10000 characters needed characters exceeded

    • Former Member Former Member

      Hi Manu,

      You should implement the Exit QEVA0008 to achieve the reversal of UD.

      For further details pld refer the Following Notes.

      - Note 33924 - Reversing usage decisions

      - Note 175842 - Inspection lot: Reversal of goods movements from UD

      - 1108313 - Cancelling usage decision and lot

      Regards,

      Shyamal

  • Aug 12, 2008 at 05:43 AM

    Hi

    We had the same situation in our company and solved the issue like this:

    We have found a program for

    process of reversal of the usage decision from OSS called ZRQEVAC50

    but there was no date at the selection parameters and our ABAP'ers have added date mkpf-budat (Posting Date)

    to the selection screen of the program

    Hope will help

    Regards

    Add comment
    10|10000 characters needed characters exceeded

    • Correction written that i found it from OSS

      it is not from OSS but is working very well.

      *&----


      *

      *& Report ZRQEVAC50 *

      *& *

      *&----


      *

      *& *

      *& *

      *&----


      *

      REPORT RQEVAC50 MESSAGE-ID QA.

      TYPES:

      T_MKPF_TAB LIKE MKPF OCCURS 0,

      T_MSEG_TAB LIKE MSEG OCCURS 0.

      PARAMETERS:

      PRUEFLOS LIKE QALS-PRUEFLOS OBLIGATORY MEMORY ID QLS.

      DATA:

      G_MSGV1 LIKE SY-MSGV1,

      G_QALS LIKE QALS,

      G_QALS_LEISTE LIKE QALS,

      G_QAMB_TAB TYPE QAMBTAB,

      G_QAMB_VB_TAB TYPE QAMBTAB,

      G_MKPF_TAB TYPE T_MKPF_TAB,

      G_MSEG_TAB TYPE T_MSEG_TAB,

      G_SUBRC LIKE SY-SUBRC.

      START-OF-SELECTION.

      PERFORM ENQUEUE_QALS USING PRUEFLOS

      G_SUBRC.

      IF NOT G_SUBRC IS INITIAL.

      MESSAGE ID SY-MSGID TYPE 'S' NUMBER SY-MSGNO

      WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

      SUBMIT (SY-REPID) VIA SELECTION-SCREEN.

      ENDIF.

      PERFORM READ_QALS USING PRUEFLOS

      G_QALS

      G_QALS_LEISTE

      G_SUBRC.

      IF NOT G_SUBRC IS INITIAL.

      MESSAGE ID 'QA' TYPE 'S' NUMBER '102'

      WITH PRUEFLOS.

      SUBMIT (SY-REPID) VIA SELECTION-SCREEN.

      ENDIF.

      PERFORM CHECK_LOT USING G_QALS

      G_SUBRC.

      IF NOT G_SUBRC IS INITIAL.

      CASE G_SUBRC.

      WHEN 256.

      G_MSGV1 = 'Lot & does not refer to a material doc'.

      WHEN 128.

      G_MSGV1 = 'Material & is serialized'.

      REPLACE '&' WITH G_QALS-MATNR INTO G_MSGV1.

      WHEN 64.

      G_MSGV1 = 'Lot & is not stock relevant'.

      WHEN 32.

      G_MSGV1 = 'Lot &: No stock transferred'.

      WHEN 16.

      G_MSGV1 = 'Lot & is cancelled'.

      WHEN 8.

      G_MSGV1 = 'Lot & is archived'.

      WHEN 4.

      G_MSGV1 = 'Lot & is blocked'.

      WHEN 2.

      G_MSGV1 = 'Lot & is HU managed'.

      ENDCASE.

      REPLACE '&' WITH PRUEFLOS INTO G_MSGV1.

      MESSAGE ID '00' TYPE 'S' NUMBER '208'

      WITH G_MSGV1.

      SUBMIT (SY-REPID) VIA SELECTION-SCREEN.

      ENDIF.

      PERFORM READ_QAMB USING G_QALS

      G_QAMB_TAB

      G_SUBRC.

      IF NOT G_SUBRC IS INITIAL.

      MESSAGE ID 'QA' TYPE 'S' NUMBER '068'

      WITH PRUEFLOS.

      SUBMIT (SY-REPID) VIA SELECTION-SCREEN.

      ENDIF.

      PERFORM READ_MKPF USING G_QAMB_TAB

      G_MKPF_TAB

      G_SUBRC.

      IF NOT G_SUBRC IS INITIAL.

      MESSAGE ID SY-MSGID TYPE 'S' NUMBER SY-MSGNO

      WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

      SUBMIT (SY-REPID) VIA SELECTION-SCREEN.

      ENDIF.

      PERFORM CHECK_MKPF USING G_MKPF_TAB

      G_SUBRC.

      IF NOT G_SUBRC IS INITIAL.

      MESSAGE ID 'QA' TYPE 'S' NUMBER '068'

      WITH PRUEFLOS.

      SUBMIT (SY-REPID) VIA SELECTION-SCREEN.

      ENDIF.

      PERFORM READ_MSEG USING G_MKPF_TAB

      G_MSEG_TAB

      G_SUBRC.

      IF NOT G_SUBRC IS INITIAL.

      MESSAGE ID SY-MSGID TYPE 'S' NUMBER SY-MSGNO

      WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

      SUBMIT (SY-REPID) VIA SELECTION-SCREEN.

      ENDIF.

      PERFORM CHECK_MSEG USING G_MSEG_TAB

      G_QAMB_TAB

      G_SUBRC.

      IF NOT G_SUBRC IS INITIAL.

      MESSAGE ID 'QA' TYPE 'S' NUMBER '068'

      WITH PRUEFLOS.

      SUBMIT (SY-REPID) VIA SELECTION-SCREEN.

      ENDIF.

      PERFORM CREATE_GOODS_MOVEMENT USING G_QALS

      G_MSEG_TAB

      G_SUBRC.

      IF NOT G_SUBRC IS INITIAL.

      MESSAGE ID 'QA' TYPE 'S' NUMBER '068'

      WITH PRUEFLOS.

      SUBMIT (SY-REPID) VIA SELECTION-SCREEN.

      ENDIF.

      PERFORM POST_GOODS_MOVEMENT.

      PERFORM POST_DATA USING G_QALS

      G_QALS_LEISTE

      G_QAMB_TAB

      G_QAMB_VB_TAB

      G_SUBRC.

      IF NOT G_SUBRC IS INITIAL.

      MESSAGE ID SY-MSGID TYPE 'S' NUMBER SY-MSGNO

      WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

      SUBMIT (SY-REPID) VIA SELECTION-SCREEN.

      ELSE.

      COMMIT WORK AND WAIT.

      G_MSGV1 = 'inspection lot &'.

      REPLACE '&' WITH PRUEFLOS INTO G_MSGV1.

      MESSAGE ID '00' TYPE 'S' NUMBER '368'

      WITH 'Stock posting reversed for ' G_MSGV1.

      SUBMIT (SY-REPID) VIA SELECTION-SCREEN.

      ENDIF.

      *----


      *

      • Form ENQUEUE_QALS *

      *----


      *

      • Los sperren *

      *----


      *

      FORM ENQUEUE_QALS USING P_PRUEFLOS LIKE QALS-PRUEFLOS

      P_SUBRC LIKE SY-SUBRC.

      CLEAR: P_SUBRC.

      CALL FUNCTION 'ENQUEUE_EQQALS1'

      EXPORTING

      PRUEFLOS = P_PRUEFLOS

      EXCEPTIONS

      FOREIGN_LOCK = 1

      SYSTEM_FAILURE = 2

      OTHERS = 3.

      P_SUBRC = SY-SUBRC.

      ENDFORM. " ENQUEUE_QALS

      *----


      *

      • Form READ_QALS *

      *----


      *

      • Prüflos lesen *

      *----


      *

      FORM READ_QALS USING P_PRUEFLOS LIKE QALS-PRUEFLOS

      P_QALS LIKE QALS

      P_QALS_LEISTE LIKE QALS

      P_SUBRC LIKE SY-SUBRC.

      CLEAR: P_SUBRC.

      CALL FUNCTION 'QPSE_LOT_READ'

      EXPORTING

      I_PRUEFLOS = P_PRUEFLOS

      I_RESET_LOT = 'X'

      IMPORTING

      E_QALS = P_QALS

      EXCEPTIONS

      NO_LOT = 1.

      P_SUBRC = SY-SUBRC.

      IF P_SUBRC IS INITIAL.

      P_QALS_LEISTE = P_QALS.

      ELSE.

      CLEAR: P_QALS,

      P_QALS_LEISTE.

      ENDIF.

      ENDFORM. " READ_QALS

      *----


      *

      • Form CHECK_LOT *

      *----


      *

      • Prüflos prüfen *

      *----


      *

      FORM CHECK_LOT USING P_QALS LIKE QALS

      P_SUBRC LIKE SY-SUBRC.

      DATA:

      L_STAT LIKE JSTAT,

      L_STAT_TAB LIKE JSTAT OCCURS 0 WITH HEADER LINE.

      P_SUBRC = 256.

      */No reference to material document

      IF P_QALS-ZEILE IS INITIAL.

      EXIT.

      ELSE.

      P_SUBRC = 128.

      ENDIF.

      */Serialized Material

      IF NOT P_QALS-SERNP IS INITIAL.

      EXIT.

      ELSE.

      P_SUBRC = 64.

      ENDIF.

      */BERF

      CALL FUNCTION 'STATUS_CHECK'

      EXPORTING

      OBJNR = P_QALS-OBJNR

      STATUS = 'I0203'

      EXCEPTIONS

      STATUS_NOT_ACTIVE = 2.

      IF NOT SY-SUBRC IS INITIAL.

      EXIT.

      ELSE.

      P_SUBRC = 32.

      ENDIF.

      */BTEI & BEND

      CLEAR L_STAT. CLEAR L_STAT_TAB. REFRESH L_STAT_TAB.

      L_STAT-STAT = 'I0219'. APPEND L_STAT TO L_STAT_TAB. "BTEI

      L_STAT-STAT = 'I0220'. APPEND L_STAT TO L_STAT_TAB. "BEND

      CALL FUNCTION 'STATUS_OBJECT_CHECK_MULTI'

      EXPORTING

      OBJNR = P_QALS-OBJNR

      TABLES

      STATUS_CHECK = L_STAT_TAB.

      IF L_STAT_TAB[] IS INITIAL.

      EXIT.

      ELSE.

      P_SUBRC = 16.

      ENDIF.

      */LSTO & LSTV

      CLEAR L_STAT. CLEAR L_STAT_TAB. REFRESH L_STAT_TAB.

      L_STAT-STAT = 'I0224'. APPEND L_STAT TO L_STAT_TAB. "LSTO

      L_STAT-STAT = 'I0232'. APPEND L_STAT TO L_STAT_TAB. "LSTV

      CALL FUNCTION 'STATUS_OBJECT_CHECK_MULTI'

      EXPORTING

      OBJNR = P_QALS-OBJNR

      TABLES

      STATUS_CHECK = L_STAT_TAB.

      IF NOT L_STAT_TAB[] IS INITIAL.

      EXIT.

      ELSE.

      P_SUBRC = 8.

      ENDIF.

      */ARSP & ARCH & REO1 & REO2 & REO3

      CLEAR L_STAT. CLEAR L_STAT_TAB. REFRESH L_STAT_TAB.

      L_STAT-STAT = 'I0225'. APPEND L_STAT TO L_STAT_TAB. "ARSP

      L_STAT-STAT = 'I0226'. APPEND L_STAT TO L_STAT_TAB. "ARCH

      L_STAT-STAT = 'I0227'. APPEND L_STAT TO L_STAT_TAB. "REO3

      L_STAT-STAT = 'I0228'. APPEND L_STAT TO L_STAT_TAB. "REO2

      L_STAT-STAT = 'I0229'. APPEND L_STAT TO L_STAT_TAB. "REO1

      CALL FUNCTION 'STATUS_OBJECT_CHECK_MULTI'

      EXPORTING

      OBJNR = P_QALS-OBJNR

      TABLES

      STATUS_CHECK = L_STAT_TAB.

      IF NOT L_STAT_TAB[] IS INITIAL.

      EXIT.

      ELSE.

      P_SUBRC = 4.

      ENDIF.

      */SPER

      CALL FUNCTION 'STATUS_CHECK'

      EXPORTING

      OBJNR = P_QALS-OBJNR

      STATUS = 'I0043'

      EXCEPTIONS

      STATUS_NOT_ACTIVE = 2.

      IF SY-SUBRC IS INITIAL.

      EXIT.

      ELSE.

      P_SUBRC = 2.

      ENDIF.

      */HUM

      CALL FUNCTION 'STATUS_CHECK'

      EXPORTING

      OBJNR = P_QALS-OBJNR

      STATUS = 'I0443'

      EXCEPTIONS

      STATUS_NOT_ACTIVE = 2.

      IF SY-SUBRC IS INITIAL.

      EXIT.

      ELSE.

      P_SUBRC = 0.

      ENDIF.

      ENDFORM. " CHECK_LOT

      *----


      *

      • Form READ_QAMB *

      *----


      *

      • QAMBs lesen *

      *----


      *

      FORM READ_QAMB USING P_QALS LIKE QALS

      P_QAMB_TAB TYPE QAMBTAB

      P_SUBRC LIKE SY-SUBRC.

      CLEAR: P_SUBRC.

      SELECT * FROM QAMB INTO TABLE P_QAMB_TAB

      WHERE PRUEFLOS = P_QALS-PRUEFLOS

      AND TYP = '3'.

      P_SUBRC = SY-SUBRC.

      ENDFORM. " READ_QAMB

      *----


      *

      • Form READ_MKPF *

      *----


      *

      • Read material document header *

      *----


      *

      FORM READ_MKPF USING P_QAMB_TAB TYPE QAMBTAB

      P_MKPF_TAB TYPE T_MKPF_TAB

      P_SUBRC LIKE SY-SUBRC.

      DATA:

      BEGIN OF L_MKPF_KEY_TAB OCCURS 0,

      MBLNR LIKE MKPF-MBLNR,

      MJAHR LIKE MKPF-MJAHR,

      END OF L_MKPF_KEY_TAB.

      DATA:

      L_QAMB LIKE QAMB,

      L_MKPF LIKE MKPF,

      L_TRTYP LIKE T158-TRTYP VALUE 'A',

      L_VGART LIKE T158-VGART VALUE 'WQ',

      L_XEXIT LIKE QM00-QKZ.

      P_SUBRC = 4.

      LOOP AT P_QAMB_TAB INTO L_QAMB.

      L_MKPF_KEY_TAB-MBLNR = L_QAMB-MBLNR.

      L_MKPF_KEY_TAB-MJAHR = L_QAMB-MJAHR.

      COLLECT L_MKPF_KEY_TAB.

      ENDLOOP.

      LOOP AT L_MKPF_KEY_TAB.

      CALL FUNCTION 'ENQUEUE_EMMKPF'

      EXPORTING

      MBLNR = L_MKPF_KEY_TAB-MBLNR

      MJAHR = L_MKPF_KEY_TAB-MJAHR

      EXCEPTIONS

      FOREIGN_LOCK = 1

      SYSTEM_FAILURE = 2

      OTHERS = 3.

      IF NOT SY-SUBRC IS INITIAL.

      L_XEXIT = 'X'.

      EXIT.

      ENDIF.

      CLEAR: L_MKPF.

      CALL FUNCTION 'MB_READ_MATERIAL_HEADER'

      EXPORTING

      MBLNR = L_MKPF_KEY_TAB-MBLNR

      MJAHR = L_MKPF_KEY_TAB-MJAHR

      TRTYP = L_TRTYP

      VGART = L_VGART

      IMPORTING

      KOPF = L_MKPF

      EXCEPTIONS

      ERROR_MESSAGE = 1.

      IF NOT SY-SUBRC IS INITIAL.

      L_XEXIT = 'X'.

      EXIT.

      ELSE.

      APPEND L_MKPF TO P_MKPF_TAB.

      ENDIF.

      ENDLOOP.

      IF NOT L_XEXIT IS INITIAL.

      EXIT.

      ELSE.

      P_SUBRC = 0.

      ENDIF.

      ENDFORM. " READ_MKPF

      *----


      *

      • Form READ_MSEG *

      *----


      *

      • MSEGs lesen *

      *----


      *

      FORM READ_MSEG USING P_MKPF_TAB TYPE T_MKPF_TAB

      P_MSEG_TAB TYPE T_MSEG_TAB

      P_SUBRC LIKE SY-SUBRC.

      DATA:

      L_MKPF LIKE MKPF,

      L_MSEG_TAB LIKE MSEG OCCURS 0 WITH HEADER LINE,

      L_TRTYP LIKE T158-TRTYP VALUE 'A',

      L_XEXIT LIKE QM00-QKZ.

      P_SUBRC = 4.

      LOOP AT P_MKPF_TAB INTO L_MKPF.

      CLEAR: L_MSEG_TAB. REFRESH: L_MSEG_TAB.

      CALL FUNCTION 'MB_READ_MATERIAL_POSITION'

      EXPORTING

      MBLNR = L_MKPF-MBLNR

      MJAHR = L_MKPF-MJAHR

      TRTYP = L_TRTYP

      */ ZEILB = P_ZEILE

      */ ZEILE = P_ZEILE

      TABLES

      SEQTAB = L_MSEG_TAB

      EXCEPTIONS

      ERROR_MESSAGE = 1.

      IF NOT SY-SUBRC IS INITIAL.

      L_XEXIT = 'X'.

      EXIT.

      ELSE.

      APPEND LINES OF L_MSEG_TAB TO P_MSEG_TAB.

      ENDIF.

      ENDLOOP.

      IF NOT L_XEXIT IS INITIAL.

      EXIT.

      ELSE.

      */ XAuto-Zeilen und Chargenzustandsänderung werden gelöscht

      DELETE P_MSEG_TAB WHERE XAUTO NE SPACE

      OR BWART EQ '341'

      OR BWART EQ '342'.

      P_SUBRC = 0.

      ENDIF.

      ENDFORM. " READ_MSEG

      *----


      *

      • Form CREATE_GOODS_MOVEMENT *

      *----


      *

      • Warenbewegung anlegen *

      *----


      *

      FORM CREATE_GOODS_MOVEMENT USING P_QALS LIKE QALS

      P_MSEG_TAB TYPE T_MSEG_TAB

      P_SUBRC LIKE SY-SUBRC.

      DATA:

      L_LMENGEZUB LIKE QALS-LMENGEZUB,

      L_LMENGEGEB LIKE QALS-LMENGEZUB,

      L_MBQSS LIKE MBQSS,

      L_IMKPF LIKE IMKPF,

      L_IMSEG LIKE IMSEG,

      L_IMSEG_TAB LIKE IMSEG OCCURS 1,

      L_EMKPF LIKE EMKPF,

      L_EMSEG LIKE EMSEG,

      L_EMSEG_TAB LIKE EMSEG OCCURS 1,

      L_MSEG LIKE MSEG,

      L_MSEG_TAB LIKE MSEG OCCURS 1,

      L_TCODE LIKE SY-TCODE VALUE 'QA11',

      L_TABIX LIKE SY-TABIX VALUE 1,

      L_XSTBW LIKE T156-XSTBW.

      CLEAR: P_SUBRC.

      */QAMB initialisieren

      CALL FUNCTION 'QAMB_REFRESH_DATA'.

      */Kopf füllen

      L_IMKPF-BLDAT = SY-DATLO.

      L_IMKPF-BUDAT = SY-DATLO.

      L_IMKPF-BKTXT = 'Cancellation of QM UD postings'.

      */Ursprüngliche zu buchende Menge merken + inkrementieren

      L_LMENGEZUB = P_QALS-LMENGEZUB.

      L_LMENGEGEB = P_QALS-LMENGE01

      + P_QALS-LMENGE02

      + P_QALS-LMENGE03

      + P_QALS-LMENGE04

      + P_QALS-LMENGE05

      + P_QALS-LMENGE06

      + P_QALS-LMENGE07

      + P_QALS-LMENGE08

      + P_QALS-LMENGE09.

      */Zeilen aufbauen

      L_MSEG_TAB[] = P_MSEG_TAB[].

      LOOP AT L_MSEG_TAB INTO L_MSEG.

      MOVE-CORRESPONDING L_MSEG TO L_MBQSS.

      MOVE-CORRESPONDING L_MBQSS TO L_IMSEG.

      */ Referenzbeleg übergeben, falls Bestellnummer gefüllt

      IF NOT L_MSEG-EBELN IS INITIAL.

      MOVE: L_MSEG-LFBNR TO L_IMSEG-LFBNR,

      L_MSEG-LFBJA TO L_IMSEG-LFBJA,

      L_MSEG-LFPOS TO L_IMSEG-LFPOS.

      ENDIF.

      MOVE L_MSEG-KDAUF TO L_IMSEG-KDAUF.

      MOVE L_MSEG-KDPOS TO L_IMSEG-KDPOS.

      MOVE L_MSEG-PS_PSP_PNR TO L_IMSEG-PS_PSP_PNR.

      */ Umlagerungsfelder setzen

      MOVE:

      L_MSEG-UMMAT TO L_IMSEG-UMMAT,

      L_MSEG-UMWRK TO L_IMSEG-UMWRK,

      L_MSEG-UMLGO TO L_IMSEG-UMLGO,

      L_MSEG-UMCHA TO L_IMSEG-UMCHA.

      */ Storno-Beleg setzen

      MOVE: L_MSEG-MJAHR TO L_IMSEG-SJAHR,

      L_MSEG-MBLNR TO L_IMSEG-SMBLN,

      L_MSEG-ZEILE TO L_IMSEG-SMBLP.

      */ Falsch gefüllte Felder initialisieren

      CLEAR: L_IMSEG-MBLNR,

      L_IMSEG-MENGE,

      L_IMSEG-MEINS.

      */ Bewegungsart lesen

      SELECT SINGLE XSTBW FROM T156 INTO L_XSTBW

      WHERE BWART = L_IMSEG-BWART.

      IF NOT SY-SUBRC IS INITIAL.

      P_SUBRC = 4.

      EXIT.

      ENDIF.

      */ Werk/Lagerort füllen

      IF P_QALS-STAT11 IS INITIAL.

      IF L_XSTBW IS INITIAL.

      MOVE P_QALS-LAGORTVORG TO L_IMSEG-LGORT.

      ELSE.

      MOVE P_QALS-LAGORTVORG TO L_IMSEG-UMLGO.

      ENDIF.

      ENDIF.

      IF L_XSTBW IS INITIAL.

      MOVE P_QALS-WERKVORG TO L_IMSEG-WERKS.

      ELSE.

      MOVE P_QALS-WERKVORG TO L_IMSEG-UMWRK.

      ENDIF.

      */ Zusätzliche Felder

      MOVE P_QALS-MENGENEINH TO L_IMSEG-ERFME.

      "MOVE P_GRUND TO L_IMSEG-GRUND.

      "MOVE P_ELIKZ TO L_IMSEG-ELIKZ.

      */ Kennzeichen Storno-Buchung setzen

      MOVE 'X' TO L_IMSEG-XSTOB.

      MOVE P_QALS-PRUEFLOS TO L_IMSEG-QPLOS.

      APPEND L_IMSEG TO L_IMSEG_TAB.

      IF P_QALS-STAT11 IS INITIAL.

      ADD L_IMSEG-ERFMG TO L_LMENGEZUB.

      SUBTRACT L_IMSEG-ERFMG FROM L_LMENGEGEB.

      ELSE.

      IF L_IMSEG-KZBEW EQ SPACE

      AND L_IMSEG-WERKS NE SPACE

      AND L_IMSEG-LGORT NE SPACE

      AND L_IMSEG-UMWRK NE SPACE

      AND L_IMSEG-UMLGO NE SPACE

      AND L_IMSEG-WERKS EQ L_IMSEG-UMWRK

      AND L_IMSEG-UMLGO EQ L_IMSEG-UMLGO.

      */ Dummy Buchung bei WE-Sperrbestand & Stichprobe

      ELSE.

      ADD L_IMSEG-ERFMG TO L_LMENGEZUB.

      SUBTRACT L_IMSEG-ERFMG FROM L_LMENGEGEB.

      ENDIF.

      ENDIF.

      ENDLOOP.

      IF NOT P_QALS-STAT11 IS INITIAL.

      */ Bei WE-Sperrbestand und Stichprobenbuchung Zeilen tauschen

      DO.

      READ TABLE L_IMSEG_TAB INDEX SY-INDEX INTO L_IMSEG.

      IF SY-SUBRC IS INITIAL

      AND L_IMSEG-KZBEW EQ SPACE

      AND L_IMSEG-WERKS NE SPACE

      AND L_IMSEG-LGORT NE SPACE

      AND L_IMSEG-UMWRK NE SPACE

      AND L_IMSEG-UMLGO NE SPACE

      AND L_IMSEG-WERKS EQ L_IMSEG-UMWRK

      AND L_IMSEG-UMLGO EQ L_IMSEG-UMLGO.

      IF SY-TABIX NE L_TABIX.

      DELETE L_IMSEG_TAB INDEX SY-TABIX.

      INSERT L_IMSEG INTO L_IMSEG_TAB INDEX L_TABIX.

      L_TABIX = L_TABIX + 1.

      ELSE.

      L_TABIX = L_TABIX + 1.

      CONTINUE.

      ENDIF.

      ELSEIF SY-SUBRC IS INITIAL.

      CONTINUE.

      ELSE.

      EXIT. "from do

      ENDIF.

      ENDDO.

      ENDIF.

      */QM deaktivieren

      CALL FUNCTION 'QAAT_QM_ACTIVE_INACTIVE'

      EXPORTING

      AKTIV = SPACE.

      */Buchen

      CALL FUNCTION 'MB_CREATE_GOODS_MOVEMENT'

      EXPORTING

      IMKPF = L_IMKPF

      XALLP = 'X'

      XALLR = 'X'

      CTCOD = L_TCODE

      XQMCL = ' '

      IMPORTING

      EMKPF = L_EMKPF

      TABLES

      IMSEG = L_IMSEG_TAB

      EMSEG = L_EMSEG_TAB.

      */QM wieder aktivieren

      CALL FUNCTION 'QAAT_QM_ACTIVE_INACTIVE'

      EXPORTING

      AKTIV = 'X'.

      */Buchung auswerten

      IF L_EMKPF-SUBRC GT 1.

      IF L_EMKPF-MSGID NE SPACE.

      */ Fehler auf Kopfebene

      MESSAGE ID L_EMKPF-MSGID TYPE 'S'

      NUMBER L_EMKPF-MSGNO

      WITH L_EMKPF-MSGV1 L_EMKPF-MSGV2

      L_EMKPF-MSGV3 L_EMKPF-MSGV4.

      SUBMIT (SY-REPID) VIA SELECTION-SCREEN.

      ELSE.

      */ Fehler auf Zeilenebene (Ausgabe des ersten Fehlers)

      LOOP AT L_EMSEG_TAB INTO L_EMSEG.

      IF L_EMSEG-MSGID NE SPACE.

      MESSAGE ID L_EMSEG-MSGID TYPE 'S'

      NUMBER L_EMSEG-MSGNO

      WITH L_EMSEG-MSGV1 L_EMSEG-MSGV2

      L_EMSEG-MSGV3 L_EMSEG-MSGV4.

      SUBMIT (SY-REPID) VIA SELECTION-SCREEN.

      ENDIF.

      ENDLOOP.

      ENDIF.

      ENDIF.

      LOOP AT L_EMSEG_TAB INTO L_EMSEG.

      CALL FUNCTION 'QAMB_COLLECT_RECORD'

      EXPORTING

      LOTNUMBER = P_QALS-PRUEFLOS

      DOCYEAR = L_EMKPF-MJAHR

      DOCNUMBER = L_EMKPF-MBLNR

      DOCPOSITION = L_EMSEG-MBLPO

      TYPE = '7'.

      ENDLOOP.

      */Sonderkorrektur für Frei-An-Frei & WE-Sperr-An-We-Sperr

      IF NOT P_QALS-STAT11 IS INITIAL.

      IF P_QALS-LMENGE04 EQ L_LMENGEGEB.

      ADD P_QALS-LMENGE04 TO L_LMENGEZUB.

      SUBTRACT P_QALS-LMENGE04 FROM L_LMENGEGEB.

      ENDIF.

      ELSEIF P_QALS-INSMK IS INITIAL.

      IF P_QALS-LMENGE01 GE L_LMENGEGEB

      AND NOT P_QALS-LMENGE01 IS INITIAL.

      ADD L_LMENGEGEB TO L_LMENGEZUB.

      SUBTRACT L_LMENGEGEB FROM L_LMENGEGEB.

      ENDIF.

      ENDIF.

      CLEAR: P_QALS-STAT34,

      P_QALS-MATNRNEU,

      P_QALS-CHARGNEU,

      P_QALS-LMENGE01,

      P_QALS-LMENGE02,

      P_QALS-LMENGE03,

      P_QALS-LMENGE04,

      P_QALS-LMENGE05,

      P_QALS-LMENGE06,

      P_QALS-LMENGE07,

      P_QALS-LMENGE08,

      P_QALS-LMENGE09.

      P_QALS-LMENGEZUB = L_LMENGEZUB.

      IF NOT L_LMENGEGEB IS INITIAL.

      P_SUBRC = 4.

      ENDIF.

      ENDFORM. " CREATE_GOODS_MOVEMENT

      *----


      *

      • Form POST_GOODS_MOVEMENT *

      *----


      *

      • Warenbewegung buchen *

      *----


      *

      FORM POST_GOODS_MOVEMENT.

      CALL FUNCTION 'MB_POST_GOODS_MOVEMENT'.

      ENDFORM. " POST_GOODS_MOVEMENT

      *----


      *

      • Form POST_DATA *

      *----


      *

      • QM-Daten verbuchen *

      *----


      *

      FORM POST_DATA USING P_QALS LIKE QALS

      P_QALS_LEISTE LIKE QALS

      P_QAMB_TAB TYPE QAMBTAB

      P_QAMB_VB_TAB TYPE QAMBTAB

      P_SUBRC LIKE SY-SUBRC.

      DATA:

      L_STAT LIKE JSTAT,

      L_STAT_TAB LIKE JSTAT OCCURS 0,

      L_QAMB LIKE QAMB,

      L_UPDKZ LIKE QALSVB-UPSL VALUE 'U'.

      */QAMBs umsetzen (7 = VE-Buchung storniert)

      LOOP AT P_QAMB_TAB INTO L_QAMB.

      L_QAMB-TYP = '7'.

      APPEND L_QAMB TO P_QAMB_VB_TAB.

      ENDLOOP.

      */BERF & BTEI zurücknehmen

      CLEAR L_STAT. CLEAR L_STAT_TAB.

      L_STAT-INACT = 'X'.

      L_STAT-STAT = 'I0219'. APPEND L_STAT TO L_STAT_TAB. "BTEI

      L_STAT-STAT = 'I0220'. APPEND L_STAT TO L_STAT_TAB. "BEND

      CALL FUNCTION 'STATUS_CHANGE_INTERN'

      EXPORTING

      OBJNR = P_QALS-OBJNR

      TABLES

      STATUS = L_STAT_TAB

      EXCEPTIONS

      ERROR_MESSAGE = 1.

      IF SY-SUBRC <> 0.

      MESSAGE ID SY-MSGID TYPE 'S' NUMBER SY-MSGNO

      WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

      SUBMIT (SY-REPID) VIA SELECTION-SCREEN.

      ENDIF.

      */Prüflos aktualisieren

      CALL FUNCTION 'QPL1_UPDATE_MEMORY'

      EXPORTING

      I_QALS = P_QALS

      I_UPDKZ = L_UPDKZ.

      CALL FUNCTION 'QPL1_INSPECTION_LOTS_POSTING'

      EXPORTING

      I_MODE = '1'.

      CALL FUNCTION 'STATUS_UPDATE_ON_COMMIT'.

      */QAMB initialisieren

      CALL FUNCTION 'QAMB_REFRESH_DATA'.

      PERFORM UPDATE_QAMB ON COMMIT.

      P_SUBRC = 0.

      ENDFORM. " POST_DATA

      *----


      *

      • Form UPDATE_QAMB *

      *----


      *

      • Update auf QAMB *

      *----


      *

      FORM UPDATE_QAMB.

      CALL FUNCTION 'QEVA_QAMB_CANCEL' IN UPDATE TASK

      EXPORTING

      T_QAMB_TAB = G_QAMB_VB_TAB.

      ENDFORM. " UPDATE_QAMB

      *----


      *

      • Form CHECK_MSEG *

      *----


      *

      • MSEGs prüfen *

      *----


      *

      FORM CHECK_MSEG USING P_MSEG_TAB TYPE T_MSEG_TAB

      P_QAMB_TAB TYPE QAMBTAB

      P_SUBRC LIKE SY-SUBRC.

      DATA:

      L_MSEG_STOR_TAB LIKE MSEG OCCURS 0 WITH HEADER LINE.

      CLEAR: P_SUBRC.

      */Zeilen bereits storniert?

      SELECT MBLNR MJAHR ZEILE SMBLN SJAHR SMBLP

      FROM MSEG INTO CORRESPONDING FIELDS OF TABLE L_MSEG_STOR_TAB

      FOR ALL ENTRIES IN P_MSEG_TAB

      WHERE SMBLN EQ P_MSEG_TAB-MBLNR

      AND SJAHR EQ P_MSEG_TAB-MJAHR

      AND SMBLP EQ P_MSEG_TAB-ZEILE.

      IF SY-SUBRC IS INITIAL.

      LOOP AT L_MSEG_STOR_TAB.

      DELETE P_MSEG_TAB WHERE MBLNR = L_MSEG_STOR_TAB-SMBLN

      AND MJAHR = L_MSEG_STOR_TAB-SJAHR

      AND ZEILE = L_MSEG_STOR_TAB-SMBLP.

      DELETE P_QAMB_TAB WHERE MBLNR = L_MSEG_STOR_TAB-SMBLN

      AND MJAHR = L_MSEG_STOR_TAB-SJAHR

      AND ZEILE = L_MSEG_STOR_TAB-SMBLP.

      ENDLOOP.

      IF P_MSEG_TAB[] IS INITIAL.

      P_SUBRC = 4.

      EXIT.

      ENDIF.

      ENDIF.

      ENDFORM. " CHECK_MSEG

      *----


      *

      • Form CHECK_MKPF *

      *----


      *

      • Materialbelege prüfen (Wurde durch VE-Buchung Prüfllos erzeugt?*

      *----


      *

      FORM CHECK_MKPF USING P_MKPF_TAB TYPE T_MKPF_TAB

      P_SUBRC LIKE SY-SUBRC.

      DATA:

      L_MKPF_TAB TYPE T_MKPF_TAB.

      CLEAR: P_SUBRC.

      SELECT MBLNR FROM QAMB INTO CORRESPONDING FIELDS OF TABLE L_MKPF_TAB

      FOR ALL ENTRIES IN P_MKPF_TAB

      WHERE MBLNR EQ P_MKPF_TAB-MBLNR

      AND MJAHR EQ P_MKPF_TAB-MJAHR

      AND TYP = '1'.

      IF SY-SUBRC IS INITIAL.

      P_SUBRC = 4.

      ENDIF.

      ENDFORM. " CHECK_MKPF

  • avatar image
    Former Member
    Aug 12, 2008 at 05:55 AM

    Dear,

    You need to reverse the GRN and cancel the inspection lot.

    Please try the following:

    Choose Logistics -> Materials Management -> Inventory Management -> Goods Movement -> Goods receipt -> For purchase order -> PO number known.

    - The initial screen for creating a goods receipt for a purchase order appears.

    - In the field for the movement type, choose the appropriate goords receipt reversal.

    - In the field for the purchase order, enter the purchase order number for the original goods receipt.

    - You can copy the purchase order number from the inspection lot.

    - Choose Enter to display the selection screen for the purchase order items.

    - Select the purchase order item for which you want to create the goods receipt and set the Stock type indicator to the stock to which the goods were originally posted with the usage decision (for example, F for unrestricted-use stock).

    - Save the goods receipt and exit the Materials Management component.

    Try to mention the posting date same as you mentioned while doing GRN.

    Choose Logistics -> Quality management -> Quality inspection -> Inspection lot -> Usage decision -> Change with history.

    - The initial screen for changing a usage decision appears.

    - Enter the number of the inspection lot for which you previously made the usage decision and choose Usage decision (UD).

    To cancel the inspection lot, choose Usage decision -> Functions -> Cancel lot in the usage decision screen.

    Regards,

    Syed Hussain.

    Add comment
    10|10000 characters needed characters exceeded