2010年10月27日 星期三

SAP-Dialog(Update any standard table field value(s) by using Table control with wizard)

*********************************************************************
* Goal         : update any standard table field value(s)
* T-Code       : SE38
* Description  : 這次的練習是更新物料的描述。
* Source       :
saptechnical.com
* P.S          : 該範例是看著範本的練習,英文原版如上網址。
*********************************************************************

=>建議開始前可以先到頁尾看看這隻的程式作用。

開啟SE38建立一隻Z打頭可執行的程式。

image

存在本端做測試。

宣告TYPE以及internal tables & work areas還有別忘了selection screen,到時候要篩選資料用的。

image

程式碼如下。

TABLES: mara.

TYPES:  BEGIN OF ty_makt.
        INCLUDE STRUCTURE makt.
TYPES:  END OF ty_makt,

        tt_makt TYPE STANDARD TABLE OF ty_makt.

DATA:   gt_makt     TYPE tt_makt,
        gs_makt     TYPE ty_makt,
        gt_makt_old TYPE tt_makt,
        gs_makt_old TYPE ty_makt.

SELECTION-SCREEN BEGIN OF BLOCK bl1 WITH FRAME TITLE text-100.

  SELECT-OPTIONS s_matnr FOR mara-matnr.

SELECTION-SCREEN END OF BLOCK bl1.

在事件start of selection,我們開始SELECT資料。

image

程式碼如下。

START-OF-SELECTION.

  PERFORM get_materials.
*&---------------------------------------------------------------------*
*&      Form  GET_MATERIALS
*&---------------------------------------------------------------------*
FORM get_materials .
  SELECT *
  INTO TABLE gt_makt
  FROM makt
  WHERE matnr IN s_matnr
    AND spras EQ sy-langu.

  APPEND LINES OF gt_makt TO gt_makt_old.

  CALL SCREEN 100. "SELECT完就呼叫畫面

ENDFORM.                    " GET_MATERIALS

存檔 & active.

雙擊畫面100,建立畫面。

image

簡短描述這個畫面。

image

點[格式]開啟Screen Printer。 

image

單擊Table Control (with Wizard )如下圖,並且繪製大小在畫面上。

image

點[繼續]。

image

替這個Table Control命名,繼續。

image

將我們剛剛宣告的internal table和work area填入。  

image

選擇要秀在table上的欄位。 

image

選擇Input control

image

[v]table可捲動,繼續。  

image

繼續。

image

繼續完成。

image

將MATNR、SPRAS、MAKTG設成read only如圖。

image

存檔 and Active。 

建立 GUI Status。

image

輸入名稱並且描述。  

image

在應用程式工具列新增[UPD]。

image

輸入好按ENTER即出現下面畫面,指定內文以及圖示。  

image

打勾他會讓你指定功能鍵。

image

回到畫面在[UDP]上點兩下,圖示內文指的是出現圖之後會一併帶出的文字敘述。

image

設定功能鍵。 

image

存檔並且Active GUI Status。雙擊Module TC_MAKT_GET_LINES。

image

加入下面程式片段將SCREEN_STATUS插入。

image

程式如下。

SET PF-STATUS 'SCREEN_STATUS'.

輸入下面程式到子常式USER_OK_TC,指的就是畫面的PAI user下了command之後,要判斷user做了啥咪動作。

image

程式碼如下。

IF ( p_ok EQ 'BACK' OR p_ok EQ 'CANCEL' OR p_ok EQ 'EXIT' ).
  LEAVE TO SCREEN 0.
ELSEIF p_ok EQ 'UPD' .
  PERFORM process_data.
ENDIF.

建立你要更新的standard table的加鎖物件。 

T-code: SE11。名稱要以E打頭。  

image

填入短文敘述以及表格名稱Lock Mode選擇[專用,累計]如果是英文版本=Write Lock。

image

加鎖參數顯示如下,儲存且active。 

image 

在選單->[轉到]->[加鎖模組]。 

image

顯示兩個Functione Module我們之後在update DB時要用的。

image

在副程式Process_Data寫下面這段程式。

image

*&---------------------------------------------------------------------*
*&      Form  PROCESS_DATA
*&---------------------------------------------------------------------*
FORM process_data .
  LOOP AT gt_makt INTO gs_makt.
    READ TABLE gt_makt_old INTO gs_makt_old
                           WITH KEY matnr = gs_makt-matnr.
    IF sy-subrc EQ 0.
      IF gs_makt NE gs_makt_old.
        CALL FUNCTION 'ENQUEUE_EZMAKT_06'
          EXPORTING
            mode_makt      = 'E'
            mandt          = sy-mandt
            matnr          = gs_makt-matnr
            spras          = gs_makt-spras
            x_matnr        = ' '
            x_spras        = ' '
            _scope         = '2'
            _wait          = ' '
            _collect       = ' '
          EXCEPTIONS
            foreign_lock   = 1
            system_failure = 2
            OTHERS         = 3.
        IF sy-subrc <> 0.
*         MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
        ENDIF.

        MODIFY makt FROM gs_makt.

        CALL FUNCTION 'DEQUEUE_EZMAKT_06'
         EXPORTING
           mode_makt       = 'E'
           mandt           = sy-mandt
           matnr           = gs_makt-matnr
           spras           = gs_makt-spras
           x_matnr         = ' '
           x_spras         = ' '
           _scope          = '3'
           _synchron       = ' '
           _collect        = ' '   .

      ENDIF.
    ENDIF.
  ENDLOOP.
ENDFORM.                    " PROCESS_DATA

存檔並且active完成程式。

現在可以來Run看看,輸入物料號碼。

image

table帶出物料名稱。

image

修改名稱。

image

開啟T-code: MM03,物料名稱被改變哩。

image

♥  總結:
=>利用Wizard做出Table Control。
=>定義畫面的Status。
=>Update Table前先Lock Table,Update後deLock。

沒有留言:

張貼留言