MV45AFZZ 销售订单的增强
- ***INCLUDE MV45AFZZ .
- *---------------------------------------------------------------------*
- * 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 '.
- * IF VBAK-VBTYP NE 'A'.
- * .
- * ENDIF.
- * ENDCASE.
- * CASE screen-group2.
- * WHEN 'LOO'.
- * '.
- * '.
- * ENDIF.
- * ENDCASE.
- * CASE SCREEN-NAME.
- * WHEN 'VBAK-VBELN'.
- * .
- * ENDCASE.
- ** Begin v1.
- ** 以下是免费样品订单(ZFD)对售达方的类型判断,限制售达方只能是内部办事处:账户组为: Susan
- 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.
- '.
- ) WITH '免费样品订单售达方必须是内部销售办事处'.
- EXIT.
- ENDIF.
- ENDIF.
- ENDIF.
- ** End v1.
- 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.
- .
- dat = sy-datum .
- WHILE i <= jhzqmax.
- i = i + .
- dat = dat + .
- *--------------工厂日历的日期---------------------
- 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 .
- ) 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 = : Create header *
- * SVBAK-TABIX > : 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 = : Create item *
- * SVBAP-TABIX > : 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 = : Create schedule line *
- * SVBEP-TABIX > : 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 = : Create data *
- * SVBKD-TABIX > : 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 = .
- 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'.
- '.
- ** begin V1.1暂时取消促销品的增强
- * MESSAGE e005(ymess) WITH '项目类别促销品订单原因只能为促销赠品!' .
- * exitflag = .
- * RETURN.
- ** end V1.
- ENDIF.
- ENDIF.
- IF xvbap-pstyv = 'ZGAN' OR xvbap-pstyv = 'Z001'." ZGAN 宣传品,展示品
- '.
- * MESSAGE '订单原因为"广告物料"项目类别只能为宣传品或展示品!' TYPE 'E'.
- MESSAGE e005(ymess) WITH '项目类别宣传品或展示品订单原因只能为广告物料!'.
- exitflag = .
- RETURN.
- ENDIF.
- ENDIF.
- ENDIF.
- ** Z001 V1. ZHOUXU
- IF xvbak-auart = 'Z001'.
- IF xvbap-pstyv = 'Z003' OR xvbap-pstyv = 'Z004'.
- ) <> '.
- * MESSAGE '订单原因为"广告物料"项目类别只能为宣传品或展示品!' TYPE 'E'.
- MESSAGE e005(ymess) WITH '项目类型为办公用品或样品领用时不能选此订单原因 !'.
- exitflag = .
- 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. ZHOUXU 广告订单判断---------------------------
- PERFORM zcheck_ggdd USING exitflag.
- .
- EXIT.
- ENDIF.
- DATA: lx_vbak LIKE vbak.
- DATA: zkbetr LIKE xkomv-kbetr.
- DECIMALS VALUE '150.00',
- zprice2 DECIMALS VALUE '50.00'.
- SELECT SINGLE * INTO lx_vbak
- FROM vbak WHERE vbeln = xvbak-vbeln.
- IF vbak-kvgr1 <> lx_vbak-kvgr1.
- AUTHORITY-CHECK OBJECT 'ZHLSDPR'
- '.
- .
- ) WITH '你没有权限审批价格!'.
- xvbak-kvgr1 = lx_vbak-kvgr1.
- vbak-kvgr1 = lx_vbak-kvgr1.
- ENDIF.
- ENDIF.
- IF vbak-kvgr2 <> lx_vbak-kvgr2.
- AUTHORITY-CHECK OBJECT 'ZHLSDPR'
- '.
- .
- ) WITH '你没有权限审批价格!'.
- xvbak-kvgr2 = lx_vbak-kvgr2.
- vbak-kvgr2 = lx_vbak-kvgr2.
- ENDIF.
- ENDIF.
- IF vbak-kvgr3 <> lx_vbak-kvgr3.
- AUTHORITY-CHECK OBJECT 'ZHLSDPR'
- '.
- .
- ) WITH '你没有权限审批价格!'.
- xvbak-kvgr3 = lx_vbak-kvgr3.
- vbak-kvgr3 = lx_vbak-kvgr3.
- ENDIF.
- ENDIF.
- IF vbak-kvgr4 <> lx_vbak-kvgr4.
- AUTHORITY-CHECK OBJECT 'ZHLSDPR'
- '.
- .
- ) 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.
- .
- zkbetr = ABS( xkomv-kbetr ).
- IF zkbetr GT zprice1.
- '.
- xvbak-kvgr3 = '.
- vbak-kvgr3 = '.
- ) WITH '订单折扣率高于15%,需要审批 '.
- xvbak-lifsk = '.
- vbak-lifsk = '.
- ENDIF.
- '.
- xvbak-kvgr2 = '.
- vbak-kvgr2 = '.
- ) WITH '订单折扣率高于5%,需要审批 '.
- xvbak-lifsk = '.
- vbak-lifsk = '.
- ENDIF.
- '.
- xvbak-kvgr1 = '.
- vbak-kvgr1 = '.
- ) WITH '订单折扣,需要审批 '.
- xvbak-lifsk = '.
- vbak-lifsk = '.
- ENDIF.
- EXIT.
- ELSEIF zkbetr GT zprice2.
- xvbak-kvgr3 = ' '.
- vbak-kvgr3 = ' '.
- '.
- xvbak-kvgr2 = '.
- vbak-kvgr2 = '.
- ) WITH '订单折扣率高于5%,需要审批 '.
- xvbak-lifsk = '.
- vbak-lifsk = '.
- ENDIF.
- '.
- xvbak-kvgr1 = '.
- vbak-kvgr1 = '.
- ) WITH '订单折扣,需要审批 '.
- xvbak-lifsk = '.
- vbak-lifsk = '.
- ENDIF.
- EXIT.
- ELSE.
- xvbak-kvgr3 = ' '.
- vbak-kvgr3 = ' '.
- xvbak-kvgr2 = ' '.
- vbak-kvgr2 = ' '.
- '.
- xvbak-kvgr1 = '.
- vbak-kvgr1 = '.
- ) WITH '订单折扣率产生,需要审批 '.
- xvbak-lifsk = '.
- vbak-lifsk = '.
- 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.
- .
- zkbetr = ABS( xkomv-kbetr ).
- IF zkbetr GT zprice1.
- '.
- xvbak-kvgr3 = '.
- vbak-kvgr3 = '.
- ) WITH '订单折扣率高于15%,需要审批 '.
- xvbak-lifsk = '.
- vbak-lifsk = '.
- ENDIF.
- '.
- xvbak-kvgr2 = '.
- vbak-kvgr2 = '.
- ) WITH '订单折扣率高于5%,需要审批 '.
- xvbak-lifsk = '.
- vbak-lifsk = '.
- ENDIF.
- '.
- xvbak-kvgr1 = '.
- vbak-kvgr1 = '.
- ) WITH '订单折扣,需要审批 '.
- xvbak-lifsk = '.
- vbak-lifsk = '.
- ENDIF.
- EXIT.
- ELSEIF zkbetr GT zprice2.
- xvbak-kvgr3 = ' '.
- vbak-kvgr3 = ' '.
- '.
- xvbak-kvgr2 = '.
- vbak-kvgr2 = '.
- ) WITH '订单折扣率高于5%,需要审批 '.
- xvbak-lifsk = '.
- vbak-lifsk = '.
- ENDIF.
- '.
- xvbak-kvgr1 = '.
- vbak-kvgr1 = '.
- ) WITH '订单折扣,需要审批 '.
- xvbak-lifsk = '.
- vbak-lifsk = '.
- ENDIF.
- EXIT.
- ELSE.
- xvbak-kvgr3 = ' '.
- vbak-kvgr3 = ' '.
- xvbak-kvgr2 = ' '.
- vbak-kvgr2 = ' '.
- '.
- xvbak-kvgr1 = '.
- vbak-kvgr1 = '.
- ) WITH '订单折扣率产生,需要审批 '.
- xvbak-lifsk = '.
- vbak-lifsk = '.
- 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'.
- '.
- LOOP AT xvbap.
- SELECT SINGLE *
- INTO lx_vbap
- FROM vbap
- WHERE vbeln = xvbap-vbeln AND posnr = xvbap-posnr.
- .
- xvbak-kvgr4 = '.
- vbak-kvgr4 = '.
- ) WITH '订单折扣率已经审批,修改后需要再次审批 '.
- xvbak-lifsk = '.
- vbak-lifsk = '.
- 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 = '.
- vbak-kvgr4 = '.
- ) WITH '订单折扣率已经审批,修改后需要再次审批 '.
- xvbak-lifsk = '.
- vbak-lifsk = '.
- 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 = '.
- vbak-kvgr4 = '.
- ) WITH '订单折扣率已经审批,修改后需要再次审批 '.
- xvbak-lifsk = '.
- vbak-lifsk = '.
- EXIT.
- ENDIF.
- ENDIF.
- ENDLOOP.
- ENDIF.
- ****增加有条件未审批时,不允许修改订单交货状态 add by LKJ 2009/02/25
- ' ).
- AUTHORITY-CHECK OBJECT 'ZHLSDPR'
- '.
- .
- ) WITH '订单价格、折扣未审批,无权修改状态!'.
- xvbak-lifsk = '.
- vbak-lifsk = '.
- 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'.
- ."无审核权限,检查已修改的数据条件(刷可用量)
- role = 'N'.
- * ) 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.
- **
- CLEAR netwr.
- netwr = l_vbap-netwr - l_vbap2-netwr.
- netwr = ABS( netwr ).
- temp = netwr.
- CONDENSE temp.
- ' .
- l_vbap2-netwr = l_vbap-netwr.
- ENDIF.
- **end v1.
- **begin v1.
- CLEAR netwr.
- netwr = l_vbap-mwsbp - l_vbap2-mwsbp.
- netwr = ABS( netwr ).
- temp = netwr.
- CONDENSE temp.
- ' .
- l_vbap2-mwsbp = l_vbap-mwsbp.
- ENDIF.
- **end v1.5
- **begin v1..
- CLEAR netwr.
- netwr = l_vbap-netpr - l_vbap2-netpr.
- netwr = ABS( netwr ).
- temp = netwr.
- CONDENSE temp.
- ' .
- l_vbap2-netpr = l_vbap-netpr.
- ENDIF.
- **end v1.
- ** Begin v1.
- **以下是免费样品订单(ZFD),广告物料订单(ZGOR)审核后不允许修改的字段内容:
- **
- **,订单抬头:售达方,送达方,成本中心;
- **,订单明细:物料编码,数量,增删行项目.
- 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.
- ** 以下是免费样品订单(ZFD)对售达方的类型判断,限制售达方只能是内部办事处:账户组为: Susan
- 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.
- '.
- 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.
- **Begin v1.6
- lx_vbak-aedat = vbak-aedat.
- **End v1.
- **
- * DATA:netwr LIKE vbak-netwr .
- CLEAR netwr.
- netwr = lx_vbak-netwr - vbak-netwr.
- netwr = ABS( netwr ).
- temp = netwr.
- CONDENSE temp.
- ' .
- lx_vbak-netwr = vbak-netwr.
- ENDIF.
- **
- ** Begin v1.
- **以下是免费样品订单(ZFD),广告物料订单(ZGOR)审核后不允许修改的字段内容:
- **
- **,订单抬头:售达方,送达方,成本中心;
- **,订单明细:物料编码,数量,增删行项目.
- 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'.
- * ) WITH '订单对象状态审批通过,无反审核权限!'.
- * LEAVE TO CURRENT TRANSACTION.
- * else.
- * exit.
- * endif.
- EXIT.
- ELSE.
- ) WITH '订单对象状态审批通过,不允许修改订单行项目数据!'.
- LEAVE TO CURRENT TRANSACTION.
- ENDIF.
- EXIT.
- ELSE.
- ) WITH '订单对象状态审批通过,不允许修改抬头订单数据!'.
- LEAVE TO CURRENT TRANSACTION.
- ENDIF.
- EXIT.
- ENDIF.
- ENDIF.
- ENDIF.
- ENDFORM. "USEREXIT_SAVE_DOCUMENT_PREPARE *eject
MV45AFZZ 销售订单的增强的更多相关文章
- 销售订单增强字段 bapi更新
如果增强字段在销售订单抬头(vbak)上,则要将增强字段一并append到如下四个表/结构中: VBAKKOZ VBAKKOZX BAPE_VBAK BAPE_VBAKX 在行项目(vbap)上: V ...
- 【ABAP系列】SAP 销售订单的行项目里条件的增强
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP 销售订单的行项目里条件的 ...
- SAP四代增强实现:销售订单复制项目文本时不需要显示文本框和回车
最近接收到一个业务需求,在SAP依据销售订单复制时,如果订单里面的项目有多个文本,系统就会显示复制的文本框处理,让用户选择是否复制,这个就让销售很不舒服,如果有几十个项目,每个项目有几个文本,那就就要 ...
- [SAP ABAP开发技术总结]SD销售订单定价过程
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- 为什么S/4HANA的销售订单创建会触发生产订单的创建
调用S/4HANA销售订单创建函数SD_SALES_DOCU_MAINTAIN创建一个销售订单时,会触发生产订单的创建. 销售订单的每个行项目对应一个独立的生产订单,SD_SALES_DOCU_MAI ...
- 基于SAP Kyma的订单编排增强介绍
尽管有一万个舍不得,2018年还是无可挽回地离我们远去了. 唯有SAP成都研究院的同事和我去年在网络上留下的这些痕迹,能证明2018年我们曾经很认真地去度过每一天: SAP成都研究院2018年总共87 ...
- sap 中怎样把非限制库存转为销售订单库存?
把非限制库存转为销售订单库存: MB1B 移动类型413 把销售订单库存转为非限制库存: MB1B移动类型411 E 切记!
- Netsharp快速入门(之11) 销售管理(开发销售订单工作区)
作者:秋时 杨昶 时间:2014-02-15 转载须说明出处 4.3 销售订单开发 4.3.1 部件工作区设置 1.创建部件工作区,建工作区向导中要注意勾选组合并系部分.具体要建立的部 ...
- Netsharp快速入门(之13) 销售管理(单据流转 销售订单生成发货单)
作者:秋时 杨昶 转载须说明出处 4.5 单据流转 4.5.1 单据流转的目的 单据流转主要为了实现业务关系的流转,并记录相互之间的关系.例如从销售订单生成销货单,两张单据之间有对应的关 ...
随机推荐
- 团队作业8——第二次项目冲刺(Beta阶段)5.22
1.当天站立式会议照片 会议内容: ①:检查总结上次任务完成情况 ②:安排本次任务的分工 ③:反思前三次自己的不足 ④:协商解决代码进度.成员投入时间等问题 2.每个人的工作 工作中遇到的困难: 代码 ...
- 201521123091 《Java程序设计》第1周学习总结
Java 第一周总结 第一周的作业. 1.本章学习总结 [x] 初识Java语言:Java的历史,三大平台,了解JVM/JRE/JDK [x] Java开发环境的配置 [x] 用记事本编写Java程序 ...
- 201521123082 《Java程序设计》第1周学习总结
201521123082 <Java程序设计>第1周学习总结 标签(空格分隔): Java 1. 本周学习总结 0.初步了解Java语言及其发展历史和过程,同时也初步了解了Java具有跨平 ...
- 201521123002 《Java程序设计》第5周学习总结
1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 2. 书面作业 作业参考文件下载 1.代码阅读:Child压缩包内源代码 1.1 com.parent包中Child.java文件能 ...
- 201521123065 《Java程序设计》第3周学习总结
1. 本周学习总结 2. 书面作业 Q1:代码阅读 public class Test1 { private int i = 1;//这行不能修改 private static int j = 2; ...
- Java第十三周总结
1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 书面作业 1. 网络基础 1.1 比较ping www.baidu.com与ping cec.jmu ...
- 201521123056 《Java程序设计》第11周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2. 书面作业 本次PTA作业题集多线程 1. 互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问) ...
- 201521123054 《Java程序设计》第14周学习总结
1. 本周学习总结 2. 书面作业 1. MySQL数据库基本操作 1.1建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现自己的学号.姓名) 1.2在自己建立的数据库上执行常见SQL语句 ...
- 详解go语言的array和slice 【一】
本篇会详细讲解go语言中的array和slice,和平时开发中使用他样时需要注意的地方,以免入坑. Go语言中array是一组定长的同类型数据集合,并且是连续分配内存空间的. 声明一个数组 var a ...
- Mybatis第九篇【基于Maven在Idea下Mybatis逆向工程】
前言 在Intellij idea下,没有学习Maven的情况下使用Mybatis的逆向工程好像有点复杂,资料太少了-找到的资料好像也行不通- 于是学完Maven之后,我就再来更新Idea下使用Myb ...