SM30维护视图屏蔽按钮与增加选择条件

*----------------------------------------------------------------------
*                          TABLES/Structure
*----------------------------------------------------------------------
TABLES:T001W,
       YTDRIVERI,
       YTDRICAR.

*----------------------------------------------------------------------
*                          DATA
*----------------------------------------------------------------------
DATA: BEGIN OF GT_TAB OCCURS 0,
       WERKS LIKE T001W-WERKS,
      END OF GT_TAB.

DATA: BEGIN OF GT_NAM OCCURS 0,
       TPNAM LIKE YTDRIVERI-TPNAM,
      END OF GT_NAM.



DATA: BEGIN OF GT_DATA OCCURS 0.
        INCLUDE STRUCTURE YTDRICAR.
DATA: END OF GT_DATA.


DATA: IT_VIMSELLIST TYPE TABLE OF VIMSELLIST,
      IW_VIMSELLIST TYPE VIMSELLIST,
      IT_VIMEXCLFUN TYPE TABLE OF VIMEXCLFUN,
      IW_VIMEXCLFUN TYPE VIMEXCLFUN.
*DATA: IT_MKOAR TYPE TABLE OF TY_MKOAR,
*      IW_MKOAR TYPE TY_MKOAR.
DATA: W_FLG TYPE C.


*======================================================================
*                          SELECTION-SCREEN
*======================================================================
SELECTION-SCREEN BEGIN OF BLOCK BLK1 WITH FRAME TITLE TEXT-001.

PARAMETERS:     P_WERKS LIKE T001W-WERKS DEFAULT 'W001'.
SELECT-OPTIONS: S_TPNAM FOR  YTDRIVERI-TPNAM NO-EXTENSION NO INTERVALS.

SELECTION-SCREEN END OF BLOCK BLK1.


*----------------------------------------------------------------------
*  INITIALIZATION
*----------------------------------------------------------------------
INITIALIZATION.

* 初始化数据
  PERFORM FRM_INITIAL.

*----------------------------------------------------------------------
*  AT SELECTION-SCREEN
*----------------------------------------------------------------------
AT SELECTION-SCREEN.

* 权限检查部分
  PERFORM FRM_CHECK_AUTHOR.

*======================================================================
*                          MAIN PROGRAM
*======================================================================
*  START-OF-SELECTION
*----------------------------------------------------------------------
START-OF-SELECTION.

*&选择条件判断
  SELECT WERKS
    INTO TABLE GT_TAB
    FROM YTDRIVERI
   WHERE WERKS EQ P_WERKS.

  IF SY-SUBRC NE 0.
   MESSAGE I001.
  ENDIF.

*编辑过滤数据条件
IF P_WERKS IS NOT INITIAL.
  IW_VIMSELLIST-VIEWFIELD = 'WERKS'.
  IW_VIMSELLIST-OPERATOR = 'EQ'.
  IW_VIMSELLIST-AND_OR = 'AND'.
  IW_VIMSELLIST-VALUE = P_WERKS.
  APPEND IW_VIMSELLIST TO IT_VIMSELLIST.
ENDIF.

*&司机名称作为选择条件
 IF S_TPNAM IS NOT INITIAL.
  SELECT TPNAM
    INTO TABLE GT_NAM
    FROM YTDRIVERI
   WHERE WERKS EQ P_WERKS
     AND TPNAM IN S_TPNAM.
  IF SY-SUBRC NE 0.
    MESSAGE I001.
  ENDIF.

*&司机名称作为过滤选择条件
  LOOP AT GT_NAM.
    IW_VIMSELLIST-VIEWFIELD = 'TPNAM'.
    IW_VIMSELLIST-OPERATOR = 'EQ'.
    IW_VIMSELLIST-AND_OR = 'OR'.
    IW_VIMSELLIST-VALUE =  GT_NAM-TPNAM.
    APPEND IW_VIMSELLIST TO IT_VIMSELLIST.
*    CLEAR IW_MKOAR.
  ENDLOOP.
  ENDIF.


