ALV簡介和Fieldcat與Layout相關參數屬性
ALV(SAP List Viewer) 是SAP常用的屏幕顯示列表控件對象,通過傳遞數據內表方式顯示數據;
ALV顯示格式分為Grid 和 List兩種模式:
Grid模式有欄位選擇按鈕功能,允許用戶直接輸出格式,操作更為靈活;
List 模式則固定格式,應用於較嚴格的標准報表。
Grid Mode:

alv_grid_mode
List Mode:

alv_list_mode
輸出ALV的 Function有兩個:REUSE_ALV_GRID_DISPLAY 和 REUSE_ALV_GRID_DISPLAY_LVC
兩個函數都可以將數據用ALV的形式顯示出來,只是一些小部分有所不同。
2.1 在調用 ALV 函數前,需要引入一個類型池:SLIS
2.2 Layout和Fieldcat的定義
Layout 主要用於設定 ALV 的輸出格式,為 ALV 輸出的可選項;
Fieldcat 主要用於ALV的結構定義,包括具體的欄位及名稱、類型、格式等屬性,為 ALV 輸出的必選項。
在調用ALV之前,需要先定義Layout 和Fieldcat,他們同屬於類型池 SLIS:
其中,對於兩個ALV函數用到的全局變量定義有所區別:
1) REUSE_ALV_GRID_DISPLAY 函數用到的全局變量:
DATA: wa_fieldcat TYPE slis_fieldcat_alv , " 相當於工作區 i_fieldcat TYPE slis_t_fieldcat_alv , " 存放輸出欄位名稱的列表 i_layout TYPE slis_layout_alv . " 負責整個ALV的全局屬性
2) REUSE_ALV_GRID_DISPLAY_LVC函數用到的全局變量:
DATA: wa_fieldcat TYPE lvc_s_fcat , " 相當於工作區 i_fieldcat TYPE lvc_t_fcat , " 存放輸出欄位名稱的列表 i_layout TYPE lvc_s_layo . " 負責整個ALV的全局屬性
可以看出:
REUSE_ALV_GRID_DISPLAY 的Layout 類型為 slis_layout_alv, Fieldcat 的類型為 slis_fieldcat_alv;
REUSE_ALV_GRID_DISPLAY_LVC 的Layout 類型為 lvc_s_layo, Fieldcat 的類型為 lvc_s_fcat;
其中,對於‘SLIS_’開頭的,可以在類型池 SLIS 中查看,‘LVC_’開頭的可以在數據字典(SE11)中查看。
SLIS 類型池中 slis_layout_alv 的定義:

slis_layout_alv
SE11中,lvc_s_layo的定義:

