SD交货单修改程序 的增强地方MV50AFZ1

***INCLUDE MV50AFZ1 .

************************************************************************
*                                                                      *
* This include is reserved for user modifications                      *
*                                                                      *
* Forms for delivery processing                                        *
*                                                                      *
* The name of modification modules should begin with 'ZZ'.             *
*                                                                      *
************************************************************************

*---------------------------------------------------------------------*
*       FORM ZZEXAMPLE                                                *
*---------------------------------------------------------------------*
*       text......................................                    *
*---------------------------------------------------------------------*
*FORM ZZEXAMPLE.

*  ...

*ENDFORM.

*eject
*---------------------------------------------------------------------*
*       FORM USEREXIT_DELETE_DOCUMENT                                 *
*---------------------------------------------------------------------*
*       This userexit can be used to delete data in additional tables *
*       when a delivery is deleted.                                   *
*                                                                     *
*      This form is called in dialog at the end of form BELEG_LOESCHEN*
*      just before form BELEG_SICHERN is performed to delete the      *
*      datas on the database.                                         *
*                                                                     *
*---------------------------------------------------------------------*
FORM userexit_delete_document.

ENDFORM.                     "USEREXIT_DELETE_DOCUMENT
*eject

*---------------------------------------------------------------------*
*       FORM USEREXIT_MOVE_FIELD_TO_LIKP                              *
*---------------------------------------------------------------------*
*       This userexit can be used to move some fields into the        *
*       delivery header workaerea LIKP.                               *
*       This form is called, when a header is created                 *
*       This form is called at the end of form LIKP_FUELLEN.          *
*                                                                     *
*---------------------------------------------------------------------*
FORM userexit_move_field_to_likp.

*  LIKP-zzfield = xxxx-zzfield2.

ENDFORM.                     "USEREXIT_MOVE_FIELD_TO_LIKP
*eject

*---------------------------------------------------------------------*
*       FORM USEREXIT_MOVE_FIELD_TO_LIPS                              *
*---------------------------------------------------------------------*
*       This userexit can be used to move some fields into the        *
*       delivery item workaerea LIPS                                  *
*       This form is called, when an item is created                  *
*                                                                     *
*                                                                     *
*       This form is called at the end of form LIPS_FUELLEN.          *
*                                                                     *
*---------------------------------------------------------------------*
FORM userexit_move_field_to_lips.

