SAP銷售訂單狀態修改(審核) 計划行自動產生需求,產生MD04需求


不知道業務怎么配置的,創建銷售單時,一堆計划行類別,什么CN,DN。。。都有,但是審核后需要計划行變更為CP,這樣在MD04才能看到需求。

原有邏輯是弄個后台程序,審核后調一下,更新一下計划行,這樣是會有需求的。。。

但是,業務有個習慣喜歡VA02直接審,或者是交貨后還來修改等等。。。這時候就需要在VA02里做增強。,

原本的開發還是調程序。。。這就產生了很多問題。后來我自己寫增強審核的時候自動修改計划行類別,巴特,不產生需求。。。這特么鬼,后來各種找,各種DEBUG,找到根源了。。。

 

Now,來個增強,實現:MV45AFZZ  USEREXIT_SAVE_DOCUMENT_PREPARE

IF ( i_stonO = '20' AND i_stonN = '30' ).
       LOOP AT XVBEP INTO GX_VBEP.
         LY_I = SY-TABIX.
         CASE VBAK-AUART.
             WHEN 'ZOR' .
            IF GX_VBEP-ETTYP <> 'CP' AND GX_VBEP-ETTYP <> 'ZD'.
              GX_VBEP-ETTYP = 'CP'.
              IF SY-TCODE = 'VA01'.
                ELSEIF SY-TCODE = 'VA02'.
                  GX_VBEP-UPDKZ = 'U'.
                  GX_VBEP-BEDSD = 'X'.
                  GX_VBEP-BDAALT = '05'.
                  GX_VBEP-BDART = '05'.
                  GX_VBEP-PLART = '0'.
                  IF XVBBE[] IS INITIAL.
                    GW_VBBE-MANDT = SY-MANDT.
                    GW_VBBE-VBELN = GX_VBEP-VBELN.
                    GW_VBBE-POSNR = GX_VBEP-POSNR.
                    GW_VBBE-ETENR = GX_VBEP-ETENR.
                    GW_VBBE-MBDAT = GX_VBEP-EDATU.
                    GW_VBBE-VBTYP = 'C'.
                    GW_VBBE-BDART = '05'.
                    GW_VBBE-PLART = '0'.
                    GW_VBBE-UPDKZ = 'I'.
                    GW_VBBE-OMENG = GX_VBEP-LMENG.
                    GW_VBBE-VMENG = GX_VBEP-BMENG.
                    GW_VBBE-MEINS = GX_VBEP-VRKME.
                    GW_VBBE-PZMNG = GX_VBEP-LMENG.
                    GW_VBBE-AUART = XVBAK-AUART.
                    GW_VBBE-KUNNR = XVBAK-KUNNR.
                     READ TABLE XVBAP INTO GX_VBAP WITH KEY POSNR = GX_VBEP-POSNR.
                     IF SY-SUBRC = 0.
                       LY_J = SY-TABIX.
                       GX_VBAP-SUMBD = 'A'.
                       GX_VBAP-UPDKZ = 'U'.
                       GX_VBAP-BEDUP = 'X'.

                       MODIFY XVBAP FROM GX_VBAP INDEX LY_J TRANSPORTING SUMBD UPDKZ BEDUP.
                      GW_VBBE-MATNR = GX_VBAP-MATNR.
                      GW_VBBE-WERKS = GX_VBAP-WERKS.
                      GW_VBBE-LGORT = GX_VBAP-LGORT.
                      GW_VBBE-CHARG = GX_VBAP-CHARG.
                      GW_VBBE-AWAHR = GX_VBAP-AWAHR.
                      GW_VBBE-VPZUO = GX_VBAP-VPZUO.
                     ENDIF.
                     INSERT GW_VBBE INTO XVBBE INDEX GX_VBEP-ETENR.
                  ENDIF.
              ENDIF.
            ENDIF.
          WHEN 'ZKB' .
            IF GX_VBEP-ETTYP <> 'E1'.
              GX_VBEP-ETTYP = 'E1'.
              IF SY-TCODE = 'VA01'.
                ELSEIF SY-TCODE = 'VA02'.
                  GX_VBEP-UPDKZ = 'U'.
                  GX_VBEP-BEDSD = 'X'.
                  GX_VBEP-BDAALT = '05'.
                  GX_VBEP-BDART = '05'.
                  GX_VBEP-PLART = '0'.
                  IF XVBBE[] IS INITIAL.
                    GW_VBBE-MANDT = SY-MANDT.
                    GW_VBBE-VBELN = GX_VBEP-VBELN.
                    GW_VBBE-POSNR = GX_VBEP-POSNR.
                    GW_VBBE-ETENR = GX_VBEP-ETENR.
                    GW_VBBE-MBDAT = GX_VBEP-EDATU.
                    GW_VBBE-VBTYP = 'C'.
                    GW_VBBE-BDART = '05'.
                    GW_VBBE-PLART = '0'.
                    GW_VBBE-UPDKZ = 'I'.
                    GW_VBBE-OMENG = GX_VBEP-LMENG.
                    GW_VBBE-VMENG = GX_VBEP-BMENG.
                    GW_VBBE-MEINS = GX_VBEP-VRKME.
                    GW_VBBE-PZMNG = GX_VBEP-LMENG.
                    GW_VBBE-AUART = XVBAK-AUART.
                    GW_VBBE-KUNNR = XVBAK-KUNNR.
                     READ TABLE XVBAP INTO GX_VBAP WITH KEY POSNR = GX_VBEP-POSNR.
                     IF SY-SUBRC = 0.
                       LY_J = SY-TABIX.
                       GX_VBAP-SUMBD = 'A'.
                       GX_VBAP-UPDKZ = 'U'.
                       GX_VBAP-BEDUP = 'X'.

                       MODIFY XVBAP FROM GX_VBAP INDEX LY_J TRANSPORTING SUMBD UPDKZ BEDUP.
                      GW_VBBE-MATNR = GX_VBAP-MATNR.
                      GW_VBBE-WERKS = GX_VBAP-WERKS.
                      GW_VBBE-LGORT = GX_VBAP-LGORT.
                      GW_VBBE-CHARG = GX_VBAP-CHARG.
                      GW_VBBE-AWAHR = GX_VBAP-AWAHR.
                      GW_VBBE-VPZUO = GX_VBAP-VPZUO.
                     ENDIF.
                     INSERT GW_VBBE INTO XVBBE INDEX GX_VBEP-ETENR.
                  ENDIF.
              ENDIF.
            ENDIF.
             WHEN 'ZSP' .
            READ TABLE XVBAP INTO GX_VBAP WITH KEY POSNR = GX_VBEP-POSNR.
            IF SY-SUBRC = 0.
              IF GX_VBAP-PSTYV = 'ZSNN' AND GX_VBEP-ETTYP <> 'ZN'.
                GX_VBEP-ETTYP = 'ZN'.
                IF SY-TCODE = 'VA01'.
                ELSEIF SY-TCODE = 'VA02'.
                  GX_VBEP-UPDKZ = 'U'.
                  GX_VBEP-BEDSD = 'X'.
                  GX_VBEP-BDAALT = '05'.
                  GX_VBEP-BDART = '05'.
                  GX_VBEP-PLART = '0'.
                  IF XVBBE[] IS INITIAL.
                    GW_VBBE-MANDT = SY-MANDT.
                    GW_VBBE-VBELN = GX_VBEP-VBELN.
                    GW_VBBE-POSNR = GX_VBEP-POSNR.
                    GW_VBBE-ETENR = GX_VBEP-ETENR.
                    GW_VBBE-MBDAT = GX_VBEP-EDATU.
                    GW_VBBE-VBTYP = 'C'.
                    GW_VBBE-BDART = '05'.
                    GW_VBBE-PLART = '0'.
                    GW_VBBE-UPDKZ = 'I'.
                    GW_VBBE-OMENG = GX_VBEP-LMENG.
                    GW_VBBE-VMENG = GX_VBEP-BMENG.
                    GW_VBBE-MEINS = GX_VBEP-VRKME.
                    GW_VBBE-PZMNG = GX_VBEP-LMENG.
                    GW_VBBE-AUART = XVBAK-AUART.
                    GW_VBBE-KUNNR = XVBAK-KUNNR.
                     READ TABLE XVBAP INTO GX_VBAP WITH KEY POSNR = GX_VBEP-POSNR.
                     IF SY-SUBRC = 0.
                       LY_J = SY-TABIX.
                       GX_VBAP-SUMBD = 'A'.
                       GX_VBAP-UPDKZ = 'U'.
                       GX_VBAP-BEDUP = 'X'.

                       MODIFY XVBAP FROM GX_VBAP INDEX LY_J TRANSPORTING SUMBD UPDKZ BEDUP.
                      GW_VBBE-MATNR = GX_VBAP-MATNR.
                      GW_VBBE-WERKS = GX_VBAP-WERKS.
                      GW_VBBE-LGORT = GX_VBAP-LGORT.
                      GW_VBBE-CHARG = GX_VBAP-CHARG.
                      GW_VBBE-AWAHR = GX_VBAP-AWAHR.
                      GW_VBBE-VPZUO = GX_VBAP-VPZUO.
                     ENDIF.
                     INSERT GW_VBBE INTO XVBBE INDEX GX_VBEP-ETENR.
                  ENDIF.
              ENDIF.
              ELSEIF GX_VBAP-PSTYV = 'ZSAN' AND GX_VBEP-ETTYP <> 'CP'.
                GX_VBEP-ETTYP = 'CP'.
                IF SY-TCODE = 'VA01'.
                ELSEIF SY-TCODE = 'VA02'.
                  GX_VBEP-UPDKZ = 'U'.
                  GX_VBEP-BEDSD = 'X'.
                  GX_VBEP-BDAALT = '05'.
                  GX_VBEP-BDART = '05'.
                  GX_VBEP-PLART = '0'.
                  IF XVBBE[] IS INITIAL.
                    GW_VBBE-MANDT = SY-MANDT.
                    GW_VBBE-VBELN = GX_VBEP-VBELN.
                    GW_VBBE-POSNR = GX_VBEP-POSNR.
                    GW_VBBE-ETENR = GX_VBEP-ETENR.
                    GW_VBBE-MBDAT = GX_VBEP-EDATU.
                    GW_VBBE-VBTYP = 'C'.
                    GW_VBBE-BDART = '05'.
                    GW_VBBE-PLART = '0'.
                    GW_VBBE-UPDKZ = 'I'.
                    GW_VBBE-OMENG = GX_VBEP-LMENG.
                    GW_VBBE-VMENG = GX_VBEP-BMENG.
                    GW_VBBE-MEINS = GX_VBEP-VRKME.
                    GW_VBBE-PZMNG = GX_VBEP-LMENG.
                    GW_VBBE-AUART = XVBAK-AUART.
                    GW_VBBE-KUNNR = XVBAK-KUNNR.
                     READ TABLE XVBAP INTO GX_VBAP WITH KEY POSNR = GX_VBEP-POSNR.
                     IF SY-SUBRC = 0.
                       LY_J = SY-TABIX.
                       GX_VBAP-SUMBD = 'A'.
                       GX_VBAP-UPDKZ = 'U'.
                       GX_VBAP-BEDUP = 'X'.

                       MODIFY XVBAP FROM GX_VBAP INDEX LY_J TRANSPORTING SUMBD UPDKZ BEDUP.
                      GW_VBBE-MATNR = GX_VBAP-MATNR.
                      GW_VBBE-WERKS = GX_VBAP-WERKS.
                      GW_VBBE-LGORT = GX_VBAP-LGORT.
                      GW_VBBE-CHARG = GX_VBAP-CHARG.
                      GW_VBBE-AWAHR = GX_VBAP-AWAHR.
                      GW_VBBE-VPZUO = GX_VBAP-VPZUO.
                     ENDIF.
                     INSERT GW_VBBE INTO XVBBE INDEX GX_VBEP-ETENR.
                  ENDIF.
              ENDIF.
              ENDIF .
            ENDIF.
             WHEN OTHERS.
         ENDCASE.
         MODIFY XVBEP FROM GX_VBEP.
       ENDLOOP.
     ENDIF.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM