ZOR,ZWOR等类型订单在VL01N发货过账时用增强MCS50001判断,但是ZRE等类型的退货订单不会进入MCS50001这个增强,早几个月前就找过VL01N的增强,当时测试了很多都不会执行,今天下了狠心,把所有增强都打开,发现还真有个增强可以执行到。早先测试的时候看这个增强怎么也不像是用于判断的。
经测试发现该增强在VL01N新创建及发货过账的时候都会执行。而且参数只有 is_lips 和is_likp,在新建和发货过账时完全一样,业务部门要求在发货过账时才判断,根本无法用现有参数数据判断是否新建还是发货过账,又给出了一大难题。
折腾了好长时间想到直接用SY-UCOMM判断是否点击了发货过账按钮,经测试还真可以。
*&---------------------------------------------------------------------*
*& 包括 ZXV50U07
*&---------------------------------------------------------------------*
break ypcheng.
DATA: field(30),
ls_attyp LIKE mara-attyp,
ls_taklv LIKE mara-taklv,
ldc_kwert LIKE konv-kwert,
ls_knumv LIKE vbak-knumv,
ls_matnr LIKE vbap-matnr,
ls_mtart LIKE mara-mtart.
DATA: ls_message(200) TYPE c.
FIELD-SYMBOLS:<f1> TYPE ANY,<f2> TYPE ANY.
break ypcheng.
IF sy-ucomm = 'WABU_T'.
break ypcheng.
field = '(SAPMV50A)VBAK-AUART'.
ASSIGN (field) TO <f1>.
IF <f1> = 'ZRE' OR <f1> = 'ZWRE' OR <f1> = 'ZRD'.
break ypcheng.
field = '(SAPMV50A)VBAK-KNUMV'.
ASSIGN (field) TO <f2>.
ls_knumv = <f2>.
ls_message = ''.
SELECT kwert INTO ldc_kwert FROM konv WHERE knumv = ls_knumv AND ( kschl = 'ZIV3' OR kschl = 'ZIV1' OR kschl = 'VPRS' ) AND kposn = is_lips-posnr.
SELECT SINGLE attyp mtart INTO (ls_attyp,ls_mtart) FROM mara WHERE matnr = is_lips-matnr.
IF ldc_kwert = 0 AND is_lips-matkl <> 'R1699' AND is_lips-matkl <> 'R9998' AND is_lips-matkl <> 'R9999' AND is_lips-lfimg > 0 AND ls_attyp <> '10' AND ls_mtart <> 'Z008'.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = is_lips-matnr
IMPORTING
output = ls_matnr.
CONCATENATE '当前订单' ls_matnr '商品的ZIV1/ZIV3/VPRS的价格为0,不能发货过账!' INTO ls_message.
MESSAGE e398(00) WITH ls_message.
ENDIF.
ENDSELECT.
ENDIF.
ENDIF.
转载自:http://blog.sina.com.cn/s/blog_6f99a0500100ryzl.html