Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

To change the colour of the particular cell of ALV report in Grid display.

Former Member
0 Kudos

Hai Friends,

I have created an Alv report in grid display .In that i want to change the colour of the particular cell.Plz provide the answer with a solved example.

Thank u.

4 REPLIES 4

Former Member
0 Kudos

Hello,

Please read this:https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/e8a1d690-0201-0010-b7ad-d9719a415907. At page 27.

Regards.

Former Member
0 Kudos

hi check this..

REPORT ztest.

TYPE-POOLS:SLIS.

TABLES:VBAK.

SELECT-OPTIONS:S_VBELN FOR VBAK-VBELN.

DATA:BEGIN OF ITAB OCCURS 0,

VBELN LIKE VBAK-VBELN,

ERNAM LIKE VBAK-ERNAM,

ERDAT LIKE VBAK-ERDAT,

NETWR LIKE VBAK-NETWR,

END OF ITAB.

DATA:IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,

WA_FIELDCAT LIKE LINE OF IT_FIELDCAT,

WA_LAYOUT TYPE SLIS_LAYOUT_ALV.

START-OF-SELECTION.

PERFORM IT_POPULATE .

sort itab by vbeln descending.

PERFORM ALV_GENERATE.

PERFORM ALV_DISPLAY.

&----


*& Form it_populate

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM IT_POPULATE .

SELECT VBELN ERNAM ERDAT NETWR FROM VBAK INTO TABLE ITAB WHERE VBELN IN S_VBELN.

ENDFORM. " it_populate

&----


*& Form alv_display

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM ALV_GENERATE .

WA_FIELDCAT-FIELDNAME = 'VBELN'.

WA_FIELDCAT-tabname = 'ITAB'.

WA_FIELDCAT-SELTEXT_L = 'sales doc. no'.

WA_FIELDCAT-emphasize = 'C111'.

APPEND WA_FIELDCAT TO IT_FIELDCAT.

WA_FIELDCAT-FIELDNAME = 'ERNAM'.

WA_FIELDCAT-tabname = 'ITAB'.

WA_FIELDCAT-SELTEXT_L = 'Name'.

WA_FIELDCAT-emphasize = 'C211'.

APPEND WA_FIELDCAT TO IT_FIELDCAT.

WA_FIELDCAT-FIELDNAME = 'ERDAT'.

WA_FIELDCAT-tabname = 'ITAB'.

WA_FIELDCAT-SELTEXT_L = 'Name'.

WA_FIELDCAT-emphasize = 'C311'.

APPEND WA_FIELDCAT TO IT_FIELDCAT.

WA_FIELDCAT-FIELDNAME = 'NETWR'.

WA_FIELDCAT-emphasize = 'C411'.

WA_FIELDCAT-SELTEXT_L = 'sales doc.amt'.

WA_FIELDCAT-tabname = 'ITAB'.

APPEND WA_FIELDCAT TO IT_FIELDCAT.

ENDFORM. " alv_display

&----


*& Form alv_display

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM ALV_DISPLAY .

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

EXPORTING

IT_FIELDCAT = IT_FIELDCAT

TABLES

T_OUTTAB = ITAB.

ENDFORM. " alv_display

regards,

venkat

Former Member
0 Kudos

This is for the non OO ALV


TABLES: zlmlead.

DATA ls_cellcolor TYPE lvc_s_scol .


*---------------------------------------------------------------*
*   ALV Related Fields & Tables
*---------------------------------------------------------------*
TYPE-POOLS: slis.
CONSTANTS:
  gc_formname_top_of_page   TYPE slis_formname VALUE 'TOP_OF_PAGE',
  gc_formname_user_command   TYPE slis_formname VALUE 'USER_COMMAND'.

