‎2007 Jul 05 11:35 AM
hi,
i am creating a dynamic table for displaying in alv.
its giving me the following error.
kindly help.
regards,
naresh
*************************************************************************************************REPORT zasd_credit_memo_list1 NO STANDARD PAGE HEADING
LINE-SIZE 225
LINE-COUNT 65.
INCLUDE zasd_invoice_data.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECT-OPTIONS v_kunrg FOR vbrk-kunrg.
SELECT-OPTIONS v_kunag FOR vbrk-kunag.
SELECT-OPTIONS v_fkart FOR vbrk-fkart NO INTERVALS.
SELECT-OPTIONS v_vkorg FOR vbrk-vkorg.
SELECT-OPTIONS v_vtweg FOR vbrk-vtweg OBLIGATORY NO INTERVALS.
SELECT-OPTIONS v_spart FOR vbrp-spart .
SELECT-OPTIONS : v_werks FOR vbrp-werks,
v_vkgrp FOR vbrp-vkgrp NO INTERVALS.
SELECT-OPTIONS : v_vkbur FOR vbrp-vkbur,
v_kdgrp FOR vbrk-kdgrp,
v_fkdat FOR vbrk-fkdat OBLIGATORY.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(80) text_003.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002.
PARAMETERS : s1 RADIOBUTTON GROUP rad1,
s2 RADIOBUTTON GROUP rad1,
s3 RADIOBUTTON GROUP rad1.
SELECTION-SCREEN END OF BLOCK b2.
INCLUDE zasd_invreg_sum.
*----
INITIALIZATION.
*----
INITIALIZATION.
w_repid = sy-repid.
text_003 = 'For all sales groups Please enter * mark in sales group'.
START-OF-SELECTION.
LOOP AT v_vtweg.
AUTHORITY-CHECK OBJECT 'Z_VTWEG' ID 'ACTVT' FIELD '16'
ID 'VTWEG' FIELD v_vtweg-low.
IF sy-subrc NE 0.
MESSAGE e000(38) WITH 'No authorization for Channel ' v_vtweg-low .
DELETE v_vtweg INDEX sy-tabix.
EXIT.
ENDIF.
ENDLOOP.
LOOP AT v_vkgrp.
AUTHORITY-CHECK OBJECT 'Z_VKGRP' ID 'ACTVT' FIELD '16'
ID 'VKGRP' FIELD v_vkgrp-low.
IF sy-subrc NE 0.
MESSAGE e000(38) WITH 'No authorization for Sale Group ' v_vkgrp-low.
DELETE v_vkgrp INDEX sy-tabix.
ELSE.
PERFORM cre_summary.
PERFORM cre_sum_process.
PERFORM cre_sum_display.
ENDIF.
ENDLOOP.
************************************************************************************************----
***INCLUDE ZASD_INVREG_SUM .
----
FORM cre_summary.
Fetching all reasons
SELECT augru bezei INTO TABLE it_tvaut FROM tvaut
WHERE spras = 'E'.
*
**data from vbrk
SELECT vbeln fkart waerk vkorg vtweg regio knumv
fkdat kdgrp kunag netwr kurrf kunrg spart
FROM vbrk INTO TABLE it_vbrk
WHERE fkart IN v_fkart
AND spart IN v_spart
AND fkdat IN v_fkdat
AND vkorg IN v_vkorg
AND vtweg IN v_vtweg
AND kunrg IN v_kunrg
AND kunag IN v_kunag
AND kdgrp IN v_kdgrp.
IF NOT it_vbrk[] IS INITIAL.
SELECT vbeln posnr fkimg werks vkgrp
vkbur lgort netwr kzwi2 kzwi1 mwsbp augru_auft
FROM vbrp INTO TABLE it_vbrp_temp
FOR ALL ENTRIES IN it_vbrk
WHERE vbeln EQ it_vbrk-vbeln
AND werks IN v_werks
AND vkgrp IN v_vkgrp
AND vkbur IN v_vkbur.
SORT it_vbrp_temp BY vbeln.
LOOP AT it_vbrp_temp.
MOVE-CORRESPONDING it_vbrp_temp TO it_vbrp.
COLLECT it_vbrp.
CLEAR it_vbrp.
CLEAR it_vbrp_temp.
ENDLOOP.
ELSE.
MESSAGE i000(0k) WITH 'There is no invoice exist for this selection'.
EXIT.
ENDIF.
IF NOT it_vbrk[] IS INITIAL.
SELECT kunnr name1 mcod3 FROM kna1 INTO TABLE it_kna1
FOR ALL ENTRIES IN it_vbrk
WHERE kunnr = it_vbrk-kunrg.
SELECT kunnr name1 mcod3 FROM kna1 APPENDING TABLE it_kna1
FOR ALL ENTRIES IN it_vbrk
WHERE kunnr = it_vbrk-kunag.
SORT it_kna1 BY kunnr.
SELECT fkart vtext INTO TABLE it_invtype FROM tvfkt
FOR ALL ENTRIES IN it_vbrk
WHERE fkart = it_vbrk-fkart
AND spras = 'EN'.
SELECT * FROM konv INTO TABLE it_konv
FOR ALL ENTRIES IN it_vbrk
WHERE knumv = it_vbrk-knumv
AND kschl = 'ZIN1'.
SELECT * FROM ztrip1 INTO TABLE it_trip
FOR ALL ENTRIES IN it_vbrk
WHERE vbeln1 EQ it_vbrk-vbeln.
SELECT * FROM lfa1 INTO TABLE it_lfa1
FOR ALL ENTRIES IN it_trip
WHERE lifnr = it_trip-lifnr.
SORT it_lfa1 BY lifnr.
DELETE ADJACENT DUPLICATES FROM it_lfa1 COMPARING lifnr.
SELECT * FROM j_1imocust INTO TABLE it_mocust
FOR ALL ENTRIES IN it_kna1
WHERE kunnr = it_kna1-kunnr.
SELECT * FROM j_3atvau INTO TABLE it_j_3atvau
WHERE auart = 'ZCR' OR
auart = 'ZDR'.
select augru bezei from tvaut into table it_tvaut
for all entries in it_j_3atvau
where
spras = 'en' and
augru = it_j_3atvau-augru.
SORT it_mocust BY kunnr.
ENDIF.
IF NOT it_konv[] IS INITIAL.
SORT it_konv BY knumv.
LOOP AT it_konv.
MOVE-CORRESPONDING it_konv TO it_konv_sum.
COLLECT it_konv_sum.
CLEAR it_konv.
CLEAR it_konv_sum.
ENDLOOP.
ENDIF.
ENDFORM. " inv_reg_summary
&----
*& Form cre_sum_display
&----
text
----
--> p1 text
<-- p2 text
----
FORM cre_sum_display.
PERFORM dyn_table_create.
PERFORM build_field_catlog.
PERFORM grid_display.
ENDFORM. " cre_sum_display
&----
*& Form BUILD_FIELD_CATLOG
&----
text
----
--> p1 text
<-- p2 text
----
FORM build_field_catlog.
ls_layout-colwidth_optimize = 'X'.
ls_layout-zebra = 'X'.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_program_name = w_repid
i_structure_name = 'zinvoice'
i_inclname = w_repid
CHANGING
ct_fieldcat = i_fieldtab[].
LOOP AT i_fieldtab INTO l_fieldcat.
CASE l_fieldcat-fieldname.
WHEN 'VBELN'.
l_fieldcat-seltext_s = 'Invoice number'.
l_fieldcat-seltext_m = 'Invoice number'.
l_fieldcat-seltext_l = 'Invoice number'.
l_fieldcat-reptext_ddic = 'Invoice number'.
WHEN 'FKDAT'.
l_fieldcat-seltext_s = 'Invoice Date'.
l_fieldcat-seltext_m = 'Invoice Date'.
l_fieldcat-seltext_l = 'Invoice Date'.
l_fieldcat-reptext_ddic = 'Invoice Date'.
WHEN 'FKIMG'.
l_fieldcat-seltext_s = 'Invoice Quantity'.
l_fieldcat-seltext_m = 'Invoice Quantity'.
l_fieldcat-seltext_l = 'Invoice Quantity'.
l_fieldcat-reptext_ddic = 'Invoice Quantity'.
l_fieldcat-do_sum = 'X'.
WHEN 'VTEXT'.
l_fieldcat-seltext_s = 'Billing Type'.
l_fieldcat-seltext_m = 'Billing Type'.
l_fieldcat-seltext_l = 'Billing Type'.
l_fieldcat-reptext_ddic = 'Billing Type'.
WHEN 'KBETR'.
l_fieldcat-seltext_s = 'MRP'.
l_fieldcat-seltext_m = 'MRP'.
l_fieldcat-seltext_l = 'MRP'.
l_fieldcat-reptext_ddic = 'MRP'.
l_fieldcat-do_sum = 'X'.
WHEN 'GMATVAL'.
l_fieldcat-seltext_s = 'Gross Mat Value'.
l_fieldcat-seltext_m = 'Gross Mat Value'.
l_fieldcat-seltext_l = 'Gross Mat Value'.
l_fieldcat-reptext_ddic = 'Gross Mat Value'.
l_fieldcat-do_sum = 'X'.
WHEN 'DAMOUNT'.
l_fieldcat-seltext_s = 'Other Disc Amount'.
l_fieldcat-seltext_m = 'Other Disc Amount'.
l_fieldcat-seltext_l = 'Other Disc Amount'.
l_fieldcat-reptext_ddic = 'Other Disc Amount'.
l_fieldcat-do_sum = 'X'.
WHEN 'WAVWR'.
l_fieldcat-seltext_s = 'Cost'.
l_fieldcat-seltext_m = 'Cost'.
l_fieldcat-seltext_l = 'Cost'.
l_fieldcat-reptext_ddic = 'Cost'.
l_fieldcat-do_sum = 'X'.
WHEN 'NETWR'.
l_fieldcat-seltext_s = 'Taxable Amount'.
l_fieldcat-seltext_m = 'Taxable Amount'.
l_fieldcat-seltext_l = 'Taxable Amount'.
l_fieldcat-reptext_ddic = 'Taxable Amount'.
l_fieldcat-do_sum = 'X'.
WHEN 'TRATE'.
l_fieldcat-seltext_s = 'Tax Rate'.
l_fieldcat-seltext_m = 'Tax Rate'.
l_fieldcat-seltext_l = 'Tax Rate'.
l_fieldcat-reptext_ddic = 'Tax Rate'.
WHEN 'TAMOUNT'.
l_fieldcat-seltext_s = 'Tax Amount'.
l_fieldcat-seltext_m = 'Tax Amount'.
l_fieldcat-seltext_l = 'Tax Amount'.
l_fieldcat-reptext_ddic = 'Tax Amount'.
l_fieldcat-do_sum = 'X'.
WHEN 'CONAMNT'.
l_fieldcat-seltext_s = 'Contrib Amnt'.
l_fieldcat-seltext_m = 'Contrib Amnt'.
l_fieldcat-seltext_l = 'Contrib Amnt'.
l_fieldcat-reptext_ddic = 'Contrib Amnt'.
l_fieldcat-do_sum = 'X'.
WHEN 'CONPERC'.
l_fieldcat-seltext_s = 'Contrib %'.
l_fieldcat-seltext_m = 'Contrib %'.
l_fieldcat-seltext_l = 'Contrib %'.
l_fieldcat-reptext_ddic = 'Contrib %'.
WHEN 'DMARGIN'.
l_fieldcat-seltext_s = 'Dealer Margin'.
l_fieldcat-seltext_m = 'Dealer Margin'.
l_fieldcat-seltext_l = 'Dealer Margin'.
l_fieldcat-reptext_ddic = 'Dealer Margin'.
l_fieldcat-do_sum = 'X'.
WHEN 'TCS'.
l_fieldcat-seltext_s = 'TCS'.
l_fieldcat-seltext_m = 'TCS'.
l_fieldcat-seltext_l = 'TCS'.
l_fieldcat-reptext_ddic = 'TCS'.
l_fieldcat-do_sum = 'X'.
WHEN 'NAMOUNT'.
l_fieldcat-seltext_s = 'Net Amount'.
l_fieldcat-seltext_m = 'Net Amount'.
l_fieldcat-seltext_l = 'Net Amount'.
l_fieldcat-reptext_ddic = 'Net Amount'.
l_fieldcat-do_sum = 'X'.
WHEN 'CITY'.
l_fieldcat-seltext_s = 'CITY'.
l_fieldcat-seltext_m = 'CITY'.
l_fieldcat-seltext_l = 'CITY'.
l_fieldcat-reptext_ddic = 'CITY'.
WHEN 'MATNR'.
l_fieldcat-seltext_s = 'Material code'.
l_fieldcat-seltext_m = 'Material code'.
l_fieldcat-seltext_l = 'Material code'.
l_fieldcat-reptext_ddic = 'Material code'.
WHEN 'MATKL'.
l_fieldcat-seltext_s = 'Material Group'.
l_fieldcat-seltext_m = 'Material Group'.
l_fieldcat-seltext_l = 'Material Group'.
l_fieldcat-reptext_ddic = 'Material Group'.
WHEN 'KUNAG'.
l_fieldcat-seltext_s = 'Sold To Party'.
l_fieldcat-seltext_m = 'Sold To Party'.
l_fieldcat-seltext_l = 'Sold To Party'.
l_fieldcat-reptext_ddic = 'Sold To Party'.
WHEN 'NAME'.
l_fieldcat-seltext_s = 'NAME'.
l_fieldcat-seltext_m = 'NAME'.
l_fieldcat-seltext_l = 'NAME'.
l_fieldcat-reptext_ddic = 'NAME'.
WHEN 'LIFNR'.
l_fieldcat-seltext_s = 'Tranporter'.
l_fieldcat-seltext_m = 'Tranporter'.
l_fieldcat-seltext_l = 'Tranporter'.
l_fieldcat-reptext_ddic = 'Tranporter'.
WHEN 'TNAME'.
l_fieldcat-seltext_s = 'Tranp Name'.
l_fieldcat-seltext_m = 'Tranp Name'.
l_fieldcat-seltext_l = 'Tranp Name'.
l_fieldcat-reptext_ddic = 'Tranp Name'.
ENDCASE.
MODIFY i_fieldtab FROM l_fieldcat .
ENDLOOP.
DELETE i_fieldtab WHERE fieldname = 'AUGRU_AUFT'
OR fieldname = 'BEZEI'.
LOOP AT it_tvaut.
CLEAR : l_fieldcat.
l_fieldcat-fieldname = it_tvaut-bezei.
l_fieldcat-seltext_s = it_tvaut-bezei.
l_fieldcat-seltext_m = it_tvaut-bezei.
l_fieldcat-seltext_l = it_tvaut-bezei.
l_fieldcat-reptext_ddic = it_tvaut-bezei.
l_fieldcat-do_sum = 'X'.
APPEND l_fieldcat TO i_fieldtab.
ENDLOOP.
MOVE i_fieldtab[] TO gt_fieldcat[].
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = w_repid
it_fieldcat = i_fieldtab[]
is_layout = ls_layout
i_save = 'A'
is_variant = i_variant
TABLES
t_outtab = it_display
EXCEPTIONS
program_error = 1
OTHERS = 2.
*
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
LOOP AT it_display ASSIGNING <ln_disp>.
LOOP AT i_fieldtab.
ASSIGN COMPONENT i_fieldtab-fieldname OF STRUCTURE
<ln_disp> TO <value_to>.
ASSIGN COMPONENT i_fieldtab-fieldname OF STRUCTURE
<dyn_wa> TO <value_from>.
MOVE <value_to> TO <value_from>.
ENDLOOP.
COLLECT <dyn_wa> INTO <dyn_table>.
ENDLOOP.
ENDFORM. " BUILD_FIELD_CATLOG
&----
*& Form cre_sum_process
&----
text
----
--> p1 text
<-- p2 text
----
FORM cre_sum_process.
DATA : v_mwsbp LIKE vbrp-mwsbp.
LOOP AT it_vbrp INTO is_vbrp.
MOVE-CORRESPONDING is_vbrp TO is_display.
READ TABLE it_vbrk INTO is_vbrk WITH KEY vbeln = is_vbrp-vbeln.
READ TABLE it_kna1 INTO is_kna1 WITH KEY kunnr = is_vbrk-kunrg
BINARY SEARCH.
IF sy-subrc = 0.
MOVE : is_kna1-kunnr TO is_display-kunnr,
is_kna1-name1 TO is_display-name1,
is_kna1-mcod3 TO is_display-city.
ENDIF.
READ TABLE it_kna1 INTO is_kna1 WITH KEY kunnr = is_vbrk-kunag
BINARY SEARCH.
IF sy-subrc = 0.
MOVE : is_kna1-name1 TO is_display-name.
ENDIF.
MOVE-CORRESPONDING is_vbrk TO is_display.
READ TABLE it_invtype INTO is_invtype WITH KEY fkart = is_vbrk-fkart.
IF sy-subrc = 0.
MOVE is_invtype-vtext TO is_display-vtext.
ENDIF.
*Setting Reason
READ TABLE it_tvaut WITH KEY augru = is_vbrp-augru_auft.
IF sy-subrc = 0.
MOVE it_tvaut-bezei TO is_display-bezei.
ENDIF.
READ TABLE it_konv_sum WITH KEY knumv = is_vbrk-knumv.
IF is_vbrk-fkart = 'ZRE' OR is_vbrk-fkart = 'RE' OR
is_vbrk-fkart = 'G2' OR is_vbrk-fkart = 'S1' OR
is_vbrk-fkart = 'ZS1'.
*TAXABLE AMOUNT
is_display-netwr = - ( is_vbrp-netwr ).
*QUANTITY
is_display-fkimg = - ( is_vbrp-fkimg ).
*TAXAMOUNT
is_display-tamount = - ( is_vbrp-mwsbp ).
*TCS
is_display-tcs = it_konv_sum-kwert.
*TAXRATE , NETAMOUNT
v_mwsbp = is_vbrp-mwsbp - it_konv_sum-kwert.
is_display-trate = - ( v_mwsbp / is_vbrp-netwr ) * 100.
is_display-namount = - ( is_vbrp-mwsbp + is_vbrp-netwr ).
*OTHER DISCOUNT AMOUNT
is_display-damount = - ( is_vbrp-kzwi2 - is_vbrp-kzwi1 ).
*GROSS MAT VALUE
IF NOT is_vbrp-fkimg IS INITIAL.
l_wot = ( is_vbrp-kzwi2 / is_vbrp-fkimg ).
l_wot1 = 1 + ( is_display-trate / 100 ).
IF NOT l_wot1 IS INITIAL.
is_display-gmatval = - ( ( l_wot / l_wot1 ) * is_vbrp-fkimg ).
ENDIF.
ENDIF.
ELSE.
*TAXAMOUNT
v_mwsbp = is_vbrp-mwsbp - it_konv_sum-kwert.
is_display-tamount = v_mwsbp.
*TCS
is_display-tcs = it_konv_sum-kwert.
*TAXRATE , NETAMOUNT
is_display-trate = ( v_mwsbp / is_vbrp-netwr ) * 100.
is_display-namount = ( is_vbrp-mwsbp + is_vbrp-netwr ).
*OTHER DISCOUNT AMOUNT
is_display-damount = is_vbrp-kzwi2 - is_vbrp-kzwi1.
*GROSS MAT VALUE
IF NOT is_vbrp-fkimg IS INITIAL.
l_wot = ( is_vbrp-kzwi2 / is_vbrp-fkimg ).
l_wot1 = 1 + ( is_display-trate / 100 ).
IF NOT l_wot1 IS INITIAL.
is_display-gmatval = ( l_wot / l_wot1 ) * is_vbrp-fkimg.
ENDIF.
ENDIF.
ENDIF.
APPEND is_display TO it_display.
CLEAR : is_display, is_kna1,is_vbrk,v_kwert,is_invtype.
CLEAR : v_mwsbp,it_konv_sum.
ENDLOOP.
ENDFORM. " cre_sum_process
&----
*& Form dyn_table_create
&----
text
----
--> p1 text
<-- p2 text
----
FORM dyn_table_create.
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = gt_fieldcat
IMPORTING
ep_table = dy_table.
ASSIGN dy_table->* TO <dyn_table>.
CREATE DATA dy_line LIKE LINE OF <dyn_table>.
ASSIGN dy_line->* TO <dyn_wa>.
ENDFORM. " dyn_table_create
&----
*& Form grid_display
&----
text
----
--> p1 text
<-- p2 text
----
FORM grid_display.
CLEAR ls_layout.
ls_layout-colwidth_optimize = 'X'.
ls_layout-zebra = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = w_repid
i_callback_pf_status_set = 'SET_PF_STATUS'
i_callback_user_command = 'USER_COMMAND'
it_fieldcat = i_fieldtab[]
is_layout = ls_layout
TABLES
t_outtab = <dyn_table>
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. " grid_display
‎2007 Jul 05 2:10 PM
Hello Naresh
In the following thread
I have shown how to create dynamic itab and even complex itab (having deep structures) using RTTI. The final version of my sample report is at the very end of this thread yet the discussion is quite interesting to read:
*&---------------------------------------------------------------------*
*& Report ZUS_SDN_RTTI_CREATE_STRUCTUR_2
*&
*&---------------------------------------------------------------------*
*& NOTE: 1st revised version of ZUS_SDN_RTTI_CREATE_STRUCTUR_1
*&
*&---------------------------------------------------------------------*
REPORT zus_sdn_rtti_create_structur_2.
TYPE-POOLS: abap.
DATA:
celltab TYPE lvc_t_styl.
DATA:
gd_tabnam TYPE string,
gd_tabfield TYPE string,
go_table TYPE REF TO cl_salv_table,
go_sdescr TYPE REF TO cl_abap_structdescr,
go_sdescr_new TYPE REF TO cl_abap_structdescr,
go_tdescr TYPE REF TO cl_abap_tabledescr,
go_typedescr TYPE REF TO cl_abap_typedescr,
gdo_data TYPE REF TO data,
gdo_handle TYPE REF TO data,
gs_component TYPE abap_compdescr,
gs_comp TYPE abap_componentdescr,
gt_components TYPE abap_component_tab.
*
* name TYPE string,
* type TYPE REF TO cl_abap_datadescr,
* as_include TYPE abap_bool,
* suffix TYPE string,
FIELD-SYMBOLS:
<gd_fld> TYPE ANY, " single field
<gs_outtab> TYPE ANY, " structure with CELLTAB
<gs_itab> TYPE ANY, " structure without CELLTAB
<gt_itab_pbo> TYPE STANDARD TABLE, " without CELLTAB
<gt_itab_pai> TYPE STANDARD TABLE, " without CELLTAB
<gt_outtab_pbo> TYPE STANDARD TABLE, " with CELLTAB
<gt_outtab_pai> TYPE STANDARD TABLE. " with CELLTAB
PARAMETER:
p_tabnam TYPE tabname DEFAULT 'KNB1'.
PARAMETERS:
p_skip AS CHECKBOX DEFAULT 'X'. " skip simulation
START-OF-SELECTION.
" Describe structure
go_sdescr ?= cl_abap_structdescr=>describe_by_name( p_tabnam ).
gd_tabnam = go_sdescr->get_relative_name( ).
* Simulate dynamic addition of columns to ALV list
DO 5 TIMES.
READ TABLE go_sdescr->components INTO gs_component INDEX syst-index.
" Build fieldname
CONCATENATE gd_tabnam gs_component-name INTO gd_tabfield
SEPARATED BY '-'.
CLEAR: gs_comp.
gs_comp-type ?= cl_abap_datadescr=>describe_by_name( gd_tabfield ).
gs_comp-name = gs_component-name.
APPEND gs_comp TO gt_components.
go_sdescr_new = cl_abap_structdescr=>create( gt_components ).
go_tdescr = cl_abap_tabledescr=>create( go_sdescr_new ).
" Create data refence followed by table creation
CREATE DATA gdo_handle TYPE HANDLE go_tdescr.
ASSIGN gdo_handle->* TO <gt_outtab_pbo>.
* Dynamic select
SELECT * FROM (p_tabnam) UP TO 10 ROWS
INTO CORRESPONDING FIELDS OF TABLE <gt_outtab_pbo>
WHERE bukrs = '2000'.
IF ( p_skip = abap_false ).
TRY.
CALL METHOD cl_salv_table=>factory
IMPORTING
r_salv_table = go_table
CHANGING
t_table = <gt_outtab_pbo>.
go_table->display( ).
CATCH cx_salv_msg .
ENDTRY.
ENDIF.
ENDDO.
TRY.
CALL METHOD cl_salv_table=>factory
IMPORTING
r_salv_table = go_table
CHANGING
t_table = <gt_outtab_pbo>.
go_table->display( ).
CATCH cx_salv_msg .
ENDTRY.
" Display component list in order to prove that indeed the field names
" are used (instead of the data element names)
TRY.
CALL METHOD cl_salv_table=>factory
IMPORTING
r_salv_table = go_table
CHANGING
t_table = gt_components.
go_table->display( ).
CATCH cx_salv_msg .
ENDTRY.
" Create data reference for structure (without CELLTAB)!!!
CREATE DATA gdo_handle TYPE HANDLE go_sdescr_new.
REFRESH: gt_components.
CLEAR: gs_comp.
gs_comp-type ?=
cl_abap_structdescr=>describe_by_data_ref( gdo_handle ).
gs_comp-name = 'DATA'.
gs_comp-as_include = abap_true.
APPEND gs_comp TO gt_components.
" Add table type as field to structure ==> complex structure
CLEAR: gs_comp.
gs_comp-type ?= cl_abap_typedescr=>describe_by_data( celltab ).
gs_comp-name = 'CELLTAB'.
APPEND gs_comp TO gt_components.
go_sdescr = cl_abap_structdescr=>create( gt_components ).
go_tdescr = cl_abap_tabledescr=>create( go_sdescr ).
CREATE DATA gdo_handle TYPE HANDLE go_tdescr.
ASSIGN gdo_handle->* TO <gt_outtab_pbo>.
* Dynamic select
SELECT * FROM (p_tabnam) UP TO 10 ROWS
INTO CORRESPONDING FIELDS OF TABLE <gt_outtab_pbo>
WHERE bukrs = '2000'.
PERFORM fill_celltab.
" Create second itab (PAI data)
CREATE DATA gdo_handle TYPE HANDLE go_tdescr.
ASSIGN gdo_handle->* TO <gt_outtab_pai>.
<gt_outtab_pai> = <gt_outtab_pbo>. " PAI data = PBO data
" Renumbering of customer makes it easier to spot the differences
LOOP AT <gt_outtab_pai> ASSIGNING <gs_outtab>.
ASSIGN COMPONENT 'KUNNR' OF STRUCTURE <gs_outtab> TO <gd_fld>.
<gd_fld> = syst-tabix. " new numbering of customers
ENDLOOP.
LOOP AT <gt_outtab_pbo> ASSIGNING <gs_outtab>.
ASSIGN COMPONENT 'KUNNR' OF STRUCTURE <gs_outtab> TO <gd_fld>.
<gd_fld> = syst-tabix. " new numbering of customers
ENDLOOP.
DELETE <gt_outtab_pbo> INDEX 3. " ==> 3rd row in PAI data is new
DELETE <gt_outtab_pai> INDEX 7. " ==> 7th row in PBO data is DELE
" Shuffle data from outtab to corresponding itab (w/o CELLTAB)
PERFORM shuffle_outtab_to_itab.
" List output
PERFORM write_list.
EXIT.
" Simplified version of table creation:
CLEAR: gdo_data.
UNASSIGN <gt_outtab_pbo>.
CREATE DATA gdo_data TYPE STANDARD TABLE OF (p_tabnam).
ASSIGN gdo_data->* TO <gt_outtab_pbo>.
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form FILL_CELLTAB
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM fill_celltab .
* define local data
DATA:
ls_cell TYPE lvc_s_styl,
lt_celltab TYPE lvc_t_styl.
FIELD-SYMBOLS:
<gs_struc> TYPE ANY,
<lt_celltab> TYPE lvc_t_styl.
" Create dummy entry for local CELLTAB
ls_cell-fieldname = 'BUKRS'.
ls_cell-style = cl_gui_alv_grid=>mc_style_enabled.
INSERT ls_cell INTO TABLE lt_celltab.
LOOP AT <gt_outtab_pbo> ASSIGNING <gs_struc>.
ASSIGN COMPONENT 'CELLTAB' OF STRUCTURE <gs_struc> TO <lt_celltab>.
<lt_celltab> = lt_celltab.
" No MODIFY required because we are working with the field symbol
ENDLOOP.
ENDFORM. " FILL_CELLTAB
*&---------------------------------------------------------------------*
*& Form SHUFFLE_OUTTAB_TO_ITAB
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM shuffle_outtab_to_itab .
go_tdescr = cl_abap_tabledescr=>create( go_sdescr_new ).
CREATE DATA gdo_handle TYPE HANDLE go_tdescr.
ASSIGN gdo_handle->* TO <gt_itab_pbo>.
*
go_tdescr = cl_abap_tabledescr=>create( go_sdescr_new ).
CREATE DATA gdo_handle TYPE HANDLE go_tdescr.
ASSIGN gdo_handle->* TO <gt_itab_pai>.
LOOP AT <gt_outtab_pbo> ASSIGNING <gs_outtab>.
ASSIGN COMPONENT 'DATA' OF STRUCTURE <gs_outtab> TO <gs_itab>.
APPEND <gs_itab> TO <gt_itab_pbo>.
ENDLOOP.
*
LOOP AT <gt_outtab_pai> ASSIGNING <gs_outtab>.
ASSIGN COMPONENT 'DATA' OF STRUCTURE <gs_outtab> TO <gs_itab>.
APPEND <gs_itab> TO <gt_itab_pai>.
ENDLOOP.
ENDFORM. " SHUFFLE_OUTTAB_TO_ITAB
*&---------------------------------------------------------------------*
*& Form WRITE_LIST
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM write_list .
WRITE: / 'PBO data:'.
LOOP AT <gt_itab_pbo> ASSIGNING <gs_itab>.
WRITE: / 'Record No.=', syst-tabix, '==>'.
DO.
ASSIGN COMPONENT syst-index OF STRUCTURE <gs_itab> TO <gd_fld>.
IF ( syst-subrc NE 0 ).
EXIT.
ENDIF.
WRITE: <gd_fld>.
ENDDO.
ENDLOOP.
SKIP 2.
WRITE: / 'PAI data:'.
LOOP AT <gt_itab_pai> ASSIGNING <gs_itab>.
WRITE: / 'Record No.=', syst-tabix, '==>'.
DO.
ASSIGN COMPONENT syst-index OF STRUCTURE <gs_itab> TO <gd_fld>.
IF ( syst-subrc NE 0 ).
EXIT.
ENDIF.
WRITE: <gd_fld>.
ENDDO.
ENDLOOP.
ENDFORM. " WRITE_LISTRegards
Uwe
‎2007 Jul 05 11:38 AM
one change is ..
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_program_name = w_repid
i_structure_name = 'ZINVOICE' " change to upper case
i_inclname = w_repid
CHANGING
ct_fieldcat = i_fieldtab[].
‎2007 Jul 05 11:48 AM
hi,
inspite of changing it 2 upper case its giving the same eror.
thanx.
regards,
naresh
‎2007 Jul 05 11:57 AM
hi,
inspite of changing it 2 upper case its giving the same eror.
thanx.
DATA: gt_fieldcat TYPE lvc_t_fcat.
i_fieldtab TYPE slis_t_fieldcat_alv WITH HEADER LINE,
MOVE i_fieldtab[] TO gt_fieldcat[].
i have used this code after bulding field catalog.
i dont know whether its coz of this.
coz when i debug, during execution of
CALL METHOD cl_alv_table_create=>create_dynamic_table
its showing error.
regards,
naresh
‎2007 Jul 05 12:01 PM
why there are *s in from of REPORT statement
*************************************************************************************************REPORT zasd_credit_memo_list1 NO
‎2007 Jul 05 1:18 PM
Hello Naresh
The error cause lies here:
DATA: gt_fieldcat TYPE lvc_t_fcat.
i_fieldtab TYPE slis_t_fieldcat_alv WITH HEADER LINE,
MOVE i_fieldtab[] TO gt_fieldcat[]. " <- incompatible structuresFieldcat (of SLIS_S_FIELDCAT_ALV):
types: begin of slis_fieldcat_main0,
row_pos like sy-curow, " output in row
col_pos like sy-cucol, " position of the column
fieldname type slis_fieldname,
tabname type slis_tabname,
currency(5) type c,
cfieldname type slis_fieldname, " field with currency unit
ctabname type slis_tabname, " and table " <== difference
ifieldname type slis_fieldname, " initial column " <== difference
quantity(3) type c,
qfieldname type slis_fieldname, " field with quantity unit
qtabname type slis_tabname, " and table
round type i, " round in write statement
exponent(3) type c, " exponent for floats
key(1) type c, " column with key-color
icon(1) type c, " as icon
symbol(1) type c, " as symbol
checkbox(1) type c, " as checkbox
...
Fields of LVC_S_FCAT:
ROW_POS ALV-Control: Ausgabezeile (INTERNE VERWENDUNG)
COL_POS ALV-Control: Ausgabespalte
FIELDNAME ALV-Control: Feldname internes Tabellenfeld
TABNAME LVC-Tabname
CURRENCY ALV-Control: Währungseinheit
CFIELDNAME ALV-Control: Feldname für referenzierte Währungseinheit
QUANTITY ALV-Control: Mengeneinheit
QFIELDNAME ALV-Control: Feldname für referenzierte Mengeneinheit
IFIELDNAME ALV-Control: Feldname internes Tabellenfeld
ROUND ALV-Control: ROUND-Wert
EXPONENT ALV-Control: Exponent für Float-Darstellung
KEY ALV-Control: Keyfeld
KEY_SEL ALV-Control: Ausblendbare Key-Spalte
ICON ALV-Control: Ausgabe als Ikone
...After the MOVE statement the fieldcatalog is completly messed up.
Regards
Uwe
‎2007 Jul 05 12:32 PM
that i used while pasting here, so as to differentiate between my words and the actual code.
thanx
‎2007 Jul 05 2:10 PM
Hello Naresh
In the following thread
I have shown how to create dynamic itab and even complex itab (having deep structures) using RTTI. The final version of my sample report is at the very end of this thread yet the discussion is quite interesting to read:
*&---------------------------------------------------------------------*
*& Report ZUS_SDN_RTTI_CREATE_STRUCTUR_2
*&
*&---------------------------------------------------------------------*
*& NOTE: 1st revised version of ZUS_SDN_RTTI_CREATE_STRUCTUR_1
*&
*&---------------------------------------------------------------------*
REPORT zus_sdn_rtti_create_structur_2.
TYPE-POOLS: abap.
DATA:
celltab TYPE lvc_t_styl.
DATA:
gd_tabnam TYPE string,
gd_tabfield TYPE string,
go_table TYPE REF TO cl_salv_table,
go_sdescr TYPE REF TO cl_abap_structdescr,
go_sdescr_new TYPE REF TO cl_abap_structdescr,
go_tdescr TYPE REF TO cl_abap_tabledescr,
go_typedescr TYPE REF TO cl_abap_typedescr,
gdo_data TYPE REF TO data,
gdo_handle TYPE REF TO data,
gs_component TYPE abap_compdescr,
gs_comp TYPE abap_componentdescr,
gt_components TYPE abap_component_tab.
*
* name TYPE string,
* type TYPE REF TO cl_abap_datadescr,
* as_include TYPE abap_bool,
* suffix TYPE string,
FIELD-SYMBOLS:
<gd_fld> TYPE ANY, " single field
<gs_outtab> TYPE ANY, " structure with CELLTAB
<gs_itab> TYPE ANY, " structure without CELLTAB
<gt_itab_pbo> TYPE STANDARD TABLE, " without CELLTAB
<gt_itab_pai> TYPE STANDARD TABLE, " without CELLTAB
<gt_outtab_pbo> TYPE STANDARD TABLE, " with CELLTAB
<gt_outtab_pai> TYPE STANDARD TABLE. " with CELLTAB
PARAMETER:
p_tabnam TYPE tabname DEFAULT 'KNB1'.
PARAMETERS:
p_skip AS CHECKBOX DEFAULT 'X'. " skip simulation
START-OF-SELECTION.
" Describe structure
go_sdescr ?= cl_abap_structdescr=>describe_by_name( p_tabnam ).
gd_tabnam = go_sdescr->get_relative_name( ).
* Simulate dynamic addition of columns to ALV list
DO 5 TIMES.
READ TABLE go_sdescr->components INTO gs_component INDEX syst-index.
" Build fieldname
CONCATENATE gd_tabnam gs_component-name INTO gd_tabfield
SEPARATED BY '-'.
CLEAR: gs_comp.
gs_comp-type ?= cl_abap_datadescr=>describe_by_name( gd_tabfield ).
gs_comp-name = gs_component-name.
APPEND gs_comp TO gt_components.
go_sdescr_new = cl_abap_structdescr=>create( gt_components ).
go_tdescr = cl_abap_tabledescr=>create( go_sdescr_new ).
" Create data refence followed by table creation
CREATE DATA gdo_handle TYPE HANDLE go_tdescr.
ASSIGN gdo_handle->* TO <gt_outtab_pbo>.
* Dynamic select
SELECT * FROM (p_tabnam) UP TO 10 ROWS
INTO CORRESPONDING FIELDS OF TABLE <gt_outtab_pbo>
WHERE bukrs = '2000'.
IF ( p_skip = abap_false ).
TRY.
CALL METHOD cl_salv_table=>factory
IMPORTING
r_salv_table = go_table
CHANGING
t_table = <gt_outtab_pbo>.
go_table->display( ).
CATCH cx_salv_msg .
ENDTRY.
ENDIF.
ENDDO.
TRY.
CALL METHOD cl_salv_table=>factory
IMPORTING
r_salv_table = go_table
CHANGING
t_table = <gt_outtab_pbo>.
go_table->display( ).
CATCH cx_salv_msg .
ENDTRY.
" Display component list in order to prove that indeed the field names
" are used (instead of the data element names)
TRY.
CALL METHOD cl_salv_table=>factory
IMPORTING
r_salv_table = go_table
CHANGING
t_table = gt_components.
go_table->display( ).
CATCH cx_salv_msg .
ENDTRY.
" Create data reference for structure (without CELLTAB)!!!
CREATE DATA gdo_handle TYPE HANDLE go_sdescr_new.
REFRESH: gt_components.
CLEAR: gs_comp.
gs_comp-type ?=
cl_abap_structdescr=>describe_by_data_ref( gdo_handle ).
gs_comp-name = 'DATA'.
gs_comp-as_include = abap_true.
APPEND gs_comp TO gt_components.
" Add table type as field to structure ==> complex structure
CLEAR: gs_comp.
gs_comp-type ?= cl_abap_typedescr=>describe_by_data( celltab ).
gs_comp-name = 'CELLTAB'.
APPEND gs_comp TO gt_components.
go_sdescr = cl_abap_structdescr=>create( gt_components ).
go_tdescr = cl_abap_tabledescr=>create( go_sdescr ).
CREATE DATA gdo_handle TYPE HANDLE go_tdescr.
ASSIGN gdo_handle->* TO <gt_outtab_pbo>.
* Dynamic select
SELECT * FROM (p_tabnam) UP TO 10 ROWS
INTO CORRESPONDING FIELDS OF TABLE <gt_outtab_pbo>
WHERE bukrs = '2000'.
PERFORM fill_celltab.
" Create second itab (PAI data)
CREATE DATA gdo_handle TYPE HANDLE go_tdescr.
ASSIGN gdo_handle->* TO <gt_outtab_pai>.
<gt_outtab_pai> = <gt_outtab_pbo>. " PAI data = PBO data
" Renumbering of customer makes it easier to spot the differences
LOOP AT <gt_outtab_pai> ASSIGNING <gs_outtab>.
ASSIGN COMPONENT 'KUNNR' OF STRUCTURE <gs_outtab> TO <gd_fld>.
<gd_fld> = syst-tabix. " new numbering of customers
ENDLOOP.
LOOP AT <gt_outtab_pbo> ASSIGNING <gs_outtab>.
ASSIGN COMPONENT 'KUNNR' OF STRUCTURE <gs_outtab> TO <gd_fld>.
<gd_fld> = syst-tabix. " new numbering of customers
ENDLOOP.
DELETE <gt_outtab_pbo> INDEX 3. " ==> 3rd row in PAI data is new
DELETE <gt_outtab_pai> INDEX 7. " ==> 7th row in PBO data is DELE
" Shuffle data from outtab to corresponding itab (w/o CELLTAB)
PERFORM shuffle_outtab_to_itab.
" List output
PERFORM write_list.
EXIT.
" Simplified version of table creation:
CLEAR: gdo_data.
UNASSIGN <gt_outtab_pbo>.
CREATE DATA gdo_data TYPE STANDARD TABLE OF (p_tabnam).
ASSIGN gdo_data->* TO <gt_outtab_pbo>.
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form FILL_CELLTAB
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM fill_celltab .
* define local data
DATA:
ls_cell TYPE lvc_s_styl,
lt_celltab TYPE lvc_t_styl.
FIELD-SYMBOLS:
<gs_struc> TYPE ANY,
<lt_celltab> TYPE lvc_t_styl.
" Create dummy entry for local CELLTAB
ls_cell-fieldname = 'BUKRS'.
ls_cell-style = cl_gui_alv_grid=>mc_style_enabled.
INSERT ls_cell INTO TABLE lt_celltab.
LOOP AT <gt_outtab_pbo> ASSIGNING <gs_struc>.
ASSIGN COMPONENT 'CELLTAB' OF STRUCTURE <gs_struc> TO <lt_celltab>.
<lt_celltab> = lt_celltab.
" No MODIFY required because we are working with the field symbol
ENDLOOP.
ENDFORM. " FILL_CELLTAB
*&---------------------------------------------------------------------*
*& Form SHUFFLE_OUTTAB_TO_ITAB
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM shuffle_outtab_to_itab .
go_tdescr = cl_abap_tabledescr=>create( go_sdescr_new ).
CREATE DATA gdo_handle TYPE HANDLE go_tdescr.
ASSIGN gdo_handle->* TO <gt_itab_pbo>.
*
go_tdescr = cl_abap_tabledescr=>create( go_sdescr_new ).
CREATE DATA gdo_handle TYPE HANDLE go_tdescr.
ASSIGN gdo_handle->* TO <gt_itab_pai>.
LOOP AT <gt_outtab_pbo> ASSIGNING <gs_outtab>.
ASSIGN COMPONENT 'DATA' OF STRUCTURE <gs_outtab> TO <gs_itab>.
APPEND <gs_itab> TO <gt_itab_pbo>.
ENDLOOP.
*
LOOP AT <gt_outtab_pai> ASSIGNING <gs_outtab>.
ASSIGN COMPONENT 'DATA' OF STRUCTURE <gs_outtab> TO <gs_itab>.
APPEND <gs_itab> TO <gt_itab_pai>.
ENDLOOP.
ENDFORM. " SHUFFLE_OUTTAB_TO_ITAB
*&---------------------------------------------------------------------*
*& Form WRITE_LIST
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM write_list .
WRITE: / 'PBO data:'.
LOOP AT <gt_itab_pbo> ASSIGNING <gs_itab>.
WRITE: / 'Record No.=', syst-tabix, '==>'.
DO.
ASSIGN COMPONENT syst-index OF STRUCTURE <gs_itab> TO <gd_fld>.
IF ( syst-subrc NE 0 ).
EXIT.
ENDIF.
WRITE: <gd_fld>.
ENDDO.
ENDLOOP.
SKIP 2.
WRITE: / 'PAI data:'.
LOOP AT <gt_itab_pai> ASSIGNING <gs_itab>.
WRITE: / 'Record No.=', syst-tabix, '==>'.
DO.
ASSIGN COMPONENT syst-index OF STRUCTURE <gs_itab> TO <gd_fld>.
IF ( syst-subrc NE 0 ).
EXIT.
ENDIF.
WRITE: <gd_fld>.
ENDDO.
ENDLOOP.
ENDFORM. " WRITE_LISTRegards
Uwe
‎2007 Jul 06 5:25 AM
hello Uwe Schieferstein ,
thank u so much, my problem is solved with ur code.
regards,
naresh
Message was edited by:
naresh kumar