cancel
Showing results for 
Search instead for 
Did you mean: 

Colour Changing of a Cell in a ALV reporting

Former Member
0 Kudos

Hi all,

My query is to change the colour of a cell based on some condition in the display grid.

Can any one send me the code.

regards

paul

Accepted Solutions (1)

Accepted Solutions (1)

Former Member
0 Kudos

Check this sample program from

TYPE-POOLS: slis.
INCLUDE <icon>.

DATA: it_fieldcat TYPE lvc_t_fcat,
      it_fieldcat1 TYPE slis_t_fieldcat_alv..

DATA:it_events TYPE slis_t_event.

DATA: x_fieldcat TYPE lvc_s_fcat,
x_fieldcat1 TYPE slis_fieldcat_alv.

DATA:x_layout TYPE lvc_s_layo.

DATA: BEGIN OF it_vbap OCCURS 0,
  vbeln LIKE vbap-vbeln,
  posnr LIKE vbap-posnr,
  cellcolor TYPE lvc_t_scol,
END OF it_vbap.

SELECT vbeln
       posnr
  UP TO 20 ROWS
  INTO CORRESPONDING FIELDS OF TABLE it_vbap
  FROM vbap.


DATA:l_pos TYPE i VALUE 1.
CLEAR: l_pos.
l_pos = l_pos + 1.
x_fieldcat-seltext = 'VBELN'.
x_fieldcat-fieldname = 'VBELN'.
x_fieldcat-tabname = 'ITAB'.
x_fieldcat-col_pos = l_pos.
x_fieldcat-outputlen = '10'.
APPEND x_fieldcat TO it_fieldcat.
CLEAR x_fieldcat.
l_pos = l_pos + 1.

x_fieldcat-seltext = 'POSNR'.
x_fieldcat-fieldname = 'POSNR'.
x_fieldcat-tabname = 'ITAB'.
x_fieldcat-col_pos = l_pos.
x_fieldcat-outputlen = '5'.
APPEND x_fieldcat TO it_fieldcat.
CLEAR x_fieldcat.
l_pos = l_pos + 1.
x_layout-ctab_fname = 'CELLCOLOR'.
DATA: ls_cellcolor TYPE lvc_s_scol.
DATA: l_index TYPE sy-tabix.
LOOP AT it_vbap.
  l_index = sy-tabix.
  IF l_index = 1 OR l_index = 10.
    ls_cellcolor-fname = 'VBELN'.
    ls_cellcolor-color-col = '6'.
    ls_cellcolor-color-int = '1'.
    APPEND ls_cellcolor TO it_vbap-cellcolor.
    MODIFY it_vbap INDEX l_index TRANSPORTING cellcolor.
  ENDIF.
  IF l_index = 5 OR l_index = 20.
    ls_cellcolor-fname = 'VBELN'.
    ls_cellcolor-color-col = '4'.
    ls_cellcolor-color-int = '1'.
    APPEND ls_cellcolor TO it_vbap-cellcolor.
    MODIFY it_vbap INDEX l_index TRANSPORTING cellcolor.
  ENDIF.
ENDLOOP.


CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
  EXPORTING
    i_callback_program = sy-repid
    is_layout_lvc      = x_layout
    it_fieldcat_lvc    = it_fieldcat
  TABLES
    t_outtab           = it_vbap[]
  EXCEPTIONS
    program_error      = 1
    OTHERS             = 2.
IF sy-subrc <> 0.
  MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
  WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

Answers (7)

Answers (7)

former_member188685
Active Contributor
0 Kudos

Hi,

REPORT ZTESTALV.

TYPE-POOLS: SLIS.
INCLUDE <ICON>.
*- Fieldcatalog
DATA: IT_FIELDCAT  TYPE LVC_T_FCAT,
      IT_FIELDCAT1  TYPE SLIS_T_FIELDCAT_ALV..
*- For Events
DATA:IT_EVENTS TYPE SLIS_T_EVENT.

DATA:  X_FIELDCAT  TYPE LVC_S_FCAT,
        X_FIELDCAT1  TYPE SLIS_FIELDCAT_ALV.