*屏蔽按钮(按T-CODE)
*  IW_VIMEXCLFUN-FUNCTION = 'NEWL'.
*  APPEND IW_VIMEXCLFUN TO IT_VIMEXCLFUN.
*  IW_VIMEXCLFUN-FUNCTION = 'KOPE'.
*  APPEND IW_VIMEXCLFUN TO IT_VIMEXCLFUN.
  IW_VIMEXCLFUN-FUNCTION = 'DELE'.
  APPEND IW_VIMEXCLFUN TO IT_VIMEXCLFUN.
  " MKPF 全选

*BREAK AD_CAIXIANG.

**& -锁表
  CALL FUNCTION 'ENQUEUE_EYTDRIVERI'
    EXPORTING
      MODE_YTDRIVERI     = 'E'
      MANDT              = SY-MANDT
      WERKS              = P_WERKS
*     WERKS              = DBA_SELLIST-VALUE
    EXCEPTIONS
      FOREIGN_LOCK       = 1
      SYSTEM_FAILURE     = 2
      OTHERS             = 3.

 IF SY-SUBRC <> 0.
   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
           WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
 ENDIF.

*  CALL FUNCTION 'YH_YTDRIVERI_CALL'
*    EXPORTING
*      ACTION                       = 'S'
*      VIEW_NAME                    = 'YTDRIVERI'
*    TABLES
*      DBA_SELLIST                  = IT_VIMSELLIST
*      EXCL_CUA_FUNCT               = IT_VIMEXCLFUN
*    EXCEPTIONS
*      CLIENT_REFERENCE             = 1
*      FOREIGN_LOCK                 = 2
*      INVALID_ACTION               = 3
*      NO_CLIENTINDEPENDENT_AUTH    = 4
*      NO_DATABASE_FUNCTION         = 5
*      NO_EDITOR_FUNCTION           = 6
*      NO_SHOW_AUTH                 = 7
*      NO_TVDIR_ENTRY               = 8
*      NO_UPD_AUTH                  = 9
*      ONLY_SHOW_ALLOWED            = 10
*      SYSTEM_FAILURE               = 11
*      UNKNOWN_FIELD_IN_DBA_SELLIST = 12
*      VIEW_NOT_FOUND               = 13
*      MAINTENANCE_PROHIBITED       = 14
*      OTHERS                       = 15.


  CALL FUNCTION 'VIEW_MAINTENANCE_CALL'
    EXPORTING
      ACTION                       = 'S'
      VIEW_NAME                    = 'YTDRIVERI'
    TABLES
      DBA_SELLIST                  = IT_VIMSELLIST
      EXCL_CUA_FUNCT               = IT_VIMEXCLFUN
    EXCEPTIONS
      CLIENT_REFERENCE             = 1
      FOREIGN_LOCK                 = 2
      INVALID_ACTION               = 3
      NO_CLIENTINDEPENDENT_AUTH    = 4
      NO_DATABASE_FUNCTION         = 5
      NO_EDITOR_FUNCTION           = 6
      NO_SHOW_AUTH                 = 7
      NO_TVDIR_ENTRY               = 8
      NO_UPD_AUTH                  = 9
      ONLY_SHOW_ALLOWED            = 10
      SYSTEM_FAILURE               = 11
      UNKNOWN_FIELD_IN_DBA_SELLIST = 12
      VIEW_NOT_FOUND               = 13
      MAINTENANCE_PROHIBITED       = 14
      OTHERS                       = 15.

  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.



*&---------------------------------------------------------------------*
*&      Form  FRM_INITIAL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_INITIAL .

ENDFORM.                    " FRM_INITIAL
*&---------------------------------------------------------------------*
*&      Form  FRM_CHECK_AUTHOR
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_CHECK_AUTHOR .
  DATA: BEGIN OF LT_T001W OCCURS 0,
        WERKS LIKE T001L-WERKS,
        END OF LT_T001W.

  SELECT WERKS
    INTO TABLE LT_T001W
    FROM T001L
   WHERE WERKS EQ P_WERKS.

  IF LT_T001W[] IS NOT INITIAL.
    LOOP AT LT_T001W.
      AUTHORITY-CHECK OBJECT 'YHLM_PLANT'
               ID 'ACTVT' FIELD '03'
               ID 'WERKS' FIELD LT_T001W-WERKS.
      IF SY-SUBRC NE 0.
        MESSAGE I002 WITH LT_T001W-WERKS .
        STOP.
      ENDIF.
    ENDLOOP.
  ELSE.
    MESSAGE I011 WITH '没有任何地点!'.
    STOP.
  ENDIF.


