SAP ABAP FILES
From SapWiki
Contents
- 1 OPEN DATASET & TRANSFER
- 2 Crear archivo de largo fijo
- 3 Clase CL_GUI_FRONTEND_SERVICES
- 4 Crear archivo CSV
- 5 Leer archivo CSV
- 6 Leer archivo Excel
- 7 Leer archivo XML
- 8 Leer Arhivo PDF y Visualizarlo
- 9 Grabar XSTRING en equipo como Binario(XML,PDF,etc.)
- 10 Bajar/Subir archivos servidor
- 11 Obtener vía F4 archivo y directorio en un reporte
OPEN DATASET & TRANSFER
DATA: l_error TYPE string,
lo_x TYPE REF TO cx_root,
l_file TYPE string,
l_nombre TYPE string,
l_butxt TYPE t001-butxt,
l_linea(8000).
OPEN DATASET l_file FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.
IF sy-subrc <> 0.
MESSAGE i000(0k) WITH 'Error al crear archivo' l_file DISPLAY LIKE 'E'.
RETURN.
ENDIF.
LOOP AT gt_csv_tab INTO ls_csv_tab.
TRY.
move ls_csv_tab to l_linea.
TRANSFER l_linea TO l_file.
CATCH cx_sy_codepage_converter_init
cx_sy_conversion_codepage
cx_sy_file_authority
cx_sy_file_io
cx_sy_file_open
cx_sy_file_open_mode
cx_sy_pipe_reopen
cx_sy_too_many_files INTO lo_x.
l_error = lo_x->get_text( ).
MESSAGE i000(0k) WITH 'Error en transferencia de datos' l_error DISPLAY LIKE 'E'.
CLOSE DATASET l_file.
RETURN.
ENDTRY.
ENDLOOP.
CLOSE DATASET l_file.
IF sy-subrc = 0.
MESSAGE i000(0k) WITH 'Archivo creado con éxito' p_file l_nombre DISPLAY LIKE 'S'.
ELSE.
MESSAGE i000(0k) WITH 'Error al crear archivo' l_file DISPLAY LIKE 'E'.
ENDIF.
Crear archivo de largo fijo
TYPES: BEGIN OF ty_data,
field01(11) TYPE c,
field02(50) TYPE c,
field03(80) TYPE c,
field04(50) TYPE c,
END OF ty_data.
DATA gt_filet TYPE ppe_cust_table.
DATA gt_data TYPE TABLE OF ty_data.
DATA wa_data LIKE LINE OF gt_data.
wa_data-field01 = 'HHHHHH'.
wa_data-field03 = 'AAAAAAAAAAAAAA'.
APPEND wa_data TO gt_data.
PERFORM crear_file USING gt_data CHANGING gt_filet.
FORM crear_file USING p_tabla TYPE ANY TABLE
CHANGING p_tabla_csv TYPE ppe_cust_table.
DATA: l_struc_raw_data TYPE char1024,
l_begin TYPE i.
FIELD-SYMBOLS <fs_field> TYPE any.
FIELD-SYMBOLS <ls_envio> TYPE any.
DATA: lr_tab TYPE REF TO data,
lr_typedesc TYPE REF TO cl_abap_typedescr,
lr_tabdesc TYPE REF TO cl_abap_tabledescr,
lr_datadesc TYPE REF TO cl_abap_datadescr,
lr_structdesc TYPE REF TO cl_abap_structdescr.
FIELD-SYMBOLS: <ls_structcomp> TYPE abap_compdescr.
* GET REFERENCE OF p_tabla INTO lr_tab.
* lr_typedesc ?= cl_abap_tabledescr=>describe_by_data_ref( lr_tab ).
lr_typedesc ?= cl_abap_tabledescr=>describe_by_data( p_tabla ).
lr_tabdesc ?= lr_typedesc.
lr_datadesc = lr_tabdesc->get_table_line_type( ).
lr_structdesc ?= lr_datadesc.
LOOP AT p_tabla ASSIGNING <ls_envio>.
CLEAR: l_struc_raw_data .
DO.
READ TABLE lr_structdesc->components ASSIGNING <ls_structcomp> INDEX sy-index.
IF sy-subrc = 0.
ASSIGN COMPONENT <ls_structcomp>-name OF STRUCTURE <ls_envio> TO <fs_field>.
l_struc_raw_data+l_begin = <fs_field>.
l_begin = l_begin + ( <ls_structcomp>-length / 2 ). "1 char = 2 bytes in unicode system
ELSE.
EXIT.
ENDIF.
ENDDO.
l_struc_raw_data+l_begin = cl_bcs_convert=>gc_crlf.
APPEND l_struc_raw_data TO p_tabla_csv.
ENDLOOP.
ENDFORM.