DATA: g_fieldcat                   TYPE slis_t_fieldcat_alv,
        g_extab                    TYPE slis_t_extab,
        g_layout                   TYPE slis_layout_alv,
        g_keyinfo                  TYPE slis_keyinfo_alv,
        g_print                    TYPE slis_print_alv,
        g_sort                     TYPE slis_t_sortinfo_alv,
        g_sp_group                 TYPE slis_t_sp_group_alv,
        g_events                   TYPE slis_t_event,
        g_events_ex                TYPE slis_t_event_exit,
        g_repid                    LIKE sy-repid,
        g_list_top_of_page         TYPE slis_t_listheader,
        g_save                     TYPE c.
*        g_exit                     TYPE c.
*        g_variant                  LIKE disvariant,
DATA: ls_line                      TYPE slis_listheader.

DATA:
  col_rec         TYPE lvc_s_scol.

DATA:
  BEGIN OF out_rec,
    leadid        TYPE zleadid,
    ltype         TYPE zlmltype,
    status        TYPE zlmstatus,
    ct            TYPE lvc_t_scol,
  END OF out_rec,
  it_out          LIKE STANDARD TABLE OF out_rec.

*______________________________________  Initialization
INITIALIZATION.
* Check authority for ALV Standard layout save option
  AUTHORITY-CHECK OBJECT 'ZALV_STD'
          ID 'ACTVT' FIELD '02'.
  IF sy-subrc = 0.
    g_save = 'A'.
  ELSE.
    g_save = 'U'.
  ENDIF.

START-OF-SELECTION.

  SELECT leadid ltype status
    INTO (out_rec-leadid,
           out_rec-ltype,
           out_rec-status)
    FROM zlmlead.

    CLEAR ls_cellcolor.
    ls_cellcolor-fname = 'STATUS' .
    REFRESH out_rec-ct.
    CASE out_rec-status.
      WHEN 'CA001'.
        ls_cellcolor-color-col = '1' .
        ls_cellcolor-color-int = '0' .
      WHEN OTHERS.
        ls_cellcolor-color-col = '6' .
        ls_cellcolor-color-int = '1' .
    ENDCASE.
    APPEND ls_cellcolor TO out_rec-ct.
    APPEND out_rec TO it_out.
  ENDSELECT.

  PERFORM display_alv_report.

*---------------------------------------------------------------------*
*       FORM display_alv_report                                       *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM display_alv_report.
  PERFORM fieldcat_init      USING g_fieldcat[].
  PERFORM build_sort_fields  USING g_sort[].
  PERFORM eventtab_build     USING g_events[]
                                   g_events_ex[].
  PERFORM layout_build       USING g_layout.
*
  PERFORM list_view.
*
ENDFORM.                    " display_alv_report.
*---------------------------------------------------------------------*
*       FORM eventtab_build                                           *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
*  -->  E03_LT_EVENTS                                                 *
*  -->  E03_LT_EVENTS_EX                                              *
*---------------------------------------------------------------------*
FORM eventtab_build
    USING e03_lt_events TYPE slis_t_event
          e03_lt_events_ex TYPE slis_t_event_exit.
  DATA: ls_event      TYPE slis_alv_event,
        ls_event_exit LIKE LINE OF e03_lt_events_ex.
*
  CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
       EXPORTING
            i_list_type = 1
       IMPORTING
            et_events   = e03_lt_events.
  READ TABLE e03_lt_events
       WITH KEY name = slis_ev_top_of_page
       INTO ls_event.
  IF sy-subrc = 0.
    MOVE gc_formname_top_of_page TO ls_event-form.
    APPEND ls_event TO e03_lt_events.
  ENDIF.
  READ TABLE e03_lt_events
       WITH KEY name = 'USER_COMMAND'
       INTO ls_event.
  IF sy-subrc = 0.
    MOVE gc_formname_user_command TO ls_event-form.
    APPEND ls_event TO e03_lt_events.
  ENDIF.
  ls_event_exit-ucomm  = 'DISP'.
  APPEND ls_event_exit TO  e03_lt_events_ex.
ENDFORM.                    " build_events_table


*====> End of the Build Events section
*====> This section builds the Layout Record


FORM layout_build
    USING e05_ls_layout TYPE slis_layout_alv.
*
  CLEAR e05_ls_layout.
*
  e05_ls_layout-f2code = 'DISP'.
  e05_ls_layout-colwidth_optimize = 'X'.
  e05_ls_layout-zebra = 'X'.
  e05_ls_layout-detail_popup = 'X'.
  e05_ls_layout-detail_initial_lines = 'X'.
  e05_ls_layout-detail_titlebar = 'Demo for Coloring ALV Cells'.
  e05_ls_layout-coltab_fieldname = 'CT'.

*
*  e05_ls_layout-min_linesize = 125.
*  gs_print-no_print_listinfos = 'X'.
*
ENDFORM.                    " layout_build


*====> End of the Build for Layout Record
*====> This section builds the Actual Display Routine


FORM list_view.
*
  g_repid = sy-repid.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
       EXPORTING
            i_callback_program = g_repid
            is_layout          = g_layout
            it_sort            = g_sort[]
            it_events          = g_events[]
            it_fieldcat        = g_fieldcat[]
            i_save             = g_save
       TABLES
            t_outtab           = it_out
       EXCEPTIONS
            program_error      = 1
            OTHERS             = 2.

  IF sy-subrc <> 0.
    MESSAGE e208(00) WITH 'Error: ALV Grid'.
  ENDIF.
*
ENDFORM.                    " layout_build


*====> End of Actual Display Routine
*====> This section builds the Top of Page Routine


FORM top_of_page.
*
  DATA: ls_line TYPE slis_listheader.
*
  CLEAR g_list_top_of_page[].
  CLEAR ls_line.
  ls_line-typ  = 'H'.
  ls_line-info = 'Demo for Coloring ALV Cells'.
  APPEND ls_line TO g_list_top_of_page.
  PERFORM build_sub_headings
      USING g_list_top_of_page.
*
  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
       EXPORTING
            it_list_commentary = g_list_top_of_page[].
*
ENDFORM.                    " top_of_page
*
FORM build_sub_headings
        USING e07_top_of_page TYPE slis_t_listheader.
  DATA: ls_line TYPE slis_listheader.
*
  CLEAR ls_line.
  ls_line-typ  = 'S'.
  ls_line-key = 'Run Info'.
  CONCATENATE  sy-sysid sy-uname sy-mandt
        INTO ls_line-info
        SEPARATED BY space.
  APPEND ls_line TO e07_top_of_page.
*
ENDFORM.                    "build_sub_headings


*====> End of top_of_page
*====> This section builds the User Command Routine


FORM user_command
        USING p_ucomm LIKE sy-ucomm
              p_selfield TYPE slis_selfield.
*
  IF p_selfield-value NE space.
    CASE p_selfield-tabname.
      WHEN 'IT_OUT'.
        READ TABLE it_out INDEX p_selfield-tabindex
                  INTO out_rec.
      WHEN OTHERS.
        EXIT.
    ENDCASE.
  ELSE.
    EXIT.
  ENDIF.
*
  CHECK sy-subrc = 0.
*
  CASE p_selfield-fieldname.
*    WHEN 'QUOTE'.
*      SET PARAMETER ID 'AGN' FIELD p_selfield-value.
*      CALL TRANSACTION 'VA23' AND SKIP FIRST SCREEN.
*    WHEN 'SALESORD'.
*      SET PARAMETER ID 'AUN' FIELD p_selfield-value.
*      CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
*    WHEN 'NAME1'.
*      SET PARAMETER ID 'KUN' FIELD OUT_REC-kunnr.
*      CALL TRANSACTION 'XD03' AND SKIP FIRST SCREEN.
*    WHEN 'LOTEVAL'.
*      SET PARAMETER ID 'ZLOTNUM' FIELD p_selfield-value.
*      SET PARAMETER ID 'KUN' FIELD OUT_REC-kunnr.
*      CALL TRANSACTION 'ZLOT' AND SKIP FIRST SCREEN.
*    WHEN 'CREDITAPP'.
*      SET PARAMETER ID 'ZCRDNUM' FIELD p_selfield-value.
*      SET PARAMETER ID 'KUN' FIELD OUT_REC-kunnr.
*      CALL TRANSACTION 'ZCRD' AND SKIP FIRST SCREEN.
*    WHEN 'PROJECT'.
*      SET PARAMETER ID 'PSP' FIELD OUT_REC-project.
*      CALL TRANSACTION 'CJ20N' AND SKIP FIRST SCREEN.
*    WHEN 'ACCNO'.
*      SET PARAMETER ID 'ZREO' FIELD p_selfield-value.
*      CALL TRANSACTION 'ZREO' AND SKIP FIRST SCREEN.
*    WHEN 'LEADID'.
*      SET PARAMETER ID 'LEAD' FIELD rpt_rec-leadid.
*      SET PARAMETER ID 'LMSMENU' FIELD 'N'.
*      CALL TRANSACTION 'ZLM02' AND SKIP FIRST SCREEN.
*
    WHEN OTHERS.
      EXIT.
  ENDCASE.
*
ENDFORM.                    "user_command


*====> End of user_command
*&--------------------------------------------------
*&      Form  build_sort_fields
*&--------------------------------------------------
FORM build_sort_fields
  USING p_sort TYPE slis_t_sortinfo_alv..
*----------------------> ALV Build Sort Table
  DATA:  ls_sort  LIKE LINE OF p_sort.
  REFRESH p_sort.
ENDFORM.          " build_sort_fields

*&--------------------------------------------------
*&      Form  fieldcat_init
*&--------------------------------------------------
FORM fieldcat_init
  USING e01_lt_fieldcat TYPE slis_t_fieldcat_alv.
  DATA: ls_fieldcat TYPE slis_fieldcat_alv.

  CLEAR: e01_lt_fieldcat[], e01_lt_fieldcat.
*
  CLEAR ls_fieldcat.
  ls_fieldcat-tabname       = 'IT_OUT'.
  ls_fieldcat-fieldname     = 'LEADID'.
  ls_fieldcat-reptext_ddic   =
    'Lead Nbr.'.
  ls_fieldcat-ddictxt       = 'S'.
  ls_fieldcat-seltext_s     = 'Lead Nbr.'.
  ls_fieldcat-seltext_m     = 'Lead Number'.
  ls_fieldcat-seltext_l     =
    'Lead Number'.
  APPEND ls_fieldcat TO e01_lt_fieldcat.
*
  CLEAR ls_fieldcat.
  ls_fieldcat-tabname       = 'IT_OUT'.
  ls_fieldcat-fieldname     = 'LTYPE'.
  ls_fieldcat-reptext_ddic   =
    'Lead Type'.
  ls_fieldcat-ddictxt       = 'S'.
  ls_fieldcat-seltext_s     = 'Lead Type'.
  ls_fieldcat-seltext_m     = 'Lead Type'.
  ls_fieldcat-seltext_l     =
    'Lead Type'.
  APPEND ls_fieldcat TO e01_lt_fieldcat.
*
  CLEAR ls_fieldcat.
  ls_fieldcat-tabname       = 'IT_OUT'.
  ls_fieldcat-fieldname     = 'STATUS'.
  ls_fieldcat-reptext_ddic   =
    'Status'.
  ls_fieldcat-ddictxt       = 'S'.
  ls_fieldcat-seltext_s     = 'Status'.
  ls_fieldcat-seltext_m     = 'Status'.
  ls_fieldcat-seltext_l     =
    'Status'.
  APPEND ls_fieldcat TO e01_lt_fieldcat.
ENDFORM.          " fieldcat_init

Former Member
0 Kudos

This works for a Custom Control and OO ALV in a Dialog Module



TABLES: kna1.

* Data (for the ALV Grid)
TYPES:
  BEGIN OF t_alv_data,
    cust_id    TYPE kunnr,        "Customer Number
    cust_name  TYPE name1_gp,     "Customer Name
    cust_color TYPE i,
*   cell coloring field
    color     TYPE lvc_t_scol,   "Cell coloring
  END OF t_alv_data.

DATA:
  v_alv_data TYPE t_alv_data,
  i_alv_data TYPE STANDARD TABLE OF t_alv_data.


* ALV grid containers and objects
DATA:
  o_alv_grid TYPE REF TO cl_gui_alv_grid,
  o_alv_cont TYPE REF TO cl_gui_custom_container.


* ALV field catalog
DATA:
  i_alv_fc TYPE lvc_t_fcat,
  v_alv_fc LIKE lvc_s_fcat.


* ALV Layout (colors)
DATA:
  v_alv_layout TYPE lvc_s_layo,
  i_alv_color TYPE lvc_t_scol,
  v_alv_color TYPE lvc_s_scol,
  v_alv_color_cell TYPE lvc_s_colo.


* ALV variant
DATA:
  v_alv_variant  TYPE disvariant.
PARAMETERS:
  p_alvvar TYPE disvariant-variant DEFAULT 'DEFAULT'.

DATA: ok_code LIKE sy-ucomm.

* Class for event handling

*----------------------------------------------------------------------*
*       CLASS lcl_event_receiver DEFINITION
*----------------------------------------------------------------------*
* [+] Event listener for the ALV grid
* [+] Handles hotspots and data changes
*----------------------------------------------------------------------*

CLASS lcl_event_receiver DEFINITION.

  PUBLIC SECTION.

    METHODS:

*     Hotspot clicking
      hotspot_click
           FOR EVENT hotspot_click OF cl_gui_alv_grid
             IMPORTING e_row_id
                       e_column_id
                       es_row_no,

*     Data changed (such as checkbox clicking)
      handle_data_changed
        FOR EVENT data_changed OF cl_gui_alv_grid
            IMPORTING er_data_changed.

ENDCLASS.                    "lcl_event_receiver DEFINITION


*---------------------------------------------------------------------*
*       CLASS lcl_event_receiver IMPLEMENTATION
*---------------------------------------------------------------------*
* [+] Implementation of the ALV Grid event handler class
*---------------------------------------------------------------------*
CLASS lcl_event_receiver IMPLEMENTATION.


*---------------------------------------------------------------------*
*       METHOD hotspot_click                                          *
*---------------------------------------------------------------------*
* [+] Calls evvent_hotspot_click when a hotspot is clicked in the ALV
*---------------------------------------------------------------------*
  METHOD hotspot_click.
    PERFORM event_hotspot_click
                  USING e_row_id
                        e_column_id.
  ENDMETHOD.                    "hotspot_click


*---------------------------------------------------------------------*
*       METHOD handle_data_changed                                    *
*---------------------------------------------------------------------*
* [+] Updates the source data when the data in the ALV display has
* been changed, such as by clicking a checkbox.
*---------------------------------------------------------------------*
  METHOD handle_data_changed.

    DATA: lv_changed TYPE lvc_s_modi.

    LOOP AT er_data_changed->mt_good_cells INTO lv_changed
      WHERE fieldname = 'CUST_NAME'.

      READ TABLE i_alv_data INTO v_alv_data INDEX lv_changed-row_id.

      IF sy-subrc = 0.
        MOVE lv_changed-value TO v_alv_data-cust_name.
        MODIFY i_alv_data FROM v_alv_data INDEX lv_changed-row_id.
      ENDIF.

    ENDLOOP.

  ENDMETHOD.                    "handle_data_changed

ENDCLASS.                    "lcl_event_receiver IMPLEMENTATION


* Reference to the event listener class
DATA: event_receiver TYPE REF TO lcl_event_receiver.

*---------------------------------------------------------------------*
*       FORM build_event_listener
*---------------------------------------------------------------------*
* [+] Set the event handler on the ALV Grid
*---------------------------------------------------------------------*
FORM build_event_listener.

* Assigning the event listener to the ALV
  CREATE OBJECT event_receiver.

  SET HANDLER event_receiver->handle_data_changed FOR o_alv_grid.
  SET HANDLER event_receiver->hotspot_click       FOR o_alv_grid.

ENDFORM.                    "build_event_listener


*---------------------------------------------------------------------*
*       AT SELECTION-SCREEN
*         ON VALUE-REQUEST FOR p_alvvar
*---------------------------------------------------------------------*
* [+] Calls choose_alv_variant to ask the user to select an alv grid
*     layout variant
*---------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_alvvar.
  PERFORM choose_alv_variant
    CHANGING
      p_alvvar
      v_alv_variant.


*---------------------------------------------------------------------*
*       START_OF_SELECTION
*---------------------------------------------------------------------*
START-OF-SELECTION.

  PERFORM get_data.

  SET PF-STATUS 'ALVSCREEN' IMMEDIATELY.

  CALL SCREEN 2000.


*---------------------------------------------------------------------*
*       FORM get_data
*---------------------------------------------------------------------*
* [+] Gets the data for the ALV grid
*---------------------------------------------------------------------*
FORM get_data.

  SELECT kunnr name1
    INTO (v_alv_data-cust_id,
          v_alv_data-cust_name)
    FROM kna1.

    APPEND v_alv_data TO i_alv_data.

  ENDSELECT.

ENDFORM.                    "get_data


*---------------------------------------------------------------------*
*       MODULE build_alv_grid
*---------------------------------------------------------------------*
*
*   THIS SHOULD BE IN THE "PROCESS BEFORE OUTPUT" OF THE ALV SCREEN
*
* [+] Builds the ALV Grid objects
* [+] Calls to build the field catalog table
* [+] Loads the field catalog table into the ALV Grid
* [+] Loads the table data into the ALV Grid
*---------------------------------------------------------------------*
MODULE build_alv_grid OUTPUT.

  SET TITLEBAR  '2000'.

* Also enables layout saving
  PERFORM set_alv_variant
    USING
      p_alvvar
    CHANGING
      v_alv_variant.


* Building the grid and container on the screen
* NOTE: the container name MUST be upper-case
* Also, we don't want the objects to be created if in batch mode!
  IF sy-batch IS INITIAL.
    CREATE OBJECT o_alv_cont
      EXPORTING
        container_name = 'O_ALV_TABLE'.
  ENDIF.

  CREATE OBJECT o_alv_grid
    EXPORTING
      i_parent = o_alv_cont.


* builds the event listener
  PERFORM build_event_listener.


* Color the cells
  PERFORM color_cells.


* Build the field catalog
  PERFORM build_alv_fc.


* Loads the data into the grid
  CALL METHOD o_alv_grid->set_table_for_first_display
    EXPORTING
      i_save          = 'A'
      i_default       = 'X'
      is_variant      = v_alv_variant
      is_layout       = v_alv_layout
    CHANGING
      it_outtab       = i_alv_data
      it_fieldcatalog = i_alv_fc.


ENDMODULE.                    "build_alv_grid OUTPUT


*---------------------------------------------------------------------*
*       FORM build_alv_fc
*---------------------------------------------------------------------*
* [+] Constructs the ALV Grid field catalog table
*---------------------------------------------------------------------*
FORM build_alv_fc.

  CLEAR i_alv_fc.
  REFRESH i_alv_fc.

* NOTE: the field name MUST be upper-case

*                   field       heading         hide  hot
*                   name                        zero  spot  just
  PERFORM:
    alv_field USING 'CUST_ID'    'Cust ID'        ' '  'X'  'R',
    alv_field USING 'CUST_NAME'  'Customer Name'  ' '  ' '  'L',
    alv_field USING 'CUST_COLOR' 'Color'          ' '  ' '  'R'.

ENDFORM.                    "build_alv_fc


*---------------------------------------------------------------------*
*       FORM alv_field
*---------------------------------------------------------------------*
* [+] Describes and constructs a single field for the ALV Grid field
*     catalog. The field length and type are both obtained from the
*     actual field passed in to this method.
* [+] Adds the constructed field to the ALV Grid field catalog table
*---------------------------------------------------------------------*
FORM alv_field
  USING
    p_field_name TYPE c
    p_heading    TYPE c
    p_hide_zeros TYPE c
    p_hotspot    TYPE c
    p_justify    TYPE c.

  CLEAR v_alv_fc.

  DATA:
    lv_type(1) TYPE c,
    lv_length TYPE i,
    lv_heading_length TYPE i.

* get the type and length of this field
  FIELD-SYMBOLS <field>.
  ASSIGN p_field_name TO <field>.

  DESCRIBE FIELD <field> TYPE lv_type OUTPUT-LENGTH lv_length.

* re-adjust the length to the length of the header, if too short
  lv_heading_length = strlen( p_heading ).

  IF lv_length < lv_heading_length.
    lv_length = lv_heading_length.
  ENDIF.

* NOTE: the field name MUST be upper-case
  v_alv_fc-fieldname = p_field_name.
  TRANSLATE v_alv_fc-fieldname TO UPPER CASE.

  v_alv_fc-inttype   = lv_type.
  v_alv_fc-outputlen = lv_length.
  v_alv_fc-coltext   = p_heading.
  v_alv_fc-seltext   = p_heading.
  v_alv_fc-hotspot   = p_hotspot.

* Determining which fields should show zeros
  IF p_hide_zeros = 'X'.
    v_alv_fc-no_zero = 'X'.
    v_alv_fc-lzero   = ' '.
  ELSE.
    v_alv_fc-no_zero = ' '.
    v_alv_fc-lzero   = 'X'.
  ENDIF.

  v_alv_fc-just = p_justify.

* Add the field to the field catalog
  APPEND v_alv_fc TO i_alv_fc.

ENDFORM.                    "alv_field


*---------------------------------------------------------------------*
*       FORM choose_alv_variant
*---------------------------------------------------------------------*
* [+] Shows a popup that allows the user to choose the layout variant
*     for the alv grid of the current program
* [+] Usually called by an AT SELECTION-SCREEN method.
*---------------------------------------------------------------------*
FORM choose_alv_variant
  CHANGING
    p_variant_name TYPE disvariant-variant
    p_variant      TYPE disvariant.

  CLEAR p_variant.

  DATA:
    p_exit_check(1) TYPE c.

  MOVE sy-repid TO p_variant-report.

  CALL FUNCTION 'LVC_VARIANT_F4'
       EXPORTING
            is_variant = p_variant
            i_save     = 'A'
       IMPORTING
            e_exit     = p_exit_check
            es_variant = p_variant
       EXCEPTIONS
            not_found  = 1
            OTHERS     = 99.

  IF sy-subrc = 0.
    IF p_exit_check <> 'X'.
      p_variant_name = p_variant-variant.
    ENDIF.
  ENDIF.

ENDFORM.                    "choose_alv_variant


*---------------------------------------------------------------------*
*       FORM set_alv_variant
*---------------------------------------------------------------------*
* [+] Sets the alv grid layout variant. Used for setting the variant
*     when its name is entered in a parameter rather than by using the
*     popup, or when loading the variant from a variable of type C
*---------------------------------------------------------------------*
FORM set_alv_variant
  USING
    p_variant_name TYPE disvariant-variant
  CHANGING
    p_variant      TYPE disvariant.

  MOVE sy-repid TO p_variant-report.
  p_variant-variant = p_variant_name.

ENDFORM.                    "set_alv_variant


*---------------------------------------------------------------------*
*       FORM color_cells
*---------------------------------------------------------------------*
* [+] Loop through the data and apply coloring
*---------------------------------------------------------------------*
FORM color_cells.
  DATA:
    my_color  TYPE i.
* tell the ALV grid what field in v_alv_data contains color information
  v_alv_layout-ctab_fname = 'COLOR'.

  my_color = 0.

* loop through each row of the table
  LOOP AT i_alv_data INTO v_alv_data.

*   clear the variables
    CLEAR:
      v_alv_color,
      v_alv_color_cell,
      i_alv_color.

    REFRESH:
      i_alv_color.

    v_alv_data-cust_color = my_color.

    PERFORM color_cell USING 'CUST_COLOR' my_color. "negative

*   apply the colors
*    IF v_alv_data-cust_name = 'Testing Credit'.
*      PERFORM color_cell USING 'CUST_NAME' 6. "negative
*    ELSEIF v_alv_data-cust_name = 'Goober Goober Also'.
*      PERFORM color_cell USING 'CUST_NAME' 5. "positive
*    ENDIF.

*   set the color data for this table row
    v_alv_data-color = i_alv_color.
    MODIFY i_alv_data FROM v_alv_data.

    my_color = my_color + 1.
    IF my_color GT 7.
      CLEAR my_color.
    ENDIF.
  ENDLOOP.

ENDFORM.                    "color_cells


*---------------------------------------------------------------------*
*       FORM color_cell
*---------------------------------------------------------------------*
* [+] Colors a cell in the ALV grid
*---------------------------------------------------------------------*
FORM color_cell
  USING
    p_cellname TYPE c
    p_color    TYPE i.

  CLEAR:
    v_alv_color_cell,
    v_alv_color.

* set the color for the cell
*  IF p_color = 0.
*    v_alv_color_cell-col = 0. "cl_gui_resources=>list_col_background.
*  ELSEIF p_color = 1.
*    v_alv_color_cell-col = 1. "cl_gui_resources=>list_col_heading.
*  ELSEIF p_color = 2.
*    v_alv_color_cell-col = 2. "cl_gui_resources=>list_col_normal.
*  ELSEIF p_color = 3.
*    v_alv_color_cell-col = 3. "cl_gui_resources=>list_col_total.
*  ELSEIF p_color = 4.
*    v_alv_color_cell-col = 4. "cl_gui_resources=>list_col_key.
*  ELSEIF p_color = 5.
*    v_alv_color_cell-col = 5. "cl_gui_resources=>list_col_positive.
*  ELSEIF p_color = 6.
*    v_alv_color_cell-col = 6. "cl_gui_resources=>list_col_negative.
*  ELSEIF p_color = 7.
*    v_alv_color_cell-col = 7. "cl_gui_resources=>list_col_group.
*  ENDIF.

  v_alv_color_cell-col = p_color.

  v_alv_color-nokeycol = 'X'.
  v_alv_color-fname = p_cellname.
*  v_alv_color-color = p_color.
  v_alv_color-color = v_alv_color_cell.
  APPEND v_alv_color TO i_alv_color.

ENDFORM.                    "color_cell



*---------------------------------------------------------------------*
*       FORM event_hotspot_click
*---------------------------------------------------------------------*
* [+] What to do when clicking on a hotspot in the ALV Grid
*---------------------------------------------------------------------*
FORM event_hotspot_click
  USING
    p_row    TYPE lvc_s_row
    p_column TYPE lvc_s_col.

  DATA:
    lv_docnum TYPE kunnr.

  READ TABLE i_alv_data INTO v_alv_data INDEX p_row-index.

  IF p_column = 'CUST_ID'.
*   call a transaction when the cust_id is clicked
    SET PARAMETER ID 'AUN' FIELD v_alv_data-cust_id.
    CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
  ENDIF.

ENDFORM.                    "event_hotspot_click
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_2000  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_2000 INPUT.
  CASE ok_code.
    WHEN 'BACK'
      OR 'STOP'
      OR 'CANCEL'.
      LEAVE TO SCREEN 0.
  ENDCASE.
ENDMODULE.                 " USER_COMMAND_2000  INPUT