Application Development 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: 

GENERATE_SUBPOOL_DIR_FULL

former_member216168
Active Participant
0 Kudos

Hi guys,

I have an issue and I'd like some suggestions... I'm using cl_alv_table_create=>create_dynamic_table but I have a problem with 36 subroutine pool generation limit... (ECC 6.0 / SAP_ABA 700 SAPKA70022)


I found some posts but, nothing worked yet:


http://scn.sap.com/thread/20834



Does anyone know if exist some way to refresh this subroutines after use that method?

Thanks!


METHOD converter_csv_al11_itab.

*--> IM_T_CSV TYPE TEXTLINE_T

*--> EX_W_SAP TYPE ANY

*<-- EX_T_SAP TYPE STANDARD TABLE

  DATA:

    obj_csv_table_struct  TYPE REF TO data               ,

    obj_tl_csv_table_desc TYPE REF TO cl_abap_tabledescr ,

    obj_wl_csv_table_desc TYPE REF TO cl_abap_structdescr,

    obj_tl_dinamica       TYPE REF TO data               ,

    obj_wl_dinamica       TYPE REF TO data               .

  DATA:

    tl_csv_campos    TYPE abap_compdescr_tab,

    tl_csv_em_coluna TYPE table_of_strings  ,

    tl_fieldcatalog  TYPE lvc_t_fcat        .

  DATA:

    wl_csv_campos    TYPE abap_compdescr          ,

    wl_csv_em_coluna TYPE LINE OF table_of_strings,

    wl_fieldcatalog  TYPE lvc_s_fcat              ,

    wl_csv           TYPE LINE OF textline_t      .

  DATA:

    vl_indice      TYPE i        ,

    vl_qtd_linhas  TYPE i        ,

    vl_nome_campo  TYPE char30   ,

    vl_pular_linha TYPE abap_bool.

  FIELD-SYMBOLS:

    <fs_csv_table_struct> TYPE STANDARD TABLE,

    <fs_tl_dinamica>      TYPE STANDARD TABLE,

    <fs_wl_dinamica>      TYPE ANY           ,

    <fs_campo_dinamico>   TYPE ANY           .

  CONSTANTS:

    c_csv_separador   TYPE char1     VALUE ';'   ,

    c_csv_esc_char    TYPE char1     VALUE '"'   ,

    c_csv_num_cols    TYPE i         VALUE 999999,

    c_csv_skip_header TYPE abap_bool VALUE ' '   .

* Determina a estrutura da tabela de destino

  GET REFERENCE OF ex_t_sap INTO obj_csv_table_struct.

  ASSIGN obj_csv_table_struct->* TO <fs_csv_table_struct>.

  obj_tl_csv_table_desc ?= cl_abap_structdescr=>describe_by_data_ref( obj_csv_table_struct ).

  obj_wl_csv_table_desc ?= obj_tl_csv_table_desc->get_table_line_type( ).

  tl_csv_campos = obj_wl_csv_table_desc->components.

  LOOP AT tl_csv_campos INTO wl_csv_campos             .

    wl_fieldcatalog-fieldname = wl_csv_campos-name     .

    wl_fieldcatalog-inttype  = wl_csv_campos-type_kind.

    wl_fieldcatalog-intlen   = wl_csv_campos-length   .

    wl_fieldcatalog-decimals = wl_csv_campos-decimals .

    APPEND wl_fieldcatalog TO tl_fieldcatalog          .

  ENDLOOP.

* Cria uma tabela dinâmica

  CALL METHOD cl_alv_table_create=>create_dynamic_table

    EXPORTING

      it_fieldcatalog          = tl_fieldcatalog

    IMPORTING

      ep_table                 = obj_tl_dinamica

    EXCEPTIONS

      generate_subpool_dir_full = 1

      OTHERS                   = 2.

  CHECK obj_tl_dinamica IS NOT INITIAL.

  ASSIGN obj_tl_dinamica->* TO <fs_tl_dinamica>.

  CREATE DATA obj_wl_dinamica LIKE LINE OF <fs_tl_dinamica>.

  ASSIGN obj_wl_dinamica->* TO <fs_wl_dinamica>.

  LOOP AT im_t_csv INTO wl_csv.

*   Converte as linhas do arquivo CSV em colunas

    CALL FUNCTION 'RSDS_CONVERT_CSV'

      EXPORTING

        i_data_sep      = c_csv_separador

        i_esc_char      = c_csv_esc_char

        i_record        = wl_csv

        i_field_count   = c_csv_num_cols

      IMPORTING

        e_t_data        = tl_csv_em_coluna

      EXCEPTIONS

        escape_no_close = 1

        escape_improper = 2

        conversion_error = 3

        OTHERS          = 4.

    vl_indice = 1.

    DESCRIBE TABLE tl_csv_em_coluna LINES vl_qtd_linhas.

