關於ALV表格顏色,這種需求在項目中會經常用到。
- 列顏色
列的顏色很簡單,在構成ALV字段的FIELDCAT內表中有一個字段是EMPHASIZE,將一個char型4位的顏色代碼分配到FIELDCAT內表這個字段即可。
LW_FCAT-EMPHASIZE = 'C710'. "設置字段的顏色 MODIFY IT_FIELDCAT FROM LW_FCAT TRANSPORTING EMPHASIZE WHERE FIELDNAME = 'ESLRY'.
- 行顏色
1. 在構成ALV數據的內表中,添加一個char型4位的字段(CLR),用來記錄顏色代碼
TABLES ZEMP_TEST.
TYPES: BEGIN OF TY_ZEMP.
INCLUDE STRUCTURE ZEMP_TEST.
TYPES: CLR TYPE CHAR4,"可以控制行顏色
END OF TY_ZEMP.
DATA: IT_ZEMP TYPE STANDARD TABLE OF TY_ZEMP,
IW_ZEMP TYPE TY_ZEMP.
2. 循環內表,設置顏色代碼
LOOP AT IT_ZEMP INTO IW_ZEMP.
"員工編號為‘3的行,顏色為紅色
IF IW_ZEMP-EMPID = '3'.
IW_ZEMP-CLR = 'C610'.
MODIFY IT_ZEMP FROM IW_ZEMP.
CLEAR IW_ZEMP.
ENDIF.
ENDLOOP.
3. LAYOUT結構中INFO_FIELDNAME的值指定為 CLR
IW_LAYOUT-INFO_FIELDNAME = 'CLR'. "行顏色代碼的字段
- 單元格顏色
單元格顏色的設置與行顏色設計基本一致
1. 在構成ALV數據的內表中,添加一個內表 CellColor,用來記錄顏色代碼,需要設置顏色的字段名
TYPES: BEGIN OF TY_ZEMP.
INCLUDE STRUCTURE ZEMP_TEST.
TYPES: CLR TYPE CHAR4,
CELLCOLOR TYPE LVC_T_SCOL, "單元格顏色
END OF TY_ZEMP.
LOOP AT IT_ZEMP INTO IW_ZEMP.
"員工編號為‘3’的行,顏色為紅色
IF IW_ZEMP-EMPID = '3'.
IW_ZEMP-CLR = 'C610'.
MODIFY IT_ZEMP FROM IW_ZEMP.
CLEAR IW_ZEMP.
ENDIF.
IF IW_ZEMP-EMPID = '2'.
IW_CELLCOLOR-FNAME = 'ENAME'.
"員工編號為‘2’的行的‘ENAME’字段顏色為 黃色
IW_CELLCOLOR-COLOR-COL = 3.
IW_CELLCOLOR-COLOR-INT = 1.
IW_CELLCOLOR-COLOR-INV = 0.
APPEND IW_CELLCOLOR TO IW_ZEMP-CELLCOLOR.
MODIFY IT_ZEMP FROM IW_ZEMP.
CLEAR IW_ZEMP.
ENDIF.
ENDLOOP.
3. LAYOUT結構中COLTAB_FIELDNAME的值指定為CELLCOLOR
IW_LAYOUT-COLTAB_FIELDNAME = 'CELLCOLOR'. "單元格顏色內表字段
最后在調用ALV函數時,設置layout,fieldcat參數
IS_LAYOUT = IW_LAYOUT
IT_FIELDCAT = IT_FIELDCAT
- ALV工具欄
可以自定義工具欄,或者添加標准ALV工具欄,然后去除一些不需要的功能,這樣可以保留標准工具欄的功能
DATA:BEGIN OF TAB OCCURS 0,
FCODE LIKE RSMPE-FUNC,
END OF TAB.
TAB-FCODE = '&OL0'.APPEND TAB.
TAB-FCODE = '&OAD'.APPEND TAB.
TAB-FCODE = '&AVE'.APPEND TAB.
SET PF-STATUS 'STANDARD_FULLSCREEN' OF PROGRAM 'SAPLKKBL'
EXCLUDING TAB IMMEDIATELY.
- 求和
LW_FCAT-DO_SUM = 'X'. "立即求和,只有I,F,P類型的列可以求和
----------------------------------------------------------
運行效果如下:
在SE38環境下的程序名輸入欄輸入’DEMO*’后按F4,你可以查到SAP所有的DEMO示例程序,會學到很多ABAP功能的實現方法,
輸入’BCALV*’后按F4,你可以查到很多ALV示例程序。

