SAP-SM30加筛选条件

客户想维护某个表,这时候最简便的方法就是直接调用SM30,根据不同的需求给SM30做限制

  • 例如:加筛选条件(有些数据不能让每个客户看见)
SAP-SM30加筛选条件_第1张图片
ZTFI_0048.png
  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.
  • 必填,搜索帮助等

在逻辑流里面加校验


SAP-SM30加筛选条件_第2张图片
image.png

<摘录一点小笔记>
• 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  EQ 'M'.
    IF EXTRACT+115(1) EQ 'X'."EXTRACT是将数据汇总在EXTRACT字段里,在这里内表没有办法用

    MESSAGE '已审批不能删除' TYPE 'E' DISPLAY LIKE 'S'.

      ENDIF.
    ENDLOOP.

  ENDIF.

ENDMODULE.

你可能感兴趣的:(SAP-SM30加筛选条件)