1、当检验批决策合格之后,怎么撤回。通过SAP给的一个程序可以进行撤回决策。

*&------------------------------------------------------------------*
*& Report  ZRQEVAC50
*&
*&------------------------------------------------------------------*
*&
*&sap notes 175842
*&------------------------------------------------------------------*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.
PARAMETERS:BUDAT LIKE MKPF-BUDAT .
SELECTION-SCREEN BEGIN OF LINE .
SELECTION-SCREEN COMMENT 3(50) TEXT-s01 .
*SELECTION-SCREEN comment 3(50) text-s02 .
SELECTION-SCREEN END OF LINE .
SELECTION-SCREEN BEGIN OF LINE .
*SELECTION-SCREEN comment 3(83) text-s01 .
SELECTION-SCREEN COMMENT 8(50) TEXT-s02 .
SELECTION-SCREEN END OF LINE .
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.
DATA  qls.START-OF-SELECTION.PERFORM enqueue_qals USING prueflosg_subrc.IF NOT g_subrc IS INITIAL.MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.SUBMIT (sy-repid) VIA SELECTION-SCREEN.ENDIF.PERFORM read_qals USING prueflosg_qalsg_qals_leisteg_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_qalsg_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_qalsg_qamb_tabg_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_tabg_mkpf_tabg_subrc.IF NOT g_subrc IS INITIAL.MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.SUBMIT (sy-repid) VIA SELECTION-SCREEN.ENDIF.PERFORM check_mkpf USING g_mkpf_tabg_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_tabg_mseg_tabg_subrc.IF NOT g_subrc IS INITIAL.MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.SUBMIT (sy-repid) VIA SELECTION-SCREEN.ENDIF.PERFORM check_mseg USING g_mseg_tabg_qamb_tabg_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_qalsg_mseg_tabg_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_qalsg_qals_leisteg_qamb_tabg_qamb_vb_tabg_subrc.IF NOT g_subrc IS INITIAL.MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgnoWITH 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-prueflosp_subrc    LIKE sy-subrc.CLEAR: p_subrc.CALL FUNCTION 'ENQUEUE_EQQALS1'EXPORTINGprueflos       = p_prueflosEXCEPTIONSforeign_lock   = 1system_failure = 2OTHERS         = 3.p_subrc = sy-subrc.ENDFORM.                               " ENQUEUE_QALS*-------------------------------------------------------------------*
*       Form  READ_QALS                                                *
*-------------------------------------------------------------------*
*       Prüflos lesen                                                  *
*-------------------------------------------------------------------*
FORM read_qals USING p_prueflos    LIKE qals-prueflosp_qals        LIKE qalsp_qals_leiste LIKE qalsp_subrc       LIKE sy-subrc.CLEAR: p_subrc.CALL FUNCTION 'QPSE_LOT_READ'EXPORTINGi_prueflos  = p_prueflosi_reset_lot = 'X'IMPORTINGe_qals      = p_qalsEXCEPTIONSno_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 qalsp_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 documentIF p_qals-zeile IS INITIAL.EXIT.ELSE.
*    p_subrc = 128.p_subrc = 64.ENDIF.*/Serialized Material
*---------------CHANGED  BY HANDMY AT 20190219
*  IF NOT p_qals-sernp IS INITIAL.
*    EXIT.
*  ELSE.
*    p_subrc = 64.
*  ENDIF.
*---------------ADD BY HANDMY AT 20190219*/BERFCALL FUNCTION 'STATUS_CHECK'EXPORTINGobjnr             = p_qals-objnrstatus            = 'I0203'EXCEPTIONSstatus_not_active = 2.IF NOT sy-subrc IS INITIAL.EXIT.ELSE.p_subrc = 32.ENDIF.*/BTEI & BENDCLEAR l_stat. CLEAR l_stat_tab. REFRESH l_stat_tab.l_stat-stat = 'I0219'. APPEND l_stat TO l_stat_tab. "BTEIl_stat-stat = 'I0220'. APPEND l_stat TO l_stat_tab. "BENDCALL FUNCTION 'STATUS_OBJECT_CHECK_MULTI'EXPORTINGobjnr        = p_qals-objnrTABLESstatus_check = l_stat_tab.IF l_stat_tab[] IS INITIAL.EXIT.ELSE.p_subrc = 16.ENDIF.*/LSTO & LSTVCLEAR l_stat. CLEAR l_stat_tab. REFRESH l_stat_tab.l_stat-stat = 'I0224'. APPEND l_stat TO l_stat_tab. "LSTOl_stat-stat = 'I0232'. APPEND l_stat TO l_stat_tab. "LSTVCALL FUNCTION 'STATUS_OBJECT_CHECK_MULTI'EXPORTINGobjnr        = p_qals-objnrTABLESstatus_check = l_stat_tab.IF NOT l_stat_tab[] IS INITIAL.EXIT.ELSE.p_subrc = 8.ENDIF.*/ARSP & ARCH & REO1 & REO2 & REO3CLEAR l_stat. CLEAR l_stat_tab. REFRESH l_stat_tab.l_stat-stat = 'I0225'. APPEND l_stat TO l_stat_tab. "ARSPl_stat-stat = 'I0226'. APPEND l_stat TO l_stat_tab. "ARCHl_stat-stat = 'I0227'. APPEND l_stat TO l_stat_tab. "REO3l_stat-stat = 'I0228'. APPEND l_stat TO l_stat_tab. "REO2l_stat-stat = 'I0229'. APPEND l_stat TO l_stat_tab. "REO1CALL FUNCTION 'STATUS_OBJECT_CHECK_MULTI'EXPORTINGobjnr        = p_qals-objnrTABLESstatus_check = l_stat_tab.IF NOT l_stat_tab[] IS INITIAL.EXIT.ELSE.p_subrc = 4.ENDIF.*/SPERCALL FUNCTION 'STATUS_CHECK'EXPORTINGobjnr             = p_qals-objnrstatus            = 'I0043'EXCEPTIONSstatus_not_active = 2.IF sy-subrc IS INITIAL.EXIT.ELSE.p_subrc = 2.ENDIF.*/HUMCALL FUNCTION 'STATUS_CHECK'EXPORTINGobjnr             = p_qals-objnrstatus            = 'I0443'EXCEPTIONSstatus_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 qalsp_qamb_tab TYPE qambtabp_subrc    LIKE sy-subrc.CLEAR: p_subrc.SELECT * FROM qamb INTO TABLE p_qamb_tabWHERE prueflos =  p_qals-prueflosAND typ   = '3'.p_subrc = sy-subrc.ENDFORM.                               " READ_QAMB*-------------------------------------------------------------------*
*       Form  READ_MKPF                                                *
*-------------------------------------------------------------------*
*       Read material document header                                  *
*-------------------------------------------------------------------*
FORM read_mkpf USING p_qamb_tab TYPE qambtabp_mkpf_tab TYPE t_mkpf_tabp_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'EXPORTINGmblnr          = l_mkpf_key_tab-mblnrmjahr          = l_mkpf_key_tab-mjahrEXCEPTIONSforeign_lock   = 1system_failure = 2OTHERS         = 3.IF NOT sy-subrc IS INITIAL.l_xexit = 'X'.EXIT.ENDIF.CLEAR: l_mkpf.CALL FUNCTION 'MB_READ_MATERIAL_HEADER'EXPORTINGmblnr         = l_mkpf_key_tab-mblnrmjahr         = l_mkpf_key_tab-mjahrtrtyp         = l_trtypvgart         = l_vgartIMPORTINGkopf          = l_mkpfEXCEPTIONSerror_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_tabp_mseg_tab TYPE t_mseg_tabp_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'EXPORTINGmblnr         = l_mkpf-mblnrmjahr         = l_mkpf-mjahrtrtyp         = l_trtyp
*/            ZEILB  = P_ZEILE
*/            ZEILE  = P_ZEILETABLESseqtab        = l_mseg_tabEXCEPTIONSerror_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?schtDELETE p_mseg_tab WHERE xauto NE spaceOR 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 qalsp_mseg_tab TYPE t_mseg_tabp_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 initialisierenCALL FUNCTION 'QAMB_REFRESH_DATA'.*/Kopf füllenIF budat IS INITIAL .l_imkpf-bldat = sy-datlo.l_imkpf-budat = sy-datlo.ELSE .l_imkpf-bldat = budat.l_imkpf-budat = budat.ENDIF.l_imkpf-bktxt = 'Cancellation of QM UD postings'.*/Ursprüngliche zu buchende Menge merken + inkrementierenl_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 aufbauenl_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ülltIF 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 setzenMOVE: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 setzenMOVE: 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 initialisierenCLEAR: l_imseg-mblnr,l_imseg-menge,l_imseg-meins.*/  Bewegungsart lesenSELECT SINGLE xstbw FROM t156 INTO l_xstbwWHERE bwart = l_imseg-bwart.IF NOT sy-subrc IS INITIAL.p_subrc = 4.EXIT.ENDIF.*/  Werk/Lagerort füllenIF 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 FelderMOVE p_qals-mengeneinh TO l_imseg-erfme."MOVE P_GRUND           TO L_IMSEG-GRUND."MOVE P_ELIKZ           TO L_IMSEG-ELIKZ.
*/  Kennzeichen Storno-Buchung setzenMOVE '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 spaceAND l_imseg-werks NE spaceAND l_imseg-lgort NE spaceAND l_imseg-umwrk NE spaceAND l_imseg-umlgo NE spaceAND l_imseg-werks EQ l_imseg-umwrkAND l_imseg-umlgo EQ l_imseg-umlgo.
*/      Dummy Buchung bei WE-Sperrbestand & StichprobeELSE.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 tauschenDO.READ TABLE l_imseg_tab INDEX sy-index INTO l_imseg.IF     sy-subrc      IS INITIALAND l_imseg-kzbew EQ spaceAND l_imseg-werks NE spaceAND l_imseg-lgort NE spaceAND l_imseg-umwrk NE spaceAND l_imseg-umlgo NE spaceAND l_imseg-werks EQ l_imseg-umwrkAND 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 doENDIF.ENDDO.ENDIF.*/QM deaktivierenCALL FUNCTION 'QAAT_QM_ACTIVE_INACTIVE'EXPORTINGaktiv = space.
*/BuchenCALL FUNCTION 'MB_CREATE_GOODS_MOVEMENT'EXPORTINGimkpf = l_imkpfxallp = 'X'xallr = 'X'ctcod = l_tcodexqmcl = ' 'IMPORTINGemkpf = l_emkpfTABLESimseg = l_imseg_tabemseg = l_emseg_tab.
*/QM wieder aktivierenCALL FUNCTION 'QAAT_QM_ACTIVE_INACTIVE'EXPORTINGaktiv = 'X'.*/Buchung auswertenIF l_emkpf-subrc GT 1.IF l_emkpf-msgid NE space.
*/    Fehler auf KopfebeneMESSAGE ID l_emkpf-msgid TYPE 'S'NUMBER l_emkpf-msgnoWITH l_emkpf-msgv1 l_emkpf-msgv2l_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-msgnoWITH l_emseg-msgv1 l_emseg-msgv2l_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'EXPORTINGlotnumber   = p_qals-prueflosdocyear     = l_emkpf-mjahrdocnumber   = l_emkpf-mblnrdocposition = l_emseg-mblpotype        = '7'.ENDLOOP.*/Sonderkorrektur für Frei-An-Frei & WE-Sperr-An-We-SperrIF 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_lmengegebAND 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 qalsp_qals_leiste LIKE qalsp_qamb_tab    TYPE qambtabp_qamb_vb_tab TYPE qambtabp_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ücknehmenCLEAR l_stat. CLEAR l_stat_tab.l_stat-inact = 'X'.l_stat-stat = 'I0219'. APPEND l_stat TO l_stat_tab. "BTEIl_stat-stat = 'I0220'. APPEND l_stat TO l_stat_tab. "BENDCALL FUNCTION 'STATUS_CHANGE_INTERN'EXPORTINGobjnr         = p_qals-objnrTABLESstatus        = l_stat_tabEXCEPTIONSerror_message = 1.IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.SUBMIT (sy-repid) VIA SELECTION-SCREEN.ENDIF.*/Prüflos aktualisierenCALL FUNCTION 'QPL1_UPDATE_MEMORY'EXPORTINGi_qals  = p_qalsi_updkz = l_updkz.CALL FUNCTION 'QPL1_INSPECTION_LOTS_POSTING'EXPORTINGi_mode = '1'.CALL FUNCTION 'STATUS_UPDATE_ON_COMMIT'.*/QAMB initialisierenCALL 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 TASKEXPORTINGt_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_tabp_qamb_tab TYPE qambtabp_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 smblpFROM mseg INTO CORRESPONDING FIELDS OF TABLE l_mseg_stor_tabFOR ALL ENTRIES IN p_mseg_tabWHERE smbln EQ p_mseg_tab-mblnrAND sjahr EQ p_mseg_tab-mjahrAND 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-smblnAND mjahr = l_mseg_stor_tab-sjahrAND zeile = l_mseg_stor_tab-smblp.DELETE p_qamb_tab WHERE     mblnr = l_mseg_stor_tab-smblnAND mjahr = l_mseg_stor_tab-sjahrAND 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_tabp_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_tabFOR ALL ENTRIES IN p_mkpf_tabWHERE mblnr EQ p_mkpf_tab-mblnrAND mjahr EQ p_mkpf_tab-mjahrAND typ   = '1'.IF sy-subrc IS INITIAL.p_subrc = 4.ENDIF.ENDFORM.                               " CHECK_MKPF

