jueves, diciembre 31, 2009

FICHEROS - Leer y Escribir en local y servidor

Grupo de funciones EPSF.

DATA: gt_itab TYPE STANDARD TABLE OF char2048.
DATA: gs_itab TYPE char2048.

*&---------------------------------------------------------------------*
*& Form recuperar_datos_fichero_s
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM recuperar_datos_fichero_s.

DATA: l_filename TYPE string.

l_filename = p_path_o.
REFRESH gt_itab.
OPEN DATASET l_filename FOR INPUT IN TEXT MODE ENCODING DEFAULT.
IF sy-subrc EQ 0.
DO.
CLEAR: gs_itab.
READ DATASET l_filename INTO gs_itab.
IF sy-subrc NE 0.
EXIT.
ELSE.
APPEND gs_itab TO gt_itab.
ENDIF.
ENDDO.
ELSE.
g_error = 'X'.
MESSAGE i000(zmm) WITH 'Error al abrir fichero:'
'No existe fichero'
'l_filename'.
ENDIF.

ENDFORM. "recuperar_datos_fichero_s
*&---------------------------------------------------------------------*
*& Form recuperar_datos_fichero
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM recuperar_datos_fichero_l.

DATA: l_filename TYPE string.

l_filename = p_path_o.
REFRESH gt_itab.
CALL METHOD cl_gui_frontend_services=>gui_upload
EXPORTING
filename = l_filename
CHANGING
data_tab = gt_itab
EXCEPTIONS
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
separator_not_allowed = 10
header_too_long = 11
unknown_dp_error = 12
access_denied = 13
dp_out_of_memory = 14
disk_full = 15
dp_timeout = 16
OTHERS = 17.

IF sy-subrc <> 0.
g_error = 'X'.
MESSAGE ID sy-msgid
TYPE 'I' "sy-msgty
NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

ENDFORM. "recuperar_datos_fichero

*&---------------------------------------------------------------------*
*& Form guardar_datos_fichero
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM guardar_datos_fichero_s.

DATA: l_filename TYPE string.

l_filename = p_path_d.

OPEN DATASET l_filename FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.
IF sy-subrc EQ 0.
LOOP AT gt_itab INTO gs_itab.
TRANSFER gs_itab TO l_filename.
ENDLOOP.
CLOSE DATASET l_filename.
ELSE.
g_error = 'X'.
MESSAGE i000(zmm) WITH 'Error al crear fichero'
'l_filename'.
ENDIF.

ENDFORM. "guardar_datos_fichero_L

*&---------------------------------------------------------------------*
*& Form guardar_datos_fichero_L
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM guardar_datos_fichero_l.

DATA: l_filename TYPE string.

l_filename = p_path_d.
CALL METHOD cl_gui_frontend_services=>gui_download
EXPORTING
filename = l_filename
filetype = 'ASC'
CHANGING
data_tab = gt_itab
EXCEPTIONS
file_write_error = 1
no_batch = 2
gui_refuse_filetransfer = 3
invalid_type = 4
no_authority = 5
unknown_error = 6
header_not_allowed = 7
separator_not_allowed = 8
filesize_not_allowed = 9
header_too_long = 10
dp_error_create = 11
dp_error_send = 12
dp_error_write = 13
unknown_dp_error = 14
access_denied = 15
dp_out_of_memory = 16
disk_full = 17
dp_timeout = 18
file_not_found = 19
dataprovider_exception = 20
control_flush_error = 21
not_supported_by_gui = 22
error_no_gui = 23
OTHERS = 24.

IF sy-subrc <> 0.
g_error = 'X'.
MESSAGE ID sy-msgid
TYPE sy-msgty
NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

ENDFORM. "guardar_datos_fichero