* Program Name :
* Descriptions :
* T-Code :
* Updates Tables :
* Input Parameters :
* Output Parameters :
*Return Codes :
* Special Logic :
* Includes :
************************************************************************* Modification Log
*************************************************************************Date Ver. Programmer Descriptions
*-------- ---- ------------ -------------------------------------------*20206.25 xxx Create*************************************************************************
REPORT ZQMRTEST.************************************************************************Tables Definitions
*************************************************************************TABLES:.*************************************************************************Data Definitions
************************************************************************
CONSTANTS: g_flag TYPE c VALUE'X'.DATA: gs_qals LIKE qals,gs_qave LIKE qave.************************************************************************* Includes Module
************************************************************************************************************************************************* Selection Screen
************************************************************************
PARAMETERS: p_qplos LIKE qals-prueflos OBLIGATORY.************************************************************************* Initialization
************************************************************************
INITIALIZATION.************************************************************************* At Selection Screen
************************************************************************
AT SELECTION-SCREEN.PERFORM check_data.************************************************************************* At Selection Screen Output
************************************************************************
AT SELECTION-SCREEN OUTPUT.************************************************************************* Report Format
************************************************************************TOP-OF-PAGE.END-OF-PAGE.************************************************************************* Main Process
************************************************************************START-OF-SELECTION.PERFORM ud_to_rel.END-OF-SELECTION.*&---------------------------------------------------------------------**& Form CHECK_DATA
*&---------------------------------------------------------------------*
FORM check_data."檢查是否存在檢驗批CALL FUNCTION 'QPSE_LOT_READ'EXPORTINGi_prueflos = p_qplosIMPORTINGe_qals = gs_qalsEXCEPTIONSno_lot = 1OTHERS = 2.IF sy-subrc NE 0.MESSAGE e102(qa) WITH p_qplos.ENDIF."檢驗批枷鎖CALLFUNCTION'ENQUEUE_EQQALS1'EXPORTINGprueflos = p_qplosEXCEPTIONSforeign_lock =1system_failure =2OTHERS =3.IF sy-subrc NE 0.MESSAGE e007(qa)WITH'有人' p_qplos.ENDIF."UD狀態檢查CALL FUNCTION 'QAST_STATUS_CHECK'EXPORTINGi_objnr = gs_qals-objnri_status = 'I0218'EXCEPTIONSstatus_not_activ = 1OTHERS = 2.IF sy-subrc NE 0.MESSAGE e102(qv) WITH p_qplos.ENDIF."檢驗批UD資料CALLFUNCTION'QEVA_UD_READ'EXPORTINGI_PRUEFLOS = p_qplosIMPORTINGE_QAVE = gs_qaveEXCEPTIONSqave_not_found =1OTHERS =2.ENDFORM."CHECK_DATA*&---------------------------------------------------------------------*
*& Form UD_TO_REL
*&---------------------------------------------------------------------*
FORM ud_to_rel."REL核發狀態生效PERFORM status_change USING'I0002' g_flag."STIC檢驗完成狀態失效PERFORM status_change USING 'I0216' space."ICCO已完成所有檢驗狀態失效PERFORM status_change USING'I0217' space."UD已做出檢驗結果判定狀態失效PERFORM status_change USING 'I0218' space."值更改CLEAR: gs_qals-stat14,gs_qals-stat35.CLEAR: gs_qave-vauswahlmg,gs_qave-vwerks,gs_qave-versionam,gs_qave-vcodegrp,gs_qave-vcode,gs_qave-vbewertung,gs_qave-versioncd,gs_qave-vfolgeakti,gs_qave-qkennzahl.CALLFUNCTION'QEVA_UD_UPDATE'INUPDATE TASKEXPORTINGqals_new = gs_qalsqave_new = gs_qave.IF sy-subrc =0.COMMITWORK.MESSAGE '檢驗批已取消UD判定'TYPE'S'.ELSE.ROLLBACKWORK.MESSAGE '檢驗批未做任何修改'TYPE'E'.ENDIF.ENDFORM."UD_TO_REL*&---------------------------------------------------------------------*
*& Form STATUS_CHANGE
*&---------------------------------------------------------------------*
FORM status_change USING in_status in_flag.DATA: lt_status LIKE TABLE OF jstat,ls_status LIKE LINE OF lt_status.IF gs_qals-objnr IS INITIAL.MESSAGE e013(qv).ENDIF.ls_status-stat = in_status.IF in_flag IS INITIAL.ls_status-inact = g_flag.ENDIF.APPEND ls_status TO lt_status.CLEAR ls_status.CALL FUNCTION 'STATUS_CHANGE_INTERN'EXPORTINGobjnr = gs_qals-objnrTABLESstatus = lt_statusEXCEPTIONSobject_not_found = 1status_inconsistent = 2status_not_allowed = 3OTHERS = 4.ENDFORM. "STATUS_CHANGE
QEVA0008
木葉飛舞之處,火亦生生不息
四、SAP Notes 175842—取消檢驗批的庫存過賬
參考SAP Notes 175842的程序RQEVAC50
效果:
已存貨過賬:
取消存貨過賬:
代碼:
************************************************************************* Program Name :
* Descriptions :
* T-Code :
* Updates Tables :
* Input Parameters :
* Output Parameters :
*Return Codes :
* Special Logic :
* Includes :
************************************************************************* Modification Log
*************************************************************************Date Ver. Programmer Descriptions
*-------- ---- ------------ -------------------------------------------*20207.3 xxx Create*************************************************************************
REPORT ZQMRTEST 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."nspection LotDATA: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邦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.CALLFUNCTION'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.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. "REO1CALLFUNCTION'STATUS_OBJECT_CHECK_MULTI'EXPORTINGOBJNR = P_QALS-OBJNRTABLESSTATUS_CHECK = L_STAT_TAB.IFNOT L_STAT_TAB[]IS INITIAL.EXIT.ELSE.P_SUBRC =4.ENDIF.*/SPERCALLFUNCTION'STATUS_CHECK'EXPORTINGOBJNR = P_QALS-OBJNRSTATUS='I0043'EXCEPTIONSSTATUS_NOT_ACTIVE =2.IF SY-SUBRC IS INITIAL.EXIT.ELSE.P_SUBRC =2.ENDIF.*/HUMCALLFUNCTION'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:BEGINOF L_MKPF_KEY_TAB OCCURS 0,MBLNR LIKE MKPF-MBLNR,MJAHR LIKE MKPF-MJAHR,ENDOF 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.CALLFUNCTION'ENQUEUE_EMMKPF'EXPORTINGMBLNR = L_MKPF_KEY_TAB-MBLNRMJAHR = L_MKPF_KEY_TAB-MJAHREXCEPTIONSFOREIGN_LOCK =1SYSTEM_FAILURE =2OTHERS =3.IFNOT SY-SUBRC IS INITIAL.L_XEXIT ='X'.EXIT.ENDIF.CLEAR: L_MKPF.CALLFUNCTION'MB_READ_MATERIAL_HEADER'EXPORTINGMBLNR = L_MKPF_KEY_TAB-MBLNRMJAHR = L_MKPF_KEY_TAB-MJAHRTRTYP = L_TRTYPVGART = L_VGARTIMPORTINGKOPF = L_MKPFEXCEPTIONSERROR_MESSAGE =1.IFNOT SY-SUBRC IS INITIAL.L_XEXIT ='X'.EXIT.ELSE.APPEND L_MKPF TO P_MKPF_TAB.ENDIF.ENDLOOP.IFNOT 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 VALUE1,L_XSTBW LIKE T156-XSTBW.CLEAR: P_SUBRC.*/QAMB initialisierenCALLFUNCTION'QAMB_REFRESH_DATA'.*/Kopf f邦llenL_IMKPF-BLDAT = SY-DATLO.L_IMKPF-BUDAT = SY-DATLO.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邦lltIFNOT 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.IFNOT 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.IFNOT P_QALS-STAT11 IS INITIAL.*/ Bei WE-Sperrbestand und Stichprobenbuchung Zeilen tauschenDO.READTABLE L_IMSEG_TAB INDEX SY-INDEXINTO 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_IMKPF "L_IMKPF-BUDAT可修改過賬日期XALLP ='X'XALLR ='X'CTCOD = L_TCODEXQMCL =' 'IMPORTINGEMKPF = L_EMKPFTABLESIMSEG = L_IMSEG_TABEMSEG = L_EMSEG_TAB.*/QM wieder aktivierenCALLFUNCTION'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.CALLFUNCTION'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-SperrIFNOT 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_LMENGEGEBANDNOT 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.IFNOT 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. "BENDCALLFUNCTION'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 aktualisierenCALLFUNCTION'QPL1_UPDATE_MEMORY'EXPORTINGI_QALS = P_QALSI_UPDKZ = L_UPDKZ.CALLFUNCTION'QPL1_INSPECTION_LOTS_POSTING'EXPORTINGI_MODE ='1'.CALLFUNCTION'STATUS_UPDATE_ON_COMMIT'.*/QAMB initialisierenCALLFUNCTION'QAMB_REFRESH_DATA'.PERFORM UPDATE_QAMB ONCOMMIT.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 0WITH HEADER LINE.CLEAR: P_SUBRC.*/Zeilen bereits storniert?SELECT MBLNR MJAHR ZEILE SMBLN SJAHR SMBLPFROM MSEG INTO CORRESPONDING FIELDSOFTABLE L_MSEG_STOR_TABFORALL 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