取消检验批过账(决策)相关推荐

  1. 取消检验批过账(取消检验批UD判定到Rerel,再把非限性库存转到质检库存,然后就可以取101收货了)

    直接取消101收货时,出现以下提示: (1)第一种方法:先把主数据的QM视图的QM相关信息取消,如下图: 取消QM采购激活及检验设置后,通过传输过账,把数量从非限库存转到质检库存. 过账完成后,数量从 ...

  2. SAP QM 内向交货单包装的时候触发的检验批不能被自动取消?

    SAP QM 内向交货单包装的时候触发的检验批不能被自动取消? 如下的交货单 2500053233,包装完成后触发了三个检验批. 内向交货单并没有完成收货过账. Inspection lot 1000 ...

  3. SAP-QM 质检管理-检验批

    1.基本概念 检验批编号的作用:通过检验批次号,记录信息. QM模块是贯穿整个ERP的核心,学习QM模块通常需要其他模块的知识作为基础铺垫(比如PP.PM.SD.MM等). 2.QM模块主要内容 包含 ...

  4. SAP QA11 检验决策并过帐 BAPI

    在对检验批做决策时可以使用BAPI:BAPI_INSPLOT_SETUSAGEDECISION.此BAPI 其实也可以过帐,但不能针对不同的类型过帐,比如有部分数量进入非限制库存,有部分数量进入冻结库 ...

  5. SAP质量管理模块常见问题及解决方案

    https://blog.csdn.net/zhongguomao/article/details/46237783 SAP系统中的质量管理模块是SAP的重要组成部分,它几乎影响公司中的所有过程,质量 ...

  6. SAP QM模块常见问题及解决方案

    SAP系统中的质量管理模块是SAP的重要组成部分,它几乎影响公司中的所有过程,质量管理可以与很多应用集成,比如物料管理,生产,销售/分销等.而质量管理中最重要的概念则是检验批,用户通过检验批进行检验结 ...

  7. SAP vf11发票冲销

    So产生的开票(vf01)可直接vf11冲销,对其他无影响.若财务已经vf02过账到财务,生成了会计凭证,也可以vf11冲销,但只能取消销售发票,会计凭证仍然存在,这里就还需要冲销这张会计凭证,要不然 ...

  8. 万字长文解读深度学习算法在自动驾驶规控中的应用

    交流群 | 进"传感器群/滑板底盘群"请加微信号:xsh041388 交流群 | 进"汽车基础软件群"请加微信号:ckc1087 备注信息:群名称 + 真实姓名 ...

  9. (转载整理)SAP ERP常用T-CODE

    其实最讨厌做ERP的项目了.不过,身不由己的嘛! 网上资料加一些整理. 与客户相关  VD01 建立客户 Create customer VD02 更改客户 Change customer VD03 ...

