ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 研究

研究

原创 Linux操作系统 作者:mumunothing 时间:2009-12-03 19:11:52 0 删除 编辑

***INCLUDE MV45AFZZ .

************************************************************************
*                                                                      *
* This include is reserved for user modifications                      *
*                                                                      *
* Forms for sales document 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 sales document 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_FIELD_MODIFICATION                              *
*---------------------------------------------------------------------*
*       This userexit can be used to modify the attributes of         *
*       screen fields.                                                *
*       This form is processed for each field in the screen.          *
*                                                                     *
*       The use of the fields screen-group1 to screen-group4 is:      *
*                                                                     *
*       Screen-group1: Automatic modification contolles by transaction*
*                      MFAW.                                          *
*       Screen-group2: Contents 'LOO' for steploop-fields.            *
*       Screen-group3: Used for modififaction, which are dependent on *
*                      control tables or other fix information.       *
*       Screen-group4: Unused                                         *
*                                                                     *
*       For field mofifications, which are dependent on the document  *
*       status, you can use the status field in the workareas         *
*       XVBAP for item status and XVBUK for header status.            *
*                                                                     *
*       This form is called from module FELDAUSWAHL.                  *
*                                                                     *
*---------------------------------------------------------------------*
FORM USEREXIT_FIELD_MODIFICATION.


* CASE SCREEN-GROUP3.
*   WHEN '900'.
*     IF VBAK-VBTYP NE 'A'.
*       SCREEN-ACTIVE = 0.
*     ENDIF.
* ENDCASE.
*modify by frank ,
**如果为代开票业务,那么交货工厂不可以修改
*  IF  VBAK-AUART = 'ZOR2' OR VBAK-AUART  =  'ZRE2 '   OR  VBAK-AUART  =  'ZCR2' OR  VBAK-AUART  =   'ZDR2'.
*    CASE SCREEN-NAME.
*      WHEN 'VBAP-WERKS' .
*        SCREEN-INPUT = 0 .
*    ENDCASE.
*  ENDIF.
*
**业绩所属分公司一定不能更改,系统,二级系统等都不能够修改
*  CASE SCREEN-NAME.
*    WHEN 'VBKD-BZIRK' OR 'VBAK-KVGR3'  OR 'VBAK-KVGR2'.
*      SCREEN-INPUT = 0 .
*  ENDCASE.
*


*    endif.
*
*    WHEN 'VBAP-WERKS' OR 'VBKD-ZTERM' OR 'VBAK-KVGR3'.
*      SCREEN-INPUT = 0 .
*    WHEN   'VBKD-INCO1'.
**  If VBKD-INCO1 = 'Z10' or VBKD-INCO1 = 'Z30'.
*      SCREEN-INPUT = 0 .
**  endif.



* CASE SCREEN-NAME.
*   WHEN 'VBAK-VBELN'.
*     SCREEN-ACTIVE = 0.
* ENDCASE.
*{   INSERT         DEVK900239                                        1
*  CUA_EXCLUDE-FUNCTION = 'WABU_T'.
*  APPEND CUA_EXCLUDE.
*}   INSERT

ENDFORM.                    "USEREXIT_FIELD_MODIFICATION
*eject

*---------------------------------------------------------------------*
*       FORM USEREXIT_MOVE_FIELD_TO_VBAK                              *
*---------------------------------------------------------------------*
*       This userexit can be used to move some fields into the sales  *
*       dokument header workaerea VBAK.                               *
*                                                                     *
*       SVBAK-TABIX = 0:  Create header                               *
*       SVBAK-TABIX > 0:  Change header                               *
*                                                                     *
*       This form is called at the end of form VBAK_FUELLEN.          *
*                                                                     *
*---------------------------------------------------------------------*
FORM USEREXIT_MOVE_FIELD_TO_VBAK.
*  if  SVBAK-TABIX >= 0.
*
**增强6: 检查联营客户是否与订单类型匹配;
*    IF T180-TRTYP = 'H' OR T180-TRTYP =  'V' ."仅在创建,更改时,做检查""20080814更新
*      CASE XVBAK-AUART.
*        WHEN 'KB' OR 'KA' OR 'KE' OR 'KR' ."联营专柜
*          TABLES: KNA1.
**判断客户是不是联营客户32,如果是联营客户且工厂不为2000时,报错
*          IF NOT XVBAK-KUNNR IS INITIAL.
*            SELECT SINGLE * FROM KNA1 WHERE KUNNR = XVBAK-KUNNR  AND  KDKG3  <> '32'.
*            IF SY-SUBRC = 0.
*              IF VBAK-VKORG <> '2000'.
*                MESSAGE S398(00)   WITH '订单类型可能选择错误,因为客户性质为非联营散装客户'.
*              ENDIF.
**          LOOP AT XVBAP WHERE  WERKS  <> '2000'.
**            MESSAGE E398(00)   WITH '订单类型可能选择错误,因为客户性质为非联营散装客户'.
**          ENDLOOP.
*            ENDIF.
*          ENDIF.
*
*      ENDCASE.
*    ENDIF.
*  ENDIF.
**增强6结束;
*  vbak-zzfield = xxxx-zzfield2.

*******增强16  "如果是订单管控,把销售订单的"交货冻结"直接标识为'04'
*IF XVBKD-BZIRK EQ '6691' OR XVBKD-BZIRK EQ '6693' OR XVBKD-BZIRK EQ '6660' OR
*   XVBKD-BZIRK EQ '6310' OR XVBKD-BZIRK EQ '6340' OR XVBKD-BZIRK EQ '6690'.
TABLES ZTSD034.
* IF SY-UNAME EQ '1091159'.

  
SELECT SINGLE * FROM ZTSD034 WHERE AUGRU EQ VBAK-AUGRU AND ZRECON2 EQ 'X'.
  
IF SY-SUBRC EQ 0.

    
DATA: ZTDAT11 LIKE SY-DATUM.
    
SELECT MIN( ZTDAT ) INTO ZTDAT11 FROM ZTSD032 "得到此客户最早回单日期
      
WHERE KUNAG EQ VBAK-KUNNR
        
AND ZREFG NE 'X'
        
AND ( ZEDAT LT SY-DATUM OR ZEDAT EQ '' ).
      
"如果找到未回单的单据,并且回单日期小于当天,即锁单
      
IF SY-SUBRC EQ 0 AND ZTDAT11 LT SY-DATUM AND ZTDAT11 IS NOT INITIAL.
        VBAK-LIFSK = 
'04'.
      
ENDIF.

  
ENDIF.

* ENDIF.
*ENDIF.
*******增强16如束


ENDFORM.                    "USEREXIT_MOVE_FIELD_TO_VBAK
*eject

*---------------------------------------------------------------------*
*       FORM USEREXIT_MOVE_FIELD_TO_VBAP                              *
*---------------------------------------------------------------------*
*       This userexit can be used to move some fields into the sales  *
*       dokument item workaerea VBAP                                  *
*                                                                     *
*       SVBAP-TABIX = 0:  Create item                                 *
*       SVBAP-TABIX > 0:  Change item                                 *
*                                                                     *
*       This form is called at the end of form VBAP_FUELLEN.          *
*                                                                     *
*---------------------------------------------------------------------*
FORM USEREXIT_MOVE_FIELD_TO_VBAP.

*序号30*外销的订单需求类别设置为KE
*  TABLES ZTMM018.
  
CASE VBAK-AUART.
    
WHEN 'ZOR6'.
      VBAP-BEDAE  = 
'KE'.
      VBAP-SOBKZ  =
'E'.
      VBAP-KNTTP  = 
'M'.
      VBAP-KZBWS = 
'A'.
      VBAP-ABGRS = 
'000001'.
    
WHEN  'ZRE6'.
      VBAP-BEDAE  = 
'KE'.
      VBAP-SOBKZ  =
'E'.
      VBAP-KNTTP  = 
'M'.
      VBAP-KZBWS = 
'A'.
      VBAP-ABGRS = 
'000001'.

*指配客户的订单,默认工厂为'2000',根据仓库地点来确认装运点,主要用于区分河南中转库和总部成品仓发货.
    
WHEN  'ZOR3' .
      VBAP-WERKS = 
'2000'.
      
SELECT SINGLE VSTEL INTO VBAP-VSTEL  FROM ZTMM018 WHERE LGORT = VBAP-LGORT AND WERKS = VBAP-WERKS.
      
IF SY-SUBRC NE 0.
        vbap-VSTEL = 
'2000'.
      
ENDIF.

    
WHEN  'ZRE3' .
      VBAP-WERKS = 
'2000'.
      
SELECT SINGLE VSTEL INTO VBAP-VSTEL  FROM ZTMM018 WHERE LGORT = VBAP-LGORT AND WERKS = VBAP-WERKS.
      
IF SY-SUBRC NE 0.
        vbap-VSTEL = 
'2000'.
      
ENDIF.

    
WHEN  'ZOR1' .
      VBAP-WERKS =  VBAK-VKORG.
      vbap-VSTEL =  VBAK-VKORG.
      
IF VBAK-KUNNR EQ '0006999999'.  "物流客户不做可用性检查
          VBAP-MTVFP = 
'KP'.
      
ENDIF.
    
WHEN  'ZRE1' .
      VBAP-WERKS =  VBAK-VKORG.
      vbap-VSTEL =  VBAK-VKORG.

    
WHEN  'ZOR7' .
      VBAP-WERKS =  VBAK-VKORG.
      vbap-VSTEL =  VBAK-VKORG.

    
WHEN  'ZKB' .
      VBAP-WERKS =  VBAK-VKORG.
      vbap-VSTEL =  VBAK-VKORG.

*modify by yangzhiping 2008.11.07
    
WHEN  'ZCR1' .
      VBAP-WERKS =  VBAK-VKORG.
      vbap-VSTEL =  VBAK-VKORG.
    
WHEN  'ZDR1' .
      VBAP-WERKS =  VBAK-VKORG.
      vbap-VSTEL =  VBAK-VKORG.
    
WHEN  'ZCR4' .
      VBAP-WERKS =  VBAK-VKORG.
      vbap-VSTEL =  VBAK-VKORG.
    
WHEN  'ZDR4' .
      VBAP-WERKS =  VBAK-VKORG.
      vbap-VSTEL =  VBAK-VKORG.
    
WHEN  'ZOR4' .
      VBAP-WERKS =  VBAK-VKORG.
      vbap-VSTEL =  VBAK-VKORG.
    
WHEN  'ZRD4' .
      VBAP-WERKS =  VBAK-VKORG.
      vbap-VSTEL =  VBAK-VKORG.
    
WHEN  'ZFD2' .
      VBAP-WERKS =  VBAK-VKORG.
      vbap-VSTEL =  VBAK-VKORG.
    
WHEN  'ZRD2' .
      VBAP-WERKS =  VBAK-VKORG.
      vbap-VSTEL =  VBAK-VKORG.

  
ENDCASE.



*序号30*
*  VBAP-zzfield = xxxx-zzfield2.

ENDFORM.                    "USEREXIT_MOVE_FIELD_TO_VBAP
*eject

*---------------------------------------------------------------------*
*       FORM USEREXIT_MOVE_FIELD_TO_VBEP                              *
*---------------------------------------------------------------------*
*       This userexit can be used to move some fields into the sales  *
*       dokument schedule line workaerea VBEP                         *
*                                                                     *
*       SVBEP-TABIX = 0:  Create schedule line                        *
*       SVBEP-TABIX > 0:  Change schedule line                        *
*                                                                     *
*       This form is called at the end of form VBEP_FUELLEN.          *
*                                                                     *
*---------------------------------------------------------------------*
FORM USEREXIT_MOVE_FIELD_TO_VBEP.

*  VBEP-zzfield = xxxx-zzfield2.

ENDFORM.                    "USEREXIT_MOVE_FIELD_TO_VBEP
*eject

*---------------------------------------------------------------------*
*       FORM USEREXIT_MOVE_FIELD_TO_VBKD                              *
*---------------------------------------------------------------------*
*       This userexit can be used to move some fields into the sales  *
*       dokument business data workaerea VBKD                         *
*                                                                     *
*       SVBKD-TABIX = 0:  Create data                                 *
*       SVBKD-TABIX > 0:  Change data                                 *
*                                                                     *
*       This form is called at the end of form VBKD_FUELLEN.          *
*                                                                     *
*---------------------------------------------------------------------*
FORM USEREXIT_MOVE_FIELD_TO_VBKD.
*代开票未上线,此时取售达方的付款条款
  
IF VBKD-ZTERM  IS INITIAL.
    
SELECT  SINGLE ZTERM INTO VBKD-ZTERM FROM KNVV WHERE  KUNNR  = VBAK-KUNNR.

  
ENDIF.

****增强14:回购业务控制
****逻辑:1、代开票回购时业绩所属分公司为代开票分公司,否为为客户所属业绩分公司
****     2、代开票回购差异处理,借贷项凭证类型(ZCR1\ZDR1)并且订单原因为704时,业绩公司等于销售组织
*IF VBAK-AUART = 'ZOR1' AND VBAK-AUGRU = '115'.
IF ( ( VBAK-AUART = 'ZOR1' OR VBAK-AUART = 'ZOR7' ) AND VBAK-AUGRU = '115' ) OR ( VBAK-AUART = 'ZDR1' AND VBAK-AUGRU = '704' )
    
OR ( VBAK-AUART = 'ZCR1' AND VBAK-AUGRU = '704' ).
  
DATA ZVKORG LIKE ZTSD011-VKORG.
  
READ TABLE XVBKD WITH KEY POSNR = '000000'.
  
IF SY-SUBRC EQ 0.
    
SELECT SINGLE VKORG INTO ZVKORG FROM ZTSD011 WHERE BZIRK  = XVBKD-BZIRK.
    
IF SY-SUBRC EQ 0 AND ZVKORG NE VBAK-VKORG.
      VBKD-BZIRK = VBAK-VKORG.
    
ENDIF.
  
ENDIF.
ENDIF.
****增强14结束;

*  VBKD-zzfield = xxxx-zzfield2.

ENDFORM.                    "USEREXIT_MOVE_FIELD_TO_VBKD
*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 TVAK like in standard
* US_RANGE_INTERN = TVAK-NUMKI.

ENDFORM.                    "USEREXIT_NUMBER_RANGE
*eject

*---------------------------------------------------------------------*
*       FORM USEREXIT_PRICING_PREPARE_TKOMK                           *
*---------------------------------------------------------------------*
*       This userexit can be used to move additional fields into the  *
*       communication table which is used for pricing:                *
*                                                                     *
*       TKOMK for header fields                                       *
*                                                                     *
*       This form is called from form PREISFINDUNG_VORBEREITEN.       *
*                                                                     *
*---------------------------------------------------------------------*
FORM USEREXIT_PRICING_PREPARE_TKOMK.

*  TKOMK-zzfield = xxxx-zzfield2.
*{   INSERT         DEVK900239                                        1

  TKOMK-KVGR1 = VBAK-KVGR1.
  TKOMK-KVGR2 = VBAK-KVGR2.
  TKOMK-KVGR3 = VBAK-KVGR3.
  TKOMK-KVGR4 = VBAK-KVGR4.
  TKOMK-KVGR5 = VBAK-KVGR5.

*读取配送商信息到表中去
  
LOOP AT XVBPA WHERE PARVW = 'Z6'.
    TKOMK-ZKUNNR = XVBPA-KUNNR.
  
ENDLOOP.

*}   INSERT

ENDFORM.                    "USEREXIT_PRICING_PREPARE_TKOMK
*eject

*---------------------------------------------------------------------*
*       FORM USEREXIT_PRICING_PREPARE_TKOMP                           *
*---------------------------------------------------------------------*
*       This userexit can be used to move additional fields into the  *
*       communication table which is used for pricing:                *
*                                                                     *
*       TKOMP for item fields                                         *
*                                                                     *
*       This form is called from form PREISFINDUNG_VORBEREITEN.       *
*                                                                     *
*---------------------------------------------------------------------*
FORM USEREXIT_PRICING_PREPARE_TKOMP.

*  TKOMP-zzfield = xxxx-zzfield2.
*{   INSERT         DEVK900239                                        1


  TKOMP-MVGR1 = VBAP-MVGR1.
  TKOMP-MVGR2 = VBAP-MVGR2.
  TKOMP-MVGR3 = VBAP-MVGR3.
  TKOMP-MVGR4 = VBAP-MVGR4.
  TKOMP-MVGR5 = VBAP-MVGR5.

  
DATA:WV_EXTWG LIKE MARA-EXTWG.
  
IF TKOMP-EXTWG   IS INITIAL.
    
SELECT SINGLE EXTWG INTO WV_EXTWG   FROM MARA WHERE MATNR = VBAP-MATNR.
    
IF SY-SUBRC = 0.
      TKOMP-EXTWG =  WV_EXTWG.
    
ENDIF.
    
CLEAR  WV_EXTWG.
  
ENDIF.

*}   INSERT

ENDFORM.                    "USEREXIT_PRICING_PREPARE_TKOMP
*eject

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

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.
*{   INSERT         DEVK900239                                        1
****增强1:多品项促销,保证配套物料一定需要存在;
*  TABLES:ZTSD009.
*  DATA : WV_MENGE LIKE VBAP-ZMENG.
**赠送物料的数量,一定需要使用中间变量,因此存在A+b+C  送D的情况
*  DATA : WV_MENGE2 LIKE VBAP-ZMENG.
*  DATA: WT_ZTSD009 TYPE TABLE OF  ZTSD009 WITH HEADER LINE.
*  LOOP AT XVBAP WHERE PSTYV = 'TANN'.
**赠送物料的数量
*    WV_MENGE2 = XVBAP-KWMENG .
**找到配套物料
*    SELECT *  INTO TABLE WT_ZTSD009 FROM ZTSD009 WHERE MATNRA  =     XVBAP-MATNR  AND VALID  = 'X' AND KUNNR  = VBAK-KUNNR.
*    LOOP AT WT_ZTSD009.
*      IF SY-SUBRC <> 0.
*        EXIT.
*      ELSE.
*        IF  WT_ZTSD009-MENGEA <> 0.
**得到配套物料应该的数量;
*          WV_MENGE =  WV_MENGE2  * WT_ZTSD009-MENGEB  / WT_ZTSD009-MENGEA.
*        ENDIF.
**设置主物料的一次性完整交货;
*        READ TABLE XVBAP WITH  KEY MATNR = WT_ZTSD009-MATNRC .
*        XVBAP-KZTLF = 'C'.
*        MODIFY XVBAP INDEX SY-TABIX.
*      ENDIF.
**找到订单的内表中是否存在配套物料
*      READ TABLE XVBAP WITH  KEY MATNR = WT_ZTSD009-MATNRB .
**如果不存在,则直接出现错误提示
*      IF SY-SUBRC <> 0.
*        MESSAGE E398(00)
*       WITH '未输入配套物料'      WT_ZTSD009-MATNRB .
*      ELSE.
**如果找到,但是订单的数量仍然小于配套物料应该的数量,也出现错误提示
**注意这里的XVBAP-KWMENG 为Read的结果,而非where PSTYV = 'TANN'的结果.
**如果符合条件,则设置一次性交货,如果不符合条件,则不设置一次性交货标记,给出错误提示
**20080728更新:增加  MODIFY XVBAP  INDEX SY-TABIX.
**20080728更新结束:
*        IF  XVBAP-KWMENG  >= WV_MENGE .
**          XVBAK-AUTLF = 'X'.
*          VBAK-AUTLF = 'X'.
*          XVBAP-KZTLF = 'C'.
*          MODIFY XVBAP INDEX SY-TABIX.
*        ELSE.
*          MESSAGE E398(00)
*         WITH '配套物料'  WT_ZTSD009-MATNRB '的数量不够,至少为' WV_MENGE .
*        ENDIF.
*      ENDIF.
**清除配套物料应该的配套数量
*      CLEAR WV_MENGE.
*    ENDLOOP.
**清除赠送物料的数量
*    CLEAR WV_MENGE2.
*  ENDLOOP.
****增强1结束:多品项促销,保证配套物料一定需要存在;


*交货组的功能不可用
*      XVBAP-GRKOR = 1.
*      modify  XVBAP.
*    read table xvbap with  key matnr = wt_ZTSD009-matnrC.
*     XVBAP-GRKOR = 1.
*      modify  XVBAP.

****增强2:当买就送的情况下,设置完成交货;
*  LOOP AT XVBAP  WHERE KZWI6 <> 0 .
*    XVBAP-KZTLF = 'C'.
*    MODIFY XVBAP.
*  ENDLOOP.
****增强2结束:当买就送的情况下,设置完成交货;

*}   INSERT

******增强15  根据仓库地点来确认装运点,主要用于区分河南中转库和总部成品仓发货.
IF  VBAK-AUART = 'ZOR3' OR VBAK-AUART = 'ZRE3'.
  
TABLES ZTMM018.
   
LOOP AT XVBAP.
      
SELECT SINGLE * FROM ZTMM018 WHERE LGORT = XVBAP-LGORT AND WERKS = XVBAP-WERKS.
      
IF SY-SUBRC EQ 0.
        XVBAP-VSTEL = ZTMM018-VSTEL.
      
ELSE.
        Xvbap-VSTEL = 
'2000'.
      
ENDIF.
      
MODIFY XVBAP INDEX SY-TABIX.
   
ENDLOOP.
ENDIF.
******增强15结束

******Client不为200时并且为销售订单业务时,才进行以下程序检查
IF SY-MANDT <> '200' AND VBAK-TRVOG EQ 0 . "TRVOG为0代表销售订单


*******增强12 第三批上线分公司下单权限检查    modify yzp date 2009.05.21
*  IF T180-TRTYP = 'H' AND SY-UNAME NE '1091159'.
*    TABLES ZTSD025.
*    IF VBAK-AUART = 'ZOR1' OR VBAK-AUART = 'ZOR2' OR VBAK-AUART = 'ZRE1' OR VBAK-AUART = 'ZRE2'.
*      SELECT SINGLE * FROM ZTSD025 WHERE BZIRK = XVBKD-BZIRK AND VALID NE 'X'.
*      IF SY-SUBRC EQ 0.
*         MESSAGE E398(00)   WITH '由于补单业务未完成,正常业务不能进行 !'.
*      ENDIF.
*    ENDIF.
*  ENDIF.
*******结束增强12


*增强3: 对业绩所属分公司进行权限检查
    
DATA : WV_ACTVT(2) TYPE C.
    
CASE T180-TRTYP.
      
WHEN CHARH.  "H 添加
        WV_ACTVT = ACTVT_01.  
"VALUE '01'
      
WHEN CHARV.  "V 修改
        WV_ACTVT = ACTVT_02.  
"VALUE '02'
      
WHEN CHARA.  "A 显示
        WV_ACTVT = ACTVT_03.  
"VALUE '03'
    
ENDCASE.
*比较保存时的值;
  
IF T180-TRTYP = 'H'.  "AND ( XVBAK-TRVOG EQ 0 OR VBAK-TRVOG EQ 0 ). "TRVOG为0代表销售订单
     
IF VBAK-AUART = 'ZOR3' OR VBAK-AUART = 'ZRE3'.
        AUTHORITY-
CHECK OBJECT 'ZSDORDER'
                     
ID 'AUART' FIELD  VBAK-AUART
                     
ID 'ZFAKSK' DUMMY
                     
ID 'ZLIFSK' FIELD VBAK-LIFSK
                     
ID 'ZBZIRK' FIELD XVBKD-BZIRK
                     
ID 'ACTVT' FIELD WV_ACTVT.
     
ELSEIF VBAK-AUART = 'ZCR1' OR VBAK-AUART = 'ZDR1' OR
             VBAK-AUART = 
'ZCR2' OR VBAK-AUART = 'ZDR2'.
        AUTHORITY-
CHECK OBJECT 'ZSDORDER'
                     
ID 'AUART' FIELD VBAK-AUART
                     
ID 'ZFAKSK' FIELD VBAK-FAKSK
                     
ID 'ZLIFSK' DUMMY
                     
ID 'ZBZIRK' FIELD XVBKD-BZIRK
                     
ID 'ACTVT' FIELD WV_ACTVT.
    
ELSE.
        AUTHORITY-
CHECK OBJECT 'ZSDORDER'
                     
ID 'AUART' FIELD VBAK-AUART
                     
ID 'ZFAKSK' DUMMY
                     
ID 'ZLIFSK' DUMMY
                     
ID 'ZBZIRK' FIELD XVBKD-BZIRK
                     
ID 'ACTVT' FIELD WV_ACTVT.
    
ENDIF.
    
IF  SY-SUBRC NE 0.
        
MESSAGE E398(00)
          
WITH '你没有该权限'.
    
ENDIF.

     
IF XVBAK-AUART = 'ZOR3' OR XVBAK-AUART = 'ZRE3'.
        AUTHORITY-
CHECK OBJECT 'ZSDORDER'
                     
ID 'AUART' FIELD XVBAK-AUART
                     
ID 'ZFAKSK' DUMMY
                     
ID 'ZLIFSK' FIELD XVBAK-LIFSK
                     
ID 'ZBZIRK' FIELD XVBKD-BZIRK
                     
ID 'ACTVT' FIELD WV_ACTVT.
     
