2012 Mar 05 3:52 AM
Hi ,
I want to transpose the ALV output. For this i have coded like below, but there is no output displaying.Please check the below code & advise me where to write our own fielcatalog & how to write the fieldcatogue.
TABLES:EKKO,EKPO.
TYPE-POOLS: SLIS.
TYPES:BEGIN OF PH_TY,
PH_EBELN LIKE EKKO-EBELN,
PH_AEDAT LIKE EKKO-AEDAT,
PH_LIFNR LIKE EKKO-LIFNR,
PH_SUBMI LIKE EKKO-SUBMI,
PH_EKORG LIKE EKKO-EKORG,
END OF PH_TY.
DATA: PH_ITAB TYPE STANDARD TABLE OF PH_TY.
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 : <HEADER> TYPE ANY,
<DYNHEADER> TYPE ANY,
<DYNDATA> TYPE ANY,
<LS_TABLE> TYPE ANY,
<DYNAMICTABLE> TYPE STANDARD TABLE,
<IT_TABLE> TYPE STANDARD TABLE.
SELECTION-SCREEN:BEGIN OF BLOCK B1.
SELECT-OPTIONS:P_EBELN FOR EKKO-EBELN,
P_LIFNR FOR EKKO-LIFNR,
P_MATNR FOR EKPO-MATNR.
SELECTION-SCREEN END OF BLOCK B1.
INITIALIZATION.
START-OF-SELECTION.
CREATE DATA L_DYNTABLE TYPE STANDARD TABLE OF PH_TY WITH NON-UNIQUE DEFAULT KEY.
ASSIGN L_DYNTABLE->* TO <IT_TABLE>.
SELECT EBELN AEDAT LIFNR SUBMI EKORG FROM EKKO
INTO TABLE <IT_TABLE> WHERE EBELN IN P_EBELN
AND LIFNR IN P_LIFNR.
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.
* WA_FIELDCAT-TABNAME = 'IT_TABLE'.
* WA_FIELDCAT-FIELDNAME = 'PH_EBELN'.
* WA_FIELDCAT-SELTEXT_M = 'PO'.
* APPEND WA_FIELDCAT TO LT_FIELDCAT.
* CLEAR WA_FIELDCAT.
DESCRIBE TABLE <IT_TABLE>.
DO
SY-TFILL TIMES.
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.
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.
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 DATA L_STRUCTURE LIKE LINE OF <DYNAMICTABLE>.
ASSIGN L_STRUCTURE->* TO <HEADER>.
CREATE DATA L_STRUCTURE LIKE LINE OF <IT_TABLE>.
ASSIGN L_STRUCTURE->* TO <LS_TABLE>.
DESCRIBE TABLE LT_FIELDCATALOGUE.
DO SY-TFILL TIMES.
IF SY-INDEX = 1.
READ TABLE LT_FIELDCATALOGUE INTO WA_FIELDCAT INDEX 1.
ENDIF.
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.
<DYNHEADER> = WA_FIELDCAT-SELTEXT_M.
IF <DYNHEADER> IS INITIAL.
<DYNHEADER> = WA_FIELDCAT-FIELDNAME.
ENDIF.
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.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
IS_LAYOUT = LT_LAYOUT
IT_FIELDCAT = LT_FIELDCAT
TABLES
T_OUTTAB = <DYNAMICTABLE>.
2012 Mar 05 7:34 AM
Hi,
Please go thorugh the below sample code , Commenting is done for your easy understanding.
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,
Arun