Skip to Content
0
Sep 03, 2014 at 01:10 PM

GENERATE_SUBPOOL_DIR_FULL

869 Views

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.