ELSEIF XVBAK-AUART = 'ZCR1' OR XVBAK-AUART = 'ZDR1' OR
             XVBAK-AUART = 
'ZCR2' OR XVBAK-AUART = 'ZDR2'.
        AUTHORITY-
CHECK OBJECT 'ZSDORDER'
                     
ID 'AUART' FIELD XVBAK-AUART
                     
ID 'ZFAKSK' FIELD XVBAK-FAKSK
                     
ID 'ZLIFSK' DUMMY
                     
ID 'ZBZIRK' FIELD XVBKD-BZIRK
                     
ID 'ACTVT' FIELD WV_ACTVT.
    
ELSE.
        AUTHORITY-
CHECK OBJECT 'ZSDORDER'
                     
ID 'AUART' FIELD XVBAK-AUART
                     
ID 'ZFAKSK' DUMMY
                     
ID 'ZLIFSK' DUMMY
                     
ID 'ZBZIRK' FIELD XVBKD-BZIRK
                     
ID 'ACTVT' FIELD WV_ACTVT.
    
ENDIF.
    
IF  SY-SUBRC NE 0.
        
MESSAGE E398(00)
          
WITH '你没有该权限'.
    
ENDIF.
  
ENDIF.

*功能点2:如果修改状态,那么同时判断原来的值进行权限检查
  
IF T180-TRTYP <> 'H'. "AND ( XVBAK-TRVOG EQ 0 OR VBAK-TRVOG EQ 0 ). "TRVOG为0代表销售订单
     
IF YVBAK-AUART = 'ZOR3' OR YVBAK-AUART = 'ZRE3'.
        AUTHORITY-
CHECK OBJECT 'ZSDORDER'
                     
ID 'AUART' FIELD YVBAK-AUART
                     
ID 'ZFAKSK' DUMMY
                     
ID 'ZLIFSK' FIELD YVBAK-LIFSK
                     
ID 'ZBZIRK' FIELD XVBKD-BZIRK
                     
ID 'ACTVT' FIELD WV_ACTVT.
     
ELSEIF YVBAK-AUART = 'ZCR1' OR YVBAK-AUART = 'ZDR1' OR
             YVBAK-AUART = 
'ZCR2' OR YVBAK-AUART = 'ZDR2'.
        AUTHORITY-
CHECK OBJECT 'ZSDORDER'
                     
ID 'AUART' FIELD YVBAK-AUART
                     
ID 'ZFAKSK' FIELD YVBAK-FAKSK
                     
ID 'ZLIFSK' DUMMY
                     
ID 'ZBZIRK' FIELD XVBKD-BZIRK
                     
ID 'ACTVT' FIELD WV_ACTVT.
    
ELSE.
        AUTHORITY-
CHECK OBJECT 'ZSDORDER'
                     
ID 'AUART' FIELD YVBAK-AUART
                     
ID 'ZFAKSK' DUMMY
                     
ID 'ZLIFSK' DUMMY
                     
ID 'ZBZIRK' FIELD XVBKD-BZIRK
                     
ID 'ACTVT' FIELD WV_ACTVT.
    
ENDIF.
    
IF  SY-SUBRC NE 0.
        
MESSAGE E398(00)
          
WITH '你没有该权限'.
    
ENDIF.

     
IF XVBAK-AUART = 'ZOR3' OR XVBAK-AUART = 'ZRE3'.
        AUTHORITY-
CHECK OBJECT 'ZSDORDER'
                     
ID 'AUART' FIELD XVBAK-AUART
                     
ID 'ZFAKSK' DUMMY
                     
ID 'ZLIFSK' FIELD XVBAK-LIFSK
                     
ID 'ZBZIRK' FIELD XVBKD-BZIRK
                     
ID 'ACTVT' FIELD WV_ACTVT.
     
ELSEIF XVBAK-AUART = 'ZCR1' OR XVBAK-AUART = 'ZDR1' OR
             XVBAK-AUART = 
'ZCR2' OR XVBAK-AUART = 'ZDR2'.
        AUTHORITY-
CHECK OBJECT 'ZSDORDER'
                     
ID 'AUART' FIELD XVBAK-AUART
                     
ID 'ZFAKSK' FIELD XVBAK-FAKSK
                     
ID 'ZLIFSK' DUMMY
                     
ID 'ZBZIRK' FIELD XVBKD-BZIRK
                     
ID 'ACTVT' FIELD WV_ACTVT.
    
ELSE.
        AUTHORITY-
CHECK OBJECT 'ZSDORDER'
                     
ID 'AUART' FIELD XVBAK-AUART
                     
ID 'ZFAKSK' DUMMY
                     
ID 'ZLIFSK' DUMMY
                     
ID 'ZBZIRK' FIELD XVBKD-BZIRK
                     
ID 'ACTVT' FIELD WV_ACTVT.
    
ENDIF.
    
IF  SY-SUBRC NE 0.
        
MESSAGE E398(00)
          
WITH '你没有该权限'.
    
ENDIF.

     
IF VBAK-AUART = 'ZOR3' OR VBAK-AUART = 'ZRE3'.
        AUTHORITY-
CHECK OBJECT 'ZSDORDER'
                     
ID 'AUART' FIELD VBAK-AUART
                     
ID 'ZFAKSK' DUMMY
                     
ID 'ZLIFSK' FIELD VBAK-LIFSK
                     
ID 'ZBZIRK' FIELD XVBKD-BZIRK
                     
ID 'ACTVT' FIELD WV_ACTVT.
     
ELSEIF VBAK-AUART = 'ZCR1' OR VBAK-AUART = 'ZDR1' OR
             VBAK-AUART = 
'ZCR2' OR VBAK-AUART = 'ZDR2'.
        AUTHORITY-
CHECK OBJECT 'ZSDORDER'
                     
ID 'AUART' FIELD VBAK-AUART
                     
ID 'ZFAKSK' FIELD VBAK-FAKSK
                     
ID 'ZLIFSK' DUMMY
                     
ID 'ZBZIRK' FIELD XVBKD-BZIRK
                     
ID 'ACTVT' FIELD WV_ACTVT.
    
ELSE.
        AUTHORITY-
CHECK OBJECT 'ZSDORDER'
                     
ID 'AUART' FIELD VBAK-AUART
                     
ID 'ZFAKSK' DUMMY
                     
ID 'ZLIFSK' DUMMY
                     
ID 'ZBZIRK' FIELD XVBKD-BZIRK
                     
