1、SE38打开程序MV45AFZZ
2、 找到FORM userexit_save_document_prepare.
3、编写代码
示例一:
ENHANCEMENT 2 ZCD_SO_SAVE_CHECK. "active version
***** ADD BY ZJ 20221026 START 检查非源头订单禁止修改
DATA:ls_zsdt031 TYPE zsdt031,
lv_zrfcid TYPE zrfcid,
lt_zsdt008 TYPE TABLE OF zsdt008,
ls_zsdt008 TYPE zsdt008.
IF ( sy-tcode = 'VA02' OR sy-tcode = 'VA03' ).
SELECT SINGLE * INTO ls_zsdt008 FROM zsdt008 WHERE objkey = vbak-vbeln
AND objtype = 'SO'.
IF sy-subrc = 0.
SELECT SINGLE objkey INTO @DATA(lv_objkey) FROM zsdt008 WHERE zrfcid = @ls_zsdt008-zrfcid
AND canum = '0010'.
IF sy-subrc = 0.
SELECT SINGLE bukrs INTO @DATA(lv_bukrs) FROM ekko WHERE ebeln = @lv_objkey.
IF sy-subrc = 0.
SELECT SINGLE zbs INTO @DATA(lv_zbs) FROM zsdt031 WHERE bukrs = @lv_bukrs
AND objtype = 'PO'.
IF lv_zbs = 'Y'.
IF ls_zsdt008-canum > 10.
MESSAGE '非源头订单不能够更改' TYPE 'E'.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
* SELECT SINGLE * FROM zsdt031 INTO ls_zsdt031 WHERE bukrs = vbak-vkorg
* AND objtype = 'SO'.
* IF ls_zsdt031-zbs = 'Y'.
* SELECT SINGLE * INTO ls_zsdt008 FROM zsdt008 WHERE objkey = vbak-vbeln
* AND objtype = 'SO'.
* IF sy-subrc = 0.
* IF ls_zsdt008-canum > 10.
* MESSAGE '非源头订单不能够更改' TYPE 'E'.
* ENDIF.
* ENDIF.
* ENDIF.
ENDIF.
***** ADD BY ZJ 20221026 END 检查非源头订单禁止修改
ENDENHANCEMENT.
示例二:
FORM userexit_save_document_prepare.
*{ INSERT S4DK900377 1
***>>>BEG ERP360
DATA:lv_zbs1 TYPE c.
SELECT SINGLE zbs INTO lv_zbs1 FROM zuser_exit WHERE zxh = '0007'.
* IF lv_zbs1 = ''.
IF sy-tcode = 'VA02'.
DATA:user_line LIKE bsvx-sttxt.
DATA:e_stsma LIKE jsto-stsma.
DATA:wa_xvbap LIKE xvbap.
DATA:tab1 LIKE vbap.
DATA:tab2 LIKE vbap.
DATA:GV_AUART LIKE VBAK-AUART.
LOOP AT xvbap INTO wa_xvbap.
"销售订单类型ZKE1的修改不受审核情况限制。
SELECT SINGLE AUART INTO GV_AUART FROM VBAK WHERE VBELN = WA_XVBAP-VBELN.
IF GV_AUART = 'ZKE1'.
EXIT.
ENDIF.
CLEAR:user_line,
e_stsma .
* IF NOT vbak-objnr IS INITIAL AND wa_xvbap-updkz <> '' AND wa_xvbap-updkz <> 'I'.
SELECT SINGLE * INTO tab1 FROM vbap WHERE vbeln = wa_xvbap-vbeln AND posnr = wa_xvbap-posnr.
MOVE-CORRESPONDING wa_xvbap TO tab2.
IF tab2-netwr <> tab1-netwr OR tab2-matnr <> tab1-matnr.
CALL FUNCTION 'STATUS_TEXT_EDIT'
EXPORTING
client = sy-mandt
flg_user_stat = 'X'
objnr = vbak-objnr
only_active = 'X'
spras = sy-langu
bypass_buffer = 'X'
IMPORTING
* ANW_STAT_EXISTING =
e_stsma = e_stsma
* LINE =
user_line = user_line
* STONR =
EXCEPTIONS
object_not_found = 1
OTHERS = 2.
IF sy-subrc = 0 AND user_line <> '创建' .
MESSAGE '销售订单已审批,不允许修改!' TYPE 'E'.
ENDIF.
ENDIF.
* ENDIF.
ENDLOOP.
ENDIF.
* ENDIF.
DATA: lt_vbep TYPE STANDARD TABLE OF vbepvb,
ls_vbep LIKE LINE OF lt_vbep.
lt_vbep = xvbep[].
LOOP AT xvbap.
READ TABLE lt_vbep INTO ls_vbep WITH KEY vbeln = xvbap-vbeln
posnr = xvbap-posnr.
IF xvbap-zzeindt1 IS INITIAL.
xvbap-zzeindt1 = ls_vbep-edatu.
ENDIF.
IF xvbap-zzeindt2 IS INITIAL.
xvbap-zzeindt2 = ls_vbep-edatu.
ENDIF.
IF xvbap-zzeindt1 = xvbap-zzeindt2.
xvbap-zzeindt2 = ls_vbep-edatu.
ENDIF.
MODIFY xvbap TRANSPORTING zzeindt1 zzeindt2.
ENDLOOP.
***<<<END ERP360
*} INSERT
ENDFORM.