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)-表維護視圖事件處理

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM