SAP ABAP DYNAMIC
From SapWiki
EJemplo 01: leer archivo desde servidor separado por tabs, independiente del tipo
types: ty_t001 type t001. DATA lt_t001 TYPE STANDARD TABLE OF ty_t001. PERFORM open_un USING '/tmp/t001_dat2.txt' CHANGING lt_t001. FORM open_un USING p_file CHANGING p_table TYPE ANY TABLE. DATA: lr_structdescr TYPE REF TO cl_abap_structdescr, lr_datadescr TYPE REF TO cl_abap_datadescr, lr_tabledescr TYPE REF TO cl_abap_tabledescr, line_descr TYPE REF TO cl_abap_typedescr. DATA: l_string TYPE string, l_string2 TYPE string, l_campo TYPE string, ld_name TYPE string. FIELD-SYMBOLS: <fs> TYPE any, <wa> TYPE any. DATA: wa_ref TYPE REF TO data. lr_tabledescr ?= cl_abap_tabledescr=>describe_by_data( p_table ). line_descr = lr_tabledescr->get_table_line_type( ). ld_name = line_descr->get_relative_name( ). * get the field list of the table linetype DATA(lt_components) = CAST cl_abap_structdescr( cl_abap_typedescr=>describe_by_name( ld_name ) )->components. CREATE DATA wa_ref TYPE (ld_name). "Suitable work area ASSIGN wa_ref->* TO <wa>. OPEN DATASET p_file FOR INPUT IN TEXT MODE ENCODING DEFAULT WITH SMART LINEFEED. IF sy-subrc <> 0. RETURN. ENDIF. WHILE sy-subrc = 0. READ DATASET p_file INTO l_string. CHECK l_string IS NOT INITIAL. DATA(l_index) = 1. WHILE l_string IS NOT INITIAL. SPLIT l_string AT cl_abap_char_utilities=>horizontal_tab INTO l_string2 l_string. READ TABLE lt_components INTO data(ls_comp) INDEX l_index. IF sy-subrc = 0. ADD 1 TO l_index. CONCATENATE '<WA>' ls_comp-name INTO l_campo SEPARATED BY '-'. ASSIGN (l_campo) TO <fs>. MOVE l_string2 TO <fs> . ELSE. EXIT. ENDIF. ENDWHILE. INSERT <wa> INTO TABLE p_table. ENDWHILE. ENDFORM.