lvc_s_layo
3.1 slis_fieldcat_alv 常用具體字段欄位如下:
1) 公共部分
字段名稱 | 描述 | 輸入值 | 備注 |
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 | 對hierarchy ALV函數而言 | |
no_author (1) | 設置是否需要系統標准權限檢查 | X-不需要,space-需要 |
2) ALV菜單欄
字段名稱 | 描述 | 輸入值 | 備注 |
def_status (1) | 默認菜單狀態 | A顯示,space不顯示 | ‘A’ – 為顯示所有標准菜單 |
item_text (20) | 菜單按鈕文本 | ||
countfname (1) | lvc_fname |
3) 顯示選項
字段名稱 | 描述 | 輸入值 | 備注 |
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-顯示 |
4) 紅綠燈顯示異常
字段名稱 | 描述 | 輸入值 | 備注 |
lights_fieldname | 輸出內表中定義的字段名,該字段用來顯示狀態燈 | 1:red,2:yellow,3:green | |
lights_tabname | 輸出字段的參考內表名稱 | ||
lights_rollname | 數據元素的名稱,在燈字段按F1觸發 | ||
lights_condense | 對輸出的內表分類匯總的時候,小計行顯示狀態燈 | X |
5) 匯總合計
字段名稱 | 描述 | 輸入值 | 備注 |
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) | 總計和小計行,第一列顯示的文本 |
6) 交互
字段名稱 | 描述 | 輸入值 | 備注 |
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有效 |
7) 明細窗口
字段名稱 | 描述 | 輸入值 | 備注 |
detail_popup (1) | 行項目明細彈窗形式 | X-顯示,space-不顯示 | 對list_alv有效 |
detail_initial_lines(1) | 明細中同時顯示初始化行 | X-同時顯示,space-不顯示 | |
detail_titlebar | 明細窗口標題文本 | sy-title |
8) 顯示變式
字段名稱 | 描述 | 輸入值 | 備注 |
header_text | 表頭按鈕 | ||
default_item (1) | 列表明細作為默認值 | X-激活,space-不激活 |
9) 顏色
字段名稱 | 描述 | 輸入值 | 備注 |
info_fieldname | 用於設置ALV輸出報表每一行的顏色, 其參數為輸出內表的欄位名稱 |
C000~C999 | 倘若其數據輸出內表名為LT_OUT,則需要在改內表增加一個欄位“COLOR”,並為內表每行賦值, LT_OUT-COLOR = ‘C500’ |
coltab_fieldname | 顏色值 |
10) 其他
字段名稱 | 描述 | 輸入值 | 備注 |
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 lvc_s_layo常用具體字段欄位如下:
1) 布局控制(ALV_S_LAYO)
字段名稱 | 描述 | 輸入值 | 備注 |
ZEBRA(1) | 使ALV表格按斑馬線間隔條碼方式顯示 | X-有,space-沒有 | |
EDIT(1) | 准備編輯 | X-可編輯,space-不可編輯 | |
EDIT_MODE(1) | 編輯模式 | ||
NO_KEYFIX(1) | 關鍵字不固定,可以隨滾動條滾動 | X-不固定,space-固定 | |
FRONTEND(1) | |||
LANGUAGE | 語言標識符 | LANG | |
SMALLTITLE(1) | 標題大小 | ||
NO_HGRIDLN(1) | 是否隱藏水平網格線 | X-不顯示,space-顯示 | |
NO_VGRIDLN(1) | 是否隱藏垂直網格線 | X-不顯示,space-顯示 | |
NO_HEADERS(1) | 隱藏列抬頭 | X-不顯示,space-顯示 | |
NO_MERGING(1) | 禁用單元格合並 | ||
CWIDTH_OPT(1) | 自動優化列寬 | X-優化,space-不自動優化 | |
TOTALS_BEF(1) | 在個別記錄前總計輸出 | ||
NO_TOTARR(1) | 匯總行前顯示箭頭表示匯總 | ||
NO_TOTEXP(1) | 只顯示小計,不顯示總計 | ||
NO_F4(1) | 屏蔽F4搜索幫助 | ||
COUNTFNAME | 內部表字段的字段名稱 | LVC_FNAME |
2) 一般顯示選項(LVC_S_L001)
字段名稱 | 描述 | 輸入值 | 備注 |
STYLEFNAME | 用來傳輸格表,以便把各顯示為按鈕 | LVC_FNAME |
3) 網格定制(LVC_S_L002)
字段名稱 | 描述 | 輸入值 | 備注 |
NO_ROWMARK | 禁用行選擇 | ||
NO_TOOLBAR | 隱藏工具欄 | ||
GRID_TITLE | 標題欄文本 | ||
SEL_MODE(1) | 選擇模式 | A-選擇按鈕,space-空白 | “A”在最左端有選擇按鈕 |
BOX_FNAME | 內部表字段的字段名稱 | ||
SGL_CLK_HD | 第一次點擊列的頭的時候升序排列, 第二次點擊的時候降序排列 |
4) 總計選項(LVC_S_L003)
字段名稱 | 描述 | 輸入值 | 備注 |
NO_TOTLINE(1) | 不輸出總計行 | X-不輸出,space-輸出 | |
NUMC_TOTAL(1) | 禁止 NUMC 字段總計 | X-禁止,space-不禁止 | |
NO_UTSPLIT(1) | 按單元拆分總計行 | X-不拆分,space-拆分 |
5) 例外(LVC_S_L004)
字段名稱 | 描述 | 輸入值 | 備注 |
EXCP_FNAME | Field name with exception coding | ||
EXCP_ROLLN | Data element for exception documentation | ||
EXCP_CONDS(1) | Aggregate exceptions | ||
EXCP_LED(1) | Exception as LED | ||
EXCP_GROUP(1) | Exception Group |
6) 交互控制(LVC_S_L005)
字段名稱 | 描述 | 輸入值 | 備注 |
DETAILINIT | 在細節屏幕顯示初始值 | ||
DETAILTITL | 細節屏幕的標題欄 | ||
KEYHOT | 關鍵列作為熱點 | ||
NO_AUTHOR | 不執行 ALV 標准授權檢查 | ||
XIFUNCKEY | 附加功能名 | ||
XIDIRECT | 一般標記 | ||
7) 拖&放控制設置(LVC_S_DD01)
字段名稱 | 描述 | 輸入值 | 備注 |
S_DRAGDROP | 拖&放控制設置結構 | LVC_S_DD01 |
8) 顏色(LVC_S_L006)
字段名稱 | 描述 | 輸入值 | 備注 |
INFO_FNAME | 帶有簡單行彩色代碼的字段名稱 | ||
CTAB_FNAME | 代表顏色信息的字段名 |
和Layout一樣,REUSE_ALV_GRID_DISPLAY 函數中的 Fieldcat 結構: slis_t_fieldcat_alv 可在 SLIS 類型池中找到;
REUSE_ALV_GRID_DISPLAY_LVC函數中的 Fieldcat 結構: lvc_s_fcat 可在 SE11 中查看。
兩者大同小異,常用具體字段欄位如下:
字段名稱 | 描述 | 輸入值 | 備注 |
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) | 設置欄位是否有熱點(熱點欄位顯示有下划線) |
使用ALV輸出,可以直接參考數據字典中的現有透明表,也可以自定義Fieldcat來輸出字段;
如若使用數據字典中的透明表或視圖時,需要調用REUSE_ALV_FIELDCATALOG_MERGE 函數來對相應的Fieldcat 進行匹配;
另外,必須保證該結構或內表中的每個字段都參考數據字典中的Data Element,否則無法獲取字段的相關信息.
以REUSE_ALV_GRID_DISPLAY 函數為例:
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_interface_check = ' ' i_bypassing_buffer = ' ' i_buffer_active = ' ' i_callback_program = gv_repid "程序名稱 i_callback_pf_status_set = 'FRM_SET_GUI' "定義觸發工具欄定義的子程序 i_callback_user_command = 'FRM_USER_COMMAND' "單擊alv工具欄按鈕或雙擊行項目時觸發所定義的子程序 i_callback_top_of_page = ' ' i_callback_html_top_of_page = ' ' i_callback_html_end_of_list = ' ' i_structure_name = i_background_id = ' ' i_grid_title = 'ALV輸出' "ALV名稱 i_grid_settings = is_layout = gt_layout "程序所定義的layout名稱 it_fieldcat = gt_fieldcat[] "定義fieldcat數據 it_excluding = it_special_groups = it_sort = gt_sort[] it_filter = is_sel_hide = i_default = 'X' i_save = 'X' is_variant = it_events = gt_event[] it_event_exit = is_print = is_reprep_id = i_screen_start_column = '0' i_screen_start_line = '0' i_screen_end_column = '0' i_screen_end_line = '0' i_html_height_top = '0' i_html_height_end = '0' it_alv_graphics = it_hyperlink = it_add_fieldcat = it_except_qinfo = ir_salv_fullscreen_adapter = IMPORTING e_exit_caused_by_caller = es_exit_caused_by_user = TABLES t_outtab = gt_print EXCEPTIONS program_error = 1 OTHERS = 2.
下面看看兩個函數各自輸出的方式與操作;
1) REUSE_ALV_GRID_DISPLAY 函數:
REPORT ztest_jx_alv. TYPES: slis. TYPES: BEGIN OF ty_s_matnr, matnr TYPE mara-matnr, END OF ty_s_matnr. DATA: i_tab TYPE STANDARD TABLE OF ty_s_matnr. SELECT matnr FROM mara INTO CORRESPONDING FIELDS OF TABLE i_tab UP TO 20 ROWS. DATA: wa_fieldcat TYPE slis_fieldcat_alv , " 相當於工作區 i_fieldcat TYPE slis_t_fieldcat_alv , " 存放列名的列表 i_layout TYPE slis_layout_alv . " 負責整個ALV的全局屬性 DATA: lv_pos TYPE p. wa_fieldcat-qtabname = wa_fieldcat-ctabname = wa_fieldcat-tabname = 'I_TAB'. wa_fieldcat-fieldname = 'MATNR'. " 需要輸出的內表的字段名 wa_fieldcat-seltext_l = 'Material NO.'. " 字段的描述-長字段標簽 wa_fieldcat-seltext_m = 'Material NO.'. " 字段描述-中字段標簽 wa_fieldcat-seltext_s = 'Material NO.'. " 字段描述-短字段標簽 wa_fieldcat-fix_column = 'X' . " 是否是固定列 APPEND wa_fieldcat TO i_fieldcat. CLEAR wa_fieldcat. i_layout-zebra = 'X' . " 使ALV界面呈現顏色交替 i_layout-colwidth_optimize = 'X' . " 自動優化列寬 i_layout-detail_initial_lines = 'X' . " 是否出現細節屏幕 i_layout-detail_titlebar = '詳細內容' . " 細節屏幕標題 CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = sy-repid " 當前程序 is_layout = i_layout " 屬性內表 it_fieldcat = i_fieldcat[] " 列明內表 i_save = 'X' " 是否保存布局 TABLES t_outtab = i_tab EXCEPTIONS program_error = 1 OTHERS = 2.
輸出結果:

reuse_alv_grid_display
2) REUSE_ALV_GRID_DISPLAY_LVC 函數
REPORT ztest_jx_alv_lvc. * 引入類型池 TYPES: slis. TYPES: BEGIN OF ty_s_matnr, matnr TYPE mara-matnr, END OF ty_s_matnr. DATA: i_tab TYPE STANDARD TABLE OF ty_s_matnr . SELECT matnr FROM mara INTO CORRESPONDING FIELDS OF TABLE i_tab UP TO 20 ROWS. DATA: wa_fieldcat_lvc TYPE lvc_s_fcat , " 相當於工作區 i_fieldcat_lvc TYPE lvc_t_fcat , " 存放列名的列表 i_layout_lvc TYPE lvc_s_layo . " 負責整個ALV的全局屬性 wa_fieldcat_lvc-tabname = 'I_TAB'. wa_fieldcat_lvc-fieldname = 'MATNR'. " 需要輸出的內表的字段名 wa_fieldcat_lvc-scrtext_l = 'Material NO.'. " 字段的描述-長字段標簽 wa_fieldcat_lvc-scrtext_m = 'Material NO.'. " 字段描述-中字段標簽 wa_fieldcat_lvc-scrtext_s = 'Material NO.'. " 字段描述-短字段標簽 wa_fieldcat_lvc-fix_column = 'X' . " 是否是固定列 APPEND wa_fieldcat_lvc TO i_fieldcat_lvc . CLEAR wa_fieldcat_lvc. i_layout_lvc-zebra = 'X' . " 使ALV界面呈現顏色交替 i_layout_lvc-sel_mode = 'A' . " 選擇模式,"A"在最左端有選擇按鈕 i_layout_lvc-cwidth_opt = 'X' . " 自動優化列寬 i_layout_lvc-detailinit = 'X' . " 是否出現細節屏幕 i_layout_lvc-detailtitl = '詳細內容' . " 細節屏幕標題 CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC' EXPORTING i_callback_program = sy-repid " 當前程序 is_layout_lvc = i_layout_lvc " 屬性內表 it_fieldcat_lvc = i_fieldcat_lvc[] " 列明內表 i_save = 'X' " 是否保存布局 TABLES t_outtab = i_tab " 數據內表 EXCEPTIONS program_error = 1 OTHERS = 2.
輸出結果:

reuse_alv_grid_display_lvc