日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SAP UD取消处理合订本

發布時間:2023/12/18 编程问答 66 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SAP UD取消处理合订本 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一、QM檢驗批UD之后,還有后悔藥嗎?
  • 二、取消UD方法
  • 三、SAP Notes 74638—取消檢驗批UD判定
  • 四、SAP Notes 175842—取消檢驗批的庫存過賬

一、QM檢驗批UD之后,還有后悔藥嗎?

在QM UD之前發現錯誤,只要用MBST沖銷原始物料憑證就可以取消檢驗批,然后再重新收貨,重新檢驗,但是在QM UD之后(使用決策之后),發現原檢驗數據或者原收貨憑證有錯,必須取消或重檢,就不能用MBST,怎么辦呢? 一開始沒弄明白,在論壇里找尋答案,卻一直迷惑不解,到最后發現自己是被誤導了。
在使用決策已經做出后,SAP的標準設置就只給一個QA12(更改使用決策)來處理,但在實際使用QA12時卻發現,它只能改變決策代碼,對庫存過賬已經無能為力了。意味著對最具實質性的庫存過賬錯誤,QA12是無能為力的,這就是我一直迷惑不解的地方。
后來在SAP論壇QM區,有一位給出了曲線救國的方案:先MM02, 維護檢驗類型08(勾上活動),然后用MB1B 344 先轉到凍結庫存,跟著 349 從凍結到質檢庫存。 但當我對新產生的檢驗批做新的使用決策時,發現檢驗庫存只能退回給采購訂單,無法退給生產訂單! 只能解決采購收貨的決策失誤問題,生產收貨失誤問題仍是未能解決。
經過多次測試,終于得到了解決方法,對于生產收貨的質量使用決策失誤,處理方法是非常簡單 的,完全用不到這個曲線救國的方法: 在UD之后,檢驗庫存已完全過賬到非限制庫存,這時糾正庫存過賬錯誤,用 MB1B 102或122 (特別注意把那個庫存類型 X 刪掉,即由默認的檢驗庫存改為非限制庫存, 122會多出強制要求輸入移動原因碼),把相應批次的生產收貨沖銷掉就可以了。同時用QA12, 去改一下相應檢驗批的使用決策代碼。如果要重新收貨檢驗,就是再做正 常的 MB31 101 收貨了。 對于非生產收貨的使用決策失誤,則仍可應用曲線救國的方法,也可用跟生產收貨反沖相似的方法反沖過賬):

  • 物料主檔里維護08檢驗類型是必要的,因為如果沒有,后面就不能生成新的檢驗批。 而MB1B 344 (非限制到凍結)是可選的,這是為了實際中一發現出錯,就先從非限制放到凍 結,以防止在處理錯誤的過程中,貨物卻被發走了的情況出現。 如果一發現錯誤,就用 322 (非限制到質檢) 就不用 344 了。
  • MB1B 349 (凍結到質檢),如果用了 344 就必須用349了。 ?如果在物料主檔里維護了08檢 驗類型,這時(322時也一樣)就會產生檢驗批,但是默認 情況下,08類型的檢驗批,其對應的檢驗計劃用途是9,所以在只維護了1或5的檢驗計劃的情況 下,會提示質量檢驗未準備好。這時并不需要維護用途9的檢驗計劃, 只需要去改一下檢驗批的默認檢驗計劃用途即可。 對于QM的UD, 按常理,本來就應該謹慎而為之,因為,一旦做出完全合格的決定,由質檢庫存轉 到了非限制庫存,如果未能及時發現出錯,則貨物很可能被發給客戶, 這樣的質量成本將會很高。 但是無論如何,SAP已經考慮到了盡量多的可能性,甚至TC:BS22 都已經準備好讓客戶修改控制 狀態,還有什么不能改的呢?(用BS22,可以讓已做UD的檢驗批, 仍可以更改檢驗結果值,雖然這完全違背檢驗的常理)
  • 二、取消UD方法

    1、 適用業務
    通常檢驗批作完檢驗結果錄入后,最后一步就是做UD判斷,這一步的內容主要包括兩方面:選定UD代碼,表示檢驗將作如何的判定,如A表示接受,R表示拒絕,A1表示讓步接受…;另外就是做庫存轉移,就是將檢驗狀態的庫存移為非限制狀態的庫存(有的企業稱為判良品)或者轉為凍結庫存,甚至如果是破壞性檢驗還要做樣品消耗過賬,當然有的企業還可以做物料降級使用(即309移動)。實質上QM真正和后勤其他模塊集成的也就是庫存轉移這一步。既然有集成,往往也就很能會出現錯誤,比如在KEE項目上生產完工的入庫檢驗(04),當完工報工確認(CO11N),系統自動入庫,即產生相應的檢驗批(此時庫存先入為檢驗狀態),品管部再作檢驗,做后續的判定。那么此時很有可能會發生生產誤報工,而到導致品管也跟著誤操作,事后發現時,只能采用反沖銷的方法解決。問題來了,大家都知道SAP的事務通常都有反沖銷的作業,如報工取消CO13,物料憑證取消MBST…恰恰UD判定的沒有提供。仔細想想,也是,UD判定本來就如包公判案一樣,潑出去的水且能收回…當然無能如何,人總會有犯錯的時候,估計包公也有辦錯案反悔的時候吧:)。

    也許有人會想到直接MBST或作諸如322移動的過賬,這種方法不可行,因為一旦QM質量檢驗激活,不可以手工作321或322的過賬,會有如下圖錯誤消息。要想這樣做只能取消激活QM視圖(不過如果有其他質檢庫存時,還不能取消激活)。匯總以上方案如下,

    1)直接MBST時會有如下錯誤,不可行

    2)也可以不通過MBST而通過MB01、MB31或MIGO直接沖銷,記得庫存類型的X刪掉,但如果是生產自動完工入庫的則沒法使用,因為需使用CO13取消報工和過賬.
    3)直接MB1B作322時會有如下錯誤,

    4)有一種復雜的方法,就是要先激活08的檢驗類型,再用344(非限制到凍結)再349(凍結到檢驗),不過這種方法太復雜;

    綜上所述,無論哪種方案雖能解決問題,但都有缺陷,不是最完美的解決方案。到SAP Notes一查,其實SAP也提供了相應的解決方案,下面就談談該解決方案是如何取消UD的。

    2、 業務流程

    流程倒是比較簡單:檢驗結果錄入→UD判定→取消UD判定

    3、 舉例

    比如在KEE項目上生產完工的入庫檢驗(04),當完工報工確認(CO11N),系統自動入庫,即產生相應的檢驗批(此時庫存先入為檢驗狀態),品管部再作檢驗,做后續的判定。那么此時很有可能會發生生產誤報工,而到導致品管也跟著誤操作,事后發現時,只能采用反沖銷的方法解決。

    二、操作說明
    根據SAP notes 74638 和175842的說明,步驟如下,
    1、 notes 74638里的程序zqevac40導入系統,并激活,執行如下,

    分析一下這個程序,實際上就是取消UD 代碼,并給檢驗批設置取消狀態。
    2、 Notes 175842的程序RQEVAC50導入系統,并激活,執行如下,
    該程序實際上就是做反沖銷憑證的操作,也許有人會有疑問,不是直接MBST不可以嗎,而這支程序就可以?沒錯SAP在程序里做了手腳,主要是下面這段程序,



    SAP 在過賬前將QM 檢驗類型激活的變量清空,過賬后又加上,原來在這兒…注:這不會修改質量視圖的數據!!
    理論上有了上面兩支程序就足以解決問題,但唯一的缺點是兩支程序是分別執行的,顯得不太友好和專業。需要增強一下。

    3、 運用增強QEVA0008,在UD界面里增加取消UD的按鈕,并調用上面兩支程序,如下圖,

    至此,所有的功能已加好,下面我們來測試一下這個功能的效果,找一筆已經作了UD的檢驗批,UD取消前的狀態如下,

    UD取消后的狀態,注意狀態變化,表明是成功運行了,如下圖:

    三、SAP Notes 74638—取消檢驗批UD判定

    參考SAP Notes 74638的程序ZQEVAC40

    效果:
    代碼:


    * Program Name : * Descriptions : * T-Code : * Updates Tables : * Input Parameters : * Output Parameters : * Return Codes : * Special Logic : * Includes : ************************************************************************ * Modification Log ************************************************************************ * Date Ver. Programmer Descriptions * -------- ---- ------------ ------------------------------------------- * 2020 6.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."檢驗批枷鎖CALL FUNCTION '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資料CALL FUNCTION '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.CALL FUNCTION 'QEVA_UD_UPDATE' IN UPDATE TASKEXPORTINGqals_new = gs_qalsqave_new = gs_qave.IF sy-subrc = 0.COMMIT WORK.MESSAGE '檢驗批已取消UD判定' TYPE 'S'.ELSE.ROLLBACK WORK.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 * -------- ---- ------------ ------------------------------------------- * 2020 7.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.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.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#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邦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邦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_IMKPF "L_IMKPF-BUDAT可修改過賬日期XALLP = '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

    總結

    以上是生活随笔為你收集整理的SAP UD取消处理合订本的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。