DATA:X_LAYOUT TYPE LVC_S_LAYO.
TABLES: LIPS.
DATA: BEGIN OF IT_VBAP OCCURS 0,
      VBELN LIKE VBAP-VBELN,
      POSNR LIKE VBAP-POSNR,
      CELLCOLOR TYPE LVC_T_SCOL,
     END OF IT_VBAP.

SELECT VBELN
       POSNR
       UP TO 10 ROWS
      INTO CORRESPONDING FIELDS OF TABLE IT_VBAP
      FROM VBAP.


DATA:L_POS TYPE I VALUE 1.
CLEAR: L_POS.
L_POS = L_POS + 1.
X_FIELDCAT-SELTEXT = 'VBELN'.
X_FIELDCAT-FIELDNAME = 'VBELN'.
X_FIELDCAT-TABNAME = 'ITAB'.
X_FIELDCAT-COL_POS    = L_POS.
X_FIELDCAT-OUTPUTLEN = '10'.
APPEND X_FIELDCAT TO IT_FIELDCAT.
CLEAR X_FIELDCAT.
L_POS = L_POS + 1.

X_FIELDCAT-SELTEXT = 'POSNR'.
X_FIELDCAT-FIELDNAME = 'POSNR'.
X_FIELDCAT-TABNAME = 'ITAB'.
X_FIELDCAT-COL_POS    = L_POS.
X_FIELDCAT-OUTPUTLEN = '5'.
APPEND X_FIELDCAT TO IT_FIELDCAT.
CLEAR X_FIELDCAT.
L_POS = L_POS + 1.
X_LAYOUT-CTAB_FNAME = 'CELLCOLOR'.
DATA: LS_CELLCOLOR TYPE LVC_S_SCOL.
DATA: L_INDEX TYPE SY-TABIX.
LOOP AT IT_VBAP.
  L_INDEX = SY-TABIX.
  LS_CELLCOLOR-FNAME = 'VBELN'.
  LS_CELLCOLOR-COLOR-COL = '6'.
  LS_CELLCOLOR-COLOR-INT = '1'.
  APPEND LS_CELLCOLOR TO IT_VBAP-CELLCOLOR.
  MODIFY IT_VBAP INDEX L_INDEX TRANSPORTING CELLCOLOR.

ENDLOOP.


CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
  EXPORTING
    I_CALLBACK_PROGRAM       = SY-REPID
    IS_LAYOUT_LVC            = X_LAYOUT
    IT_FIELDCAT_LVC          = IT_FIELDCAT
  TABLES
    T_OUTTAB                 = IT_VBAP[]
  EXCEPTIONS
    PROGRAM_ERROR            = 1
    OTHERS                   = 2.
IF SY-SUBRC <> 0.
  MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
          WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

the above code changes the color of cell.

Regards

vijay

Former Member
0 Kudos

Hi Paul ,

You can visit this link on the net. I have uploaded a pdf on ALV which is very helpful to implent your functioality ( that is to change Color in ALV Grid).

http://esnips.com/doc/70f86c10-2932-44d5-8bdf-11377ead670f/ALV.pdf

Regards,

Kunal.

Former Member
0 Kudos

Hi paul,

*----


IMPORTANT THINGS

1. Extra field in internal table

clr TYPE slis_t_specialcol_alv,

(this field will contain the colour codes)

2. assign fieldname to alv layout

alvly-coltab_fieldname = 'CLR'

3. work area for colour

DATA : clrwa TYPE slis_specialcol_alv.

4. Populating the color

Once again

Loop at ITAB.

*********logic

if itab-field < 0 "---negative

clrwa-fieldname = 'FIELDNAME'. "<--- FIELDNAME FOR COLOR

clrwa-color-col = 6. <------- COLOUR 0-9

APPEND clrwa TO itab-clr.

MODIFY ITAB.

endif.

ENDLOOP.

*----


1. try this code (just copy paste)

REPORT abc .

*----


NECESSARY / MUST

TYPE-POOLS : slis.

DATA : alvfc TYPE slis_t_fieldcat_alv.

DATA : alvly TYPE slis_layout_alv.

*----


ITAB DECLARATION

DATA : prg TYPE sy-repid.

DATA : BEGIN OF itab OCCURS 0.

INCLUDE STRUCTURE t001.

DATA : clname(3) TYPE c,

clr TYPE slis_t_specialcol_alv,

END OF itab.

DATA : clrwa TYPE slis_specialcol_alv.

PARAMETERS : a TYPE c.

DATA : flname TYPE slis_fieldname.

*----


SELECT

START-OF-SELECTION.

SELECT * FROM t001

INTO CORRESPONDING FIELDS OF TABLE itab..

LOOP AT itab..

IF SY-TABIX <= 5.

itab-clname = 'C50'.

ELSE.

itab-clname = 'C30'.

ENDIF.

MODIFY itab.

ENDLOOP.

LOOP AT ITAB.

check itab-bukrs = '1000'

.

clrwa-fieldname = 'BUTXT'.

clrwa-color-col = 6.

APPEND clrwa TO itab-clr.

MODIFY ITAB.

clrwa-fieldname = 'LAND1'.

clrwa-color-col = 4.

APPEND clrwa TO itab-clr.

MODIFY ITAB.

ENDLOOP.

prg = sy-repid.

flname = 'CLNAME'.

  • alvly-info_fieldname = 'CLNAME'.

alvly-coltab_fieldname = 'CLR'.

LOOP AT ITAB.

if sy-tabix = 3.

clrwa-fieldname = 'BUTXT'.

clrwa-color-col = 6.

APPEND clrwa TO itab-clr.

MODIFY ITAB.

clrwa-fieldname = 'LAND1'.

clrwa-color-col = 1.

APPEND clrwa TO itab-clr.

MODIFY ITAB.

endif.

ENDLOOP

.

*

CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'

EXPORTING

i_program_name = prg

i_internal_tabname = 'ITAB'

i_inclname = prg

CHANGING

ct_fieldcat = alvfc

EXCEPTIONS

inconsistent_interface = 1

program_error = 2

OTHERS = 3.

*----


minimum

*CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'

  • EXPORTING

  • it_fieldcat = alvfc

  • TABLES

  • t_outtab = itab

  • EXCEPTIONS

  • program_error = 1

  • OTHERS = 2

*.

*----


extra

sy-uname = 'XYZAB'.

prg = sy-repid.

*----


Excluding

DATA : excl TYPE slis_t_extab.

DATA : exclwa TYPE slis_extab.

exclwa = '&OUP'.

APPEND exclwa TO excl.

exclwa = '&ODN'.

APPEND exclwa TO excl.

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'

EXPORTING

it_fieldcat = alvfc

i_callback_program = sy-repid

is_layout = alvly

i_callback_user_command = 'ITAB_USER_COMMAND'

it_excluding =

excl

i_save = 'A'

TABLES

t_outtab = itab

EXCEPTIONS

program_error = 1

OTHERS = 2.

&----


*& Form itab_user_command

&----


  • text

----


  • -->WHATCOMM text

  • -->WHATROW text

----


FORM itab_user_command USING whatcomm TYPE sy-ucomm whatrow TYPE

slis_selfield.

BREAK-POINT.

ENDFORM. "itab_user_command

regards,

amit m.

former_member927251
Active Contributor
0 Kudos

Hi,

The internal table that has the data to be displayed should also have a field as

Line_color type char30.

Then while populating the layout for the ALV grid do the following

FORM f5200_populate_layout CHANGING xys_layout TYPE lvc_s_layo.

CONSTANTS : lc_fname(30) TYPE c VALUE 'LINE_COLOR'.

xys_layout-cwidth_opt = gc_x.

xys_layout-info_fname = lc_fname.

ENDFORM. " f5200_populate_layout

While filling the internal table make the Line_COLOR field as hexadecimal code for the color you want

E.G. C111(Blue Color)

Hope this helps.

Regards,

Amit Mishra

Reward helpful answer

Former Member
0 Kudos

hai paul,

here is an example.

just check it out.

DATA : mara TYPE mara. " General Material Data

TYPE-POOLS: slis. " ALV Global types

FIELD-SYMBOLS :

<data> TYPE table. " Data to display

SELECT-OPTIONS :

s_matnr FOR mara-matnr. " Material number

SELECTION-SCREEN :

SKIP, BEGIN OF LINE,COMMENT 5(27) v_1 FOR FIELD p_max. "#EC NEEDED

PARAMETERS p_max(2) TYPE n DEFAULT '20' OBLIGATORY.

