matinal:SAP ABAP SM30表格维护生成器增强(自动带出描述/排序/显示不同数据)

创建SM30维护这里就不说了,直接说后续的定制需求的更改
SM30维护自定义表,使用部门一般会有一些需求:

一:输入客户编码后自动带出客户名称、输出物料自动带出物料描述
二:进入维护视图前,对数据进行筛选或排序
三:隐藏删除按钮(或者别的快捷菜单按钮)
四:在维护视图中批量导入/导出数据
五:针对不同操作人员,显示不同的数据
六:输入日期后,根据逻辑自动算出截止日期

一:输入客户编码后自动带出客户名称、输出物料自动带出物料描述 

1、用表格维护事件的方式
SE11->表->菜单->实用程序->表格维护生成器
菜单->环境->修改->事件

新增条目,选定事件编号为05,填写FORM名称:ZMVRPZ_YZ 回车
点击FORM名称右边->编辑器下面的图标创建 include程序:LZPHX_TEXT2F01
在里面写FORM程序:FORM名称要和外面事件上写的一致。

如果报错:函数组 xxxxxxx不能被处理,创建或修改了屏幕没有激活函数组,SE80里面激活该函数组即可。

代码如下:(记得进SE80里面激活维护函数组)

FORM zmvrpz_yz.
              SELECT SINGLE maktx FROM makt INTO z_mvrpz-maktx
                 WHERE matnr = z_mvrpz-matnr AND spras = sy-langu.

              SELECT SINGLE name1 FROM kna1 INTO z_mvrpz-name1
                 WHERE kunnr = z_mvrpz-kunnr AND spras = sy-langu.
            ENDFORM.

  常用事件:

事件编号 事件功能
01保存前修改数据
05 创建数据时修改
21 退出单元格编辑时填充隐藏字段


进入屏幕:设置客户名称和物料描述字段为不可输入。即可!

2、用屏幕增强的方式(其实和第1中原理一样,就是实现的位置不同)

SE11->表->菜单->实用程序->表格维护生成器
双击概述屏幕 的屏幕号,进入屏幕逻辑流

增加 MODULE ZGET_TEXT。双击创建,代码如下:

MODULE ZGET_TEXT INPUT.
            SELECT SINGLE maktx FROM makt INTO z_mvrpz-maktx
                WHERE matnr = z_mvrpz-matnr AND spras = sy-langu.

            SELECT SINGLE name1 FROM kna1 INTO z_mvrpz-name1
                WHERE kunnr = z_mvrpz-kunnr AND spras = sy-langu.
        ENDMODULE.

 

激活函数组即可。

二、进入维护视图前,对数据进行筛选/排序

  1、理论上事件的方式也是可以的,没做测试
  2、屏幕增强的方式
    SE11->表->菜单->实用程序->表格维护生成器
    双击概述屏幕 的屏幕号,进入屏幕逻辑流

 查看一下表结构:

   需要排序的字段为:SRDAT

  extract 是全文本表,是按长度来取,把ERDAT前面所有字段的长度加起来是31  ERDAT 长度是8   截取extract+31(8) 就是该日期字段

  双击 MODULE mod_set_sort. 创建,代码如下:

        MODULE mod_set_sort OUTPUT.
          FIELD-SYMBOLS: <fs_field> TYPE ANY.     
          ASSIGN  extract+31(8) TO <fs_field>.    "z_mvrpz-erdat
          SORT extract BY <fs_field> DESCENDING.
        ENDMODULE.

  提供另一种语法:自定义表内没有数值类型字段的时候,可以用以下代码:MODULE位置同上面 mod_set_sort

        MODULE SORT_EXTRACT OUTPUT.
            DATA : IT_ZTEST LIKE ZTEST OCCURS 1WITHHEADER LINE .
            IF NOT SY-UCOMM = ‘NEWL’.
                IT_ZTEST[] = EXTRACT[].
                SORT IT_ZTEST BY F1 F2 F3.
                EXTRACT[] = IT_ZTEST[].
            ENDIF.
        ENDMODULE.  

三:隐藏删除按钮(或者别的快捷菜单按钮)

  示例:隐藏删除按钮

  PBO中增加 MODULE pbo_hide_button.  在LOOP AT extract上面,代码如下:

MODULE pbo_hide_button OUTPUT.
    MOVE 'DELE' TO excl_cua_funct-function.   "隐藏删除按钮
    COLLECT excl_cua_funct.
ENDMODULE.

四:在维护视图中批量导入/导出数据

请参考我的上篇文章;公众号:matinal

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值