Hi Experts,
I have a scenario i have made a query according to the coding of transposing my report from column to raw but when i execute the transaction it throws an error of shot dump .. Can any one guide me how to remove this error.
*&---------------------------------------------------------------------*
*& Purpose : Utility to transpose Internal Table -
*& Row to Column and Column to Row
*& Author : Naimesh Patel
*& URL : http://zevolving.com/?p=2463
*&---------------------------------------------------------------------*
*
INTERFACE zif_transposer.
TYPES:
BEGIN OF ty_rows,
row TYPE i,
FIELD TYPE char30,
dename TYPE char30,
VALUE TYPE STRING,
END OF ty_rows.
TYPES: tt_rows TYPE STANDARD TABLE OF ty_rows.
TYPES:
BEGIN OF ty_fields,
FIELD TYPE char30,
dename TYPE char30,
END OF ty_fields.
TYPES: tt_fields TYPE STANDARD TABLE OF ty_fields.
METHODS:
transpose
RETURNING VALUE(ro_data) TYPE REF TO DATA.
DATA: t_fields TYPE tt_fields.
DATA: t_data TYPE tt_rows.
DATA: o_dyna_table TYPE REF TO DATA.
DATA: o_dyna_wa TYPE REF TO DATA.
METHODS: create_dynamic_table.
METHODS: collect_fields.
ENDINTERFACE. "zif_transposer
*
CLASS zcl_transpose_to_columns DEFINITION.
PUBLIC SECTION.
INTERFACES: zif_transposer.
METHODS:
constructor
IMPORTING
it_data TYPE zif_transposer=>tt_rows
it_fields TYPE zif_transposer=>tt_fields OPTIONAL.
PRIVATE SECTION.
ALIASES: t_data FOR zif_transposer~t_data.
ALIASES: t_fields FOR zif_transposer~t_fields.
ALIASES: o_dyna_table FOR zif_transposer~o_dyna_table.
ALIASES: o_dyna_wa FOR zif_transposer~o_dyna_wa.
ENDCLASS. "zcl_transpose_to_columns DEFINITION
*
CLASS zcl_transpose_to_rows DEFINITION.
PUBLIC SECTION.
INTERFACES: zif_transposer.
METHODS:
constructor
IMPORTING
it_data TYPE ANY TABLE
it_fields TYPE zif_transposer=>tt_fields OPTIONAL.
PRIVATE SECTION.
ALIASES: t_data FOR zif_transposer~t_data.
ALIASES: t_fields FOR zif_transposer~t_fields.
ALIASES: o_dyna_table FOR zif_transposer~o_dyna_table.
ALIASES: o_dyna_wa FOR zif_transposer~o_dyna_wa.
ENDCLASS. "zcl_transpose_to_rows DEFINITION
*
CLASS zcl_transpose_to_columns IMPLEMENTATION.
METHOD constructor.
t_data = it_data.
t_fields = it_fields.
ENDMETHOD. "constructor
METHOD zif_transposer~transpose.
FIELD-SYMBOLS:
<f_tab> TYPE STANDARD TABLE,
<f_wa> TYPE ANY,
<f_field> TYPE ANY.
DATA: ls_data LIKE LINE OF me->t_data.
* create dynamic table
me->zif_transposer~collect_fields( ).
me->zif_transposer~create_dynamic_table( ).
* Move data to Dynamica table
ASSIGN o_dyna_table->* TO <f_tab>.
ASSIGN o_dyna_wa->* TO <f_wa>.
LOOP AT me->t_data INTO ls_data.
ASSIGN COMPONENT ls_data-FIELD OF STRUCTURE <f_wa> TO <f_field>.
IF sy-subrc EQ 0.
<f_field> = ls_data-VALUE.
ENDIF.
AT END OF row.
APPEND <f_wa> TO <f_tab>.
CLEAR <f_wa>.
ENDAT.
ENDLOOP.
* send data back
ro_data = o_dyna_table.
ENDMETHOD. "zif_transposer~transpose
METHOD zif_transposer~create_dynamic_table.
DATA: lo_struct TYPE REF TO cl_abap_structdescr,
lo_element TYPE REF TO cl_abap_elemdescr,
lo_new_type TYPE REF TO cl_abap_structdescr,
lo_new_tab TYPE REF TO cl_abap_tabledescr,
lt_comp TYPE cl_abap_structdescr=>component_table,
lt_tot_comp TYPE cl_abap_structdescr=>component_table,
la_comp LIKE LINE OF lt_comp.
DATA: ls_field LIKE LINE OF me->t_fields.
DATA: lv_name TYPE STRING.
LOOP AT me->t_fields INTO ls_field.
IF ls_field-dename IS INITIAL.
lv_name = ls_field-FIELD.
ELSE.
lv_name = ls_field-dename.
ENDIF.
* Element Description
lo_element ?= cl_abap_elemdescr=>describe_by_name( lv_name ).
* Components
la_comp-NAME = ls_field-FIELD.
la_comp-TYPE = lo_element.
APPEND la_comp TO lt_tot_comp.
CLEAR: la_comp.
ENDLOOP.
* Create a New Type
lo_new_type = cl_abap_structdescr=>create( lt_tot_comp ).
* New Table type
lo_new_tab = cl_abap_tabledescr=>create(
p_line_type = lo_new_type
p_table_kind = cl_abap_tabledescr=>tablekind_std
p_unique = abap_false ).
* data to handle the new table type
CREATE DATA o_dyna_table TYPE HANDLE lo_new_tab.
CREATE DATA o_dyna_wa TYPE HANDLE lo_new_type.
ENDMETHOD. "create_dynamic_table
METHOD zif_transposer~collect_fields.
CHECK t_fields IS INITIAL.
DATA: lv_first_field TYPE char30.
DATA: ls_data LIKE LINE OF me->t_data.
DATA: ls_field LIKE LINE OF me->t_fields.
LOOP AT me->t_data INTO ls_data.
IF lv_first_field = ls_data-FIELD.
EXIT.
ENDIF.
IF lv_first_field IS INITIAL.
lv_first_field = ls_data-FIELD.
ENDIF.
MOVE-CORRESPONDING ls_data TO ls_field.
APPEND ls_field TO me->t_fields.
ENDLOOP.
ENDMETHOD. "collect_Fields
ENDCLASS. "zcl_transpose_to_columns IMPLEMENTATION
*
CLASS zcl_transpose_to_rows IMPLEMENTATION.
METHOD constructor.
GET REFERENCE OF it_data INTO o_dyna_table.
t_fields = it_fields.
ENDMETHOD. "constructor
METHOD zif_transposer~transpose.
FIELD-SYMBOLS:
<f_tab> TYPE STANDARD TABLE,
<f_wa> TYPE ANY,
<f_field> TYPE ANY.
DATA: lt_rows TYPE zif_transposer=>tt_rows.
DATA: ls_rows LIKE LINE OF lt_rows,
lv_row TYPE i.
DATA: ls_fields LIKE LINE OF t_fields.
me->zif_transposer~collect_fields( ).
me->zif_transposer~create_dynamic_table( ).
ASSIGN o_dyna_table->* TO <f_tab>.
LOOP AT <f_tab> ASSIGNING <f_wa>.
lv_row = sy-tabix.
LOOP AT t_fields INTO ls_fields.
ASSIGN COMPONENT ls_fields-FIELD OF STRUCTURE <f_wa> TO <f_field>.
IF sy-subrc EQ 0.
ls_rows-row = lv_row.
ls_rows-FIELD = ls_fields-FIELD.
ls_rows-dename = ls_fields-dename.
ls_rows-VALUE = <f_field>.
APPEND ls_rows TO lt_rows.
ENDIF.
ENDLOOP.
ENDLOOP.
me->t_data = lt_rows.
GET REFERENCE OF me->t_data INTO ro_data.
ENDMETHOD. "zif_transposer~transpose
METHOD zif_transposer~create_dynamic_table.
* Setting up the o_dyna_wa is unnecessary, just sake of completeness
* of this method
FIELD-SYMBOLS:
<f_tab> TYPE STANDARD TABLE,
<f_wa> TYPE ANY.
ASSIGN o_dyna_table->* TO <f_tab>.
READ TABLE <f_tab> ASSIGNING <f_wa> INDEX 1.
IF sy-subrc EQ 0.
GET REFERENCE OF <f_wa> INTO o_dyna_wa.
ENDIF.
ENDMETHOD. "zif_transposer~create_dynamic_table
METHOD zif_transposer~collect_fields.
DATA: lo_tab TYPE REF TO cl_abap_tabledescr,
lo_struc TYPE REF TO cl_abap_structdescr,
lt_comp TYPE cl_abap_structdescr=>component_table,
ls_comp LIKE LINE OF lt_comp,
ls_fields LIKE LINE OF t_fields.
IF t_fields IS INITIAL.
lo_tab ?= cl_abap_tabledescr=>describe_by_data_ref( o_dyna_table ).
lo_struc ?= lo_tab->get_table_line_type( ).
lt_comp = lo_struc->get_components( ).
LOOP AT lt_comp INTO ls_comp.
ls_fields-FIELD = ls_comp-NAME.
ls_fields-dename = ls_comp-type->get_relative_name( ).
APPEND ls_fields TO t_fields.
ENDLOOP.
ENDIF.
ENDMETHOD. "zif_transposer~collect_fields
ENDCLASS. "zcl_transpose_to_rows IMPLEMENTATION
Regards,
Qamber Abbas