繁体   English   中英

用颜色填充 ALV 表中的所有列最大值

[英]Fill with color all columns maximums in ALV table

我需要将颜色放入每列内具有值的所有单元格中。

我想展示这样的东西。

带有彩色单元格的 ALV 网格

这是我的代码:

    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( ).

该代码相当自我评论,但我会发表一些评论:

  1. 首先,您需要每行的索引才能选择它们
  2. 然后,在使用REDUCE找到最大值时,我做了一个技巧,将所有 MAX 索引放入单个字段中,该字段应该足够长以容纳它们(当前片段用于 2char 索引,即用于最多 99 行的表)。 这很脏,但无论如何它比附加循环要好
  3. 最后,我通过选择对应字段的索引,通过表格表达式填充 colors

只需稍加努力,这件作品就可以适应任意数量的字段或无需任何字段名称的动态样式。

我创建了另一个额外的 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.

OUTPUT: 在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM