目錄
The ALV Grid Control (ALV = SAP List Viewer)是一個顯示列表的靈活的工具,它提供了基本功能的列表操作,也可以通過自定義來進行增強,因此可以允許你可以在大型的應用程序中使用。在SAP的開發項目中,ALV GRID也可以作為修改和創建數據的一種工具。它包括3大部分,工具欄,標題,用於顯示數據的網格控制器.如果有必要,用戶可以隱藏標題和工具欄。
①定義ALV所需要用到的類型池:TYPE-POOLS:SLIS.
②定義ALV所要顯示的數據對應的內表數據類型及內表數據對象
③定義一些顯示ALV時所需要使用的變量
④定義選擇屏幕
⑤聲明各個選擇屏幕事件塊

REPORT ZMMRTEST. *****************************TABLES TABLES:marc. *****************************Data Definitions *定義ALV所要顯示的數據對應的內表數據類型及內表數據對象 TYPES: BEGIN OF ty_data, matnr LIKE mara-matnr, "物料號碼 maktx LIKE makt-maktx, "物料說明 groes LIKE mara-groes, "規格 END OF ty_data. DATA: gt_data TYPE TABLE OF ty_data, gt_makt LIKE TABLE OF makt, wa_data LIKE LINE OF gt_data, wa_makt LIKE LINE OF gt_makt. *定義一些顯示ALV時所需要使用的變量 *定義ALV所需要用到的類型池 TYPE-POOLS slis. "定義和LAYOUT和FIELDCAT DATA: gs_layout TYPE slis_layout_alv, gt_fieldcat TYPE slis_t_fieldcat_alv, wa_fieldcat TYPE slis_fieldcat_alv. *****************************Selection Screen *定義選擇屏幕 PARAMETERS: p_werks LIKE marc-werks DEFAULT '2000' OBLIGATORY. SELECT-OPTIONS: s_matnr FOR marc-matnr. *****************************Main Process *聲明各個選擇屏幕事件塊 START-OF-SELECTION. PERFORM get_data. PERFORM display_data. END-OF-SELECTION. *&---------------------------------------------------------------------* *& Form GET_DATA *&---------------------------------------------------------------------* FORM get_data . DATA: l_index LIKE sy-tabix. SELECT marc~matnr mara~groes INTO CORRESPONDING FIELDS OF TABLE gt_data FROM marc INNER JOIN mara ON marc~matnr EQ mara~matnr WHERE marc~matnr IN s_matnr AND marc~werks EQ p_werks. SELECT * INTO TABLE gt_makt FROM makt WHERE matnr IN s_matnr AND spras = sy-langu. SORT: gt_data BY matnr, gt_makt BY matnr. LOOP AT gt_data INTO wa_data. l_index = sy-tabix. READ TABLE gt_makt INTO wa_makt WITH KEY matnr = wa_data-matnr BINARY SEARCH. IF sy-subrc = 0. wa_data-maktx = wa_makt-maktx. ENDIF. MODIFY gt_data FROM wa_data INDEX l_index. ENDLOOP. ENDFORM. " GET_DATA *&---------------------------------------------------------------------* *& Form DISPLAY_DATA *&---------------------------------------------------------------------* FORM display_data. "欄位最適寬度 gs_layout-colwidth_optimize = 'X'. PERFORM set_fieldcat. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = sy-repid is_layout = gs_layout it_fieldcat = gt_fieldcat[] * i_callback_pf_status_set = 'alv_pf_status' " 觸發事件調用子程序 * i_callback_user_command = 'alv_user_command' " 鼠標事件操作子程序 i_save = 'A' TABLES t_outtab = gt_data EXCEPTIONS program_error = 1 OTHERS = 2. ENDFORM. " DISPLAY_DATA *&---------------------------------------------------------------------* *& Form SET_FIELDCAT *&---------------------------------------------------------------------* FORM set_fieldcat. DEFINE fieldcat. wa_fieldcat-fieldname = &1. "對應內表字段名 wa_fieldcat-seltext_l = &2. "輸出列文本 APPEND wa_fieldcat TO gt_fieldcat.CLEAR wa_fieldcat. END-OF-DEFINITION. fieldcat 'MATNR' '物料'. fieldcat 'MAKTX' '物料說明'. fieldcat 'GROES' '規格'. ENDFORM. " SET_FIELDCAT
運行效果:
3.1、Layout相關屬性:主要用於設定 ALV 的輸出格式,為 ALV 輸出的可選項
①公共部分
字段名稱 | 描述 | 輸入值 | 備注 |
no_colhead(1) | 不顯示標題 | X-不顯示,space-顯示 | |
no_hotspot(1) | 標題不設熱點 | X-沒有,space-有 | |
zebra(1) | 使ALV表格按斑馬線間隔條碼方式顯示 | X-有,space-沒有 | |
no_vline(1) | 設置列間豎線 | X-不顯示,space-顯示 | |
no_hline(1) | 設置行間隔線 | X-不顯示,space-顯示 | |
cell_merge(1) | 設置是否壓域復制 | X-可復制,space-不可復制 | |
edit(1) | 設置所有單元格可編輯 | X-可編輯,space-不可編輯 | |
edit_mode(1) | 編輯模式 | ||
numc_sum(1) | 設置僅NUMC類型字段進行總計 | X-僅Numc類型,space-不僅Numc類型 | |
no_input(1) | 不允許輸入,用於顯示狀態 | X-不允許,space-允許 | |
f2code | 設置觸發彈出詳細信息窗口的功能碼 | sy-ucomm '&ETA' – 雙擊 | |
no_keyfix (1) | 關鍵字不固定,可以隨滾動條滾動 | X-不固定,space-固定 | |
expand_all (1) | 展開所有的node | ||
no_author (1) | 設置是否需要系統標准權限檢查 | X-不需要,space-需要 |
②ALV菜單欄
字段名稱 | 描述 | 輸入值 | 備注 |
def_status (1) | 默認菜單狀態 | A顯示,space不顯示 | 'A' – 為顯示所有標准菜單 |
item_text (20) | 菜單按鈕文本 | ||
countfname (1) | lvc_fname |
③顯示選項
字段名稱 | 描述 | 輸入值 | 備注 |
colwidth_optimize(1) | 優化列寬設置 | X-優化 | 默認:space |
no_min_linesize(1) | 設置不允許最小寬度 | X-不允許,space-允許 | 默認:space |
min_linesize | ALV列表的最小寬度 | sy-linsz,取值10到250 | 可選參數 |
max_linesize | ALV列表的最大寬度 | sy-linsz,可取值80-1020 | 默認值250 |
window_titlebar | 窗口標題 | sy-title | |
no_uline_hs(1) | 輸出ALV表不顯示水平格線 | X-不顯示,space-顯示 |
④紅路燈顯示異常
字段名稱 | 描述 | 輸入值 | 備注 |
lights_fieldname | 輸出內表中定義的字段名,該字段用來顯示狀態燈 | 1:red,2:yellow,3:green | |
lights_tabname | 輸出字段的參考內表名稱 | ||
lights_rollname | 數據元素的名稱,在燈字段按F1觸發 | ||
lights_condense | 對輸出的內表分類匯總的時候,小計行顯示狀態燈 | x |
⑤匯總合計
字段名稱 | 描述 | 輸入值 | 備注 |
no_sumchoice (1) | 不能進行選擇總計 | ||
no_totalline (1) | 不能總計,但可以小計 | ||
no_subchoice (1) | 不能選擇小計,但可以總計 | ||
no_subtotals (1) | 不能小計,但可以總計 | ||
no_unit_splitting | 有單位字段,不進行總計 | ||
totals_before_items | 總行將會顯示在最前面 | ||
totals_only (1) | 僅顯示合計 | ||
totals_text (60) | 合計,第一列顯示的文本 | ||
subtotals_text (60) | 總計和小計行,第一列顯示的文本 |
⑥交互
字段名稱 | 描述 | 輸入值 | 備注 |
box_fieldname | 設置ALV表格是否顯示選擇按鈕欄位 | ||
box_tabname | box_fieldname 參考內表名稱 | ||
box_rollname | 下拉框按鈕名稱 | ||
expand_fieldname | '展開'字段名稱 | ||
hotspot_fieldname | 熱點字段 | ||
confirmation_prompt | 退出ALV列表的確認對話框 | ||
key_hotspot (1) | 關鍵字段作為熱點 | ||
flexible_key (1) | 關鍵字段可以移動 | ||
group_buttons (1) | COL1 – COL5 按鈕組 | ||
get_selinfos (1) | 獲取選擇屏幕 | ||
group_change_edit (1) | 設置用戶新的按鈕組 | ||
no_scrolling(1) | 滾動條無效,清單不隨其滾動 | 僅list_alv有效 |
⑦明細窗口
字段名稱 | 描述 | 輸入值 | 備注 |
detail_popup (1) | 行項目明細彈窗形式 | X-顯示,space-不顯示 | 對list_alv有效 |
detail_initial_lines(1) | 明細中同時顯示初始化行 | X-同時顯示,space-不顯示 | |
detail_titlebar | 明細窗口標題文本 | sy-title |
⑧顯示變式
字段名稱 | 描述 | 輸入值 | 備注 |
header_text | 表頭按鈕 | ||
default_item (1) | 列表明細作為默認值 | X-激活,space-不激活 |
⑨顏色
字段名稱 | 描述 | 輸入值 | 備注 |
info_fieldname | 用於設置ALV輸出報表每一行的顏色,其參數為輸出內表的欄位名稱 | C000~C999 | 倘若其數據輸出內表名為LT_OUT,則需要在改內表增加一個欄位“COLOR”,並為內表每行賦值,LT_OUT-COLOR = ‘C500’ |
coltab_fieldname | 顏色值 |
⑩其他
字段名稱 | 描述 | 輸入值 | 備注 |
list_append | 設置是否Call屏幕 | ||
xifunckey | eXtended interaction(SAPQuery) | ||
xidirect | eXtended INTeraction(SAPQuery) | ||
dtc_layout | 設置Tabstip的布局格式配置 | DTC_S_LAYO | |
allow_switch_to_list | 設置從Grid模式轉換為List模式 |
3.2、Fieldcat相關屬性:主要用於ALV的結構定義,包括具體的欄位及名稱、類型、格式等屬性,為 ALV 輸出的必選項
字段名稱 | 描述 | 輸入值 | 備注 |
row_pos | 輸出行位置 | 1…n | |
col_pos | 輸出列位置 | 1…n | |
fieldname | 字段名稱 | ||
tabname | fieldname字段對應的內表名稱 | ||
currency | 貨幣單位 | ||
cfieldname | 當前輸出內表中的貨幣單位字段的字段名稱 | ||
ctabname | Cfieldname字段值對應的內表名稱 | ||
ifieldname | |||
quantity | 計量單位 | ||
qfieldname | 參考計量單位的字段名稱 | ||
qtabname | Qfieldname 對應的輸出內表名 | ||
round | 四舍五入保留位數 | ||
exponent | 流動表示的指數 | ||
key(1) | 將欄位設置為Key值 | ||
icon(1) | 將定義欄位以ICON的形式顯示 | ||
symbol(1) | 作為Symbol符號輸出,在ALV輸出內表中的字段值可以是ABAP名稱 | ||
checkbox(1) | 作為復選框輸出 | ||
just(1) | 定義欄位對齊方式 | (R)Right (L)Left (C)Center | |
lzero(1) | 輸出前置零 | ||
no_sign(1) | 不輸出正負號+、- | ||
no_zero(1) | 如果取值為零,則為空,既不輸出零 | ||
no_convext(1) | |||
edit_mask | 輸出編輯掩碼, 同write語句中的edit mas格式是一樣的 | 一般用來格式化時間和日期等 | |
emphasize(4) | 設置欄位的顏色 | ||
fix_column(1) | 固定列 | ||
do_sum(1) | 對當前列輸出時自動求和 | ||
no_out(1) | 當前列隱藏輸出 | ||
tech(1) | 技術字段,設置’X’后,該字段不會顯示,也不能輸出,如同MANDT字段一樣的效果 | ||
outputlen | 列的字符寬度 | ||
offset | 偏移量 | ||
seltext_l / scrtext_l | 長文本 | ||
seltext_m / scrtext_m | 中文本 | ||
seltext_s / scrtext_s | 短文本 | ||
ddictxt(1) | 列標題描述格式 | (S)hort (M)iddle (L)ong | |
rollname | |||
datatype | 數據類型 | ||
inttype | 整型 | ||
intlen | 整型長度 | ||
lowercase | 是否允許小寫字母 | ||
decfloat_style | 浮點格式 | ||
ref_fieldname | 參考字段名稱,配合ref_tabname一起使用,一般用來使單元格生成F4幫助 | ||
ref_tabname | 參考表名稱,配合ref_fieldname使用 | ||
roundfieldname | 四舍五入字段名稱 | ||
roundtabname | 四舍五入內表名稱 | ||
decimalsfieldname | 小數點字段名稱 | ||
decimalstabname | 小數點內表名稱 | ||
decimals_out(6) | 控制小數點的位數 | ||
text_fieldname | 文本字段名稱 | ||
reptext_ddic | 與數據元素的主標題類似 | ||
ddic_outputlen | 數據字典輸出長度 | ||
key_sel(1) | 這個參數只和設置了Key的字段相關,和Key一起使用,可以交互式的隱藏設置為Key的字段(alv_list有效) | ||
no_sum(1) | 不自動匯總 | ||
sp_group(4) | 分組需求 | ||
reprep(1) | selection for rep/rep | ||
input(1) | 輸入 | ||
edit(1) | 編輯 | ||
hotspot(1) | 設置欄位是否有熱點(熱點欄位顯示有下划線) |
3.3、ALV輸出函數:使用ALV輸出,可以直接參考數據字典中的現有透明表,也可以自定義Fieldcat來輸出字段;
如若使用數據字典中的透明表或視圖時,需要調用REUSE_ALV_FIELDCATALOG_MERGE函數來對相應的Fieldcat 進行匹配;
另外,必須保證該結構或內表中的每個字段都參考數據字典中的Data Element,否則無法獲取字段的相關信息.