*   Armazena os campos da tabela CSV na tabela dinâmica

    LOOP AT tl_csv_campos INTO wl_csv_campos.

      MOVE wl_csv_campos-name TO vl_nome_campo.

      ASSIGN COMPONENT vl_nome_campo

          OF STRUCTURE <fs_wl_dinamica>

                    TO <fs_campo_dinamico>.

      READ TABLE tl_csv_em_coluna

      INDEX vl_indice

      INTO wl_csv_em_coluna.

      IF vl_indice <= vl_qtd_linhas.

        <fs_campo_dinamico> = wl_csv_em_coluna.

      ELSE.

        <fs_campo_dinamico> = space.

      ENDIF.

      vl_indice = vl_indice + 1.

    ENDLOOP.

*   Move as linhas da tabela dinâmica para a tabela final

    MOVE-CORRESPONDING <fs_wl_dinamica> TO ex_w_sap.

    APPEND ex_w_sap TO ex_t_sap.

  ENDLOOP.

ENDMETHOD.

1 ACCEPTED SOLUTION

Former Member
0 Kudos

Hi

cl_alv_table_create=>create_dynamic_table is an old "method" to create an internal table dynamically:

this class generates a subroutine and as you've seen there's a limit,


but you're using classes like cl_abap_tabledescr, so you can use them in order to generate the table, you don't need to use that method:


You need to insert the components of your table in variable like:



FIELD-SYMBOLS: <FS_WA> TYPE ANY.

FIELD-SYMBOLS: <FS_ITAB> TYPE TABLE.


DATA:  MY_DYN_WA            TYPE REF TO DATA.

DATA:  MY_DYN_STRUCT    TYPE REF TO CL_ABAP_STRUCTDESCR,

DATA:  MY_DYN_TAB            TYPE REF TO CL_ABAP_TABLEDESCR

DATA: LT_COMPONENTS   TYPE CL_ABAP_STRUCTDESCR=>COMPONENT_TABLE.

instead of to use ALV catalog

So you can create a structure;


MY_DYN_STRUCT = CL_ABAP_STRUCTDESCR=>CREATE( P_COMPONENTS = LT_COMPONENTS

                                        P_STRICT     = 'X' )..

CREATE DATA MY_DYN_WA TYPE HANDLE MY_DYN_STRUCT

ASSIGN MY_DYN_WA ->* TO  <FS_WA>.

or a table:


MY_DYN_TAB = CL_ABAP_TABLEDESCR=>CREATE( P_LINE_TYPE = MY_DYN_STRUCT ).

CREATE DATA MY_DYN_TAB TYPE HANDLE MY_DYN_TAB.

ASSIGN MY_DYN_TAB->* TO  <FS_ITAB>.

4 REPLIES 4

Former Member
0 Kudos

Hi

cl_alv_table_create=>create_dynamic_table is an old "method" to create an internal table dynamically:

this class generates a subroutine and as you've seen there's a limit,


but you're using classes like cl_abap_tabledescr, so you can use them in order to generate the table, you don't need to use that method:


You need to insert the components of your table in variable like:



FIELD-SYMBOLS: <FS_WA> TYPE ANY.

FIELD-SYMBOLS: <FS_ITAB> TYPE TABLE.


DATA:  MY_DYN_WA            TYPE REF TO DATA.

DATA:  MY_DYN_STRUCT    TYPE REF TO CL_ABAP_STRUCTDESCR,

DATA:  MY_DYN_TAB            TYPE REF TO CL_ABAP_TABLEDESCR

DATA: LT_COMPONENTS   TYPE CL_ABAP_STRUCTDESCR=>COMPONENT_TABLE.

instead of to use ALV catalog

So you can create a structure;


MY_DYN_STRUCT = CL_ABAP_STRUCTDESCR=>CREATE( P_COMPONENTS = LT_COMPONENTS

                                        P_STRICT     = 'X' )..

CREATE DATA MY_DYN_WA TYPE HANDLE MY_DYN_STRUCT

ASSIGN MY_DYN_WA ->* TO  <FS_WA>.

or a table:


MY_DYN_TAB = CL_ABAP_TABLEDESCR=>CREATE( P_LINE_TYPE = MY_DYN_STRUCT ).

CREATE DATA MY_DYN_TAB TYPE HANDLE MY_DYN_TAB.

ASSIGN MY_DYN_TAB->* TO  <FS_ITAB>.

0 Kudos

Thank you very much! I did it one time but I have no idea why I choose cl_alv_table_create


METHOD converter_csv_al11_itab.

*--> IM_T_CSV TYPE TEXTLINE_T

*--> EX_W_SAP TYPE ANY

*<-- EX_T_SAP TYPE STANDARD TABLE

*----------------------------------------------------------------------

* Tabelas Internas

*----------------------------------------------------------------------

  DATA:

    tl_csv_campos    TYPE abap_compdescr_tab,

    tl_csv_em_coluna TYPE table_of_strings  .

*----------------------------------------------------------------------

* Field-Symbols / Work-Areas

*----------------------------------------------------------------------

  FIELD-SYMBOLS:

    <fs_csv_table_struct> TYPE STANDARD TABLE,

    <fs_wl_dinamica>      TYPE ANY           ,

    <fs_campo_dinamico>   TYPE ANY           .

  DATA:

    wl_csv_campos    TYPE abap_compdescr          ,

    wl_csv_em_coluna TYPE LINE OF table_of_strings,

    wl_csv           TYPE LINE OF textline_t      .