ENDFORM.                    " FRM_CHECK_AUTHOR

 

转载于:https://www.cnblogs.com/rainysblog/p/11507782.html

<think>好的,我现在需要帮助用户在SAP系统中使用SM30事务码创建和维护视图。首先,我应该回忆一下相关的步骤和注意事项。根据用户提供的引用资料,特别是引用[1]和引用[3],用户需要通过SE11创建表,然后通过表维护生成器生成视图,再用SE93创建事务码绑定到SM30。 首先,用户的问题是如何在SM30下创建和维护视图,所以重点应该在创建表视图的过程。步骤可能包括:使用SE11创建自定义表,然后生成维护视图,接着配置表维护生成器,最后将视图SM30关联起来。需要确保用户有正确的权限,可能需要用SE93创建事务码,特别是如果生产环境没有SM30权限的话。 接下来,我需要检查是否有遗漏的步骤,比如授权对象或视图簇的使用。引用[2]提到SM34用于维护视图簇,但用户的问题是关于SM30,所以可能不需要涉及视图簇。不过,可能需要区分视图视图簇的不同,确保用户明确自己在创建的是单个视图还是视图簇。 另外,用户可能需要知道如何通过SM30访问已经创建的视图,这可能需要事务码的绑定。例如,引用[1]提到通过SE93创建自定义事务码绑定到SM30和特定的表视图。因此,在创建完视图后,用户可能需要使用SE93来生成一个专门的事务码,方便用户访问,特别是在权限受限的环境中。 还需要考虑语法正确性,比如在SE11中定义表结构时,字段的数据类型和长度是否正确,是否设置了关键字段。维护生成器中的功能组可能需要事先存在,或者需要新建,这可能会影响后续步骤。 最后,生成相关问题时要围绕创建和维护视图的相关操作,比如权限问题、维护生成器的作用、事务码创建等,确保问题覆盖用户可能遇到的后续疑问。</think>### 在SAP SM30下创建和维护视图的步骤 #### 1. **使用SE11创建自定义表** - 进入事务码$SE11$,选择“数据库表”,输入表名(以`Z`或`Y`开头),点击“创建”。 - 定义表字段、数据类型、长度及描述,并指定关键字段。例如: $$ \text{字段: MANDT(客户端), ID(主键), NAME, VALUE} $$ - 保存并激活表,确保表结构符合业务需求[^1]。 #### 2. **通过表维护生成器生成视图** - 在SE11表编辑界面,点击菜单栏的**实用程序 → 表维护生成器**。 - 输入功能组(如`ZMAINT_GROUP`),若不存在需先通过SE80创建功能组。 - 勾选“授权组”(如`&NC&`表示无需权限控制),保存并生成维护视图[^1][^2]。 #### 3. **通过SM30维护视图数据** - 直接使用事务码$SM30$,输入表名,点击“维护”即可增删改数据。 - 若需限制用户权限,可创建自定义事务码(见步骤4)[^3]。 #### 4. **创建自定义事务码(可选)** - 使用$SE93$创建事务码(如`ZMY_VIEW`)。 - 在“事务属性”中选择“参数事务”,输入`SM30`,并在“默认值”中配置参数: ``` VIEWNAME=表名 UPDATE=1 ``` - 保存后,用户可通过该事务码直接访问维护视图[^3]。 #### 5. **维护视图的权限控制** - 若需权限管理,需在表维护生成器中设置授权组(如自定义组`Z_AUTH_GROUP`)。 - 通过PFCG角色分配,将权限对象`S_TABU_NAM`关联到该组。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值