销售订单增强MV45AFZZ
来源:互联网 发布:巫启贤 唱功知乎 编辑:程序博客网 时间:2024/04/18 10:02
***INCLUDE MV45AFZZ .
************************************************************************
* *
* This include is reserved for user modifications *
* *
* Forms for sales document processing *
* *
* The name of modification modules should begin with 'ZZ'. *
* *
************************************************************************
*& 修改日期:2010.06.09
*& 修 改 人:zhouxu V1.0
*& 修改原因:1 ZGOR 广告物料发放订单项目类型与订单原因的判断
* 2 订单条件与客户组字段效验
* 3 Z001 成本中心发料项目类型与订单原因的判断
*& 修改日期:2010.06.23
*& 修 改 人:zhouxu V1.1
*& 修改原因: 暂时取消促销品的增强
*& 修改日期:2010.08.13
*& 修 改 人:zhouxu V1.2
*& 修改原因: 审批之后可以修改六个字段
*& 修改日期:2010.08.16
*& 修 改 人:zhouxu V1.3
*& 修改原因: 审批之后抬头金额小数点第二位不对无法修改
*& 修改日期:2010.08.16
*& 修 改 人:zhouxu V1.4
*& 修改原因: 审批之后项目金额小数点第二位不对无法修改
*& 修改日期:2010.08.17
*& 修 改 人:zhouxu V1.5
*& 修改原因: 审批之后项目税额MWSBP小数点第二位不对无法修改
*& 修改日期:2010.08.18
*& 修 改 人:zhouxu V1.6
*& 修改原因: 审批之后最后更改日期无法修改。
*& 修改日期:2010.08.18
*& 修 改 人:zhouxu V1.7
*& 修改原因: 审批之后净价格NETPR无法修改。NETPR
*& 修改日期:2010.08.20
*& 修 改 人:zhouxu V1.8
*& 修改原因:
*以下是免费样品订单(ZFD),广告物料订单(ZGOR)审核后不允许修改的字段内容:
*
*1,订单抬头:售达方,送达方,成本中心;
*2,订单明细:物料编码,数量,增删行项目.
*& 修改日期:2010.08.24
*& 修 改 人:zhouxu V1.9
*& 修改原因: 销售订单交货日期后移。
*
*& 修改日期:2010.10.27
*& 修改人:Susan
*& 修改原因:免费样品订单限制售达方只能是内部销售办事处,客户组:0002
*
*---------------------------------------------------------------------*
* 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.
* CASE screen-group2.
* WHEN 'LOO'.
* IF screen-group3 = '001' AND screen-group3 = '001'.
* SCREEN-INPUT = '0'.
* ENDIF.
* ENDCASE.
* CASE SCREEN-NAME.
* WHEN 'VBAK-VBELN'.
* SCREEN-ACTIVE = 0.
* ENDCASE.
** Begin v1.9
** 以下是免费样品订单(ZFD)对售达方的类型判断,限制售达方只能是内部办事处:账户组为:0002 Susan 2010.10.27
IF sy-tcode = 'VA01' OR sy-tcode = 'VA02' .
DATA:zktokd LIKE kna1-ktokd,kunnr LIKE vbak-kunnr.
IF xvbak-auart = 'ZFD' AND xvbak-kunnr IS NOT INITIAL.
* zktokd = kna1-ktokd while kunnr = xvbak-annr.
SELECT SINGLE ktokd FROM kna1
INTO zktokd
WHERE kunnr = xvbak-kunnr.
IF zktokd <> '0002'.
MESSAGE i398(00) WITH '免费样品订单售达方必须是内部销售办事处'.
EXIT.
ENDIF.
ENDIF.
ENDIF.
** End v1.9
IF sy-tcode = 'VA01' .
DATA:jhzq LIKE ymara_sd-jhzq,jhzqmax LIKE ymara_sd-jhzq.
DATA:matnr LIKE mara-matnr.
LOOP AT xvbap WHERE matnr IS NOT INITIAL .
CLEAR jhzq.
SELECT SINGLE jhzq FROM ymara_sd
INTO jhzq
WHERE matnr = xvbap-matnr.
IF jhzqmax < jhzq.
jhzqmax = jhzq.
matnr = xvbap-matnr.
ENDIF.
ENDLOOP.
DATA:dat LIKE sy-datum.
IF matnr IS NOT INITIAL AND jhzqmax IS NOT INITIAL.
DATA: i TYPE i VALUE 1.
dat = sy-datum .
WHILE i <= jhzqmax.
i = i + 1 .
dat = dat + 1.
*--------------工厂日历的日期---------------------
CALL FUNCTION 'DATE_CONVERT_TO_FACTORYDATE'
EXPORTING
date = dat
factory_calendar_id = 'CN'
IMPORTING
date = dat.
ENDWHILE.
*------------------end ----------------------------
vbak-vdatu = dat .
xvbep-edatu = dat .
MODIFY xvbep TRANSPORTING edatu WHERE posnr IS NOT INITIAL .
MESSAGE i398(00) WITH '该订单最长交货物料为' matnr '天数为:' jhzqmax.
ENDIF.
ENDIF.
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.
*DATA:jhzq LIKE ymara_sd-jhzq,jhzqmax LIKE ymara_sd-jhzq.
*
* LOOP AT xvbap WHERE matnr IS NOT INITIAL .
* CLEAR jhzq.
* select single jhzq FROM ymara_sd
* INTO jhzq
* where matnr = xvbap-matnr.
* IF jhzqmax < jhzq.
* jhzqmax = jhzq.
* ENDIF.
* xvbep-edatu = sy-datum - jhzq .
* xvbep-bddat = sy-datum - jhzq .
* xvbep-tddat = sy-datum - jhzq .
* xvbep-mbdat = sy-datum - jhzq .
* xvbep-lddat = sy-datum - jhzq .
* xvbep-wadat = sy-datum - jhzq .
* MODIFY xvbep TRANSPORTING
* edatu
* bddat
* tddat
* mbdat
* lddat
* wadat
* WHERE posnr = xvbap-posnr. .
* ENDLOOP.
* vbak-vdatu = sy-datum - jhzqmax .
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.
*
* DATA:jhzq LIKE ymara_sd-jhzq,jhzqmax LIKE ymara_sd-jhzq.
*
* LOOP AT xvbap WHERE matnr IS NOT INITIAL .
* CLEAR jhzq.
* select single jhzq FROM ymara_sd
* INTO jhzq
* where matnr = xvbap-matnr.
* IF jhzqmax < jhzq.
* jhzqmax = jhzq.
* ENDIF.
** xvbep-edatu = sy-datum - jhzq .
** xvbep-bddat = sy-datum - jhzq .
** xvbep-tddat = sy-datum - jhzq .
** xvbep-mbdat = sy-datum - jhzq .
** xvbep-lddat = sy-datum - jhzq .
** xvbep-wadat = sy-datum - jhzq .
** MODIFY xvbep TRANSPORTING
** edatu
** bddat
** tddat
** mbdat
** lddat
** wadat
** WHERE posnr = xvbap-posnr. .
* ENDLOOP.
* vbak-vdatu = sy-datum - jhzqmax .
*
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.
DATA:jhzq LIKE ymara_sd-jhzq,jhzqmax LIKE ymara_sd-jhzq.
CLEAR jhzq.
*
* LOOP AT xvbep .
*
** CLEAR jhzq.
* READ TABLE xvbap WITH KEY vbeln = xvbep-vbeln posnr = xvbep-posnr.
* SELECT SINGLE jhzq FROM ymara_sd
* INTO jhzq
* WHERE matnr = xvbap-matnr.
* IF jhzqmax < jhzq.
* jhzqmax = jhzq.
* ENDIF.
* xvbep-edatu = sy-datum - jhzq .
* xvbep-bddat = sy-datum - jhzq .
* xvbep-tddat = sy-datum - jhzq .
* xvbep-mbdat = sy-datum - jhzq .
* xvbep-lddat = sy-datum - jhzq .
* xvbep-wadat = sy-datum - jhzq .
* MODIFY xvbep .
* ENDLOOP.
* vbak-vdatu = sy-datum - jhzqmax .
* rv45a-etdat = sy-datum - jhzqmax .
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.
*
* 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.
CLEAR tkomk-vrtnr.
PERFORM xvbpa_lesen(sapfv45k) USING 'VE'
vbap-posnr
sy-tabix.
IF xvbpa-updkz <> 'D'.
tkomk-vrtnr = xvbpa-pernr.
ENDIF.
* TKOMK-zzfield = xxxx-zzfield2.
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.
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.
*DATA:jhzq LIKE ymara_sd-jhzq,jhzqmax LIKE ymara_sd-jhzq.
* LOOP AT xvbap WHERE matnr IS NOT INITIAL.
* CLEAR jhzq.
* SELECT SINGLE jhzq FROM ymara_sd
* INTO jhzq
* WHERE matnr = xvbap-matnr.
* IF jhzqmax < jhzq.
* jhzqmax = jhzq.
* ENDIF.
*
*
* ENDLOOP.
* vbak-vdatu = sy-datum - jhzqmax .
* rv45a-etdat = sy-datum - jhzqmax .
ENDFORM. "USEREXIT_SAVE_DOCUMENT
*eject
*&---------------------------------------------------------------------*
*& Form zcheck_ggdd
*&---------------------------------------------------------------------*
* text 广告物料订单判断
*----------------------------------------------------------------------*
* -->EXITFLAG text 检验是否通过
*----------------------------------------------------------------------*
FORM zcheck_ggdd USING exitflag.
* RETURN.
exitflag = 0.
IF sy-tcode <> 'VA01' AND sy-tcode <> 'VA02'.
RETURN.
ENDIF.
** 销售凭证订单原因 306 促销赠品 307 广告物料 V1.0 ZHOUXU
LOOP AT xvbap.
** 销售凭证类型广告物料凭着
IF xvbak-auart = 'ZGOR'.
IF xvbap-pstyv = 'Z002' ."促销品
* MESSAGE '订单原因促销赠品项目类别只能为促销品' TYPE 'E'.
IF vbak-augru <> '306'.
** begin V1.1暂时取消促销品的增强
* MESSAGE e005(ymess) WITH '项目类别促销品订单原因只能为促销赠品!' .
* exitflag = 1 .
* RETURN.
** end V1.1
ENDIF.
ENDIF.
IF xvbap-pstyv = 'ZGAN' OR xvbap-pstyv = 'Z001'." ZGAN 宣传品,展示品
IF vbak-augru <> '307'.
* MESSAGE '订单原因为"广告物料"项目类别只能为宣传品或展示品!' TYPE 'E'.
MESSAGE e005(ymess) WITH '项目类别宣传品或展示品订单原因只能为广告物料!'.
exitflag = 1 .
RETURN.
ENDIF.
ENDIF.
ENDIF.
** Z001 V1.0 ZHOUXU
IF xvbak-auart = 'Z001'.
IF xvbap-pstyv = 'Z003' OR xvbap-pstyv = 'Z004'.
IF vbak-augru(1) <> '5'.
* MESSAGE '订单原因为"广告物料"项目类别只能为宣传品或展示品!' TYPE 'E'.
MESSAGE e005(ymess) WITH '项目类型为办公用品或样品领用时不能选此订单原因 !'.
exitflag = 1 .
RETURN.
ENDIF.
ENDIF.
ENDIF .
ENDLOOP.
ENDFORM. "zcheck_ggdd
*---------------------------------------------------------------------*
* 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.
IF sy-tcode = 'CO06'.
EXIT.
ENDIF.
DATA:exitflag TYPE i.
*-----------------V1.0 ZHOUXU 广告订单判断---------------------------
PERFORM zcheck_ggdd USING exitflag.
IF exitflag > 0 .
EXIT.
ENDIF.
DATA: lx_vbak LIKE vbak.
DATA: zkbetr LIKE xkomv-kbetr.
DATA: zprice1 TYPE p LENGTH 11 DECIMALS 2 VALUE '150.00',
zprice2 TYPE p LENGTH 11 DECIMALS 2 VALUE '50.00'.
SELECT SINGLE * INTO lx_vbak
FROM vbak WHERE vbeln = xvbak-vbeln.
IF vbak-kvgr1 <> lx_vbak-kvgr1.
AUTHORITY-CHECK OBJECT 'ZHLSDPR'
ID 'ACTVT' FIELD '02'.
IF sy-subrc <> 0.
MESSAGE i398(00) WITH '你没有权限审批价格!'.
xvbak-kvgr1 = lx_vbak-kvgr1.
vbak-kvgr1 = lx_vbak-kvgr1.
ENDIF.
ENDIF.
IF vbak-kvgr2 <> lx_vbak-kvgr2.
AUTHORITY-CHECK OBJECT 'ZHLSDPR'
ID 'ACTVT' FIELD '04'.
IF sy-subrc <> 0.
MESSAGE i398(00) WITH '你没有权限审批价格!'.
xvbak-kvgr2 = lx_vbak-kvgr2.
vbak-kvgr2 = lx_vbak-kvgr2.
ENDIF.
ENDIF.
IF vbak-kvgr3 <> lx_vbak-kvgr3.
AUTHORITY-CHECK OBJECT 'ZHLSDPR'
ID 'ACTVT' FIELD '06'.
IF sy-subrc <> 0.
MESSAGE i398(00) WITH '你没有权限审批价格!'.
xvbak-kvgr3 = lx_vbak-kvgr3.
vbak-kvgr3 = lx_vbak-kvgr3.
ENDIF.
ENDIF.
IF vbak-kvgr4 <> lx_vbak-kvgr4.
AUTHORITY-CHECK OBJECT 'ZHLSDPR'
ID 'ACTVT' FIELD '02'.
IF sy-subrc <> 0.
MESSAGE i398(00) WITH '你没有权限审批价格!'.
xvbak-kvgr4 = lx_vbak-kvgr4.
vbak-kvgr4 = lx_vbak-kvgr4.
ENDIF.
ENDIF.
LOOP AT xkomv.
CASE xkomv-kschl.
WHEN 'ZK04'.
IF vbak-kvgr5 IS INITIAL.
CASE xvbak-auart.
WHEN 'OR' OR 'ZTOR' OR 'ZYOR' OR 'ZDOR'.
MESSAGE e005(ymess) WITH '已维护ZK04和ZK07的折扣,请选择折扣性质!'.
ENDCASE.
ENDIF.
IF xkomv-kwert LT 0.
zkbetr = ABS( xkomv-kbetr ).
IF zkbetr GT zprice1.
IF vbak-kvgr3 NE '02'.
xvbak-kvgr3 = '01'.
vbak-kvgr3 = '01'.
MESSAGE i398(00) WITH '订单折扣率高于15%,需要审批 '.
xvbak-lifsk = '10'.
vbak-lifsk = '10'.
ENDIF.
IF vbak-kvgr2 NE '02'.
xvbak-kvgr2 = '01'.
vbak-kvgr2 = '01'.
MESSAGE i398(00) WITH '订单折扣率高于5%,需要审批 '.
xvbak-lifsk = '10'.
vbak-lifsk = '10'.
ENDIF.
IF vbak-kvgr1 NE '02'.
xvbak-kvgr1 = '01'.
vbak-kvgr1 = '01'.
MESSAGE i398(00) WITH '订单折扣,需要审批 '.
xvbak-lifsk = '10'.
vbak-lifsk = '10'.
ENDIF.
EXIT.
ELSEIF zkbetr GT zprice2.
xvbak-kvgr3 = ' '.
vbak-kvgr3 = ' '.
IF vbak-kvgr2 NE '02'.
xvbak-kvgr2 = '01'.
vbak-kvgr2 = '01'.
MESSAGE i398(00) WITH '订单折扣率高于5%,需要审批 '.
xvbak-lifsk = '10'.
vbak-lifsk = '10'.
ENDIF.
IF vbak-kvgr1 NE '02'.
xvbak-kvgr1 = '01'.
vbak-kvgr1 = '01'.
MESSAGE i398(00) WITH '订单折扣,需要审批 '.
xvbak-lifsk = '10'.
vbak-lifsk = '10'.
ENDIF.
EXIT.
ELSE.
xvbak-kvgr3 = ' '.
vbak-kvgr3 = ' '.
xvbak-kvgr2 = ' '.
vbak-kvgr2 = ' '.
IF vbak-kvgr1 NE '02'.
xvbak-kvgr1 = '01'.
vbak-kvgr1 = '01'.
MESSAGE i398(00) WITH '订单折扣率产生,需要审批 '.
xvbak-lifsk = '10'.
vbak-lifsk = '10'.
ENDIF.
EXIT.
ENDIF.
ENDIF.
*----------------------------------------------------20081010ZK07增加
WHEN 'ZK07'.
IF vbak-kvgr5 IS INITIAL.
CASE xvbak-auart.
WHEN 'OR' OR 'ZTOR' OR 'ZYOR' OR 'ZDOR'.
MESSAGE e005(ymess) WITH '已维护ZK04和ZK07的折扣!请选择折扣性质!'.
ENDCASE.
ENDIF.
IF xkomv-kwert LT 0.
zkbetr = ABS( xkomv-kbetr ).
IF zkbetr GT zprice1.
IF vbak-kvgr3 NE '02'.
xvbak-kvgr3 = '01'.
vbak-kvgr3 = '01'.
MESSAGE i398(00) WITH '订单折扣率高于15%,需要审批 '.
xvbak-lifsk = '10'.
vbak-lifsk = '10'.
ENDIF.
IF vbak-kvgr2 NE '02'.
xvbak-kvgr2 = '01'.
vbak-kvgr2 = '01'.
MESSAGE i398(00) WITH '订单折扣率高于5%,需要审批 '.
xvbak-lifsk = '10'.
vbak-lifsk = '10'.
ENDIF.
IF vbak-kvgr1 NE '02'.
xvbak-kvgr1 = '01'.
vbak-kvgr1 = '01'.
MESSAGE i398(00) WITH '订单折扣,需要审批 '.
xvbak-lifsk = '10'.
vbak-lifsk = '10'.
ENDIF.
EXIT.
ELSEIF zkbetr GT zprice2.
xvbak-kvgr3 = ' '.
vbak-kvgr3 = ' '.
IF vbak-kvgr2 NE '02'.
xvbak-kvgr2 = '01'.
vbak-kvgr2 = '01'.
MESSAGE i398(00) WITH '订单折扣率高于5%,需要审批 '.
xvbak-lifsk = '10'.
vbak-lifsk = '10'.
ENDIF.
IF vbak-kvgr1 NE '02'.
xvbak-kvgr1 = '01'.
vbak-kvgr1 = '01'.
MESSAGE i398(00) WITH '订单折扣,需要审批 '.
xvbak-lifsk = '10'.
vbak-lifsk = '10'.
ENDIF.
EXIT.
ELSE.
xvbak-kvgr3 = ' '.
vbak-kvgr3 = ' '.
xvbak-kvgr2 = ' '.
vbak-kvgr2 = ' '.
IF vbak-kvgr1 NE '02'.
xvbak-kvgr1 = '01'.
vbak-kvgr1 = '01'.
MESSAGE i398(00) WITH '订单折扣率产生,需要审批 '.
xvbak-lifsk = '10'.
vbak-lifsk = '10'.
ENDIF.
EXIT.
ENDIF.
ENDIF.
ENDCASE.
ENDLOOP.
*----------------------------------------------------20081009增加修改订单冻结判断.
DATA: lx_vbap LIKE vbap.
DATA l_vbap LIKE vbap .
DATA l_vbap2 LIKE vbap .
DATA t_vbap TYPE TABLE OF vbap.
DATA t_vbap2 TYPE TABLE OF vbap.
DATA: lx_vbep LIKE vbep.
DATA: lx_konv LIKE konv.
DATA: lx_konv1 LIKE konv.
DATA: zkbetr1 LIKE xkomv-kbetr.
DATA: lx_jsto LIKE jsto.
DATA: lx_tj30 LIKE tj30.
DATA: lx_jest LIKE jest.
CLEAR zkbetr1.
IF sy-tcode = 'VA02'.
IF lx_vbak-kvgr1 EQ '02' OR lx_vbak-kvgr2 EQ '02' OR lx_vbak-kvgr3 EQ '02'.
LOOP AT xvbap.
SELECT SINGLE *
INTO lx_vbap
FROM vbap
WHERE vbeln = xvbap-vbeln AND posnr = xvbap-posnr.
IF sy-subrc NE 0.
xvbak-kvgr4 = '01'.
vbak-kvgr4 = '01'.
MESSAGE i398(00) WITH '订单折扣率已经审批,修改后需要再次审批 '.
xvbak-lifsk = '10'.
vbak-lifsk = '10'.
EXIT.
ENDIF.
SELECT SINGLE *
INTO lx_konv
FROM konv
WHERE knumv = xvbak-knumv AND kposn = xvbap-posnr AND kschl = 'ZK04'.
SELECT SINGLE *
INTO lx_konv1
FROM konv
WHERE knumv = xvbak-knumv AND kposn = xvbap-posnr AND kschl = 'ZK07'.
IF lx_konv-kbetr NE space .
zkbetr1 = ABS( lx_konv-kbetr ).
IF xvbap-matnr NE lx_vbap-matnr OR
xvbap-kwmeng GT lx_vbap-kwmeng OR
zkbetr GT zkbetr1.
xvbak-kvgr4 = '01'.
vbak-kvgr4 = '01'.
MESSAGE i398(00) WITH '订单折扣率已经审批,修改后需要再次审批 '.
xvbak-lifsk = '10'.
vbak-lifsk = '10'.
EXIT.
ENDIF.
ENDIF.
IF lx_konv1-kbetr NE space .
zkbetr1 = ABS( lx_konv1-kbetr ).
IF xvbap-matnr NE lx_vbap-matnr OR
xvbap-kwmeng GT lx_vbap-kwmeng OR
zkbetr GT zkbetr1.
xvbak-kvgr4 = '01'.
vbak-kvgr4 = '01'.
MESSAGE i398(00) WITH '订单折扣率已经审批,修改后需要再次审批 '.
xvbak-lifsk = '10'.
vbak-lifsk = '10'.
EXIT.
ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
****增加有条件未审批时,不允许修改订单交货状态 add by LKJ 2009/02/25
IF lx_vbak-lifsk EQ '10' AND ( lx_vbak-kvgr1 EQ '02' OR lx_vbak-kvgr2 EQ '02' OR lx_vbak-kvgr3 EQ '02' ).
AUTHORITY-CHECK OBJECT 'ZHLSDPR'
ID 'ACTVT' FIELD '02'.
IF sy-subrc <> 0.
MESSAGE i398(00) WITH '订单价格、折扣未审批,无权修改状态!'.
xvbak-lifsk = '10'.
vbak-lifsk = '10'.
ENDIF.
ENDIF.
***** add end
**** 订单的对象状态审核
**** 如果未审核,可以修改数据,如果已审核,不能做任何更改 *****
IF lx_vbak-objnr NE space." AND ( sy-uname = 'E464503' or sy-uname = 'E422038' or sy-uname = 'E422083' or sy-uname = 'E423726').
DATA role TYPE c VALUE 'Y'.
SELECT SINGLE * INTO lx_jest
FROM jest WHERE objnr EQ lx_vbak-objnr AND inact EQ 'X'.
IF lx_jest-stat EQ 'E0001'.
AUTHORITY-CHECK OBJECT 'B_USERSTAT'
ID 'BERSL' FIELD 'ZSDAU001'.
IF sy-subrc NE 0."无审核权限,检查已修改的数据条件(刷可用量)
role = 'N'.
* MESSAGE i398(00) WITH '订单对象状态审批通过,无反审核权限!'.
* LEAVE TO CURRENT TRANSACTION.
ELSE.
role = 'Y'.
ENDIF.
DATA:netwr LIKE vbap-netwr .
DATA:temp TYPE string.
LOOP AT xvbap INTO l_vbap.
APPEND l_vbap TO t_vbap2.
SELECT SINGLE *
INTO l_vbap2
FROM vbap
WHERE vbeln = l_vbap-vbeln AND posnr = l_vbap-posnr.
* l_vbap2-aedat = sy-datum."del v1.6
l_vbap2-aedat = l_vbap-aedat. "add v1.6
l_vbap2-klmeng = l_vbap-klmeng.
l_vbap2-kbmeng = l_vbap-kbmeng.
l_vbap2-abgru = l_vbap-abgru.
**BEGIN V1.4
CLEAR netwr.
netwr = l_vbap-netwr - l_vbap2-netwr.
netwr = ABS( netwr ).
temp = netwr.
CONDENSE temp.
IF temp < '1' .
l_vbap2-netwr = l_vbap-netwr.
ENDIF.
**end v1.4
**begin v1.5
CLEAR netwr.
netwr = l_vbap-mwsbp - l_vbap2-mwsbp.
netwr = ABS( netwr ).
temp = netwr.
CONDENSE temp.
IF temp < '1' .
l_vbap2-mwsbp = l_vbap-mwsbp.
ENDIF.
**end v1.5
**begin v1.7.
CLEAR netwr.
netwr = l_vbap-netpr - l_vbap2-netpr.
netwr = ABS( netwr ).
temp = netwr.
CONDENSE temp.
IF temp < '1' .
l_vbap2-netpr = l_vbap-netpr.
ENDIF.
**end v1.7
** Begin v1.8
**以下是免费样品订单(ZFD),广告物料订单(ZGOR)审核后不允许修改的字段内容:
**
**1,订单抬头:售达方,送达方,成本中心;
**2,订单明细:物料编码,数量,增删行项目.
IF xvbak-auart = 'ZGOR' OR xvbak-auart = 'ZFD'.
l_vbap2-netwr = l_vbap-netwr.
l_vbap2-mwsbp = l_vbap-mwsbp.
l_vbap2-netpr = l_vbap-netpr.
ENDIF.
** End v1.8
** Begin v1.9
** 以下是免费样品订单(ZFD)对售达方的类型判断,限制售达方只能是内部办事处:账户组为:0002 Susan 2010.10.27
DATA:zktokd LIKE kna1-ktokd,kunnr LIKE vbak-kunnr.
IF xvbak-auart = 'ZFD'.
* zktokd = kna1-ktokd while kunnr = xvbak-annr.
SELECT SINGLE ktokd FROM kna1
INTO zktokd
WHERE kunnr = xvbak-kunnr.
IF zktokd <> '0002'.
MESSAGE e005(ymess) WITH '免费样品订单售达方必须是内部销售办事处'.
EXIT.
ENDIF.
ENDIF.
** End v1.9
APPEND l_vbap2 TO t_vbap.
CLEAR: l_vbap,l_vbap2.
ENDLOOP.
lx_vbak-faksk = vbak-faksk .
xvbak-faksk = vbak-faksk .
**Begin v1.2
lx_vbak-kvgr1 = vbak-kvgr1.
lx_vbak-kvgr2 = vbak-kvgr2.
lx_vbak-kvgr3 = vbak-kvgr3.
lx_vbak-kvgr4 = vbak-kvgr4.
lx_vbak-kvgr5 = vbak-kvgr5.
lx_vbak-lifsk = vbak-lifsk.
**End v1.2
**Begin v1.6
lx_vbak-aedat = vbak-aedat.
**End v1.6
**BEGIN V1.3
* DATA:netwr LIKE vbak-netwr .
CLEAR netwr.
netwr = lx_vbak-netwr - vbak-netwr.
netwr = ABS( netwr ).
temp = netwr.
CONDENSE temp.
IF temp < '1' .
lx_vbak-netwr = vbak-netwr.
ENDIF.
**END V1.3
** Begin v1.8
**以下是免费样品订单(ZFD),广告物料订单(ZGOR)审核后不允许修改的字段内容:
**
**1,订单抬头:售达方,送达方,成本中心;
**2,订单明细:物料编码,数量,增删行项目.
IF xvbak-auart = 'ZGOR' OR xvbak-auart = 'ZFD'.
lx_vbak-netwr = vbak-netwr.
ENDIF.
** End v1.8
* LOOP AT xvbep.
* SELECT SINGLE *
* INTO lx_vbep
* FROM vbep
* WHERE vbeln = xvbep-vbeln AND posnr = xvbep-posnr AND bmeng = xvbep-bmeng AND edatu = sy-datum.
* ENDLOOP.
IF xvbak EQ lx_vbak OR vbak EQ lx_vbak . "如果订单抬头被更改
IF t_vbap2 EQ t_vbap.
* if role = 'N'.
* MESSAGE i398(00) WITH '订单对象状态审批通过,无反审核权限!'.
* LEAVE TO CURRENT TRANSACTION.
* else.
* exit.
* endif.
EXIT.
ELSE.
MESSAGE i398(00) WITH '订单对象状态审批通过,不允许修改订单行项目数据!'.
LEAVE TO CURRENT TRANSACTION.
ENDIF.
EXIT.
ELSE.
MESSAGE i398(00) WITH '订单对象状态审批通过,不允许修改抬头订单数据!'.
LEAVE TO CURRENT TRANSACTION.
ENDIF.
EXIT.
ENDIF.
ENDIF.
ENDIF.
ENDFORM. "USEREXIT_SAVE_DOCUMENT_PREPARE *eject
- 销售订单增强MV45AFZZ
- 销售订单增强MV45AFZZ
- 销售订单增强MV45AFZZ
- VA01销售订单增强MV45AFZZ注意点
- VA01销售订单增强MV45AFZZ注意点
- VA01销售订单增强MV45AFZZ注意点
- 销售订单增强
- 销售订单屏幕增强及功能增强
- 销售订单的一个直接修改源程序的地方 MV45AFZZ 可以控制销售订单上的价格显示不显示
- 销售订单的一个直接修改源程序的地方 MV45AFZZ 可以控制销售订单上的价格显示不显示
- SD 销售订单的BADI增强SD_BADI_PRICE_CHECK
- 销售订单的行项目里条件的增强
- VA01 销售订单 审批 状态 增强
- 销售订单的行项目里条件的增强
- 销售订单SO保存校验的用户出口增强
- MV45AFZZ
- 是同一个销售订单类型,根据不同销售组织分配不同的号码段的增强出口
- 订单捕获-销售订单工作台
- STL (Standard Template Library)标准模板库 C++
- vs2008 添加方法 脚本错误 此网站的某个加载项运行失败
- 2010年11月18日起制定的计划
- sap abap 查找增强的程序
- WebGoat学习笔记(五)——CSRF Token By-Pass
- 销售订单增强MV45AFZZ
- 第一次写makefile就悲剧了
- EXCEL函数教程大全
- as3跨域加载图片时设置LoaderContext类
- CSS在html页完全正常,到aspx页显示不正常
- perl 二维数组排序
- 常见的abap面试题目,请大家对照学习
- 使用fedora的问题
- 数据库设计中的14个关键技巧