SAP-SM30加筛选条件
2019-03-27 本文已影响89人
Mmm_余安
客户想维护某个表,这时候最简便的方法就是直接调用SM30,根据不同的需求给SM30做限制
- 例如:加筛选条件(有些数据不能让每个客户看见)

DATA:GV_ZBSTYPE TYPE ZBSTYPE.
GV_ZBSTYPE = 'W'."只显示表里类型为W的数据
GT_VIMSELLIST-VIEWFIELD = 'ZBSTYPE'.
GT_VIMSELLIST-OPERATOR = 'EQ'.
GT_VIMSELLIST-VALUE = GV_ZBSTYPE.
APPEND GT_VIMSELLIST.
CALL FUNCTION 'VIEW_MAINTENANCE_CALL'
EXPORTING
ACTION = 'U'
VIEW_NAME = 'ZTFI_0048' "要显示的表
COMPLEX_SELCONDS_USED = 'X'
TABLES
DBA_SELLIST = GT_VIMSELLIST.
- 必填,搜索帮助等
在逻辑流里面加校验

<摘录一点小笔记>
• ON INPUT:只要该字段不为初始值就会触发module
• ON REQUEST:该字段发生变化后触发module
CHAIN.
FIELD: f1,f2.
FIELD: f3 MODULE mod1 ON INPUT. 只有f3为非初始值时才调用mod1 ENDCHAIN.
CHAIN.
FIELD:f1,f2.
FIELD:f3 MODULE mod1 ON CHAIN-INPUT. f1,f2,f3中任一字段包含非初始值时都调用mod1
ENDCHAIN
如果不在 CHAIN中时,不能像下面这样写:
FIELD a. "FIELD与MODULE只能写在同一语句当中 MODULE check_a ON INPUT. 只有在CHAIN中时,MODULE语句才可以单独出现(不与FIELD在同一语句中),且只能是CHAIN-INPUT: MODULE mod1 ON CHAIN-INPUT.
所以我上面应该用ON INPUT会更好一点
<言归正传>
"做校验或根据某个字段带出另一个字段的值
MODULE GET_ZDDAT INPUT.
DATA LV_VBELN TYPE VBELN.
SELECT SINGLE KUNNR VBELN
FROM VBAK
INTO ( ZTFYV-KUNNR,LV_VBELN )
WHERE VBELN = ZTFYV-VBELN.
IF LV_VBELN IS INITIAL.
MESSAGE '销售订单号不存在!' TYPE 'E' DISPLAY LIKE 'S'.
ENDIF.
ENDMODULE.
"限制按钮功能
MODULE USER_COMMAND1 INPUT.
IF SY-UCOMM = 'DELE'.
LOOP AT EXTRACT .
CHECK <XMARK> EQ 'M'.
IF EXTRACT+115(1) EQ 'X'."EXTRACT是将数据汇总在EXTRACT字段里,在这里内表没有办法用
MESSAGE '已审批不能删除' TYPE 'E' DISPLAY LIKE 'S'.
ENDIF.
ENDLOOP.
ENDIF.
ENDMODULE.