〔轉載〕ALV知識
ALV知識
Xiaogangh
一、ALV相關概念
ALV――ABAP LIST VIEWER,這裡我姑且稱之為ABAP表單瀏覽器,用它可以標準化,簡單化R/3系統中的表單,它可以提供給使用者一個統一的表單格式以及使用者介面。
ALV即能顯示簡單表單(SIMPLE LIST)又能顯示有序表單(SEQUENTIAL LIST):
● 簡單表單(SIMPLE LIST)包含一系列不分層次的(NON-HIERARCHICAL),使用者自定義的列。
● 層次表(即有序表SEQUENTIAL LIST)包含列表頭以及它的子行,一個列表頭的關鍵行能帶出它下面的一些列專案(我們自己理解的時候可以想到BOM表的層次結構)。
● 我們還可以在簡單表單以及關聯表單中顯示小計和總計
二、結合一個具體的例項來看ALV的功能
首先我們看下圖中的這個ALV的佈局(這是一般ALV程式表單的典型佈局):
根據上面對ALV的直觀形象,下面將螢幕上的區域劃分成幾塊,分別來解釋它的作用:
1.快捷工具欄(如下圖)
細節按鈕,你首先必須選中列表中的一行,然後點選它的話,就會彈出一個視窗,顯示選中行的細節內容。(另外:你雙擊你要選擇的行,也可以顯示細節)
按升序排列,首先選中一列,然後再點選它,就可以看到該列是按照升序重新排列。
按降序排列,首先選中一列,然後再點選它,就可以看到該列是按照降序重新排列。
設定過濾器,透過設定它可以達到篩選的目的,以列名稱作為篩選的篩選標準,填入過濾器相應的標準值,然後就可以篩選出滿足自己條件的記錄。
列印預覽,點選它之後,就可以預覽一下將要列印內容的佈局情況。
Microsoft Excel,呼叫MS的Excel到當前ALV的列表顯示區域。(前提:必須安裝了MS的Excel)
字處理,字處理的相關設定。
本地檔案,將當前表單儲存到本地機器上,有幾種供選擇的儲存格式。
郵件收件人,給系統內使用者發郵件
圖形,點選它可以根據表單情況繪製相關圖表。
更改佈局,點選它可以對錶單中的列專案排列次序的互換,刪減等。
選擇佈局,從已經儲存的佈局中選擇自己滿意的佈局。
儲存佈局,對於自己滿意的佈局,可以透過點選它來將佈局儲存起來。
2. 表單標題區
這個區域主要是用來顯示一些抬頭資訊(總攬資訊),類似於WORD中的頁首。我們在使用的時候根據需要來進行相關填寫。
3.表單顯示區
這個區域主要是用來顯示我們透過程式碼篩選出來的資料,相關的操作在下面的程式編寫部分詳細介紹。
三、程式的編寫
1.在我們寫ALV程式的時候,有一個型別組是肯定要用到的:
TYPE-POOLS:SLIS。
在這個型別組中有很多ALV的自定義資料型別以及結構化資料型別(透過TYPE來定義的),我們在寫ALV表單的時候需要呼叫的。我們常用的幾個有(藍色部分):
I.對一個最簡單的ALV表單(無標題區和頁尾區),我們只需要定義下面幾個
data: i_fieldcat_alv type slis_t_fieldcat_alv with header line,
i_layout type slis_layout_alv, "alv的格式
i_fieldcat type slis_fieldcat_alv,
w_repid like sy-repid.
它對應的start-of-selection中定義子函式如下:
start-of-selection.
perform getdata. “從資料庫中取資料到相應內表中
perform layout_build. “用於定義ALV表單的相關格式、屬性
perform fields. “用來定義表單中的各個列的相關資訊,比如列名等
perform display_data. “用來顯示ALV表單
子函式定義如下:
form layout_build.
i_layout-zebra = 'X'.
i_layout-detail_popup = 'X'. “是否彈出詳細資訊視窗
w_repid = sy-repid. “程式為當前程式
i_layout-f2code = '&ETA'.“設定觸發彈出詳細資訊視窗的功能碼,這裡是雙擊
i_layout-no_vline = 'X'.“這個用來設定列間隔線
i_layout-colwidth_optimize = 'X'. “最佳化列寬選項是否設定
i_layout-detail_initial_lines = 'X'.
i_layout-detail_titlebar = '詳細內容'. “設定彈出視窗的標題欄
endform.
form fields.
refresh i_fieldcat_alv.
pos = 1.
clear i_fieldcat.
i_fieldcat-col_pos = pos. “第幾列
i_fieldcat-fieldname = 'NUM'.
i_fieldcat-seltext_l = '序號'. “列名
append i_fieldcat to i_fieldcat_alv.
pos = pos + 1.
i_fieldcat-col_pos = pos.
i_fieldcat-fieldname = 'AUFNR'.
i_fieldcat-seltext_l = '生產訂單'.
append i_fieldcat to i_fieldcat_alv.
clear i_fieldcat.
…………
Endform.
form display_data.
call function 'REUSE_ALV_GRID_DISPLAY'
exporting
i_callback_program = w_repid “當前程式
i_save = ''
is_layout = i_layout “子函式layout_build填充的格式定義
it_fieldcat = i_fieldcat_alv[] “子函式fields填充的各列
tables
t_outtab = head1. “假設資料都在head1內表中
endform.
II.對一個稍微複雜一點的ALV表單(有標題區和頁尾區),我們需要定義下面幾個
data: i_fieldcat_alv type slis_t_fieldcat_alv,
“用來儲存我們將要在表單顯示區域顯示出來的表單的列名,每個列名對應的欄位名以及列表頭其他相關屬性資訊的資料型別
i_fieldcat type slis_fieldcat_alv,
i_layout type slis_layout_alv. “ALV的格式
data: i_events type slis_t_event,
i_event_exit type slis_t_event_exit,
i_list_comments type slis_t_listheader, “用來填充表單標題區域的資料型別
i_excluding type slis_t_extab.
data:
w_variant like disvariant, "顯示變式結構
wx_variant like disvariant,
w_variant_save(1) type c,
w_exit(1) type c,
w_user_specific(1) type c,
w_callback_ucomm type slis_formname, "字元型
w_print type slis_print_alv, "型別組
w_layout type slis_layout_alv, "型別組
w_html_top_of_page type slis_formname, "字元型
w_fieldcat_alv like line of i_fieldcat_alv,
w_excluding like line of i_excluding,
w_events like line of i_events,
w_event_exit like line of i_event_exit,
w_list_comments like line of i_list_comments.
*===========================================================================*
initialization.
perform init_variant. “這個子函式很重要,沒有它會出錯
*-----------------------------------------*
它對應的start-of-selection中定義子函式如下:
start-of-selection.
perform getdata. “從資料庫中取資料到相應內表中
perform event_build.
perform layout_build. “用於定義ALV表單的相關格式、屬性
perform fields. “用來定義表單中的各個列的相關資訊,比如列名等
perform display_data. “用來顯示ALV表單
*-----------------------------------------*
子函式定義如下:(這裡只定義前面文件沒有提到的子函式,其他同名的請參考前面)
form init_variant.
clear: w_variant.
w_repid = sy-repid. “當前程式
w_variant-report = w_repid.
w_variant-username = sy-uname.
w_variant_save = 'A'. "All types
endform.
form event_build.
call function 'REUSE_ALV_EVENTS_GET'
exporting
i_list_type = 0
importing
et_events = i_events.
read table i_events
with key name = slis_ev_top_of_page
into w_events.
if sy-subrc = 0.
move 'ALV_TOP_OF_PAGE' to w_events-form. “將標題區資料賦值給W_EVENTS
modify i_events from w_events index sy-tabix.
endif.
read table i_events
with key name = slis_ev_end_of_list
into w_events.
if sy-subrc = 0.
move 'ALV_END_OF_LIST' to w_events-form.“將頁尾資料賦值給W_EVENTS
modify i_events from w_events index sy-tabix.
endif.
read table i_events
with key name = slis_ev_end_of_page
into w_events.
if sy-subrc = 0.
move 'ALV_END_OF_PAGE' to w_events-form. “將頁尾區資料賦值給W_EVENTS
modify i_events from w_events index sy-tabix.
endif.
endform.
*-----------------------------------------*
form event_build子函式中黑體字部分對應的幾個子函式,我們需要定義如下:
form alv_top_of_page.
clear: i_list_comments[].
w_list_comments-typ = 'H'. "H=Header, S=Selection, A=Action供選擇
w_list_comments-key = ''.
w_list_comments-info = 'XX汽車有限公司變速箱廢品率報表'.
append w_list_comments to i_list_comments.
w_list_comments-typ = 'S'. " H = Header, S = Selection, A = Action
w_list_comments-key = ''.
concatenate '庫位:' werks-low into werks_t.
w_list_comments-info = werks_t.
append w_list_comments to i_list_comments.
w_list_comments-typ = 'S'. " H = Header, S = Selection, A = Action
w_list_comments-key = ''.
concatenate '庫位:' werks-low into werks_t.
w_list_comments-info = werks_t.
append w_list_comments to i_list_comments.
call function 'REUSE_ALV_COMMENTARY_WRITE'
exporting
i_logo = 'ENJOYSAP_LOGO'
it_list_commentary = i_list_comments.
endform.
form alv_end_of_list.
clear: i_list_comments[].
w_list_comments-typ = 'A'. "H = Header, S = Selection, A = Action
w_list_comments-key = ''.
w_list_comments-info = '頁尾顯示'.
append w_list_comments to i_list_comments.
call function 'REUSE_ALV_COMMENTARY_WRITE'
exporting
it_list_commentary = i_list_comments
i_logo = 'ENJOYSAP_LOGO'
i_end_of_list_grid = 'X'.
endform.
form alv_end_of_page.
它的定義類似上面兩個子函式的內容,這裡不再贅述
endform.
*-----------------------------------------*
form display_data.
call function 'REUSE_ALV_GRID_DISPLAY'
exporting
* i_background_id = 'SIWB_WALLPAPER'
i_background_id = 'SIWB_WALLPAPER'
i_callback_program = w_repid
i_callback_html_top_of_page = w_html_top_of_page
* i_structure_name = 'TRDIR'
i_default = 'X'
i_save = 'A'
is_variant = w_variant
is_layout = w_layout
* i_callback_user_command = w_callback_ucomm
it_fieldcat = i_fieldcat_alv
it_events = i_events
it_event_exit = i_event_exit
it_excluding = i_excluding
is_print = w_print
* i_screen_start_column = 1
* i_screen_start_line = 1
* i_screen_end_column = 70
* i_screen_end_line = 30
tables
t_outtab = head1.
endform.
2.寫一個ALV程式的基本流程(主要包括ALV相關的那部分,後面會附上一個ALV源程式的程式碼):
第一步:定義將要用到的表,即TALBES定義部分,然後定義TYPE-POOLS: SLIS.
第二步:定義“1”中提到的這些資料型別或者內表的實體物件
第三步:定義一些需要用到的變數
第四步: 定義自己的選擇螢幕
第五步: 定義INITIALIZATION部分,在這個部分往往要指定w_repid的值,
w_repid = sy-repid。
第六步: start-of-selection部分
1用一個子函式完成對ALV表單標題區域的賦值(i_list_comments)。
2用一個子函式完成自己所需要資料的抓取
3用一個子函式完成要顯示列表的列名行(第一行)的相關賦值(i_fieldcat_alv)以及設定
4用一個子函式完成輸出格式的設定(i_layout),比如雙擊一條記錄是否彈出對話方塊啊?是用哪個功能鍵觸發等等
5用一個子函式FORM DISPLAY_DATA來顯示上面我們已經分別封裝好的資料,需要呼叫兩個常用的FUNCTION MODULE:
FUNCTION 'REUSE_ALV_GRID_DISPLAY' “用來顯示錶單資料
FUNCTION 'REUSE_ALV_COMMENTARY_WRITE' “用來顯示錶單標題
附件: 示例程式原始碼(注:下面這個程式呼叫的ALV功能應該講是比較完全的了,大家可以透過上面的學習之後,再看這個程式,應該會有所收穫)
*----------------------------------------------------------------------
* Program: ZZ_ALV_REPORT_STUB
* Author : Clayton Mergen
* Date :
*
* Purpose: Report using ALV function
*
* Notes:
* 1) Logos & wallpapers can be found in table BDS_CONN05
* with class = PICTURES
*
* 2) Transaction OAER can be used to create PICTURES.
* Run transaction OAER with class name = PICTURES, Class type = OT,
* and Object key with whatever name you want to create. In the
* next screen, right clicking on screen and import
*
*----------------------------------------------------------------------
* Revisions
*----------------------------------------------------------------------
* Name :
* Date :
* Comments:
*----------------------------------------------------------------------
report zflex004
no standard page heading
line-size 200
line-count 65
message-id zz.
*--------------------------------
* Tables
*--------------------------------
tables:
ekpo,
mara,
trdir.
*--------------------------------
* Global Types
*--------------------------------
type-pools: slis.
*--------------------------------
* Global Internal Tables
*--------------------------------
data:
i_fieldcat_alv type slis_t_fieldcat_alv,
i_events type slis_t_event,
i_event_exit type slis_t_event_exit,
i_list_comments type slis_t_listheader,
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/494796/viewspace-990584/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【轉載】ALV的Excel方式顯示缺少模板Excel
- goroutine 背後的系統知識(轉載)Go
- 【轉載】SAP ABAP ALV報表控制編輯行,編輯單元格
- vue知識點整理(轉發)Vue
- 【轉】JavaScript物件的基礎知識JavaScript物件
- function ALV 獲取OO ALV event IDFunction
- 發現AI自我意識:知識及其載體AI
- Java類載入知識總結Java
- 知乎 node事件機制 轉載事件
- SQLAlchemy 基礎知識 - autoflush 和 autocommit(轉)SQLMIT
- WAP閘道器相關知識【轉】
- 知識圖譜丨知識圖譜賦能企業數字化轉型
- ALV雙擊對應欄位跳轉事務碼
- 轉載-知乎工作後的經驗
- 玩轉javaScript---知識點彙總(3)JavaScript
- HTML 基礎知識(特殊字元的轉義)HTML字元
- 玩轉javascript---知識點彙總(2)JavaScript
- 玩轉javascript---知識點彙總(1)JavaScript
- 資料庫知識點(2)——行轉列資料庫
- 2023快手泛知識報告(附下載)
- 知識圖譜入門——知識表示與知識建模
- 必考知識點-JavaScript型別轉換(講原理)JavaScript型別
- 玩轉Mac終端:Mac 終端常用知識Mac
- 【知識分享】四層負載均衡和七層負載均衡負載
- 從資料到知識:知識中臺賦能企業智慧化升級(附下載)
- 知識圖譜之知識表示
- 抖音知識創作者手冊(附下載)
- 轉載:尤拉函式知識點總結及程式碼模板及尤拉函式表函式
- 【轉載】oc語言基礎知識全面 看完oc基礎教程後再溫習一遍C語言
- ALV清快取:BALVBUFDEL快取
- SAP: 建立ALV GRID容器
- 十二、java知識點——類載入機制(硬貨)Java
- 智慧經濟:邁向知識分工2.0(附下載)
- 知識分享 | 車載SoC晶片應用產業分析晶片產業
- 【知識分享】伺服器過載有哪些情況伺服器
- 【API知識】型別轉換工具ConvertUtils引發的思考API型別
- 【轉】交換機開發(四)—— ARP 基礎知識解析
- 網路基礎知識 Network Address Translations 網路地址轉換
- 人工智慧(二、知識表示)——1.知識表示與知識表示的概念人工智慧