最新文章

  1. ThinkPHP实现静态缓存和动态缓存
  2. discuz“附件文件无法保存到远程服务器”故障的解决
  3. java课程实战培训,终获offer
  4. python哪本好-最好的Python入门教材是哪本?
  5. 如何学好计算机专业?
  6. 自从我这样撸代码以后,公司网页的浏览量提高了107%!
  7. java 读取manifest_使用JAVA从jar文件读取MANIFEST.MF文件
  8. 国内有哪些做H5走心的外包服务团队或公司?
  9. 视觉SLAM十四讲_3-李群和李代数
  10. NIO蔚来ET5/ET7电动汽车维修手册电路图用户手册技术资料
  11. php 统计一个月工作日,php – 使用strtotime在一个月内获得第一个工作日
  12. 从端到云:飞腾平台全栈解决方案白皮书
  13. BZOJ1921: [Ctsc2010]珠宝商(点分治+SAM)
  14. UE<C++>三步在C++中制作射击类游戏(射线检测、接口调用)
  15. 今天是植树节,你“植树”了吗?
  16. mysql创建数据库error1044_Mysql创建数据库时提示Error 1044
  17. 一枚研发狗的自我认知历程
  18. 通达信板块监控指标_通达信辅助判断指标公式行业板块看盘幅图
  19. 联合循环—25(了解PID原理图1)
  20. oracle物化视图建立触发器,物化视图上用触发器(用于同步)

热门文章

  1. 关于电脑怎么连接隐藏的无线WiFi信号
  2. 算法与分析-实验一 算法设计基础
  3. Android8.1 MTK平台 修改蓝牙默认名称
  4. 正交化(Orthogonalization)
  5. 图像插值——线性差值
  6. 创维linux怎么连接wifi,创维酷开电视多屏互动Miracast玩法详解
  7. jQuery(JS库) | 一文带你掌握jQuery的使用
  8. oracle like通配符区分大小写
  9. 云队友丨外卖骑手,巨头的炮灰
  10. linux 音频文件切割_linux下通过CUE分割APE、FLAC、WAV无损音频