VA02 刪除銷售訂單增強,根據訂單型別確認是否可刪除
程式:MV45AFZB,
FORM:USEREXIT_CHECK_XVBAP_FOR_DELET.
This form is called when user tries to delete an item from the sales document or by clicking Delete button and confirming the popup or tries to delete the order from the header by selecting Sales document -> Delete. This way, user will be informed immediately that item cannot be deleted. Required code is as below:
IF… “Appropriate condition to separate deletable items for other plants
IF VBAP-POSNR NE ‘000000’. “This prevents a short dump when user tries to delete the order from the header by selecting Sales document -> Delete
MESSAGE E001(00) WITH 'DELETE FAILURE'.
ENDIF.
US_EXIT = CHARX.
ENDIF.
That’s it – This way items cannot be deleted from sales documents.
也就是說針對單獨的行專案刪除提示沒有任何問題,如果通過選單欄 銷售憑證->刪除 刪除整張憑證會dump
最如下改進:
FUNCTION:
第一種(整單刪除校驗推薦使用)
第二種(行專案刪除校驗推薦使用)FUNCTION zsd_005_check_sotype_for_delet. *"---------------------------------------------------------------------- *"*"本地介面: *" IMPORTING *" REFERENCE(IV_AUART) TYPE VBAK-AUART *" REFERENCE(IV_VBELN) TYPE VBAP-VBELN *" REFERENCE(IV_POSNR) TYPE VBAP-POSNR *" REFERENCE(IV_ACTIVATE) TYPE FLAG DEFAULT 'X' *" EXPORTING *" VALUE(EV_US_EXIT) TYPE FLAG *"---------------------------------------------------------------------- CHECK iv_activate = 'X'. CHECK iv_auart = 'ZOR0'. "訂單型別待確定 ev_us_exit = abap_true. MESSAGE s001(00) WITH '該訂單不允許直接刪除,請使用關閉訂單的方式關閉該訂單' DISPLAY LIKE 'E'. LEAVE TO TRANSACTION 'VA02' AND SKIP FIRST SCREEN .
FUNCTION zsd_005_check_sotype_for_delet. *"---------------------------------------------------------------------- *"*"本地介面: *" IMPORTING *" REFERENCE(IV_AUART) TYPE VBAK-AUART *" REFERENCE(IV_VBELN) TYPE VBAP-VBELN *" REFERENCE(IV_POSNR) TYPE VBAP-POSNR *" REFERENCE(IV_ACTIVATE) TYPE FLAG DEFAULT 'X' *" EXPORTING *" VALUE(EV_US_EXIT) TYPE FLAG *"---------------------------------------------------------------------- DATA: BEGIN OF lt_so OCCURS 0, posnr TYPE vbap-posnr, END OF lt_so. CHECK iv_activate = 'X'. SELECT posnr INTO CORRESPONDING FIELDS OF TABLE lt_so FROM vbap WHERE vbeln = iv_vbeln. "獲取最後一條行專案的 行專案號,且只有最後一條時跳出提示視窗 SORT lt_so BY posnr DESCENDING. READ TABLE lt_so INDEX 1. IF iv_auart = 'ZXXX'. "訂單型別待確定 ev_us_exit = abap_true. IF iv_posnr = lt_so-posnr. "最後一條時,跳窗提示 MESSAGE i001(00) WITH '該訂單不允許直接刪除,請使用關閉訂單的方式關閉該訂單'. ENDIF. ENDIF. ENDFUNCTION.
MV45AFZB增強
FORM USEREXIT_CHECK_XVBAP_FOR_DELET USING US_ERROR
US_EXIT.
* Example
* IF US_ERROR NE SPACE.
* MESSAGE ......
* ENDIF.
* IF .......
* US_EXIT = CHARX.
* ENDIF.
*{ INSERT DEVK900048 1
* 刪除SO時 根據訂單型別確認是否可刪除
CALL FUNCTION 'ZSD_005_CHECK_SOTYPE_FOR_DELET'
EXPORTING
iv_auart = vbak-auart
iv_vbeln = xvbap-vbeln
iv_posnr = xvbap-posnr
* iv_activate = 'X'
IMPORTING
ev_us_exit = us_exit.
*} INSERT
ENDFORM.
OK~~~ 搞定