[英]Fill with color all columns maximums in ALV table
我需要将颜色放入每列内具有值的所有单元格中。
我想展示这样的东西。
这是我的代码:
SORT gt_sehir_dilim_alv BY
saat1 DESCENDING
saat2 DESCENDING
saat3 DESCENDING
saat4 DESCENDING
saat5 DESCENDING
saat6 DESCENDING
saat7 DESCENDING.
LOOP AT gt_sehir_dilim_alv INTO gs_sehir_dilim_alv.
lv_index = sy-tabix.
IF lv_index EQ '1'.
wa_cellcolor-fname = 'SAAT1'.
wa_cellcolor-color-col = 1.
wa_cellcolor-color-int = '1'.
wa_cellcolor-color-inv = '0'.
APPEND wa_cellcolor TO gs_sehir_dilim_alv-cellcolor.
CLEAR: wa_cellcolor.
MODIFY gt_sehir_dilim_alv FROM gs_sehir_dilim_alv
TRANSPORTING cellcolor.
wa_cellcolor-fname = 'SAAT2'.
wa_cellcolor-color-col = 1.
wa_cellcolor-color-int = '1'.
wa_cellcolor-color-inv = '0'.
APPEND wa_cellcolor TO gs_sehir_dilim_alv-cellcolor.
CLEAR: wa_cellcolor.
MODIFY gt_sehir_dilim_alv FROM gs_sehir_dilim_alv
TRANSPORTING cellcolor.
wa_cellcolor-fname = 'SAAT3'.
wa_cellcolor-color-col = 1.
wa_cellcolor-color-int = '1'.
wa_cellcolor-color-inv = '0'.
APPEND wa_cellcolor TO gs_sehir_dilim_alv-cellcolor.
CLEAR: wa_cellcolor.
MODIFY gt_sehir_dilim_alv FROM gs_sehir_dilim_alv
TRANSPORTING cellcolor.
wa_cellcolor-fname = 'SAAT4'.
wa_cellcolor-color-col = 1.
wa_cellcolor-color-int = '1'.
wa_cellcolor-color-inv = '0'.
APPEND wa_cellcolor TO gs_sehir_dilim_alv-cellcolor.
CLEAR: wa_cellcolor.
MODIFY gt_sehir_dilim_alv FROM gs_sehir_dilim_alv
TRANSPORTING cellcolor.
wa_cellcolor-fname = 'SAAT5'.
wa_cellcolor-color-col = 1.
wa_cellcolor-color-int = '1'.
wa_cellcolor-color-inv = '0'.
APPEND wa_cellcolor TO gs_sehir_dilim_alv-cellcolor.
CLEAR: wa_cellcolor.
MODIFY gt_sehir_dilim_alv FROM gs_sehir_dilim_alv
TRANSPORTING cellcolor.
wa_cellcolor-fname = 'SAAT6'.
wa_cellcolor-color-col = 1.
wa_cellcolor-color-int = '1'.
wa_cellcolor-color-inv = '0'.
APPEND wa_cellcolor TO gs_sehir_dilim_alv-cellcolor.
CLEAR: wa_cellcolor.
MODIFY gt_sehir_dilim_alv FROM gs_sehir_dilim_alv
TRANSPORTING cellcolor.
wa_cellcolor-fname = 'SAAT7'.
wa_cellcolor-color-col = 1.
wa_cellcolor-color-int = '1'.
wa_cellcolor-color-inv = '0'.
APPEND wa_cellcolor TO gs_sehir_dilim_alv-cellcolor.
CLEAR: wa_cellcolor.
MODIFY gt_sehir_dilim_alv FROM gs_sehir_dilim_alv
TRANSPORTING cellcolor.
ENDIF.
ENDLOOP.
我也试过这个代码。 但它是根据要求绘制基于行的单元格:
LOOP AT gt_sehir_dilim_alv INTO gs_sehir_dilim_alv.
lv_index = sy-tabix.
SORT gt_sehir_dilim_alv BY saat1 saat2 saat3 saat4 saat5
saat6 saat7 ASCENDING.
*
* READ TABLE gt_sehir_dilim_alv INTO gs_sehir_dilim_alv INDEX 1.
IF gs_sehir_dilim_alv-saat1 NE 0
and gs_sehir_dilim_alv-saat2 NE 0
AND gs_sehir_dilim_alv-saat3 NE 0
AND gs_sehir_dilim_alv-saat4 NE 0
AND gs_sehir_dilim_alv-saat5 NE 0
AND gs_sehir_dilim_alv-saat6 NE 0
AND gs_sehir_dilim_alv-saat7 NE 0.
ELSEIF gs_sehir_dilim_alv-saat1 GT gs_sehir_dilim_alv-saat2
AND gs_sehir_dilim_alv-saat1 GT gs_sehir_dilim_alv-saat3
AND gs_sehir_dilim_alv-saat1 GT gs_sehir_dilim_alv-saat4
AND gs_sehir_dilim_alv-saat1 GT gs_sehir_dilim_alv-saat5
AND gs_sehir_dilim_alv-saat1 GT gs_sehir_dilim_alv-saat6
AND gs_sehir_dilim_alv-saat1 GT gs_sehir_dilim_alv-saat7.
"7.40 kodu - wa_fcat kullanmadan edit atabiliyoruz.
APPEND VALUE #( fname = 'SAAT1'
color-col = 6
color-int = '1'
color-inv = '0' ) TO
gs_sehir_dilim_alv-cellcolor.
MODIFY gt_sehir_dilim_alv FROM gs_sehir_dilim_alv
TRANSPORTING cellcolor.
ELSEIF gs_sehir_dilim_alv-saat2 GT gs_sehir_dilim_alv-saat1
AND gs_sehir_dilim_alv-saat2 GT gs_sehir_dilim_alv-saat3
AND gs_sehir_dilim_alv-saat2 GT gs_sehir_dilim_alv-saat4
AND gs_sehir_dilim_alv-saat2 GT gs_sehir_dilim_alv-saat5
AND gs_sehir_dilim_alv-saat2 GT gs_sehir_dilim_alv-saat6
AND gs_sehir_dilim_alv-saat2 GT gs_sehir_dilim_alv-saat7.
wa_cellcolor-fname = 'SAAT2'.
wa_cellcolor-color-col = 6.
wa_cellcolor-color-int = '1'.
wa_cellcolor-color-inv = '0'.
APPEND wa_cellcolor TO gs_sehir_dilim_alv-cellcolor.
CLEAR: wa_cellcolor.
ELSEIF gs_sehir_dilim_alv-saat3 GT gs_sehir_dilim_alv-saat1
AND gs_sehir_dilim_alv-saat3 GT gs_sehir_dilim_alv-saat2
AND gs_sehir_dilim_alv-saat3 GT gs_sehir_dilim_alv-saat4
AND gs_sehir_dilim_alv-saat3 GT gs_sehir_dilim_alv-saat5
AND gs_sehir_dilim_alv-saat3 GT gs_sehir_dilim_alv-saat6
AND gs_sehir_dilim_alv-saat3 GT gs_sehir_dilim_alv-saat7.
wa_cellcolor-fname = 'SAAT3'.
wa_cellcolor-color-col = 6.
wa_cellcolor-color-int = '1'.
wa_cellcolor-color-inv = '0'.
APPEND wa_cellcolor TO gs_sehir_dilim_alv-cellcolor.
CLEAR: wa_cellcolor.
MODIFY gt_sehir_dilim_alv FROM gs_sehir_dilim_alv
TRANSPORTING cellcolor.
ELSEIF gs_sehir_dilim_alv-saat4 GT gs_sehir_dilim_alv-saat1
AND gs_sehir_dilim_alv-saat4 GT gs_sehir_dilim_alv-saat2
AND gs_sehir_dilim_alv-saat4 GT gs_sehir_dilim_alv-saat3
AND gs_sehir_dilim_alv-saat4 GT gs_sehir_dilim_alv-saat5
AND gs_sehir_dilim_alv-saat4 GT gs_sehir_dilim_alv-saat6
AND gs_sehir_dilim_alv-saat4 GT gs_sehir_dilim_alv-saat7
.
wa_cellcolor-fname = 'SAAT4'.
wa_cellcolor-color-col = 6.
wa_cellcolor-color-int = '1'.
wa_cellcolor-color-inv = '0'.
APPEND wa_cellcolor TO gs_sehir_dilim_alv-cellcolor.
CLEAR: wa_cellcolor.
MODIFY gt_sehir_dilim_alv FROM gs_sehir_dilim_alv
TRANSPORTING cellcolor.
ELSEIF gs_sehir_dilim_alv-saat5 GT gs_sehir_dilim_alv-saat1
AND gs_sehir_dilim_alv-saat5 GT gs_sehir_dilim_alv-saat2
AND gs_sehir_dilim_alv-saat5 GT gs_sehir_dilim_alv-saat3
AND gs_sehir_dilim_alv-saat5 GT gs_sehir_dilim_alv-saat4
AND gs_sehir_dilim_alv-saat5 GT gs_sehir_dilim_alv-saat6
AND gs_sehir_dilim_alv-saat5 GT gs_sehir_dilim_alv-saat7.
wa_cellcolor-fname = 'SAAT5'.
wa_cellcolor-color-col = 6.
wa_cellcolor-color-int = '1'.
wa_cellcolor-color-inv = '0'.
APPEND wa_cellcolor TO gs_sehir_dilim_alv-cellcolor.
CLEAR: wa_cellcolor.
MODIFY gt_sehir_dilim_alv FROM gs_sehir_dilim_alv
TRANSPORTING cellcolor.
ELSEIF gs_sehir_dilim_alv-saat6 GT gs_sehir_dilim_alv-saat1
AND gs_sehir_dilim_alv-saat6 GT gs_sehir_dilim_alv-saat2
AND gs_sehir_dilim_alv-saat6 GT gs_sehir_dilim_alv-saat3
AND gs_sehir_dilim_alv-saat6 GT gs_sehir_dilim_alv-saat4
AND gs_sehir_dilim_alv-saat6 GT gs_sehir_dilim_alv-saat5
AND gs_sehir_dilim_alv-saat6 GT gs_sehir_dilim_alv-saat7.
wa_cellcolor-fname = 'SAAT6'.
wa_cellcolor-color-col = 6.
wa_cellcolor-color-int = '1'.
wa_cellcolor-color-inv = '0'.
APPEND wa_cellcolor TO gs_sehir_dilim_alv-cellcolor.
CLEAR: wa_cellcolor.
MODIFY gt_sehir_dilim_alv FROM gs_sehir_dilim_alv
TRANSPORTING cellcolor.
ELSEIF gs_sehir_dilim_alv-saat7 GT gs_sehir_dilim_alv-saat1
AND gs_sehir_dilim_alv-saat7 GT gs_sehir_dilim_alv-saat2
AND gs_sehir_dilim_alv-saat7 GT gs_sehir_dilim_alv-saat3
AND gs_sehir_dilim_alv-saat7 GT gs_sehir_dilim_alv-saat4
AND gs_sehir_dilim_alv-saat7 GT gs_sehir_dilim_alv-saat5
AND gs_sehir_dilim_alv-saat7 GT gs_sehir_dilim_alv-saat6.
wa_cellcolor-fname = 'SAAT7'.
wa_cellcolor-color-col = 6.
wa_cellcolor-color-int = '1'.
wa_cellcolor-color-inv = '0'.
APPEND wa_cellcolor TO gs_sehir_dilim_alv-cellcolor.
CLEAR: wa_cellcolor.
MODIFY gt_sehir_dilim_alv FROM gs_sehir_dilim_alv
TRANSPORTING cellcolor.
ENDIF.
ENDLOOP.
以下是如何在没有额外的 itab 和循环的情况下对 ANLC 表的 3 个字段执行此操作的示例:
TYPES: BEGIN OF t_assets,
idx TYPE char6,
bukrs TYPE anlc-bukrs,
anln1 TYPE anlc-anln1,
nafap TYPE anlc-nafap,
nafag TYPE anlc-nafag,
answl TYPE anlc-answl,
t_color TYPE lvc_t_scol,
END OF t_assets.
DATA: gt_assets TYPE TABLE OF t_assets.
SELECT DISTINCT bukrs, anln1, abs( nafap ) AS nafap, abs( nafag ) as nafag, answl
INTO CORRESPONDING FIELDS OF TABLE @gt_assets
FROM anlc
WHERE nafap <> 0 OR nafag <> 0 OR answl <> 0.
LOOP AT gt_assets ASSIGNING FIELD-SYMBOL(<fs_asset>).
<fs_asset>-idx = sy-tabix.
CONDENSE <fs_asset>-idx.
ENDLOOP.
DATA(maximums) = REDUCE t_assets( INIT max = VALUE t_assets( )
FOR <m> IN gt_assets NEXT
max-nafap = COND #( WHEN <m>-nafap > max-nafap THEN <m>-nafap ELSE max-nafap )
max-nafag = COND #( WHEN <m>-nafag > max-nafag THEN <m>-nafag ELSE max-nafag )
max-answl = COND #( WHEN <m>-answl > max-answl THEN <m>-answl ELSE max-answl )
max-idx = condense( val = gt_assets[ nafap = max-nafap ]-idx ) && condense( val = gt_assets[ nafag = max-nafag ]-idx ) && condense( val = gt_assets[ answl = max-answl ]-idx ) ).
gt_assets[ idx = maximums-idx(2) ]-t_color = VALUE lvc_t_scol( BASE gt_assets[ idx = maximums-idx(2) ]-t_color ( fname = 'NAFAP' color-col = col_negative ) ).
gt_assets[ idx = maximums-idx+2(2) ]-t_color = VALUE lvc_t_scol( BASE gt_assets[ idx = maximums-idx+2(2) ]-t_color ( fname = 'NAFAG' color-col = col_negative ) ).
gt_assets[ idx = maximums-idx+4(2) ]-t_color = VALUE lvc_t_scol( BASE gt_assets[ idx = maximums-idx+4(2) ]-t_color ( fname = 'ANSWL' color-col = col_negative ) ).
TRY.
cl_salv_table=>factory( IMPORTING r_salv_table = DATA(alv) CHANGING t_table = gt_assets ).
CATCH cx_salv_msg INTO DATA(message).
ENDTRY.
TRY.
DATA(columns) = alv->get_columns( ).
columns->set_color_column( 'T_COLOR' ).
CATCH cx_salv_data_error. "#EC NO_HANDLER
ENDTRY.
alv->display( ).
该代码相当自我评论,但我会发表一些评论:
REDUCE
找到最大值时,我做了一个技巧,将所有 MAX 索引放入单个字段中,该字段应该足够长以容纳它们(当前片段用于 2char 索引,即用于最多 99 行的表)。 这很脏,但无论如何它比附加循环要好只需稍加努力,这件作品就可以适应任意数量的字段或无需任何字段名称的动态样式。
我创建了另一个额外的 itab,将所有值放入其中。 在按降序排序后,我选择索引 1 与表 itab 进行比较,现在我能够将单元格 colors 设置为最高值。
APPEND LINES OF gt_sehir_dilim_alv TO gt_sehir_dilim_alv1.
LOOP AT gt_sehir_dilim_alv INTO gs_sehir_dilim_alv.
lv_index = sy-tabix.
SORT gt_sehir_dilim_alv1 BY saat1 DESCENDING.
READ TABLE gt_sehir_dilim_alv1 INDEX 1 INTO
gs_sehir_dilim_alv1.
IF gs_sehir_dilim_alv1-saat1 EQ gs_sehir_dilim_alv-saat1.
wa_cellcolor-fname = 'SAAT1'.
wa_cellcolor-color-col = 1.
wa_cellcolor-color-int = '1'.
wa_cellcolor-color-inv = '0'.
APPEND wa_cellcolor TO gs_sehir_dilim_alv-cellcolor.
CLEAR: wa_cellcolor.
MODIFY gt_sehir_dilim_alv FROM gs_sehir_dilim_alv
TRANSPORTING cellcolor.
ENDIF.
SORT gt_sehir_dilim_alv1 BY saat2 DESCENDING.
READ TABLE gt_sehir_dilim_alv1 INDEX 1 INTO
gs_sehir_dilim_alv1.
IF gs_sehir_dilim_alv1-saat2 EQ gs_sehir_dilim_alv-saat2.
wa_cellcolor-fname = 'SAAT2'.
wa_cellcolor-color-col = 1.
wa_cellcolor-color-int = '1'.
wa_cellcolor-color-inv = '0'.
APPEND wa_cellcolor TO gs_sehir_dilim_alv-cellcolor.
CLEAR: wa_cellcolor.
MODIFY gt_sehir_dilim_alv FROM gs_sehir_dilim_alv
TRANSPORTING cellcolor.
ENDIF.
SORT gt_sehir_dilim_alv1 BY saat3 DESCENDING.
READ TABLE gt_sehir_dilim_alv1 INDEX 1 INTO
gs_sehir_dilim_alv1.
IF gs_sehir_dilim_alv1-saat3 EQ gs_sehir_dilim_alv-saat3.
wa_cellcolor-fname = 'SAAT3'.
wa_cellcolor-color-col = 1.
wa_cellcolor-color-int = '1'.
wa_cellcolor-color-inv = '0'.
APPEND wa_cellcolor TO gs_sehir_dilim_alv-cellcolor.
CLEAR: wa_cellcolor.
MODIFY gt_sehir_dilim_alv FROM gs_sehir_dilim_alv
TRANSPORTING cellcolor.
ENDIF.
SORT gt_sehir_dilim_alv1 BY saat4 DESCENDING.
READ TABLE gt_sehir_dilim_alv1 INDEX 1 INTO
gs_sehir_dilim_alv1.
IF gs_sehir_dilim_alv1-saat4 EQ gs_sehir_dilim_alv-saat4.
wa_cellcolor-fname = 'SAAT4'.
wa_cellcolor-color-col = 1.
wa_cellcolor-color-int = '1'.
wa_cellcolor-color-inv = '0'.
APPEND wa_cellcolor TO gs_sehir_dilim_alv-cellcolor.
CLEAR: wa_cellcolor.
MODIFY gt_sehir_dilim_alv FROM gs_sehir_dilim_alv
TRANSPORTING cellcolor.
ENDIF.
SORT gt_sehir_dilim_alv1 BY saat5 DESCENDING.
READ TABLE gt_sehir_dilim_alv1 INDEX 1 INTO
gs_sehir_dilim_alv1.
IF gs_sehir_dilim_alv1-saat5 EQ gs_sehir_dilim_alv-saat5.
wa_cellcolor-fname = 'SAAT5'.
wa_cellcolor-color-col = 1.
wa_cellcolor-color-int = '1'.
wa_cellcolor-color-inv = '0'.
APPEND wa_cellcolor TO gs_sehir_dilim_alv-cellcolor.
CLEAR: wa_cellcolor.
MODIFY gt_sehir_dilim_alv FROM gs_sehir_dilim_alv
TRANSPORTING cellcolor.
ENDIF.
SORT gt_sehir_dilim_alv1 BY saat6 DESCENDING.
READ TABLE gt_sehir_dilim_alv1 INDEX 1 INTO
gs_sehir_dilim_alv1.
IF gs_sehir_dilim_alv1-saat6 EQ gs_sehir_dilim_alv-saat6.
wa_cellcolor-fname = 'SAAT6'.
wa_cellcolor-color-col = 1.
wa_cellcolor-color-int = '1'.
wa_cellcolor-color-inv = '0'.
APPEND wa_cellcolor TO gs_sehir_dilim_alv-cellcolor.
CLEAR: wa_cellcolor.
MODIFY gt_sehir_dilim_alv FROM gs_sehir_dilim_alv
TRANSPORTING cellcolor.
ENDIF.
SORT gt_sehir_dilim_alv1 BY saat7 DESCENDING.
READ TABLE gt_sehir_dilim_alv1 INDEX 1 INTO
gs_sehir_dilim_alv1.
IF gs_sehir_dilim_alv1-saat7 EQ gs_sehir_dilim_alv-saat7.
wa_cellcolor-fname = 'SAAT7'.
wa_cellcolor-color-col = 1.
wa_cellcolor-color-int = '1'.
wa_cellcolor-color-inv = '0'.
APPEND wa_cellcolor TO gs_sehir_dilim_alv-cellcolor.
CLEAR: wa_cellcolor.
MODIFY gt_sehir_dilim_alv FROM gs_sehir_dilim_alv
TRANSPORTING cellcolor.
ENDIF.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.