天天看點

表維護視圖DEMO(2):動态控制顯示列

其實建立表維護的時候,就是建立了個table control,

熟悉table control的話可以直接修改很多東西。

DEMO過程是我自己個習慣,不見得都是正規的操作。純屬個人習慣,如果有什麼不對的地方也歡迎批評指正,謝謝。

【2】控制顯示列,顯示範圍

有時候不同部門維護不同的列,比如财務維護财務相關的,采購維護采購相關的資料,但是又在同一個維護視圖中。

當然,你可要建多個維護視圖,參考之前的那篇文章為财務,采購,銷售等不同部門不同的視圖來區分。

我一般是直接修改table control 動态顯示列,來實作這個需求。

還拿上篇文章提到的那個視圖為例。

表維護視圖DEMO(2):動态控制顯示列

真正的項目裡應該是判斷權限對象,然後判斷是否顯示某些列。

咱這個demo裡簡單一些,就不同工廠 顯示的列不一樣得了。

反正原理都一樣。

下面寫下具體步驟。

首先設定組:

數量和機關,在CN1下

表維護視圖DEMO(2):動态控制顯示列

金額在CN3下

表維護視圖DEMO(2):動态控制顯示列

在PBO 加代碼如下

表維護視圖DEMO(2):動态控制顯示列

參考代碼

表維護視圖DEMO(2):動态控制顯示列

或者在這個地方控制

表維護視圖DEMO(2):動态控制顯示列
表維護視圖DEMO(2):動态控制顯示列

其實隻要你對table control 足夠熟悉,想在哪兒加就在哪兒加,想控制什麼就能控制什麼。都行的。

但是這個時候就肯定不能使用SM30去維護了,需要建一個自定義的程式call view 來維護資料。不然同時存在CN01 CN03資料,就導緻工廠控制的列都不顯示了。

參考程式:

執行效果

表維護視圖DEMO(2):動态控制顯示列
表維護視圖DEMO(2):動态控制顯示列
表維護視圖DEMO(2):動态控制顯示列
表維護視圖DEMO(2):動态控制顯示列

代碼:

*&---------------------------------------------------------------------*
*& Report  ZLM_VIEW_DB_001
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZLM_VIEW_DB_002.

TABLES ZLM_DB_002.

SELECT-OPTIONS:
  S_MATNR FOR ZLM_DB_002-MATNR,
  S_WERKS FOR ZLM_DB_002-WERKS OBLIGATORY.



DATA: LT_SELTAB    TYPE STANDARD TABLE OF VIMSELLIST.
DATA: GT_EXCLUDE  TYPE TABLE OF VIMEXCLFUN,
      GWA_EXCLUDE TYPE VIMEXCLFUN.

*------------------------------------------------------
*& 權限控制
*------------------------------------------------------
START-OF-SELECTION.

  CLEAR LT_SELTAB[].

  CALL FUNCTION 'VIEW_RANGETAB_TO_SELLIST'
    EXPORTING
      FIELDNAME          = 'MATNR'
      APPEND_CONJUNCTION = 'AND'
    TABLES
      SELLIST            = LT_SELTAB
      RANGETAB           = S_MATNR.

  CALL FUNCTION 'VIEW_RANGETAB_TO_SELLIST'
    EXPORTING
      FIELDNAME          = 'WERKS'
      APPEND_CONJUNCTION = 'AND'
    TABLES
      SELLIST            = LT_SELTAB
      RANGETAB           = S_WERKS.



  CALL FUNCTION 'VIEW_MAINTENANCE_CALL'
    EXPORTING
      ACTION      = 'U'
      VIEW_NAME   = 'ZLM_V_002'
    TABLES
      DBA_SELLIST = LT_SELTAB[].