SELECTION-SCREEN END OF LINE.

----


INITIALIZATION.

v_1 = 'Maximum of lines to display'.

----


START-OF-SELECTION.

PERFORM f_read_data.

PERFORM f_display_data.

----


  • Form f_read_data

----


FORM f_read_data.

FIELD-SYMBOLS :

<field> TYPE ANY,

<field2> TYPE ANY,

<header> TYPE ANY,

<header2> TYPE ANY,

<lt_data> TYPE table. " Data read from DB

DATA:

lp_struct TYPE REF TO data,

lp_struct2 TYPE REF TO data,

lp_table TYPE REF TO data, " Pointer to dynamic table

lp_table2 TYPE REF TO data, " Pointer to dynamic table

ls_lvc_cat TYPE lvc_s_fcat,

lt_lvc_cat TYPE lvc_t_fcat. " Field catalog

  • First column

CLEAR ls_lvc_cat.

ls_lvc_cat-fieldname = 'MATNR'.

ls_lvc_cat-ref_table = 'MARA'.

APPEND ls_lvc_cat TO lt_lvc_cat.

  • 2nd column

CLEAR ls_lvc_cat.

ls_lvc_cat-fieldname = 'MAKTX'.

ls_lvc_cat-ref_table = 'MAKT'.

APPEND ls_lvc_cat TO lt_lvc_cat.

  • 3rd column

CLEAR ls_lvc_cat.

ls_lvc_cat-fieldname = 'MATKL'.

ls_lvc_cat-ref_table = 'MARA'.

APPEND ls_lvc_cat TO lt_lvc_cat.

  • Create 1st internal table

CALL METHOD cl_alv_table_create=>create_dynamic_table

EXPORTING it_fieldcatalog = lt_lvc_cat

IMPORTING ep_table = lp_table.

ASSIGN lp_table->* TO <lt_data>.

  • Read data into 1st internal table

SELECT matnr maktx matkl

INTO TABLE <lt_data>

FROM v_matnr

UP TO p_max ROWS

WHERE matnr IN s_matnr.

  • Create 2nd internal table

  • Checkbox

CLEAR ls_lvc_cat.

ls_lvc_cat-fieldname = 'CHECKBOX'.

APPEND ls_lvc_cat TO lt_lvc_cat.

  • Table color

CLEAR ls_lvc_cat.

ls_lvc_cat-fieldname = 'TABCOLOR'.

ls_lvc_cat-ref_table = 'CALENDAR_TYPE'.

ls_lvc_cat-ref_field = 'COLTAB'.

APPEND ls_lvc_cat TO lt_lvc_cat.

  • Create 2nd internal table

CALL METHOD cl_alv_table_create=>create_dynamic_table

EXPORTING it_fieldcatalog = lt_lvc_cat

IMPORTING ep_table = lp_table2.

ASSIGN lp_table2->* TO <data>.

  • Create structure = structure of the 1st internal table

CREATE DATA lp_struct LIKE LINE OF <lt_data>.

ASSIGN lp_struct->* TO <header>.

  • Create structure = structure of the 2nd internal table

CREATE DATA lp_struct2 LIKE LINE OF <data>.

ASSIGN lp_struct2->* TO <header2>.

  • Move data from 1st internal table --> 2nd internal table

LOOP AT <lt_data> ASSIGNING <header>.

DESCRIBE TABLE lt_lvc_cat.

CLEAR <header2>.

  • Fill the internal to display <data>

DO sy-tfill TIMES.

READ TABLE lt_lvc_cat INTO ls_lvc_cat INDEX sy-index.

  • For each field of lt_lvc_cat.

ASSIGN COMPONENT ls_lvc_cat-fieldname OF STRUCTURE <header>

TO <field>.

IF sy-subrc NE 0. EXIT .ENDIF.

ASSIGN COMPONENT ls_lvc_cat-fieldname OF STRUCTURE <header2>

TO <field2>.

IF sy-subrc NE 0. EXIT .ENDIF.

<field2> = <field>.

ENDDO.

  • Modify color

ASSIGN COMPONENT 'TABCOLOR' OF STRUCTURE <header2>

TO <field2>.

IF sy-subrc EQ 0.

PERFORM f_modify_color USING 'MAKTX' <field2>.

PERFORM f_modify_color USING 'MATKL' <field2>.

ENDIF.

APPEND <header2> TO <data> .

ENDLOOP.

ENDFORM. " f_read_data

----


  • Form F_DISPLAY_DATA

----


FORM f_display_data.

  • Macro definition

DEFINE m_sort.

add 1 to ls_sort-spos.

ls_sort-fieldname = &1.

ls_sort-down = 'X'.

append ls_sort to lt_sort.

END-OF-DEFINITION.

DATA:

ls_layout TYPE slis_layout_alv,

lt_sort TYPE slis_t_sortinfo_alv,

ls_sort TYPE slis_sortinfo_alv,

ls_fieldcat TYPE slis_fieldcat_alv,

lt_fieldcat TYPE slis_t_fieldcat_alv. " Field catalog

  • Build Fieldcatalog - First column

CLEAR ls_fieldcat.

ls_fieldcat-fieldname = 'MATNR'.

ls_fieldcat-ref_tabname = 'MARA'.

ls_fieldcat-key = 'X'.

APPEND ls_fieldcat TO lt_fieldcat.

  • Build Fieldcatalog - 2nd column

CLEAR ls_fieldcat.

ls_fieldcat-fieldname = 'MAKTX'.

ls_fieldcat-ref_tabname = 'MAKT'.

APPEND ls_fieldcat TO lt_fieldcat.

  • Build Fieldcatalog - 3rd column

CLEAR ls_fieldcat.

ls_fieldcat-fieldname = 'MATKL'.

ls_fieldcat-ref_tabname = 'MARA'.

APPEND ls_fieldcat TO lt_fieldcat.

  • Layout

ls_layout-zebra = 'X'.

ls_layout-colwidth_optimize = 'X'.

ls_layout-box_fieldname = 'CHECKBOX'.

ls_layout-coltab_fieldname = 'TABCOLOR'.

m_sort 'MATNR'. " Sort by creation date

  • Display data

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

EXPORTING

is_layout = ls_layout

it_fieldcat = lt_fieldcat

it_sort = lt_sort

TABLES

t_outtab = <data>.

ENDFORM. " F_DISPLAY_DATA

----


  • Form F_modify_color

----


FORM f_modify_color USING u_fieldname TYPE lvc_fname

ut_tabcolor TYPE table.

DATA:

l_rnd_value TYPE datatype-integer2,

ls_tabcolor TYPE lvc_s_scol.

  • Random value

CALL FUNCTION 'RANDOM_I2'

EXPORTING

rnd_min = 0

rnd_max = 3

IMPORTING

rnd_value = l_rnd_value.

CLEAR ls_tabcolor.

ls_tabcolor-fname = u_fieldname.

CASE l_rnd_value.

WHEN 0.

ls_tabcolor-color-col = 1. " Blue.

ls_tabcolor-color-int = 0.

ls_tabcolor-color-inv = 0.

WHEN 1.

ls_tabcolor-color-col = 3. " Yellow.

ls_tabcolor-color-int = 0.

ls_tabcolor-color-inv = 0.

WHEN 2.

ls_tabcolor-color-col = 5. " Green.

ls_tabcolor-color-int = 0.

ls_tabcolor-color-inv = 0.

WHEN 3.

ls_tabcolor-color-col = 6. " Red.

ls_tabcolor-color-int = 0.

ls_tabcolor-color-inv = 0.

ENDCASE.

INSERT ls_tabcolor INTO TABLE ut_tabcolor.

ENDFORM.

hope this will be helpful.

regards,

praba.

Former Member
0 Kudos

Hi Paul,

Take a look at this program

http://www.geocities.com/mpioud/Z_ALV_DYNAMIC_DATA_V3.html

http://www.geocities.com/mpioud/Z_ALV_CELL_COLOR.html

http://www.geocities.com/mpioud/Z_ALV_LINE_COLOR.html

You just need to add a nested table STYLE to your data table and populate the colors accordingly.

Regards,

Ravi

Note : Please mark the helpful answers

Former Member
0 Kudos

hi Paul,

Check this out

http://www.sap-img.com/abap/line-color-in-alv-example.htm

Regards,

Santosh