ID 'ACTVT' FIELD WV_ACTVT.
    
ENDIF.
    
IF  SY-SUBRC NE 0.
        
MESSAGE E398(00)
          
WITH '你没有该权限'.
    
ENDIF.

  
ENDIF.
*增强3结束

    
TABLES: ZTSD011.

*增强4: 检查订单类型的正确性;
  
IF T180-TRTYP = 'H'."仅在创建时,做检查""20080814更新
    
READ TABLE XVBKD WITH KEY POSNR = '000000'.
    
CASE VBAK-AUART.
      
WHEN 'ZOR1' OR 'ZRE1 ' OR 'ZFD2' OR 'ZCR1' OR  'ZDR1' OR 'ZFD1' OR 'KA' OR 'KB' OR 'KE' OR 'KR' OR 'ZOR7' OR 'ZKB' ."正常销售   MODIFY BY YZP   DATE:2009.03  add ka/kb
*取业绩所属分公司对应的销售组织,取到后,与当前订单的销售组织进行对比
        
SELECT SINGLE * FROM ZTSD011 WHERE BZIRK  = XVBKD-BZIRK.
        
IF SY-SUBRC = 0.
*          IF XVBAK-VKORG <> ZTSD011-VKORG.
          
IF VBAK-VKORG NE ZTSD011-VKORG AND VBAK-AUGRU NE '115' AND  VBAK-VKORG NE '2000'.   "MODIFY BY YZP DATE 20090311  标准订单时 代开票回购销售冲115
            
MESSAGE E398(00)
           
WITH '订单类型可能选择错误,因为客户性质为代开票性质'.
          
ENDIF.
        
ENDIF.
*使用标准的订单类型,交货工厂应该与销售组织一致;
        
LOOP AT XVBAP WHERE  WERKS  <> VBAK-VKORG.
          
MESSAGE E398(00)  WITH '订单类型与交货工厂矛盾'.
        
ENDLOOP.
*年糖备货单据只能由总公司下达,并且必须KA、KB时销售组织为2000,销售渠道99、订单原因为y03、y33    20090922启用
        
IF ( VBAK-AUART EQ 'KA' OR VBAK-AUART EQ 'KB' ) AND VBAK-VKORG EQ '2000'  AND VBAK-VTWEG EQ '99'.
          
IF NOT ( VBAK-AUGRU EQ 'Y03' OR VBAK-AUGRU EQ 'Y33' ).
             
MESSAGE E398(00)  WITH '此为年糖备货单,订单类型与订单原因不一致'.
          
ENDIF.
        
ENDIF.

      
WHEN 'ZOR2' OR 'ZRE2 '  OR 'ZCR2' OR  'ZDR2' OR 'ZKE2' OR 'ZKR2' OR 'ZOR8'. "代开票的情况 加入联营专柜代票订单类型 modify yzp date 20090311
*      WHEN 'ZOR2' OR 'ZRE2 '  OR 'ZCR2' OR  'ZDR2'. "代开票的情况
*取业绩所属分公司对应的销售组织,取到后,与当前订单的销售组织进行对比,如果一致 则 错误 ;
        
SELECT SINGLE * FROM ZTSD011 WHERE BZIRK  = XVBKD-BZIRK.
        
IF SY-SUBRC = 0.
          
IF VBAK-VKORG = ZTSD011-VKORG.
            
MESSAGE E398(00)
           
WITH '订单类型可能选择错误,因为客户性质并非为代开票性质,代开票客户对应的销售组织应该不等于业绩归属分公司'.
          
ENDIF.
        
ENDIF.
*使用带开票的订单类型,交货工厂应该与销售组织不一致;
        
LOOP AT XVBAP WHERE  WERKS  =  VBAK-VKORG.
          
MESSAGE E398(00)  WITH  '行项目'  XVBAP-POSNR  '订单类型与交货工厂矛盾,销售组织等于了交货工厂'.
        
ENDLOOP.

      
WHEN 'ZOR3'. "指配订单的情况
        
LOOP AT XVBAP WHERE  WERKS  <>  '2000'.
          
MESSAGE E398(00)   WITH   '行项目'  XVBAP-POSNR '订单的交货工厂应该为2000'.
        
ENDLOOP.

      
WHEN 'ZRE3'. "指配订单的情况
        
LOOP AT XVBAP WHERE  WERKS  <>  '2000'.
          
MESSAGE E398(00)   WITH   '行项目'  XVBAP-POSNR '订单的交货工厂应该为2000'.
        
ENDLOOP.
        
CLEAR:VBAK-LIFSK,XVBAK-LIFSK.   "MODIFY YZP 退货不帮交货冻结  20081117

    
ENDCASE.

  
ENDIF.


*增强8: 检查订单原因和订单类型的一致性
    
TABLES: ZTSD012.
    
SELECT SINGLE * FROM ZTSD012 WHERE AUART  = VBAK-AUART AND AUGRU = VBAK-AUGRU .
      
IF SY-SUBRC <> 0.
        
MESSAGE E398(00) WITH '订单类型和订单原因不匹配,请重新输入!'.
      
ENDIF.
*增强8结束;

*增强9:销售订单行项目客户下单数量及行项目失效日期有效性控制;
* 控制点:1、提示客户下单数量、失效日期为必输;
*        2、订单类型为ZOR1、ZOR2、ZOR3
*        3、订单原因为800(销冲单)时不控制
*        4、2000(总部发货给分公司)销售组织的销售订单不控制;
*        5、此作业是基于增强8存在的情况下
*      WHEN 'ZOR1' OR 'ZOR2' OR 'ZOR3'.
.
        
IF SY-UNAME NE '1109347' AND VBAK-ERDAT GE '20090301'.    "创建者不为1091159或者大于20090301时才进行失效日期检查
        
IF VBAK-VKORG NE 2000 AND ZTSD012-ZFLAG EQ 'X'.
          
DATA ZPOS TYPE I.
          
LOOP AT XVBUP.
            
READ TABLE XVBKD WITH KEY POSNR = XVBUP-POSNR.
            
IF SY-SUBRC EQ 0.
               
IF XVBKD-BSTDK_E IS INITIAL.
                 
MESSAGE E398(00) WITH '请在行项目' XVBUP-POSNR '栏位Order Date输入失效日期'.
               
ENDIF.
            
ELSE.
                 
MESSAGE E398(00) WITH '请在行项目' XVBUP-POSNR '栏位Order Date输入失效日期'.
            
ENDIF.
          
