✒️ABAP Los archivos en el servidor y las sentencias OPEN y READ
ABAP Los archivos en el servidor y las sentencias OPEN y READ
ARCHIVOS EN SERVIDOR: LAS SENTENCIAS OPEN Y READ
TRATAMIENTO DE ARCHIVOS EN EL SERVIDOR
En un ambiente real de trabajo, es común la utilización de un servidor de aplicaciones, para trabajar con archivos.
ABAP dispone de una serie de sentencias para el tratamiento de archivos ubicados en el servidor de aplicaciones.
Las principales sentencias para el manejo de archivos en el servidor de aplicaciones son:
OPEN DATASET: para la apertura de archivos del servidor.
READ DATASET: para la lectura de archivos del servidor.
TRANSFER: para transferir datos de archivos al servidor.
DELETE: para borrar archivos del servidor.
CLOSE: para cerrar archivos del servidor.
A continuación veremos en detalle cada una de estas sentencias.
AUDIO: Con la transacción AL11 podemos acceder a los directorios de SAP del servidor e incluso abrir los archivos. Ingresando a la transacción se pueden ver todos los directorios disponibles. Haciendo doble click sobre cualquiera de ellos podemos ver los Archivos que hay adentro. Y si los archivos son de texto, incluso podemos ver su contenido haciendo nuevamente doble click. Si deseamos crear un nuevo directorio seguramente vamos a necesitar que los administradores del sistema SAP nos otorguen los permisos necesarios.
APERTURA DE ARCHIVOS EN EL SERVIDOR
Utilizaremos la sentencia OPEN DATASET para la apertura de archivos. La sintaxis de la sentencia es la siguiente:
OPEN DATASET (archivo) FOR (ACCESS) IN (MODE)
NOTA: Si la apertura del archivo se realizó correctamente, entonces el SY-SUBRC será 0. Caso contrario, será 8.
El nombre del archivo junto con el directorio en donde se encuentra, pueden ingresarse como un literal entre comillas o en una variable. Si no ingresamos el directorio y solo ingresamos el nombre, entonces el sistema intentará abrir el archivo en el directorio en el que corre el servidor de aplicaciones.
Si queremos abrir un archivo para lectura, debemos utilizar la cláusula FOR INPUT, tal como vemos a continuación:
OPEN DATASET (archivo) FOR INPUT IN TEXT (MODE)
NOTA INPUT: El archivo que se intenta abrir debe existir. Caso contrario, el SY-SUBRC será 8. Si el archivo existe y está abierto, el sistema se posicionará al comienzo del archivo.
Por ejemplo:
* Abrir Fichero para lectura
OPEN DATASET p_path FOR INPUT IN TEXT MODE ENCODING DEFAULT.
IF sy-subrc NE 0.
* Error al abrir el archivo
MESSAGE s000(z_prueba) WITH text-004.
ELSE.
En el ejemplo anterior, p_path es un parámetro de la pantalla de selección en donde el usuario ingresa el directorio y nombre del archivo.
NOTA: Es recomendable cerrar todos los archivos que ya están abiertos antes de realizar una re-apertura con la sentencia OPEN DATASET.
Si queremos abrir un archivo para escritura, debemos utilizar la cláusula FOR OUTPUT, asi:
OPEN DATASET (archivo) FOR OUTPUT IN TEXT (MODE)
NOTA OUTPUT: Si el archivo no existe, se creará automáticamente.
Si existe pero está cerrado el contenido será sobrescrito.
Si existe y está abierto, el sistema se posicionará al comienzo del archivo.
Si la apertura se realiza correctamente, entonces el SY-SUBRC será 0. Caso contrario, será 8.
Veamos una ejemplo:
* Abrir Fichero para escritura
OPEN DATASET p_path FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.
IF sy-subrc NE 0.
* Error al abrir el archivo
MESSAGE s000(z_prueba) WITH text-004.
ENDIF.
Si queremos abrir un archivo para agregar información, debemos utilizar la cláusula FOR APPENDING, tal como vemos a continuación:
OPEN DATASET (archivo) FOR APPENDING IN TEXT (MODE)
NOTA APPENDING: Si el archivo no existe, se creará automáticamente.
Si existe pero está cerrado, el sistema lo abrirá y se posicionará al final del mismo.
Si existe y está abierto, el sistema se posicionará al final del archivo.
Siempre el SY-SUBRC será 0.
Veamos un Ejemplo:
* Abrir Fichero para agregar datos
OPEN DATASET p_path FOR APPENDING IN TEXT MODE ENCODING DEFAULT.
IF sy-subrc NE 0.
* Error al abrir el archivo
MESSAGE s000(z_prueba) WITH text-004.
ENDIF.
Existen dos modos de apertura de archivos:
MODO TEXTO
Para abrir un archivo en modo texto, debemos utilizar la cláusula IN_TEXT_MODE, tal como vemos a continuación:
OPEN DATASET <archivo> FOR <acceso> IN TEXT MODE ENCODING DEFAULT
NOTA MODO TEXTO: Si leemos o escribimos en un archivo que ha sido abierto en modo texto, la información es transferida línea a línea
Si utilizamos el modo texto debemos agregar la palabra reservada ENCODING DEFAULT
Veamos un ejemplo:
* Abrir Fichero para lectura
OPEN DATASET p_path FOR INPUT IN TEXT MODE ENCODING DEFAULT.
IF sy-subrc NE 0.
* Error al abrir el archivo
MESSAGE s000(z_prueba) WITH text-004.
ELSE.
MODO BINARIO
Para abrir un archivo en modo binario, debemos utilizar la cláusula IN BINARY MODE, asi:
OPEN DATASET <archivo> FOR <acceso> IN BINARY MODE.
NOTA BINARY: Si leemos o escribimos en un archivo que ha sido abierto en modo binario, la información es transferida byte a byte.
Veamos un ejemplo:
* Abrir Fichero para lectura
OPEN DATASET p_path FOR INPUT IN BINARY MODE.
IF sy-subrc NE 0.
* Error al abrir el archivo
MESSAGE s000(z_prueba) WITH text-004.
ENDIF.
LECTURA DE ARCHIVOS DEL SERVIDOR
Utilizaremos la sentencia READ DATASET para la lectura de archivos del servidor. La sintaxis de la sentencia es la siguiente:
READ DATASET (archivo) INTO (estructura).
NOTA: Para determinar en que variable debemos almacenar los datos que leeremos del archivo, debemos conocer la estructura del archivo que leeremos
Si la lectura se realizó correctamente, entonces el SY-SUBRC será 0. Caso contrario será 8.
Veamos un ejemplo:
* Leo el fichero
DO.
READ DATASET p_path INTO st_archivo.
IF sy-subrc = 0.
MOVE-CORRESPONDING st_archivo TO ti_archivo.
APPEND ti_archivo.
CLEAR: ti_archivo, st_archivo.
ELSE.
EXIT.
ENDIF.
ENDDO.
 
 
 
Sobre el autor
Publicación académica de Alexander Castellanos, en su ámbito de estudios para la Carrera Consultor ABAP.
Alexander Castellanos
Profesión: Ingeniero de Sistemas - Colombia - Legajo: JS42A
✒️Autor de: 67 Publicaciones Académicas
🎓Egresado del módulo:
Certificación Académica de Alexander Castellanos