sapSB

不知道业务怎么配置的,创建销售单时,一堆计划行类别,什么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.

 

分类:

技术点:

相关文章:

  • 2021-11-05
  • 2021-07-26
  • 2022-12-23
  • 2022-12-23
  • 2021-10-22
  • 2021-04-30
  • 2021-10-03
猜你喜欢
  • 2021-10-15
  • 2022-12-23
  • 2021-12-12
  • 2021-06-17
  • 2021-12-13
相关资源
相似解决方案