Reputation: 19
I need to put color into all the cells with values inside each column.
I want to show something like this.
Here is my code:
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.
I have tried with this code too. But it's painting row based cells based on requirement:
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.
Upvotes: 1
Views: 1554
Reputation: 10621
Here is the sample how to do it for 3 fields of table ANLC without additional itabs and loops:
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( ).
The code is rather self-commenting but I'd put some comments:
REDUCE
I made a trick of putting all the MAX indices into single field, which should be lengthy enough to hold them (current snippet is for 2char index i.e. for tables up to 99 rows). This is dirty but anyway it's better than additional loopWith a little bit of effort this piece can be adapted to any number of fields or to dynamic style without field names whatsoever.
Upvotes: 1
Reputation: 19
I created another extra itab i put all the values into it. After by SORT DESCENDING order i pick index 1 compare with table itab now im able to give cell colors to highest values.
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.
Upvotes: 0