【转自:https://www.cnblogs.com/mingdashu/p/color_alv.html】
BCALV_EDIT_03
http://blog.sina.com.cn/s/blog_a87b19300102who3.html
关于ALV表格颜色,这种需求在项目中会经常用到。
- 列颜色
列的颜色很简单,在构成ALV字段的FIELDCAT内表中有一个字段是EMPHASIZE,将一个char型4位的颜色代码分配到FIELDCAT内表这个字段即可。
1 LW_FCAT-EMPHASIZE = 'C710'. "设置字段的颜色 2 3 MODIFY IT_FIELDCAT FROM LW_FCAT 4 TRANSPORTING EMPHASIZE 5 WHERE FIELDNAME = 'ESLRY'.
- 行颜色
1. 在构成ALV数据的内表中,添加一个char型4位的字段(CLR),用来记录颜色代码
1 TABLES ZEMP_TEST. 2 3 TYPES: BEGIN OF TY_ZEMP. 4 INCLUDE STRUCTURE ZEMP_TEST. 5 TYPES: CLR TYPE CHAR4,"可以控制行颜色 6 END OF TY_ZEMP. 7 8 DATA: IT_ZEMP TYPE STANDARD TABLE OF TY_ZEMP, 9 IW_ZEMP TYPE TY_ZEMP.
2. 循环内表,设置颜色代码
1 LOOP AT IT_ZEMP INTO IW_ZEMP. 2 "员工编号为‘3的行,颜色为红色 3 IF IW_ZEMP-EMPID = '3'. 4 IW_ZEMP-CLR = 'C610'. 5 MODIFY IT_ZEMP FROM IW_ZEMP. 6 CLEAR IW_ZEMP. 7 ENDIF. 8 ENDLOOP.
3. LAYOUT结构中INFO_FIELDNAME的值指定为 CLR
IW_LAYOUT-INFO_FIELDNAME = 'CLR'. "行颜色代码的字段
- 单元格颜色
单元格颜色的设置与行颜色设计基本一致
1. 在构成ALV数据的内表中,添加一个内表 CellColor,用来记录颜色代码,需要设置颜色的字段名
1 TYPES: BEGIN OF TY_ZEMP. 2 INCLUDE STRUCTURE ZEMP_TEST. 3 TYPES: CLR TYPE CHAR4, 4 CELLCOLOR TYPE LVC_T_SCOL, "单元格颜色 5 END OF TY_ZEMP.
CellColor的结构:FNAME ALV 控制: 内部表字段的字段名称
COLOR ALV 控制: 颜色代码 COLOR是一个结构:COL ALV 控制: 颜色
INT ALV 控制: 强化 1/0
INV ALV 控制: 相反 1/0 设置颜色是前景,或者是背景
NOKEYCOL ALV 控制: 覆盖码颜色
2. 循环内表,设置颜色代码
1 LOOP AT IT_ZEMP INTO IW_ZEMP. 2 3 "员工编号为‘3’的行,颜色为红色 4 IF IW_ZEMP-EMPID = '3'. 5 IW_ZEMP-CLR = 'C610'. 6 7 MODIFY IT_ZEMP FROM IW_ZEMP. 8 CLEAR IW_ZEMP. 9 10 ENDIF. 11 12 IF IW_ZEMP-EMPID = '2'. 13 IW_CELLCOLOR-FNAME = 'ENAME'. 14 "员工编号为‘2’的行的‘ENAME’字段颜色为 黄色 15 IW_CELLCOLOR-COLOR-COL = 3. 16 IW_CELLCOLOR-COLOR-INT = 1. 17 IW_CELLCOLOR-COLOR-INV = 0. 18 19 APPEND IW_CELLCOLOR TO IW_ZEMP-CELLCOLOR. 20 MODIFY IT_ZEMP FROM IW_ZEMP. 21 CLEAR IW_ZEMP. 22 23 ENDIF. 24 ENDLOOP.
3. LAYOUT结构中COLTAB_FIELDNAME的值指定为CELLCOLOR
IW_LAYOUT-COLTAB_FIELDNAME = 'CELLCOLOR'. "单元格颜色内表字段
最后在调用ALV函数时,设置layout,fieldcat参数
IS_LAYOUT = IW_LAYOUT IT_FIELDCAT = IT_FIELDCAT
- ALV工具栏
可以自定义工具栏,或者添加标准ALV工具栏,然后去除一些不需要的功能,这样可以保留标准工具栏的功能
1 DATA:BEGIN OF TAB OCCURS 0, 2 FCODE LIKE RSMPE-FUNC, 3 END OF TAB. 4 5 TAB-FCODE = '&OL0'.APPEND TAB. 6 TAB-FCODE = '&OAD'.APPEND TAB. 7 TAB-FCODE = '&AVE'.APPEND TAB. 8 9 SET PF-STATUS 'STANDARD_FULLSCREEN' OF PROGRAM 'SAPLKKBL' 10 EXCLUDING TAB IMMEDIATELY.
- 求和
LW_FCAT-DO_SUM = 'X'. "立即求和,只有I,F,P类型的列可以求和
----------------------------------------------------------
运行效果如下:
在SE38环境下的程序名输入栏输入’DEMO*’后按F4,你可以查到SAP所有的DEMO示例程序,会学到很多ABAP功能的实现方法,
输入’BCALV*’后按F4,你可以查到很多ALV示例程序。
附:ALV的颜色代码:http://blog.csdn.net/wren2004/article/details/3941551
*----------------------------------------------------------------------------------------------------------------------------------、
1 INCLUDE <icon>. 2 3 INCLUDE <symbol>. 4 5 6 7 TYPE-POOLS slis. 8 9 10 11 TABLES spfli. 12 13 14 15 TYPES: BEGIN OF ty_layout, 16 17 exception(1), 18 19 checkbox, 20 21 icon TYPE icon_d, 22 23 symbol TYPE icon_d, 24 25 color(4), 26 27 cell_color TYPE slis_t_specialcol_alv, 28 29 hyperlink TYPE string, 30 31 link_handle TYPE int4, 32 33 END OF ty_layout. 34 35 TYPES BEGIN OF ty_spfli. 36 37 INCLUDE TYPE ty_layout. 38 39 INCLUDE TYPE spfli. 40 41 TYPES END OF ty_spfli. 42 43 TYPES ty_tab_spfli TYPE ty_spfli OCCURS 0. 44 45 46 47 PERFORM f_main. 48 49 50 51 *&---------------------------------------------------------------------* 52 53 *& Form f_main 54 55 *&---------------------------------------------------------------------* 56 57 * ALV display 58 59 *----------------------------------------------------------------------* 60 61 FORM f_main. 62 63 DATA: lt_spfli TYPE ty_tab_spfli, 64 65 lt_fieldcat TYPE slis_t_fieldcat_alv, 66 67 ls_layout TYPE slis_layout_alv, 68 69 lt_hyperlink TYPE lvc_t_hype, 70 71 lt_add_fieldcat TYPE slis_t_add_fieldcat. 72 73 74 75 PERFORM get_data TABLES lt_spfli. 76 77 78 79 PERFORM set_catalog CHANGING lt_fieldcat. 80 81 82 83 PERFORM set_layout USING ls_layout. 84 85 86 87 PERFORM hyperlink_build TABLES lt_hyperlink. 88 89 90 91 PERFORM add_fieldcat_build TABLES lt_add_fieldcat. 92 93 94 95 CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' 96 97 EXPORTING 98 99 i_callback_program = sy-repid 100 101 i_grid_title = 'Xin''s ALV' 102 103 it_fieldcat = lt_fieldcat 104 105 it_hyperlink = lt_hyperlink 106 107 is_layout = ls_layout 108 109 it_add_fieldcat = lt_add_fieldcat 110 111 TABLES 112 113 t_outtab = lt_spfli. 114 115 ENDFORM. "f_main 116 117 118 119 *&---------------------------------------------------------------------* 120 121 *& Form set_layout 122 123 *&---------------------------------------------------------------------* 124 125 * text 126 127 *----------------------------------------------------------------------* 128 129 * -->P_LAYOUT text 130 131 *----------------------------------------------------------------------* 132 133 FORM set_layout USING p_layout TYPE slis_layout_alv. 134 135 p_layout-zebra = 'X'. 136 137 p_layout-colwidth_optimize = 'X'. 138 139 p_layout-window_titlebar = 'LinHuanXin''s ALV Demo'. 140 141 p_layout-no_hline = 'X'. 142 143 p_layout-no_vline = 'X'. 144 145 p_layout-info_fieldname = 'COLOR'. 146 147 p_layout-coltab_fieldname = 'CELL_COLOR'. 148 149 p_layout-lights_fieldname = 'EXCEPTION'. 150 151 ENDFORM. "set_layout 152 153 154 155 *&---------------------------------------------------------------------* 156 157 *& Form get_data 158 159 *&---------------------------------------------------------------------* 160 161 * Get the data for output 162 163 *----------------------------------------------------------------------* 164 165 * -->PT_SPFLI data internal table 166 167 *----------------------------------------------------------------------* 168 169 FORM get_data TABLES pt_spfli TYPE ty_tab_spfli. 170 171 172 173 DATA: lt_cell TYPE slis_t_specialcol_alv, 174 175 ls_cell LIKE LINE OF lt_cell, 176 177 lwa_spfli LIKE LINE OF pt_spfli. 178 179 180 181 SELECT * FROM spfli INTO CORRESPONDING FIELDS OF TABLE pt_spfli. 182 183 184 185 LOOP AT pt_spfli INTO lwa_spfli. 186 187 188 189 IF lwa_spfli-distid = 'KM'. 190 191 lwa_spfli-color = 'C610'. 192 193 ENDIF. 194 195 IF lwa_spfli-distance < 1000. 196 197 CLEAR ls_cell. 198 199 REFRESH lt_cell. 200 201 ls_cell-fieldname = 'DISTANCE'. 202 203 ls_cell-color-col = '4'. 204 205 ls_cell-color-int = '1'. 206 207 ls_cell-color-inv = '0'. 208 209 ls_cell-nokeycol = 'X'. 210 211 APPEND ls_cell TO lt_cell. 212 213 lwa_spfli-cell_color = lt_cell. 214 215 lwa_spfli-checkbox = 'X'. 216 217 lwa_spfli-exception = '1'. 218 219 ELSE. 220 221 lwa_spfli-exception = '2'. 222 223 ENDIF. 224 225 226 227 lwa_spfli-link_handle = sy-tabix. 228 229 lwa_spfli-hyperlink = 'www.163.com'. 230 231 lwa_spfli-icon = icon_detail. 232 233 lwa_spfli-symbol = sym_folder. 234 235 MODIFY pt_spfli FROM lwa_spfli. 236 237 ENDLOOP. 238 239 ENDFORM. "get_data 240 241 242 243 *&---------------------------------------------------------------------* 244 245 *& Form add_fieldcat_build 246 247 *&---------------------------------------------------------------------* 248 249 * text 250 251 *----------------------------------------------------------------------* 252 253 * -->PT_FIELDCAT text 254 255 *----------------------------------------------------------------------* 256 257 FORM add_fieldcat_build TABLES pt_fieldcat TYPE slis_t_add_fieldcat. 258 259 DATA lwa_fieldcat LIKE LINE OF pt_fieldcat. 260 261 262 263 lwa_fieldcat-fieldname = 'HYPERLINK'. 264 265 lwa_fieldcat-web_field = 'LINK_HANDLE'. 266 267 APPEND lwa_fieldcat TO pt_fieldcat. 268 269 ENDFORM. "get_data 270 271 272 273 *&---------------------------------------------------------------------* 274 275 *& Form hyperlink_build 276 277 *&---------------------------------------------------------------------* 278 279 * text 280 281 *----------------------------------------------------------------------* 282 283 * -->PT_HYPERLINK text 284 285 *----------------------------------------------------------------------* 286 287 FORM hyperlink_build TABLES pt_hyperlink TYPE lvc_t_hype. 288 289 DATA lwa_hyperlink LIKE LINE OF pt_hyperlink. 290 291 292 293 DO 13 TIMES. 294 295 lwa_hyperlink-handle = sy-index. 296 297 lwa_hyperlink-href = 'www.sina.com.cn'. 298 299 APPEND lwa_hyperlink TO pt_hyperlink. 300 301 ENDDO. 302 303 DO 13 TIMES. 304 305 lwa_hyperlink-handle = 13 + sy-index. 306 307 lwa_hyperlink-href = 'www.163.com'. 308 309 APPEND lwa_hyperlink TO pt_hyperlink. 310 311 ENDDO. 312 313 314 315 ENDFORM. "hyperlink_build 316 317 318 319 *&---------------------------------------------------------------------* 320 321 *& Form set_catalog 322 323 *&---------------------------------------------------------------------* 324 325 * set fieldcatalog for alv output 326 327 *----------------------------------------------------------------------* 328 329 FORM set_catalog CHANGING pt_fieldcat TYPE slis_t_fieldcat_alv. 330 331 DATA lwa_fieldcat TYPE slis_fieldcat_alv. 332 333 334 335 "macro 336 337 DEFINE add_field. 338 339 clear lwa_fieldcat. 340 341 lwa_fieldcat-fieldname = &1. 342 343 lwa_fieldcat-seltext_l = &2. 344 345 lwa_fieldcat-emphasize = &3. 346 347 lwa_fieldcat-key = &4. 348 349 lwa_fieldcat-fix_column = &4. 350 351 append lwa_fieldcat to pt_fieldcat. 352 353 END-OF-DEFINITION. 354 355 356 357 "add field catalog 358 359 add_field 'MANDT' 'Client' '' 'X'. 360 361 add_field 'CARRID' 'Airline Code' '' 'X'. 362 363 add_field 'CONNID' 'Fight Number' '' 'X'. 364 365 add_field 'COUNTRYFR' 'Country From' '' ''. 366 367 add_field 'CITYFROM' 'City From' '' ''. 368 369 add_field 'AIRPFROM' 'Airpart From' '' ''. 370 371 add_field 'COUNTRYTO' 'Country To' 'C510' ''. 372 373 add_field 'CITYTO' 'City To' '' ''. 374 375 add_field 'AIRPTO' 'Airpart To' '' ''. 376 377 add_field 'FLTIME' 'Fly Time' '' ''. 378 379 add_field 'DEPTIME' 'Dept Time' '' ''. 380 381 add_field 'ARRTIME' 'Arrive Time' '' ''. 382 383 add_field 'DISTANCE' 'Distance' '' ''. 384 385 add_field 'DISTID' 'Mass unit of distance' '' ''. 386 387 add_field 'FLTYPE' 'Flight type' '' ''. 388 389 add_field 'PERIOD' 'Arrival n day(s) later' '' ''. 390 391 add_field 'HYPERLINK' 'HYPERLINK' '' ''. 392 393 394 395 "checkbox 396 397 CLEAR lwa_fieldcat. 398 399 lwa_fieldcat-fieldname = 'CHECKBOX'. 400 401 lwa_fieldcat-seltext_l = 'Checkbox'. 402 403 lwa_fieldcat-checkbox = 'X'. 404 405 lwa_fieldcat-fix_column = 'X'. 406 407 APPEND lwa_fieldcat TO pt_fieldcat. 408 409 410 411 "icon 412 413 CLEAR lwa_fieldcat. 414 415 lwa_fieldcat-fieldname = 'ICON'. 416 417 lwa_fieldcat-seltext_l = 'Icon'. 418 419 lwa_fieldcat-icon = 'X'. 420 421 APPEND lwa_fieldcat TO pt_fieldcat. 422 423 424 425 "symbol 426 427 CLEAR lwa_fieldcat. 428 429 lwa_fieldcat-fieldname = 'SYMBOL'. 430 431 lwa_fieldcat-seltext_l = 'Symbol'. 432 433 lwa_fieldcat-symbol = 'X'. 434 435 APPEND lwa_fieldcat TO pt_fieldcat. 436 437 438 439 ENDFORM. "set_catalog
1 BUTN_TYPE 按钮类型 2 可用的按钮类型: 3 0 Button(normal) 4 1 Menu and default button 5 2 Menu 6 3 分割符 7 4 Radio button 8 5 Checkbox 9 6 Menu entry