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.