*----------------------------------------------------------------------

* Objetos

*----------------------------------------------------------------------

  DATA:

    obj_tl_csv_table_desc TYPE REF TO cl_abap_tabledescr ,

    obj_wl_csv_table_desc TYPE REF TO cl_abap_structdescr,

    obj_csv_table_struct  TYPE REF TO data               ,

    obj_wl_dinamica       TYPE REF TO data               ,

    obj_excp              TYPE REF TO cx_root            .

*----------------------------------------------------------------------

* Variáveis

*----------------------------------------------------------------------

  DATA:

    vl_indice     TYPE i     ,

    vl_qtd_linhas TYPE i     ,

    vl_nome_campo TYPE char30,

    vl_erro       TYPE string.

*----------------------------------------------------------------------

* Constantes

*----------------------------------------------------------------------

  CONSTANTS:

    c_csv_separador TYPE char1 VALUE ';'   ,

    c_csv_esc_char  TYPE char1 VALUE '"'   ,

    c_csv_num_cols  TYPE i     VALUE 999999.

*----------------------------------------------------------------------

* Início

*----------------------------------------------------------------------

  TRY.

*     Determina a estrutura da tabela de destino

      GET REFERENCE OF ex_t_sap INTO obj_csv_table_struct.

      ASSIGN obj_csv_table_struct->* TO <fs_csv_table_struct>.

      obj_tl_csv_table_desc ?= cl_abap_structdescr=>describe_by_data_ref( obj_csv_table_struct ).

      obj_wl_csv_table_desc ?= obj_tl_csv_table_desc->get_table_line_type( ).

      tl_csv_campos = obj_wl_csv_table_desc->components.

      obj_tl_csv_table_desc = cl_abap_tabledescr=>create( p_line_type = obj_wl_csv_table_desc

                                                          p_table_kind = cl_abap_tabledescr=>tablekind_std

                                                          p_unique    = abap_false ) .

      CREATE DATA obj_wl_dinamica TYPE HANDLE obj_wl_csv_table_desc.

      ASSIGN obj_wl_dinamica->* TO <fs_wl_dinamica>.

    CATCH cx_sy_table_creation INTO obj_excp.

      vl_erro = obj_excp->get_text( ).

  ENDTRY.

  LOOP AT im_t_csv INTO wl_csv.

*   Converte as linhas do arquivo CSV em colunas

    CALL FUNCTION 'RSDS_CONVERT_CSV'

      EXPORTING

        i_data_sep      = c_csv_separador

        i_esc_char      = c_csv_esc_char

        i_record        = wl_csv

        i_field_count   = c_csv_num_cols

      IMPORTING

        e_t_data        = tl_csv_em_coluna

      EXCEPTIONS

        escape_no_close = 1

        escape_improper = 2

        conversion_error = 3

        OTHERS          = 4.

    vl_indice = 1.

    DESCRIBE TABLE tl_csv_em_coluna LINES vl_qtd_linhas.

*   Armazena os campos da tabela CSV na tabela dinâmica

    LOOP AT tl_csv_campos INTO wl_csv_campos.

      MOVE wl_csv_campos-name TO vl_nome_campo.

      ASSIGN COMPONENT vl_nome_campo

          OF STRUCTURE <fs_wl_dinamica>

                    TO <fs_campo_dinamico>.

      READ TABLE tl_csv_em_coluna

      INDEX vl_indice

      INTO wl_csv_em_coluna.

      IF vl_indice <= vl_qtd_linhas.

        <fs_campo_dinamico> = wl_csv_em_coluna.

      ELSE.

        <fs_campo_dinamico> = space.

      ENDIF.

      vl_indice = vl_indice + 1.

    ENDLOOP.

*   Move as linhas da tabela dinâmica para a tabela final

    MOVE-CORRESPONDING <fs_wl_dinamica> TO ex_w_sap.

    APPEND ex_w_sap TO ex_t_sap.

  ENDLOOP.

ENDMETHOD.

0 Kudos

Yes

I suppose so too,

infact I couldn't undestand why your code was a mix between two different ways to create a table dynamically

Max

ashutosh_mishra4
Participant

Hi,

I resolved my same issue using below code .Might be it will be helpful for some one.

IF lv_query_table IS NOT INITIAL.

DATA(comp_tab1) = CAST cl_abap_structdescr( cl_abap_typedescr=>describe_by_name(
lv_query_table ) )->get_components( ).
DATA(struct_type) = cl_abap_structdescr=>create( comp_tab1 ).
DATA(table_type) = cl_abap_tabledescr=>create( struct_type ).

CREATE DATA lt_dataref TYPE HANDLE table_type.
IF lt_dataref IS NOT INITIAL.

ASSIGN lt_dataref->* TO <lfs_dyn_table>.

CREATE DATA lt_new_line LIKE LINE OF <lfs_dyn_table>.
ASSIGN lt_new_line->* TO <lfs_dyn_wa>.
ENDIF.

endif.