*----------------------------------------------------------------------------------------------------------------------------------、
INCLUDE .
INCLUDE .
TYPE-POOLS slis.
TABLES spfli.
TYPES: BEGIN OF ty_layout,
exception(1),
checkbox,
icon TYPE icon_d,
symbol TYPE icon_d,
color(4),
cell_color TYPE slis_t_specialcol_alv,
hyperlink TYPE string,
link_handle TYPE int4,
END OF ty_layout.
TYPES BEGIN OF ty_spfli.
INCLUDE TYPE ty_layout.
INCLUDE TYPE spfli.
TYPES END OF ty_spfli.
TYPES ty_tab_spfli TYPE ty_spfli OCCURS 0.
PERFORM f_main.
*&---------------------------------------------------------------------*
*& Form f_main
*&---------------------------------------------------------------------*
* ALV display
*----------------------------------------------------------------------*
FORM f_main.
DATA: lt_spfli TYPE ty_tab_spfli,
lt_fieldcat TYPE slis_t_fieldcat_alv,
ls_layout TYPE slis_layout_alv,
lt_hyperlink TYPE lvc_t_hype,
lt_add_fieldcat TYPE slis_t_add_fieldcat.
PERFORM get_data TABLES lt_spfli.
PERFORM set_catalog CHANGING lt_fieldcat.
PERFORM set_layout USING ls_layout.
PERFORM hyperlink_build TABLES lt_hyperlink.
PERFORM add_fieldcat_build TABLES lt_add_fieldcat.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
i_grid_title = 'Xin''s ALV'
it_fieldcat = lt_fieldcat
it_hyperlink = lt_hyperlink
is_layout = ls_layout
it_add_fieldcat = lt_add_fieldcat
TABLES
t_outtab = lt_spfli.
ENDFORM. "f_main
*&---------------------------------------------------------------------*
*& Form set_layout
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_LAYOUT text
*----------------------------------------------------------------------*
FORM set_layout USING p_layout TYPE slis_layout_alv.
p_layout-zebra = 'X'.
p_layout-colwidth_optimize = 'X'.
p_layout-window_titlebar = 'LinHuanXin''s ALV Demo'.
p_layout-no_hline = 'X'.
p_layout-no_vline = 'X'.
p_layout-info_fieldname = 'COLOR'.
p_layout-coltab_fieldname = 'CELL_COLOR'.
p_layout-lights_fieldname = 'EXCEPTION'.
ENDFORM. "set_layout
*&---------------------------------------------------------------------*
*& Form get_data
*&---------------------------------------------------------------------*
* Get the data for output
*----------------------------------------------------------------------*
* -->PT_SPFLI data internal table
*----------------------------------------------------------------------*
FORM get_data TABLES pt_spfli TYPE ty_tab_spfli.
DATA: lt_cell TYPE slis_t_specialcol_alv,
ls_cell LIKE LINE OF lt_cell,
lwa_spfli LIKE LINE OF pt_spfli.
SELECT * FROM spfli INTO CORRESPONDING FIELDS OF TABLE pt_spfli.
LOOP AT pt_spfli INTO lwa_spfli.
IF lwa_spfli-distid = 'KM'.
lwa_spfli-color = 'C610'.
ENDIF.
IF lwa_spfli-distance < 1000.
CLEAR ls_cell.
REFRESH lt_cell.
ls_cell-fieldname = 'DISTANCE'.
ls_cell-color-col = '4'.
ls_cell-color-int = '1'.
ls_cell-color-inv = '0'.
ls_cell-nokeycol = 'X'.
APPEND ls_cell TO lt_cell.
lwa_spfli-cell_color = lt_cell.
lwa_spfli-checkbox = 'X'.
lwa_spfli-exception = '1'.
ELSE.
lwa_spfli-exception = '2'.
ENDIF.
lwa_spfli-link_handle = sy-tabix.
lwa_spfli-hyperlink = 'www.163.com'.
lwa_spfli-icon = icon_detail.
lwa_spfli-symbol = sym_folder.
MODIFY pt_spfli FROM lwa_spfli.
ENDLOOP.
ENDFORM. "get_data
*&---------------------------------------------------------------------*
*& Form add_fieldcat_build
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->PT_FIELDCAT text
*----------------------------------------------------------------------*
FORM add_fieldcat_build TABLES pt_fieldcat TYPE slis_t_add_fieldcat.
DATA lwa_fieldcat LIKE LINE OF pt_fieldcat.
lwa_fieldcat-fieldname = 'HYPERLINK'.
lwa_fieldcat-web_field = 'LINK_HANDLE'.
APPEND lwa_fieldcat TO pt_fieldcat.
ENDFORM. "get_data
*&---------------------------------------------------------------------*
*& Form hyperlink_build
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->PT_HYPERLINK text
*----------------------------------------------------------------------*
FORM hyperlink_build TABLES pt_hyperlink TYPE lvc_t_hype.
DATA lwa_hyperlink LIKE LINE OF pt_hyperlink.
DO 13 TIMES.
lwa_hyperlink-handle = sy-index.
lwa_hyperlink-href = 'www.sina.com.cn'.
APPEND lwa_hyperlink TO pt_hyperlink.
ENDDO.
DO 13 TIMES.
lwa_hyperlink-handle = 13 + sy-index.
lwa_hyperlink-href = 'www.163.com'.
APPEND lwa_hyperlink TO pt_hyperlink.
ENDDO.
ENDFORM. "hyperlink_build
*&---------------------------------------------------------------------*
*& Form set_catalog
*&---------------------------------------------------------------------*
* set fieldcatalog for alv output
*----------------------------------------------------------------------*
FORM set_catalog CHANGING pt_fieldcat TYPE slis_t_fieldcat_alv.
DATA lwa_fieldcat TYPE slis_fieldcat_alv.
"macro
DEFINE add_field.
clear lwa_fieldcat.
lwa_fieldcat-fieldname = &1.
lwa_fieldcat-seltext_l = &2.
lwa_fieldcat-emphasize = &3.
lwa_fieldcat-key = &4.
lwa_fieldcat-fix_column = &4.
append lwa_fieldcat to pt_fieldcat.
END-OF-DEFINITION.
"add field catalog
add_field 'MANDT' 'Client' '' 'X'.
add_field 'CARRID' 'Airline Code' '' 'X'.
add_field 'CONNID' 'Fight Number' '' 'X'.
add_field 'COUNTRYFR' 'Country From' '' ''.
add_field 'CITYFROM' 'City From' '' ''.
add_field 'AIRPFROM' 'Airpart From' '' ''.
add_field 'COUNTRYTO' 'Country To' 'C510' ''.
add_field 'CITYTO' 'City To' '' ''.
add_field 'AIRPTO' 'Airpart To' '' ''.
add_field 'FLTIME' 'Fly Time' '' ''.
add_field 'DEPTIME' 'Dept Time' '' ''.
add_field 'ARRTIME' 'Arrive Time' '' ''.
add_field 'DISTANCE' 'Distance' '' ''.
add_field 'DISTID' 'Mass unit of distance' '' ''.
add_field 'FLTYPE' 'Flight type' '' ''.
add_field 'PERIOD' 'Arrival n day(s) later' '' ''.
add_field 'HYPERLINK' 'HYPERLINK' '' ''.
"checkbox
CLEAR lwa_fieldcat.
lwa_fieldcat-fieldname = 'CHECKBOX'.
lwa_fieldcat-seltext_l = 'Checkbox'.
lwa_fieldcat-checkbox = 'X'.
lwa_fieldcat-fix_column = 'X'.
APPEND lwa_fieldcat TO pt_fieldcat.
"icon
CLEAR lwa_fieldcat.
lwa_fieldcat-fieldname = 'ICON'.
lwa_fieldcat-seltext_l = 'Icon'.
lwa_fieldcat-icon = 'X'.
APPEND lwa_fieldcat TO pt_fieldcat.
"symbol
CLEAR lwa_fieldcat.
lwa_fieldcat-fieldname = 'SYMBOL'.
lwa_fieldcat-seltext_l = 'Symbol'.
lwa_fieldcat-symbol = 'X'. APPEND lwa_fieldcat TO pt_fieldcat. ENDFORM.
BUTN_TYPE 按鈕類型 可用的按鈕類型: 0 Button(normal) 1 Menu and default button 2 Menu 3 分割符 4 Radio button 5 Checkbox 6 Menu entry


