zoukankan      html  css  js  c++  java
  • SAP 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.

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

    ~~~

    未完待续~

    感谢群里的小伙伴的耐心指点,贴上群号,猎头勿扰哦!

    参考资料:

    https://blog.csdn.net/hubaichun/article/details/83717414     带出描述

    https://blog.csdn.net/liupengpeng1109/article/details/50350537     带出描述及添加F4帮助

    https://www.cnblogs.com/sapSB/p/5979467.html     表维护做排序

    https://blogs.sap.com/2016/03/10/to-sort-table-maintenance-before-display/     表维护做排序(自定义表内没有数值类型字段的时候)

    http://www.sapjx.com/generate_table_maintenance.html     SAP维护视图(1)-生成表维护视图

    http://www.sapjx.com/table_aintenance_events.html           SAP维护视图(2)-表维护视图事件处理

    每天学习一个知识点,累积就是财富。
  • 相关阅读:
    找不到"javax.servlet.annotation.WebServlet"解决方法
    Nginx SSL+tomcat集群,request.getScheme() 取到https正确的协议
    Fiddler抓包工具使用
    利用window.open如何绕过浏览器拦截机制
    暂时性死区TDZ理解与总结
    利用vue-meta管理头部标签
    async、await总结
    正则中1、2的理解,利用正则找出重复最多的字符
    Vue优化:常见会导致内存泄漏问题及优化
    vue自定义指令导致的内存泄漏问题解决
  • 原文地址:https://www.cnblogs.com/buduzhiren/p/13813308.html
Copyright © 2011-2022 走看看