Application Development and Automation 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: 
Read only

error : Program " " not found. while creating Dynamic Table.

Former Member
0 Likes
1,266

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

1 ACCEPTED SOLUTION
Read only

uwe_schieferstein
Active Contributor
0 Likes
1,102

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_LIST

Regards

Uwe

8 REPLIES 8
Read only

Former Member
0 Likes
1,102

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[].

Read only

Former Member
0 Likes
1,102

hi,

inspite of changing it 2 upper case its giving the same eror.

thanx.

regards,

naresh

Read only

Former Member
0 Likes
1,102

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

Read only

0 Likes
1,102

why there are *s in from of REPORT statement

*************************************************************************************************REPORT zasd_credit_memo_list1 NO

Read only

0 Likes
1,102

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 structures

      • Fieldcat (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

Read only

Former Member
0 Likes
1,102

that i used while pasting here, so as to differentiate between my words and the actual code.

thanx

Read only

uwe_schieferstein
Active Contributor
0 Likes
1,103

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_LIST

Regards

Uwe

Read only

Former Member
0 Likes
1,102

hello Uwe Schieferstein ,

thank u so much, my problem is solved with ur code.

regards,

naresh

Message was edited by:

naresh kumar