Application Development and Automation 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: 
Read only

How to add multiple column header using factory model alv grid display?

0 Likes
7,996

I want to add multiple column headers for the same field. I am using Factory model alv to display the output. Please refer the attached screen shot to get a better understanding of the requirement.

.

I am getting the following output

the code i've used is as follows:-

  FORM display_data .
  DATA : lt_salv_table            TYPE REF TO cl_salv_table,
        lt_salv_functions_list  TYPE REF TO cl_salv_functions_list,
        lt_salv_form_layout_grid TYPE REF TO cl_salv_form_layout_grid,
        lt_grid_obj              TYPE REF TO cl_salv_form_layout_grid,
        lt_salv_column          TYPE REF TO cl_salv_column,
        lt_salv_columns          TYPE REF TO cl_salv_columns,
        lt_salv_columns_table    TYPE REF TO cl_salv_columns_table,
        lt_salv_column_table    TYPE REF TO cl_salv_column_table,
        lt_salv_aggregations    TYPE REF TO cl_salv_aggregations,
        lt_salv_aggregation      TYPE REF TO cl_salv_aggregation,
        lt_grid_fobj            TYPE REF TO cl_salv_form_layout_grid,
        lt_text                  TYPE REF TO cl_salv_form_text,
        lt_salv_wd_column_header TYPE REF TO cl_salv_wd_column_header.

  DATA : lt_footer_obj TYPE REF TO cl_salv_form_layout_grid,
        lt_grid      TYPE REF TO cl_salv_form_layout_grid.

  DATA : lv_month TYPE t247-ltx,
        lv_mon_h TYPE string.

***Setting Report Heading
  DEFINE header.
    call method lt_grid_obj->create_label
      exporting
        row    = &1
        column = &2
        text  = &3.
  END-OF-DEFINITION.

***Macro to change column heading
  DEFINE set_cl_hd.
    try.
        lt_salv_column = lt_salv_columns->get_column( &1 ).
        lt_salv_column->set_short_text( &2 ).
        lt_salv_column->set_medium_text( &3 ).
        lt_salv_column->set_long_text( &4 ).
        lt_salv_column->set_optimized( ).
      catch cx_salv_not_found.
        message i158 with text-026. "'Output Failed'.
    endtry.
  END-OF-DEFINITION.

***Calling Factory method
  TRY.
      CALL METHOD cl_salv_table=>factory
        IMPORTING
          r_salv_table = lt_salv_table
        CHANGING
          t_table      = gt_final_d.
    CATCH cx_salv_msg .
      MESSAGE i158 WITH text-003. "Output Failed.
  ENDTRY.


***Standard Toolbar
  CALL METHOD lt_salv_table->get_functions
    RECEIVING
      value = lt_salv_functions_list.

  CALL METHOD lt_salv_functions_list->set_all
    EXPORTING
      value = if_salv_c_bool_sap=>true.

***Setting Report Heading
  CREATE OBJECT lt_salv_form_layout_grid.

  lt_grid_obj = lt_salv_form_layout_grid->create_grid( row = 4
                                          column = 5
                                          colspan = 8 ).

  header 1 40 text-004.
  header 2 05 text-005.

  header 3 text-006.


  CALL METHOD lt_salv_table->set_top_of_list
    EXPORTING
      value = lt_grid_obj.

***Getting column values
  CALL METHOD lt_salv_table->get_columns
    RECEIVING
      value = lt_salv_columns.

***Calling Macro to change Column headers
  set_cl_hd 'DATE'      text-008 text-008 text-009 .
  set_cl_hd 'LFIMG_500' text-010 text-010 text-011 .
  set_cl_hd 'LFIMG_1'  text-012 text-012 text-013 .
  set_cl_hd 'LFIMG_2'  text-014 text-014 text-015 .
  set_cl_hd 'LFIMG_3'  text-016 text-016 text-017 .
  set_cl_hd 'LFIMG_5'  text-018 text-018 text-019 .
  set_cl_hd 'LFIMG_T'  text-020 text-020 text-021 .
  set_cl_hd 'QUOTA_AL'  text-022 text-022 text-023 .
  set_cl_hd 'QUOTA_P'  text-024 text-024 text-025 .

***Create an instance of Footer objects
  CREATE OBJECT lt_footer_obj
    EXPORTING
      columns = 1.

***Create a Grid with 5 rows and 3 columns
  CALL METHOD lt_footer_obj->create_grid
    EXPORTING
      row    = 5
      column  = 3
    RECEIVING
      r_value = lt_grid.

***Footer Macro
  DEFINE footer.
    lt_text = lt_grid->create_text(
        row    = &1
        column  = &2
        text    = &3 ).
  END-OF-DEFINITION.

  DATA : lv_total TYPE char10,
        lv_tot TYPE char12,
        lv_sub TYPE i,
        lv_f_mon TYPE string,
        lv_mon_number TYPE sy-datum.

  lv_tot = gs_final-lfimg_t.

  SHIFT lv_tot LEFT DELETING LEADING space.

  CONCATENATE '(' lv_tot ')' INTO lv_total.

  SHIFT lv_total LEFT DELETING LEADING space.


  lv_sub = pa_quota - gs_final-lfimg_t.

  footer 1 85 lv_f_mon.
  footer 1 87 pa_quota .
  footer 2 85 'Total Delivery'.
  footer 2 87 lv_total.
  footer 3 87 '___________'.
  footer 4 87 lv_sub.
  footer 5 87 '___________'.


  CALL METHOD lt_salv_table->set_end_of_list
    EXPORTING
      value = lt_footer_obj.

