I want to transpose my internal table rows into column and i want to fix the first column,i am trying to do it with the following code but i am not getting the expected result....it is not converting all the rows into columns
*Types Declaration
Types: BEGIN OF ty_t001w,
ekorg TYPE t001w-ekorg,
werks TYPE t001w-werks,
name1 TYPE t001w-name1,
END OF ty_t001w.
**Field Symbols Declaration
FIELD-SYMBOLS: <fs1> TYPE any,
<fs2> TYPE any.
**Internal table and work area declaration
DATA: it1_col_row TYPE STANDARD TABLE OF ty_t001w,
wa1_col_row TYPE ty_t001w,
it2_col_row TYPE STANDARD TABLE OF ty_t001w,
wa2_col_row TYPE ty_t001w,
cline TYPE sy-tabix.
**Filling internal table with data
Select *
from t001w into corresponding fields of table it1_col_row
where ekorg = p_ekorg
and fabkl = p_fabkl.
**Looping Internal table to display data
LOOP AT it1_col_row INTO wa1_col_row.
WRITE: / wa1_col_row-ekorg, wa1_col_row-werks,wa1_col_row-name1.
ENDLOOP.
WRITE: /.
**Looping internal table to change rows into columns
LOOP AT it1_col_row INTO wa1_col_row.
CLEAR wa2_col_row.
ASSIGN COMPONENT sy-tabix OF STRUCTURE wa2_col_row TO <fs1>.
cline = sy-tabix.
DO.
ASSIGN COMPONENT sy-index OF STRUCTURE wa1_col_row TO <fs2>.
IF sy-subrc NE 0.
EXIT.
ENDIF.
IF cline = 1.
<fs1> = <fs2>.
APPEND wa2_col_row TO it2_col_row.
ELSE.
READ TABLE it2_col_row INTO wa2_col_row INDEX sy-index.
<fs1> = <fs2>.
MODIFY it2_col_row FROM wa2_col_row INDEX sy-index.
ENDIF.
ENDDO.
ENDLOOP.
*
**Looping internal table to display
LOOP AT it2_col_row INTO wa2_col_row.
WRITE: / wa2_col_row-ekorg,wa2_col_row-werks, wa2_col_row-name1.
ENDLOOP.
Notice that the field types of your
ty_t001w
have different length:ekorg TYPE t001w-ekorg
hasCHAR 4
werks TYPE t001w-werks
has alsoCHAR 4
, butname1 TYPE t001w-name1
hasCHAR 30
You are using this same type
ty_t001w
for your source table (it1_col_row
) as well as your target table (it2_col_row
). So when you are mapping your source rows table to the target columns table then the 30 character fieldname1
is mapped to the 4 character fieldekorg
. When I executed your program in my system I had the following output (dependent on the contents of my DB tablet001w
):At first glance this looks like "it is not converting all the rows into columns". But in the debugger I noticed that "Werk 0001" is actually one value, not two! However the value is truncated to only "Werk" because it is mapped from a 30 character field to the 4 character field. This happens to the bottom value of column 1 ("Werk 0002") and 2 ("Werk 0003"). The bottom value of column 3 ("Werk RAD1") is mapped correctly because here it's mapped from the 30 character field to the 30 character field.
To correct this issue I have created an extra
TYPES
definitionty_t001w_col
for the target tableit2_col_row
. In thisTYPE
all fields have the maximum length of 30 characters ensuring no truncation may occur (see abap code below). It generates the following output:The corrected report: