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
