1. 程式人生 > >ABAP報表簡單示例

ABAP報表簡單示例

ABAP 報表開發例項。 
在這裡示範一個例項,講講abap開發報表的簡單過程。程式的正確與 否我們不與討論,我們只關心這個程式的編寫過程。 
首先,在任何程式的開始階段,我們都要確定將會用到的表。我們所講的這個程式 是查詢採購訂單是否完成的。將會用到以下三個表:EKKO,EKPO,EKET。 程式的開頭為: REPORT  TEST. 
TABLES:  EKKO,EKET,EKPO. 
現在我們已經定義了所要用到的表,接下來的工作就是定義內表和資料。內表是 用來儲存我們從上述三個表中查詢到的資料。相關定義如下: DATA: BEGIN OF ITAB OCCURS 0,           EBELN LIKE EKKO-EBELN,           MENGE LIKE EKPO-MENGE,           WEMNG LIKE EKET-WEMNG,      END OF ITAB. 
現在我們已經定義完了內表ITAB。接著我們該定義資料了。資料就像C語言裡的 常量。其相關定義如下: 
DATA: MATNR  LIKE EKPO-MATNR,      MENGE  LIKE EKPO-MENGE,      WEMNG  LIKE EKET-WEMNG,      EBELN  LIKE EKPO-EBELN. 
到這裡我們已經把程式裡要用到的資料和內表都定義好了。接著我們要做的工作 就是選擇螢幕。所謂選擇螢幕是指程式執行時,你要從螢幕上輸入的內容。比如 說一個程式執行時,你輸入一個物料號,就可以得到該物料的當前的庫存數,那 你就要編寫一個螢幕以供查詢者輸入查詢的條件。其相關定義如下: SELECT-OPTIONS:     EBELN1 FOR  EKKO-EBELN,                     BEDAT FOR  EKKO-BEDAT, 












                    EKGRP FOR  EKKO-EKGRP. PARAMETERS: R1 RADIOBUTTON GROUP RADI,             R2 RADIOBUTTON GROUP RADI,             R3 RADIOBUTTON GROUP RADI. 
現在我們已經完成了程式的前期準備,接著就開始真正的到表裡查詢我們需要的 相關資料了。其程式碼如下: SELECT  K~EBELN 
         INTO CORRESPONDING FIELDS OF TABLE ITAB                 FROM EKKO AS K       WHERE   K~EBELN IN EBELN1         AND   K~BEDAT IN BEDAT         AND   K~EKGRP IN EKGRP. LOOP AT ITAB. 
   SELECT SUM( MENGE ) INTO ITAB-MENGE          FROM EKPO 
              WHERE EBELN EQ ITAB-EBELN.          MODIFY ITAB. ENDLOOP. LOOP AT ITAB. 
   SELECT SUM( WEMNG ) INTO ITAB-WEMNG          FROM EKET 
              WHERE EBELN EQ ITAB-EBELN.          MODIFY ITAB. ENDLOOP. 
然後我們需要定義輸出介面。把我們查詢到的資料輸出時要有一個輸出的格式, 這樣大家看起來才會方便。程式碼如下: TOP-OF-PAGE . 












   WRITE: /'採購憑證號',22 '物料號碼',            47 '採購訂單數量',77  '收到貨物數量',            95 '完成標誌'.       ULINE AT /1(130). END-OF-PAGE . 
       START-OF-SELECTION. 
最後就是把我們查到的資料輸出了。其實我舉的這個程式到這一步時穿插了 一些查詢,所以比較長。程式碼如下:   IF R1 = 'X'. LOOP AT ITAB. 
            SELECT S~MATNR S~MENGE P~WEMNG S~EBELN               INTO (MATNR, MENGE, WEMNG, EBELN)     FROM EKPO AS S INNER JOIN EKET AS P 
                           ON S~EBELP = P~EBELP AND S~EBELN = P~EBELN                    WHERE S~EBELN = ITAB-EBELN.     IF ITAB-MENGE > ITAB-WEMNG. 
            WRITE: /2 EBELN,23 MATNR,41 MENGE,                     71 WEMNG,97 '否'.           ULINE AT /1(130). 
            CLEAR: EBELN,MATNR,MENGE,WEMNG.     ENDIF. 
            ENDSELECT. ENDLOOP. 
    ELSEIF R2 = 'X'. LOOP AT ITAB. 
             SELECT S~MATNR S~MENGE P~WEMNG S~EBELN               INTO (MATNR, MENGE, WEMNG, EBELN) 












      FROM EKPO AS S INNER JOIN EKET AS P 
                           ON S~EBELP = P~EBELP AND S~EBELN = P~EBELN                    WHERE S~EBELN = ITAB-EBELN.     IF  ITAB-MENGE <= ITAB-WEMNG. 
             WRITE: /2 EBELN,23 MATNR,41 MENGE,                     71 WEMNG,97 '是'.              ULINE AT /1(130). 
            CLEAR: EBELN,MATNR,MENGE,WEMNG.     ENDIF. 
             ENDSELECT. ENDLOOP.     ELSE. LOOP AT ITAB. 
           SELECT S~MATNR S~MENGE P~WEMNG S~EBELN               INTO (MATNR, MENGE, WEMNG, EBELN)     FROM EKPO AS S INNER JOIN EKET AS P 
                           ON S~EBELP = P~EBELP AND S~EBELN = P~EBELN                    WHERE S~EBELN = ITAB-EBELN.     IF ITAB-MENGE > ITAB-WEMNG. 
            WRITE: /2 EBELN, 23 MATNR,41 MENGE,                     71 WEMNG,97 '否'.           ULINE AT /1(130). 
            CLEAR: EBELN,MATNR,MENGE,WEMNG.     ENDIF. 
            ENDSELECT.   ENDLOOP. ENDIF. 












LOOP AT ITAB. 
IF R3 = 'X' AND ITAB-MENGE <= ITAB-WEMNG. 
           SELECT S~MATNR S~MENGE P~WEMNG S~EBELN               INTO (MATNR, MENGE, WEMNG, EBELN)     FROM EKPO AS S INNER JOIN EKET AS P 
                           ON S~EBELP = P~EBELP AND S~EBELN = P~EBELN                    WHERE S~EBELN = ITAB-EBELN.        WRITE: /2 EBELN,23 MATNR,41 MENGE,                     71 WEMNG,97 '是'.           ULINE AT /1(130). 
            CLEAR: EBELN,MATNR,MENGE,WEMNG.             ENDSELECT.         ENDIF. ENDLOOP. 
這時程式就結束了。其實舉這個例子是想讓大家知道ABAP開發報表的一個常規 流程,並不是講什麼技巧之類的,希望能對初學者有點用