***Display
  CALL METHOD lt_salv_table->display.



ENDFORM.                    "DISPLAY_DATA

6 REPLIES 6
Read only

Former Member
0 Likes
4,062

You can get the solution in this thread.

http://scn.sap.com/thread/1588852

Read only

0 Likes
4,062

at least an interesting approach. But be aware that you will not be able to create exactly what you want. And you could only use fixed-width-columns, any manual change i.e. by mouse-dragging will not be synchronized between artificial second header on top of alv standard one-line-header.

Dig you get a result? Please post screenshot.

Regards

Clemens

Read only

0 Likes
4,062

Hello Sushmitha,

Thank you.

But the thread speaks about adding header to the report. I had asked for adding multiple headers for each column(highlighted portion in screen shot). I had to get the output using ALV list display.

Regards,

Anish

Read only

former_member209120
Active Contributor
0 Likes
4,062

Hi Anish balachandran,

Use REUSE_ALV_LIST_DISPLAY for getting two headers,

see this link..

http://scn.sap.com/thread/3159254

TYPE-POOLS: slis, icon.

DATA: it_fieldcat  TYPE  slis_fieldcat_alv.
DATA: t_alv_fieldcat      TYPE slis_t_fieldcat_alv WITH HEADER LINE,
       alv_layout TYPE slis_layout_alv .


DATA : it_fld TYPE slis_t_fieldcat_alv,
        it_evt TYPE slis_t_event,
        wa_fld TYPE slis_fieldcat_alv,
        wa_evt TYPE slis_alv_event,
        wa_lay TYPE slis_layout_alv.

DATA: BEGIN OF itab OCCURS 0,
       carrid LIKE sflight-carrid,
       connid LIKE sflight-connid,
       planetype LIKE sflight-planetype,
       seatsmax LIKE sflight-seatsmax,
       END OF itab.

START-OF-SELECTION.

   SELECT carrid connid planetype seatsmax
           FROM sflight
           INTO TABLE itab.

   CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
     IMPORTING
       et_events = it_evt.

   READ TABLE it_evt INTO wa_evt
        WITH KEY name = slis_ev_after_line_output .
                 wa_evt-form = slis_ev_after_line_output .

   MODIFY it_evt FROM wa_evt INDEX sy-tabix .

   READ TABLE it_evt INTO wa_evt
        WITH KEY name = slis_ev_top_of_page .
   wa_evt-form = slis_ev_top_of_page .
   MODIFY it_evt FROM wa_evt INDEX sy-tabix .

   CLEAR: it_fieldcat.
   it_fieldcat-tabname       = 'ITAB'.
   it_fieldcat-fieldname     = 'CARRID'.
   it_fieldcat-ref_tabname   = 'SFLIGHT'.
   it_fieldcat-outputlen     = '10'.
   APPEND it_fieldcat TO t_alv_fieldcat.
   CLEAR it_fieldcat.

   CLEAR: it_fieldcat.
   it_fieldcat-tabname       = 'ITAB'.
   it_fieldcat-fieldname     = 'CONNID'.
   it_fieldcat-ref_tabname   = 'SFLIGHT'.
   it_fieldcat-outputlen     = '10'.
   APPEND it_fieldcat TO t_alv_fieldcat.
   CLEAR it_fieldcat.

   CLEAR: it_fieldcat.
   it_fieldcat-tabname       = 'ITAB'.
   it_fieldcat-fieldname     = 'PLANETYPE'.
   it_fieldcat-ref_tabname   = 'SFLIGHT'.
   it_fieldcat-outputlen     = '10'.
   APPEND it_fieldcat TO t_alv_fieldcat.
   CLEAR it_fieldcat.

   CLEAR: it_fieldcat.
   it_fieldcat-tabname       = 'ITAB'.
   it_fieldcat-fieldname     = 'SEATSMAX'.
   it_fieldcat-ref_tabname   = 'SFLIGHT'.
   it_fieldcat-outputlen     = '10'.
   APPEND it_fieldcat TO t_alv_fieldcat.
   CLEAR it_fieldcat.

   alv_layout-no_colhead = 'X' .

   CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
     EXPORTING
       is_layout          = alv_layout
       i_bypassing_buffer = 'X'
       i_callback_program = sy-repid
       it_fieldcat        = t_alv_fieldcat[]
       it_events          = it_evt
       i_save             = 'A'
     TABLES
       t_outtab           = itab. "internal table

   IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
   ENDIF.

*&---------------------------------------------------------------------*
*&      Form  top_of_page
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM top_of_page .

   ULINE AT 1(45) .

   FORMAT COLOR 7 .

   WRITE: / sy-vline , 02 'HEADER 1',
   23 sy-vline, 25 'HEADER 2', 45 sy-vline.

   WRITE: / sy-vline , 02 'CARRID' ,12 sy-vline, 14 'CONNID',
   23 sy-vline, 25 'PLANE ', 34 sy-vline, 36 'SEATS MAX', 45 sy-vline.

ENDFORM.                    "top_of_page

Output


Read only

former_member209120
Active Contributor
0 Likes
4,062

Hi anish,

Your Problem Solved or not?

Read only

0 Likes
4,062

Hi Ramesh,

Thank you for the help rendered.

I had asked for a way to achieve the output using Factory model ALV.

But I had to use reuse_alv_list_display FM to get the output. Your reply was really helpful.

Regards,

Anish