1. 程式人生 > 實用技巧 >SAP SM30表格維護生成器增強(算是實踐後的整理吧)

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) 就是該日期欄位

  雙擊MODULEmod_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中增加 MODULEpbo_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/ 表維護做排序(自定義表內沒有數值型別欄位的時候)