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

搞定






  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王小磊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值