ENDLOOP.
          
ENDIF.


*  判断字段XVBKD-BSTKD_E输入是数字
*          DATA:ZLEN TYPE I.  "取字符长度
*          DATA:ZPOS9 TYPE I VALUE 0.
*          DATA:ZCHAR(11).
*          ZCHAR = '0123456 78.9'.
*          ZLEN = STRLEN( XVBKD-BSTKD_E ).
*
*          DO ZLEN TIMES.
*           IF NOT XVBKD-BSTKD_E+ZPOS9(1) CO ZCHAR.
*              MESSAGE E398(00) WITH '采购订单编号中字符' XVBKD-BSTKD_E+ZPOS9(1) '不是数字'.
*           ENDIF.
*            ZPOS9 = ZPOS9 + 1.
*         ENDDO.

        
ENDIF.
*增强9结束



  
IF  T180-TRTYP = 'H' OR T180-TRTYP =  'V'."仅在创建,更改时,做检查""20080814更新 ;  MODIFY BY YZP  20090416

***对订单类型进行控制
    
CASE VBAK-AUART.
*增强6: 检查联营客户是否与订单类型匹配;
      
WHEN 'KB' OR 'KA' OR 'KE' OR 'KR' OR 'ZKE2' OR 'ZKR2' OR 'ZKB' ."联营专柜
        
TABLES: KNA1.
*      判断客户是不是联营客户32,如果是联营客户且工厂不为2000时,报错
        
SELECT SINGLE * FROM KNA1 WHERE KUNNR = VBAK-KUNNR  AND  KDKG3  <> '32'.
        
IF SY-SUBRC = 0.
          
IF VBAK-VKORG <> '2000'.
            
MESSAGE E398(00)   WITH '订单类型可能选择错误,因为客户性质为非联营散装客户'.
          
ENDIF.
        
ENDIF.
*增强6结束;

*增强11: 代理商退货订单,默认送货方式为Z10;当单据退货为销售冲单时,操作人员可以选择送货方式;
*      WHEN 'ZRE1' OR 'ZRE3'.
*增强11结束:


    
ENDCASE.
***对订单类型进行控制结束


*增强7: 检查行项目是否为空
    
DATA: LIN TYPE I.
    
DESCRIBE TABLE XVBAP LINES LIN .
    
IF LIN <= 0.
      
MESSAGE E398(00) WITH '行项目不能为空!'.
    
ENDIF.
*增强7结束;

  
ENDIF.


***增强10  客户退货控制
***1、退货控制逻辑:
***   1)、通过维护表ZTSD021、ZTSD022来进行渠道可销售品项、销售类、行销类的控制;
***   2)、订单原因810、210退货时不受控制;
***   3)、渠道10、11、12、40在每月的1-4号不能退货;
***2、可退货控制逻辑
***   1)、通过维护表ZTSD023做分公司、渠道、客户、系统(四选一)和品项、销售类、行项类(三选一)的解除退货控制;\
***用户1091159创建销售订单时权限不受控制

IF ( T180-TRTYP = 'H' OR T180-TRTYP =  'V' ) AND SY-UNAME NE '1109347' AND VBAK-AUGRU NE '810' AND VBAK-AUGRU NE '210' AND VBAK-ERDAT GE '20090601'. "AND SY-UNAME = 'ABAP1' ."仅在创建,更改时,做检查""20080814更新
    
DATA:YC(2),
         YI 
TYPE I.
    YC = VBAK-ERDAT+
6(2).
    YI = YC.

 
IF ( VBAK-VTWEG EQ '10' OR VBAK-VTWEG EQ '11' OR VBAK-VTWEG EQ '12' OR VBAK-VTWEG EQ '40' ) AND YI LE 4
       
AND ( VBAK-AUART EQ 'ZRE1' OR VBAK-AUART EQ 'ZRE2' OR VBAK-AUART EQ 'KA' ).
     
MESSAGE E398(00) WITH '渠道10、11、12、40在每月1-4号不能退货!!'.
  
ELSE.
    
CASE VBAK-AUART.
      
WHEN 'ZRE1' OR 'ZRE2' OR 'KA'.
        
TABLES:ZTSD021,ZTSD022,ZTSD023.
        
DATA:ZKMC(30).
        
SELECT SINGLE * FROM ZTSD011 WHERE BZIRK  = XVBKD-BZIRK.
        
LOOP AT XVBAP.
          
"先检查优先级高的可退货表ZTSD023
          
SELECT SINGLE * FROM ZTSD023
            
WHERE
                 ( ( KUNNR 
EQ VBAK-KUNNR ) OR ( KVGR2 EQ VBAK-KVGR2 AND VKORG EQ ZTSD011-VKORG ) OR ( VTWEG EQ VBAK-VTWEG AND VKORG EQ ZTSD011-VKORG )
                   
OR ( KVGR2 EQ VBAK-KVGR2 AND VKORG EQ '' ) OR  ( VTWEG EQ VBAK-VTWEG AND VKORG EQ '' ) )
              
AND ( MATNR EQ XVBAP-MATNR OR KONDM EQ XVBAP-KONDM OR MVGR5 EQ XVBAP-MVGR5 )
              
AND DATAB LE XVBAP-ERDAT
              
AND DATBI GE XVBAP-ERDAT
              .
          
IF SY-SUBRC EQ 0. "假如允许销售退货 就进入一下条目
             
CONTINUE.
          
ENDIF.
          
"否则检查此客户不可退货渠道及物料列表
          
SELECT SINGLE * FROM ZTSD021 WHERE VTWEG EQ VBAK-VTWEG
                                         
AND DATAB LE XVBAP-ERDAT
                                         
AND DATBI GE XVBAP-ERDAT
                                         .
          
IF SY-SUBRC EQ 0.
               
SELECT SINGLE * FROM ZTSD022 WHERE ( MATNR EQ XVBAP-MATNR OR KONDM EQ XVBAP-KONDM OR MVGR5 EQ XVBAP-MVGR5 )
                                              
AND DATAB LE XVBAP-ERDAT
                                              
AND DATBI GE XVBAP-ERDAT
                                              .
               
IF SY-SUBRC EQ 0.
                  
READ TABLE XVBUP WITH KEY POSNR = XVBAP-POSNR .
                  
IF SY-SUBRC EQ 0.
                    
CONCATENATE ZKMC XVBAP-POSNR INTO ZKMC SEPARATED BY SPACE.
                  
ENDIF.
               
