直接取消101收货时,出现以下提示:
(1)第一种方法:先把主数据的QM视图的QM相关信息取消,如下图:
取消QM采购激活及检验设置后,通过传输过账,把数量从非限库存转到质检库存。
过账完成后,数量从非限定到质检。再过SE16N把删除检验批与物料凭证的关联关系(记得在查询前在命令窗口输入/h,再回车):
然后,选中,删除,保存即可。
再取消101收货即可,
(2)第二种方法,就打Notes(SAP Notes 74638).通过检验批取消UD转到为Rerel(zqevac40)。再通过检验批把非限定性库存转为质检库存(zrqevac50)。
对用户来讲,只需输入事务码:ZMMXX8 (可以把权限直接给仓库主管即可),然后输入检验批,执行即可以。
执行完成后,直接 MIGO,取消相应的物料凭证即可。
具体代码如下:
以下代码调用两步(UD转REREL\非限定库存转质检库存),可以定一个事务码:ZMMXX8,程序ZQMR_CANCEL_Q。
*&---------------------------------------------------------------------*
*& Report ZQMR_CANCEL_Q
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*REPORT ZQMR_CANCEL_Q.PARAMETERS:prueflos LIKE qals-prueflos OBLIGATORY MEMORY ID qls.START-OF-SELECTION.SUBMIT zqevac40 WITH prueflos = prueflos AND RETURN.WAIT UP TO 1 SECONDS.SUBMIT zrqevac50 WITH prueflos = prueflos AND RETURN.
取消检验批UD转rerel,代码如下:
*&---------------------------------------------------------------------*
*& Report ZQEVAC40
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zqevac40.
*----------------------------------------------------------------------*
* Datendefinitionen
*----------------------------------------------------------------------*
* Tabellen
*----------------------------------------------------------------------*
TABLES sscrfields.
TABLES qals.
TABLES qave.*----------------------------------------------------------------------*
* Konstanten
CONSTANTS:c_rc_0 LIKE sy-subrc VALUE 0,c_rc_4 LIKE sy-subrc VALUE 4,c_rc_20 LIKE sy-subrc VALUE 20,
*c_kreuz LIKE qm00-qkz VALUE 'X'.
**----------------------------------------------------------------------*
* Eingabebildschirm
SELECTION-SCREEN SKIP 2.
PARAMETERS prueflos LIKE qals-prueflos MATCHCODE OBJECT qalsMEMORY ID qls .
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN BEGIN OF BLOCK search WITH FRAME.
SELECTION-SCREEN BEGIN OF LINE.SELECTION-SCREEN PUSHBUTTON 3(20) TEXT-s01 USER-COMMAND sear.
SELECTION-SCREEN PUSHBUTTON 40(20) TEXT-s02 USER-COMMAND show.SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK search.*----------------------------------------------------------------------*
AT SELECTION-SCREEN.IF sscrfields-ucomm EQ 'SEAR'OR prueflos IS INITIAL.CALL FUNCTION 'QELA_START_SELECTION_OF_LOTS'EXPORTINGi_selid = ' 'i_stat_aenderung = 'X'i_stat_ero = 'X'i_stat_frei = 'X'i_stat_ve = ' 'IMPORTINGe_prueflos = prueflosEXCEPTIONSno_entry = 1no_selected = 2OTHERS = 3.ENDIF.IF sscrfields-ucomm EQ 'SHOW'.CALL FUNCTION 'QSS1_LOT_SHOW'EXPORTINGi_prueflos = prueflos.ENDIF.CHECK sscrfields-ucomm EQ 'ONLI'.* ab hier mu Pr黤losnummer gef黮lt sein.IF prueflos IS INITIAL.MESSAGE e164(qa).ENDIF.* Lesen LosCALL FUNCTION 'ENQUEUE_EQQALS1'EXPORTINGprueflos = prueflos.CALL FUNCTION 'QPSE_LOT_READ'EXPORTINGi_prueflos = prueflosIMPORTINGe_qals = qalsEXCEPTIONSno_lot = 1.IF NOT sy-subrc IS INITIAL.MESSAGE e102(qa).ENDIF.
*-----------------
* Pr黤en StatusCALL FUNCTION 'QAST_STATUS_CHECK'EXPORTINGi_objnr = qals-objnri_status = 'I0218' "Status VE getroffenEXCEPTIONSstatus_not_activ = 1.IF NOT sy-subrc IS INITIAL.MESSAGE e102(qv) WITH qals-prueflos.ENDIF.
*CALL FUNCTION 'QEVA_UD_READ'EXPORTINGi_prueflos = qals-prueflosIMPORTINGe_qave = qave.*---------------------------------------------------------------------*
START-OF-SELECTION.
* Vorgaben sind ok. 1. Material Umlagern und Los 鋘dernPERFORM qals_aendern.
************************************************************************
*----------------------------------------------------------------------*
* FORM QALS_aendern
*----------------------------------------------------------------------*
FORM qals_aendern.
*PERFORM status_fix_setzen USING 'I0002' c_kreuz.PERFORM status_fix_setzen USING 'I0216' space.PERFORM status_fix_setzen USING 'I0217' space.PERFORM status_fix_setzen USING 'I0218' space.CLEAR: qals-stat14.CLEAR: qals-stat35.CLEAR: qave-vauswahlmg,qave-vwerks,qave-versionam,qave-vcodegrp,qave-vcode,qave-vbewertung,qave-versioncd,qave-vfolgeakti,qave-qkennzahl.
*--... verbuchenCALL FUNCTION 'QEVA_UD_UPDATE' IN UPDATE TASKEXPORTINGqals_new = qalsqave_new = qave.COMMIT WORK.MESSAGE s101(qa) WITH qals-prueflos.CALL FUNCTION 'DEQUEUE_EQQALS1'EXPORTINGprueflos = prueflos.
ENDFORM. "qals_aendern
*----------------------------------------------------------------------*
* Form STATUS_FIX_SETZEN
*----------------------------------------------------------------------*
* Setzen eines Status aufgrund von Voreinstellungen wie QMAT etc. *
*----------------------------------------------------------------------*
* --> STATUS Status der gesetzt werden soll
* --> AKTIV Status wird aktiviert sonst deaktiviert
*----------------------------------------------------------------------*
FORM status_fix_setzen USINGVALUE(status) LIKE tj02-istatVALUE(aktiv) LIKE c_kreuz.
* lokale Tabelle fuer StatusfortschreibungDATA: BEGIN OF l_stattab OCCURS 0.INCLUDE STRUCTURE jstat.DATA END OF l_stattab.
*
* Falls Objektnr. nicht gef黮lt. --> Fehlermeldung !!!IF qals-objnr EQ space.MESSAGE e013(qv).
* Fehlende Objektnr.: Problem f script>document.write('\r\n');ENDIF.MOVE status TO l_stattab-stat.IF aktiv EQ space.MOVE c_kreuz TO l_stattab-inact.ENDIF.
*APPEND l_stattab.
*CALL FUNCTION 'STATUS_CHANGE_INTERN'EXPORTINGcheck_only = spaceobjnr = qals-objnrTABLESstatus = l_stattab.ENDFORM. " STATUS_FIX_SETZEN
把非限定性库存转质检库存代码如下:
*&---------------------------------------------------------------------*
*& Report ZRQEVAC50
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zrqevac50 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 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黤los 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黤los pr黤en *
*----------------------------------------------------------------------*
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.ENDIF.*/Serialized MaterialIF NOT p_qals-sernp IS INITIAL.EXIT.ELSE.p_subrc = 64.ENDIF.*/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鋘derung werden gel鰏chtDELETE 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黮lenl_imkpf-bldat = sy-datlo.l_imkpf-budat = sy-datlo.l_imkpf-bktxt = 'Cancellation of QM UD postings'.*/Urspr黱gliche 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 黚ergeben, falls Bestellnummer gef黮ltIF 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黮lte 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黮lenIF 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鋞zliche 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黵 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點knehmenCLEAR 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黤los 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黤en *
*----------------------------------------------------------------------*
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黤en (Wurde durch VE-Buchung Pr黤llos 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