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: 

Transpose ABAP ALV

Former Member
0 Kudos
1,203

Hi Gurus/Experts,

I have a question and a problem, but I think this problem will bring me to be better,

I have a request from my client, that my client want a report of cash flow projection but with transposed table.

Example :

No.      Name          Address      Etc.

(His request)

No

Name

Address

Etc.


Do someone know how to transpose the abap alv ? please tell me if you know about this.

1 ACCEPTED SOLUTION

former_member184569
Active Contributor
0 Kudos
237

Use field symbols and dynamic table creation to do it.

Refer this doc.

10 REPLIES 10

Former Member
0 Kudos
237

Hi Ri,

I am just asking for an extra clarification here.

if my table contains 2 recrords like below,

1      bhaskar     india     one

2      ri               aus      two

then he wants it to be displayed like below ?

1

bhaskar

india

one

2

ri

aus

two

correct ?

Regards,

Bhaskar


0 Kudos
237

Hi bhaskar,

the right one is the first,

former_member184569
Active Contributor
0 Kudos
238

Use field symbols and dynamic table creation to do it.

Refer this doc.

0 Kudos
237

Hi Susmitha,

I have read your document but can you explain to me where is the part to make the alv become transposed ?? because in your document I just see how to create the dynamic internal table

0 Kudos
237

Yes, the process starts with input data table that you are using in your ALV. eg gt_outtab. (I am not bothered about the first ALV, just taking that input table to begin with)

From this gt_outtab, create the transpose table gt_outtab_tp using the program I have given. It involves, creating the field catalog, creating the dynamic table from field catalog and populating.

Then finally display the ALV using this field catalog and the dynamic table. That forms the last part of the document.

Else there is a sample code available on the net on the same topic. Search with the title Simple ALV report with its output transposed (rows as columns and columns as rows) in Google, you will get the code.

0 Kudos
237

Hi Sus,

did you mean we will need the dynamic internal table to do the transpose?

0 Kudos
237

Hi Sus,

Just an DescriptionDate 1Date 2Date 3Date 4Date 5Date 6until Date 31
Vendor
Etc
etc
etc

can we make like this ? if can please guide me I need it T_T

Former Member
0 Kudos
237

hi,

You just try this.

TYPE-POOLS: slis.

*Declarations for ALV, dynamic table and col no for transpose
DATA: l_col TYPE sy-tabix,
  l_structure TYPE REF TO data,
  l_dyntable TYPE REF TO data,
  wa_lvc_cat TYPE lvc_s_fcat,
  lt_lvc_cat TYPE lvc_t_fcat,
  lt_fieldcatalogue TYPE slis_t_fieldcat_alv,
  wa_fieldcat TYPE slis_fieldcat_alv,
  lt_fieldcat TYPE slis_t_fieldcat_alv,
  lt_layout TYPE slis_layout_alv.

*Field symbols declarations
FIELD-SYMBOLS :
  <header> TYPE ANY,
  <dynheader> TYPE ANY,
  <dyndata> TYPE ANY,
  <ls_table> TYPE ANY,
  <dynamictable> TYPE STANDARD TABLE,
  <it_table> TYPE STANDARD TABLE.

*Input the name of the table
PARAMETERS p_table TYPE dd02l-tabname OBLIGATORY.

*Initialization event
INITIALIZATION.

*Start of selection event
START-OF-SELECTION.

* Create internal table of dynamic type
  CREATE DATA l_dyntable TYPE STANDARD TABLE OF (p_table)
  WITH NON-UNIQUE DEFAULT KEY.
  ASSIGN l_dyntable->* TO <it_table>.

*select statement to select data from the table as input into
*our dynamic internal table.
*Here i have restricted only till 5 rows.
*You can set a variable and give no of rows to be fetched
*The variable can be set in your select statement

  SELECT * INTO CORRESPONDING FIELDS OF TABLE <it_table>
  FROM (p_table) up to 5 rows.

*Fieldcatalogue definitions
  wa_lvc_cat-fieldname = 'COLUMNTEXT'.
  wa_lvc_cat-ref_table = 'LVC_S_DETA'.
  APPEND wa_lvc_cat TO lt_lvc_cat.

  wa_fieldcat-fieldname = 'COLUMNTEXT'.
  wa_fieldcat-ref_tabname = 'LVC_S_DETA'.
  wa_fieldcat-key = 'X'..
  APPEND wa_fieldcat TO lt_fieldcat.

  DESCRIBE TABLE <it_table>.

  DO sy-tfill TIMES.
* For each line, a column 'VALUEx' is created in the fieldcatalog
* Build Fieldcatalog
  WRITE sy-index TO wa_lvc_cat-fieldname LEFT-JUSTIFIED.
  CONCATENATE 'VALUE' wa_lvc_cat-fieldname
  INTO wa_lvc_cat-fieldname.
  wa_lvc_cat-ref_field = 'VALUE'.
  wa_lvc_cat-ref_table = 'LVC_S_DETA'.
  APPEND wa_lvc_cat TO lt_lvc_cat.
* Build Fieldcatalog
  CLEAR wa_fieldcat.
  wa_fieldcat-fieldname = wa_lvc_cat-fieldname.
  wa_fieldcat-ref_fieldname = 'VALUE'.
  wa_fieldcat-ref_tabname = 'LVC_S_DETA'.
  APPEND wa_fieldcat TO lt_fieldcat.
  ENDDO.

* Create dynamic internal table
  CALL METHOD cl_alv_table_create=>create_dynamic_table
  EXPORTING
  it_fieldcatalog = lt_lvc_cat
  IMPORTING
  ep_table = l_dyntable.

  ASSIGN l_dyntable->* TO <dynamictable>.

* Create structure as structure of the internal table
  CREATE DATA l_structure LIKE LINE OF <dynamictable>.
  ASSIGN l_structure->* TO <header>.

* Create structure = structure of the internal table
  CREATE DATA l_structure LIKE LINE OF <it_table>.
  ASSIGN l_structure->* TO <ls_table>.

* Create field catalog from our table structure
  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
  EXPORTING
  i_structure_name = p_table
  CHANGING
  ct_fieldcat = lt_fieldcatalogue
  EXCEPTIONS
  inconsistent_interface = 1
  program_error = 2
  OTHERS = 3.
  IF sy-subrc <> 0.
  MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
  WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

  DESCRIBE TABLE lt_fieldcatalogue.

* Fill the internal to display <dynamictable>
  DO sy-tfill TIMES.
  IF sy-index = 1.
  READ TABLE lt_fieldcatalogue INTO wa_fieldcat INDEX 1.
  ENDIF.
* For each field of it_table
  ASSIGN COMPONENT 1 OF STRUCTURE <header> TO <dynheader>.
  IF sy-subrc NE 0. EXIT .ENDIF.
  READ TABLE lt_fieldcatalogue INTO wa_fieldcat INDEX sy-index.
* Fill 1st column
  <dynheader> = wa_fieldcat-seltext_m.
  IF <dynheader> IS INITIAL.
  <dynheader> = wa_fieldcat-fieldname.
  ENDIF.

*Filling the other columns
  LOOP AT <it_table> INTO <ls_table>.
  l_col = sy-tabix + 1.
  ASSIGN COMPONENT sy-index OF STRUCTURE <ls_table> TO <dyndata>.
  IF sy-subrc NE 0. EXIT .ENDIF.
  ASSIGN COMPONENT l_col OF STRUCTURE <header> TO
<dynheader>.
  IF sy-subrc NE 0. EXIT .ENDIF.
  WRITE <dyndata> TO <dynheader> LEFT-JUSTIFIED.
  ENDLOOP.
  APPEND <header> TO <dynamictable>.
  ENDDO.

*Layout for ALV output
  lt_layout-zebra = 'X'.
  lt_layout-no_colhead = 'X'..
  lt_layout-colwidth_optimize ='X'.
  lt_layout-window_titlebar = 'ALV GRID TRANSPOSED'.

*ALV Grid output for display
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
  EXPORTING
  is_layout = lt_layout
  it_fieldcat = lt_fieldcat
  TABLES
  t_outtab = <dynamictable>.


Regards,

gopi.

0 Kudos
237

Hi Gopi,

it was from sap technical right ?

Can you explain me where is the part to make the alv become transposed?

Former Member
0 Kudos
237

hi Ri,

s its from sap technical only. here oly transpose occurs. you just put your debugger and check. the values is stored in header and move to dynamic table every field ll placed in row wise.

LOOP AT <it_table> INTO <ls_table>.
       l_col = sy-tabix + 1.
       ASSIGN COMPONENT sy-index OF STRUCTURE <ls_table> TO <dyndata>.
       IF sy-subrc NE 0. EXIT .ENDIF.
       ASSIGN COMPONENT l_col OF STRUCTURE <header> TO
<dynheader>.
       IF sy-subrc NE 0. EXIT .ENDIF.
       WRITE <dyndata> TO <dynheader> LEFT-JUSTIFIED.
     ENDLOOP.
     APPEND <header> TO <dynamictable>.
   ENDDO.

Regards,

gopi