1. 程式人生 > >ABAP--如何在選擇螢幕上輸出ALV GRID報表

ABAP--如何在選擇螢幕上輸出ALV GRID報表

有些客戶希望某些功能性的報表在輸出報表內容時,能同時看到選擇螢幕上的輸入引數,並
希望能反覆地輸入選擇條件進行查詢。實現這個功能的辦法就是在選擇螢幕上輸出報表內容。

  一般情況下,大家都是直接從SAP的系統中找到相應的例程,然後進行加工修改。不過SAP系
統的例程是面向物件的開發,不大符合我們這一群老鳥的習慣。本人仔細研究了一下這個例程,
將其更改我們常用的程式設計模式。程式碼見附件,具體說明如下:

  選擇螢幕也是一個螢幕,與一般建立的螢幕不同的是:它沒有PBO、PAI事件,報表程式中的
INITIALIZATION就是選擇螢幕的PBO事件,其它事件是選擇螢幕的PAI事件。具體事件與程式功能
程式碼如下:

INITIALIZATION.
 

PERFORMsub_init_cond.       "初始化選擇螢幕欄位
  PERFORM sub_create_fieldcat.
  PERFORM sub_init_layout.
  PERFORMsub_create_object.   "建立選擇螢幕上的物件

START-OF-SELECTION.
  PERFORMsub_process_cond.   "對選擇條件進行處理
  PERFORM sub_query_t006a.    "查詢相關資料

END-OF-SELECTION.
  PERFORMsub_refresh_table.  "重新整理內表裡的資料

  我們在INITIALIZATION事件下建立ALV GRID輸出需要的物件。如果輸出內表 GT_RESULT[]為
空,則跳過這段程式碼;如果輸出內表 GT_RESULT[]內容不為空工,則建立ALV GRID需要的物件,
並在選擇螢幕上的BLOCK下面輸出相應的內容。

  系統MEMORY ID sy-cprog 是用來儲存結果內表資料的一個全域性儲存區。如果感覺不方便,也
可以定義一個新的內表來儲存結果內表的資料。只要在IMPORT MEMORY ID時將它的內容賦給結果
內表,在EXPORT MEMORY ID時將結果內表的資料賦給這個新內表即可。

  本程式還有一個重點就是如何在選擇螢幕上建立ALV所需要的物件,程式碼如下:
 
  CREATE OBJECT go_dock
   EXPORTING
     repid = sy-cprog
     dynnr = sy-dynnr
     ratio = 85
     side  =cl_gui_docking_container=>dock_at_bottom
     name  = 'DOCK_CONT'.

  然後再建立ALV所需要的CONTAINER物件。有了ALV所需要的物件,ALV報表基本上就沒什麼難
點了。