*  LIPS-zzfield = xxxx-zzfield2.
*增加库存地点权限检查
   DATA: text0 ( 30 TYPE  c.


     IF lips -lgort <>  ''.
       AUTHORITY-CHECK OBJECT  'M_MSEG_LGO'
                 ID  'LGORT'  FIELD lips -lgort.
       IF sy -subrc <>  0.
         CONCATENATE  '没有库存地点' xlips -lgort  '的权限'  INTO text0.
         CONDENSE text0  NO -GAPS.
         MESSAGE text0  TYPE  'E'.
         EXIT.
       ENDIF.
     ENDIF.



ENDFORM.                     "USEREXIT_MOVE_FIELD_TO_LIPS
*eject


*---------------------------------------------------------------------*
*       FORM USEREXIT_NUMBER_RANGE                                    *
*---------------------------------------------------------------------*
*       This userexit can be used to determine the numberranges for   *
*       the internal document number.                                 *
*                                                                     *
*       US_RANGE_INTERN - internal number range                       *
*                                                                     *
*       This form is called from form BELEG_SICHERN                   *
*                                                                     *
*---------------------------------------------------------------------*
FORM userexit_number_range  USING us_range_intern.

* Example: Numer range from TVLK like in standard
* US_RANGE_INTERN = TVLK-NUMKI.

**获取流水号
   DATA: retc  TYPE inri -returncode.

   CALL  FUNCTION  'NUMBER_GET_NEXT'
     EXPORTING
      nr_range_nr              us_range_intern
      object                   'RV_BELEG'
      ignore_buffer            tvshp -ignbf          "40C
     IMPORTING
       number                   xlikp -vbeln
      returncode               retc
     EXCEPTIONS
      interval_not_found       1
      number_range_not_intern  2
      object_not_found         3
      quantity_is_0            4
      quantity_is_not_1        5
      interval_overflow        6
       OTHERS                   99.
   IF sy -subrc  NE  0.
     MESSAGE  ID sy -msgid  TYPE  'A'  NUMBER sy -msgno
             WITH sy -msgv1 sy -msgv2 sy -msgv3 sy -msgv4.
   ELSE.                                                      "v_n_647514
     CASE retc.
*       critical sector of the number range reached
*       message I532(V1).
       WHEN  '1'.
         PERFORM message_handling
                     USING posnr_low  '532'  'I'  'V1'  'RV_BELEG'
                          us_range_intern space space.
*       the last number of the number range was given
*       message I533(V1).
       WHEN  '2'.
         PERFORM message_handling
                     USING posnr_low  '533'  'I'  'V1'  'RV_BELEG'
                          us_range_intern space space.
     ENDCASE.                                                 "^_n_647514
   ENDIF.

   IF xlikp -vbtyp <>  '7'.
**更改交货单编码规则 2012.03.06
     DATA:l_numbe  LIKE ztsd04 -numbe.
     DATA:l_vbeln  LIKE vbak -vbeln.
     DATA:l_vbeln1  LIKE vbak -vbeln.
     DATA:l_vbeln2  LIKE vbak -vbeln.
     DATA: interval  LIKE nriv.

     SELECT  SINGLE numbe  INTO l_numbe  FROM ztsd04
                         WHERE vkorg  xlikp -vkorg.
     IF l_numbe  IS  INITIAL.
       MESSAGE  '该销售组织未维护号码段,请联系管理员'  TYPE  'E'.
       EXIT.
     ENDIF.

     CALL  FUNCTION  'NUMBER_GET_INFO'
       EXPORTING
        nr_range_nr  us_range_intern
        object       'RV_BELEG'
       IMPORTING
        interval     interval.
    l_vbeln1  interval -fromnumber+2 ( 8 ).
     CONCATENATE  l_numbe l_vbeln1  INTO l_vbeln1.
     CONDENSE l_vbeln1  NO -GAPS.
    l_vbeln2  interval -tonumber+2 ( 8 ).
     CONCATENATE  l_numbe l_vbeln2  INTO l_vbeln2.
     CONDENSE l_vbeln2  NO -GAPS.

     SELECT  MAX vbeln  INTO l_vbeln  FROM likp
                         WHERE vbeln > l_vbeln1
                           AND vbeln < l_vbeln2.
     IF l_vbeln  IS  INITIAL.
*      xlikp-vbeln = xlikp-vbeln+2(8).
*      CONCATENATE  l_numbe xlikp-vbeln INTO xlikp-vbeln.

      xlikp -vbeln  l_vbeln1 +  1.
       CONDENSE xlikp -vbeln  NO -GAPS.
     ELSE.
      l_vbeln  l_vbeln +  1.
       IF l_vbeln+2 ( 8 > interval -tonumber+2 ( 8 ).
         MESSAGE  '该销售组织号码段已用完,请联系管理员'  TYPE  'E'.
         EXIT.
       ELSE.
        xlikp -vbeln  l_vbeln.
       ENDIF.

     ENDIF.
   ENDIF.
***

ENDFORM.                     "USEREXIT_NUMBER_RANGE
*eject

*---------------------------------------------------------------------*
*       FORM USEREXIT_READ_DOCUMENT                                   *
*---------------------------------------------------------------------*
*       This userexit can be used to read data in additional tables   *
*       when the program reads a delivery.                            *
*                                                                     *
*       This form is called at the end of form BELEG_LESEN.           *
*                                                                     *
*---------------------------------------------------------------------*
FORM userexit_read_document.

**增加库存地点权限检查
   DATA: text0 ( 30 TYPE  c.
   LOOP  AT xlips.
     IF xlips -lgort <>  ''.
       AUTHORITY-CHECK OBJECT  'M_MSEG_LGO'
                 ID  'LGORT'  FIELD xlips -lgort.
       IF sy -subrc <>  0.
         CONCATENATE  '没有库存地点' xlips -lgort  '的权限'  INTO text0.
         CONDENSE text0  NO -GAPS.
         MESSAGE text0  TYPE  'E'.
         EXIT.
       ENDIF.
     ENDIF.
   ENDLOOP.

ENDFORM.                     "USEREXIT_READ_DOCUMENT
*eject

*---------------------------------------------------------------------*
*       FORM USEREXIT_SAVE_DOCUMENT                                   *
*---------------------------------------------------------------------*
*       This userexit can be used to save data in additional tables   *
*       when a document is saved.                                     *
*                                                                     *
*       If field T180-TRTYP contents 'H', the document will be        *
*       created, else it will be changed.                             *
*                                                                     *
*       This form is called at from form BELEG_SICHERN, before COMMIT *
*                                                                     *
*---------------------------------------------------------------------*
FORM userexit_save_document.

* Example:
* CALL FUNCTION 'ZZ_EXAMPLE'
*      IN UPDATE TASK
*      EXPORTING
*           ZZTAB = ZZTAB.
***
ENDFORM.                     "USEREXIT_SAVE_DOCUMENT
*eject
*---------------------------------------------------------------------*
*       FORM USEREXIT_SAVE_DOCUMENT_PREPARE                           *
*---------------------------------------------------------------------*
*       This userexit can be used for changes or checks, before a     *
*       document is saved.                                            *
*                                                                     *
*       If field T180-TRTYP contents 'H', the document will be        *
*       created, else it will be changed.                             *
*                                                                     *
*       This form is called at the beginning of form BELEG_SICHERN    *
*                                                                     *
*---------------------------------------------------------------------*
FORM userexit_save_document_prepare.
**检查库位不能等于特殊库存伙伴的库位
   DATA:i_kunnr  LIKE kna1 -kunnr.
   DATA:i_adrnr  LIKE kna1 -adrnr.
   DATA:i_sort2  LIKE adrc -sort2.
   DATA: text0 ( 30 TYPE  c.
   DATA: i_ihrez  LIKE vbkd -ihrez.
   CLEAR i_kunnr.
   CLEAR:i_adrnr.
   CLEAR:i_sort2.


   IF sy -tcode <>  'VL09'.
     IF xlikp -lfart <>  'ZLQ2'.
       LOOP  AT xvbpa  WHERE parvw  'SB'.
        i_kunnr  xvbpa -kunnr.
       ENDLOOP.
       IF sy -subrc  AND i_kunnr <>  '0000000000'.

         SELECT  SINGLE adrnr  INTO i_adrnr  FROM kna1
           WHERE kunnr  i_kunnr.
         SELECT  SINGLE sort2  INTO i_sort2  FROM adrc
           WHERE addrnumber  i_adrnr.
       ENDIF.

       LOOP  AT xlips.
         IF i_sort2 <>  ''.
           IF xlips -lgort  i_sort2.
             CONCATENATE  '库存地点' xlips -lgort  '不能与特殊库存合作伙伴的库存地点一致!'  INTO text0.
             CONDENSE text0  NO -GAPS.
             MESSAGE text0  TYPE  'E'.
           ENDIF.
         ENDIF.
       ENDLOOP.


     ENDIF.
   ELSE.
*冲销时判断是否开立结算订单
     SELECT  SINGLE ihrez  INTO i_ihrez  FROM vbkd
       WHERE ihrez  xlikp -vbeln.
     IF sy -subrc  0.
       CONCATENATE  '交货单' xlikp -vbeln  '已开立结算订单,不能冲销!'  INTO text0.
       CONDENSE text0  NO -GAPS.
       MESSAGE text0  TYPE  'E'.
     ENDIF.
   ENDIF.
ENDFORM.                     "USEREXIT_SAVE_DOCUMENT_PREPARE
*eject


*---------------------------------------------------------------------*
*       FORM USEREXIT_REFRESH_DOCUMENT                                *
*---------------------------------------------------------------------*
*       It is always necessary to refresh user-specific data before   *
*       the next document will be processed.                          *
*       This can be done in this userexit.                            *
*       This userexit can be used to refresh user-specific data       *
*       when the processing of a delivery is finished                 *
*       - after the document is saved                                 *
*       - when you leave the document processing with F3 or F15       *
*       It may be necessary to refresh user-specific data before      *
*       the next document will be processed.                          *
*                                                                     *
*      This form is called in dialog at the end of form               *
*      BELEG_INITIALISIEREN                                           *
*                                                                     *
*---------------------------------------------------------------------*
FORM userexit_refresh_document.

* clear: ZZ50A.
* refresh: zzitemtab.

ENDFORM.                     "USEREXIT_REFRESH_DOCUMENT
*eject
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值