***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