ENDIF.
          
ENDIF.
       
ENDLOOP.

       
IF ZKMC IS NOT INITIAL.
          
MESSAGE E398(00) WITH '行项目' ZKMC '不能退货'.
       
ENDIF.
*        ENDIF.
    
ENDCASE.
  
ENDIF.
ENDIF.
***增强10结束

***增强13:代理商、小商品渠道的订单产生交货单后不能再修改送货方式;
***前提关闭所有行项目送货方式的修改(用屏幕变式实现此功能)
IF T180-TRTYP = 'V' AND SY-UNAME NE '1109347'. "SY-TCODE NE 'ZVA02E'.
  
IF ( VBAK-VTWEG = '20' OR VBAK-VTWEG = '30' ) AND VBUK-LFSTK <> 'A' .
    
READ TABLE XVBKD WITH KEY POSNR = '000000'.
    
READ TABLE YVBKD WITH KEY POSNR = '000000'.
    
IF SY-SUBRC EQ 0 AND XVBKD-INCO1 NE YVBKD-INCO1.
       
MESSAGE E398(00) WITH '代理商、小商品订单产生交货单后,送货方式不能修改!'.
    
ENDIF.
  
ENDIF.
ENDIF.
***增强13结束;

ENDIF.

*******增强16  客户回单帐期超过提示及管控在订单上进行交货冻结
*IF XVBKD-BZIRK EQ '6691' OR XVBKD-BZIRK EQ '6693' OR XVBKD-BZIRK EQ '6660' OR
*   XVBKD-BZIRK EQ '6310' OR XVBKD-BZIRK EQ '6340' OR XVBKD-BZIRK EQ '6690'.
 
READ TABLE XVBKD WITH KEY POSNR = '000000'.
 
IF SY-SUBRC EQ 0. "AND SY-UNAME EQ '1091159'.

  
SELECT SINGLE * FROM ZTSD034 WHERE AUGRU EQ VBAK-AUGRU AND ( ZRECON EQ 'X' OR ZRECON2 EQ 'X' ).
  
IF SY-SUBRC EQ 0.
    
IF ZTSD034-ZRECON2 EQ 'X'.
      
CLEAR XVBAK-LIFSK.
      
CLEAR VBAK-LIFSK.
      
MODIFY VBAK.
    
ENDIF.
  
"不管交货单还是订单回单管控都在销售订单上做提示
    
DATA: ZTDAT1 LIKE SY-DATUM.
    
SELECT MIN( ZTDAT ) INTO ZTDAT1 FROM ZTSD032 "得到此客户最早回单日期
      
WHERE KUNAG EQ VBAK-KUNNR
        
AND ZREFG NE 'X'
        
AND ( ZEDAT LT SY-DATUM OR ZEDAT EQ '' ).
      
"如果找到未回单的单据,并且回单日期小于当天,即提示
      
IF SY-SUBRC EQ 0 AND ZTDAT1 LT SY-DATUM AND ZTDAT1 IS NOT INITIAL.
           
MESSAGE I398(00)  WITH '超回单帐期锁户'.
           
"如果是订单管控,把销售订单的"交货冻结"直接标识为'04'
           
IF ZTSD034-ZRECON2 EQ 'X'.
               XVBAK-LIFSK = 
'04'.
               VBAK-LIFSK = 
'04'.
               
MODIFY VBAK.
           
ENDIF.
      
ENDIF.

  
ENDIF.

 
ENDIF.
*ENDIF.
*******增强16如束

*******增强17配送业务送货方式和回单的管控.


*IF ( VBAK-AUART EQ 'ZOR7' OR VBAK-AUART EQ 'ZOR8' OR VBAK-AUART EQ 'ZKB' ) AND  ( SY-UNAME NE '1091159' OR SY-UNAME NE 'ABAP2' ).
*   MESSAGE E398(00)  WITH '你暂时没有权限使用订单类型ZOR7/ZOR8/ZKB'.
*ENDIF.

IF VBAK-AUART EQ 'ZOR7' OR VBAK-AUART EQ 'ZOR8' OR VBAK-AUART EQ 'ZKB'.
   
READ TABLE XVBKD WITH KEY POSNR = '000000'.
   
IF SY-SUBRC EQ 0 AND XVBKD-INCO1 NE 'Z31'.
     
MESSAGE E398(00)  WITH '送货方式必须为Z31(配送商配送),确认此客户是否为被配送客户或修改订单送货方式!'.
   
ENDIF.
ELSEIF VBAK-AUART EQ 'ZOR1' OR VBAK-AUART EQ 'ZOR2' OR VBAK-AUART EQ 'KB' AND VBAK-VKORG NE 2000.
   
READ TABLE XVBKD WITH KEY POSNR = '000000'.
   
IF SY-SUBRC EQ 0 AND ( XVBKD-INCO1 EQ 'Z31' OR XVBKD-INCO1 EQ 'Z10' ).
     
MESSAGE E398(00)  WITH '送货方式为Z31(配送商配送)或Z10(总公司直送),销售订单类型或送货方式选择错误!'.
   
ENDIF.
ELSEIF VBAK-AUART EQ 'ZOR3' OR VBAK-AUART EQ 'ZRE3'.
   
READ TABLE XVBKD WITH KEY POSNR = '000000'.
   
IF SY-SUBRC EQ 0 AND XVBKD-INCO1 NE 'Z10'.
     
MESSAGE E398(00)  WITH '送货方式必须为Z10(总公司送货),确认此客户是否为指配客户或修改订单送货方式!'.
   
ENDIF.
ENDIF.
*******结束增强17配送业务送货方式和回单的管控.


*******增强18  控制销售订单不能修改
LOOP AT XVBAP.

ENDLOOP.
*******结束增强18  控制销售订单不能修改

****结束  Client不为200时并且为销售订单(VBAK-TRVOG EQ 0)业务时,才进行以下程序检查

*IF T180-TRTYP = 'V' AND VBAK-AUDAT LE '20090608' AND SY-UNAME NE '1091159' AND VBAK-ERNAM EQ '1091159'.
*  MESSAGE E398(00) WITH '6.1-6.8导入单据分公司不能修改!'.
*ENDIF.

ENDFORM.                    "USEREXIT_SAVE_DOCUMENT_PREPARE
*eject

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/7810493/viewspace-621593/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: zsdr909
请登录后发表评论 登录
全部评论

注册时间:2009-12-03

  • 博文量
    3
  • 访问量
    4115

最新文章