您的位置:首页 > 其它

VA02 删除销售订单增强,根据订单类型确认是否可删除

2018-01-08 14:36 706 查看
程序: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~~~  
搞定
如果删除SO的时候,需要更新自建表信息
路径:MV45AFZZ->FORM: USEREXIT_DELETE_DOCUMENT
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息