Sei sulla pagina 1di 17

1|

Qu son las Tablas internas?

Si queremos guardar una coleccin de registros de datos de la misma estructura en memoria, sin necesidad de acceder continuamente a las bases de datos y poder realizar diversas operaciones con este conjunto de informacin, entonces utilizaremos tablas internas.

TABLA INTERNA. Es un objeto de datos que permite guardar en memoria grandes cantidades de registros de datos con la misma estructura. La cantidad de registros mxima esta relacionada con los lmites especificados en la instalacin del sistema. El uso tpico que se le da a una tabla interna es: Para almacenar temporalmente los datos de las bases de datos para un procesamiento futuro. Para estructurar y formatear datos que se mostrarn como salida del programa. Para formatear datos para ser utilizados por otros servicios.

2|

Cmo se declara una Tabla interna?

La sintaxis para su declaracin es la siguiente:

De esta manera definiremos una tabla interna con n lneas en memoria ms una lnea de cabecera o area de trabajo. La cantidad de lneas que se especifican en OCCURS no limitan el tamao de la tabla sino la cantidad de registros que se guardarn en memoria simultaneamente. Por lo general, en el parmetro OCCURS se especifica la cantidad 0 lo que permite trabajar con tablas de gran cantidad de registros.

En el prximo ejemplo declaramos la tabla interna TI_PROVEEDORES.

Otra forma de declarar la misma tabla sera:

3|

Llenado de una tabla interna

Para llenar con datos una tabla interna utilizamos: APPEND <estructura> TO <tabla>: se aade un registro a la tabla interna en la ltima posicin con los valores que tengamos en el area de trabajo. Veamos un ejemplo:

Llenamos la tabla interna con el contenido de una base de datos. Esto lo haremos con la sentencia SELECT que veremos en detalle en la prxima leccin.

4|

Ordenamiento de una tabla interna

Para ordenar una tabla interna utilizamos la sentencia SORT.

En el ejemplo anterior ordenamos la tabla TI_PROVEEDORES de forma descendente por DNI lo cual invertir el orden en el que fueron cargados originalmente los registros. Para ordenar de menor a mayor hay que utilizar la clasula ASCENDING.

5|

Procesamiento de una tabla interna

Para recorrer una tabla interna y procesar registro a registro utilizaremos la sentencia LOOP-ENDLOOP.

Si no existe ningn registro que cumpla la condicin especificada en la clasula WHERE, el SY-SUBRC ser distinto de cero.

6|

Lectura de una tabla interna

Para leer un registro concreto de una tabla interna sin necesidad de recorrerla utilizamos la sentencia READ TABLE.

Si se encuentra el registro buscado, el SY-SUBRC ser cero, caso contrario, ser distinto de cero. Si se desea leer los datos que se encuentran en una posicin particular de la tabla se utilizar la clasula INDEX tal como vemos en el siguiente ejemplo.

El agregado de la Clasula BINARY SEARCH en la sentencia READ TABLE hace que la bsqueda sea ampliamente ms eficiente. Para ms informacin sobre la sentencia presionar F1.

7|

Modificando una tabla interna

Para modificar el contenido de un registro de una tabla interna utilizamos la sentencia MODIFY. En el siguiente ejemplo modificamos el campo DNI correspondiente al primer registro de la tabla interna.

Si el registro que se intenta modificar con MODIFY no existe, se crear un nuevo registro en la tabla.

Para insertar un registro en una posin determinada de una tabla interna utilizamos la sentencia INSERT. En el siguiente ejemplo insertamos un registro en la posicin 2.

Para borrar el contenido de un registro de una tabla interna utilizamos la sentencia DELETE. En el siguiente ejemplo borramos el registro de la tabla interna de proveedores con DNI igual a 20857492.

Para borrar todo el contenido de una tabla interna utilizamos la sentencia REFRESH. En el siguiente ejemplo inicializamos la tabla interna TI_PROVEEDORES.

Para saber cuantos registros tiene una tabla interna utilizamos la sentencia DESCRIBE TABLE. En el siguiente ejemplo declaramos V_LINEAS que es la variable que va a contener la cantidad de filas de la tabla interna TI_PROVEEDORES luego de ejecutar la sentencia DESCRIBE TABLE.

Los datos en el sistema SAP

Podemos clasificar los datos del sistema Sap en tres tipos: datos maestros, datos de movimientos y datos del sistema o de control. Datos maestros: son datos que no se modifican muy a mendo. Por ejemplo: datos de materiales, cuentas, bancos, clientes, etc. Datos de movimientos: son datos muy voltiles y con gran volmen de generacin. Por ejemplo: datos de facturas, pedidos, etc. Datos del sistema o de control: son datos que tienen que ver con la configuracin del sistema.

2|

Qu es el diccionario de datos?

El diccionario de datos permite la administracin de todas las definiciones de datos usadas en el sistema R/3. Se accede a l a travs de la transaccin SE11 tal como vemos a continuacin:

Aqu, podemos crear, modificar y visualizar tablas base de datos, Vistas, Estructuras, Elementos de datos, Grupos de tipos, Dominios, Ayudas para bsqueda y Objetos de bloqueo.

3| Cmo crear una tabla base de datos, un elemento de datos y un dominio?


Vamos a crear la tabla ZTABLA_USUARIOS. Para esto ingresamos el nombre de la nueva tabla a la derecha del texto "Database table" y presionamos el botn . Aqui, veremos la siguiente pantalla:

Completamos la Short Description "Descripcin breve" de la nueva tabla con el texto "Tabla de usuarios". En la solapa Delivery and Maintenance "Entrega y actualizacin" completamos la Delivery Class "Clase de entrega" con "A" que significa que la tabla es de aplicacin y que tiene datos maestros y de movimientos. Existen otras opciones que podremos ver si presionamos el botn que aparece al posicionar el cursor en el cuadro de texto. En Data Browser/Table View Mant. elegiremos la opcin "Display/Maintenance Allowed" esto significa que se podr actualizar el contenido de la tabla mediante la transaccin SM30. En la solapa "Campos" vamos a ingresar los campos que va a tener nuestra tabla. Estos van a ser: DNI, NOMBRE_APE, ESTADO_USU y el MANDANTE que no debe faltar en ningna tabla.

Todas las tablas base de datos que creemos deben tener el mandante como primer campo de la tabla. Este debe ser parte de la clave. A cada campo de la tabla se le puede asignar un tipo instalado seleccionando la lnea del campo y presionando el botn , como podra ser CHAR de 30 posiciones o crear un elemento de datos para cada campo. En nuestra tabla, crearemos los elementos de datos Z_DNI, Z_NOMBRE_APE y Z_ESTADO_USU. Tambin es posible utilizar elementos de datos que ya existen en el sistema, como es el caso del MANDT. Para crear el elemento de datos Z_DNI haremos doble click sobre el elemento, el sistema nos ofrecer guardar la tabla, diremos que s y le asignaremos como paquete objeto local. Luego nos aparecer la siguiente ventana de dialogo:

Presionaremos la opcin "Yes" y nos aparecer la siguiente pantalla:

En la Descripcin breve completaremos una descripcin del contenido del campo. Luego podemos elegir entre crear un dominio para este campo, utilizar un tipo instalado o predefined type ya existente en el sistema o utilizar un tipo referencia o Reference type. En este caso utilizaremos un tipo instalado y le asignaremos el tipo de datos NUMC de 8 posiciones. Luego iremos a la solapa Field Label o Denom.campo y actualizaremos los denominadores de campo que son los ttulos con los que se ver el campo cuando se visualice en una transaccin o reporte.

En este caso los denominadores de campo son todos iguales pero la idea es dar una descripcin ms detallada del breve a la cabecera. Por ltimo activaremos el elemento de datos mediante el botn y nos aparecer una nueva ventana de dilogo donde confirmaremos la activacin seleccionando el elemento a activar y presionando el botn . Para el campo NOMBRE_APE crearemos el elemento de datos Z_NOMBRE_APE tal como hicimos con Z_DNI. Para el campo ESTADO_USU, crearemos el elemento de datos Z_ESTADO_USU tal como hicimos con Z_DNI y tambin crearemos el dominio ZZ_ESTADO_USU para asociarle el ambito de valores: A=Activo, I=Inactivo y N=Anulado.

El objetivo de crear un dominio es asociarle un ambito de valores, sino es preferible utilizar un tipo instalado. Si hacemos doble click sobre ZZ_ESTADO_USU el sistema nos preguntar en una ventana de dilogo si deseamos crear el dominio. Contestaremos que si y veremos la siguiente pantalla:

Completamos la Descripcin breve del dominio con "Estado del usuario". El tipo de datos ser CHAR de 1 posicin. Luego en la solapa Value Range o Ambito de valores completaremos el ambito de los valores del dominio.

Por ltimo activamos el dominio ZZ_ESTADO_USU, luego activamos el elemento de datos Z_ESTADO_USU y finalmente lo que nos queda

antes de activar la tabla ZTABLA_USUARIOS es configurar las opciones tcnicas de la tabla presionando el botn .

Aqu completaremos la Clase de datos con "APPL0" que es la correspondiente a "Datos maestros, tablas transparentes" y la Categ.tamao con "3" que es el valor correspondiente a una tabla de 110.000 a 460.000 registros de datos.

Finalmente activamos la tabla ZTABLA_USUARIOS y felicitaciones acabamos de crear nuestra primera tabla Z.

1|

La sentencia SELECT

Existen en Abap un conjunto de sentencias que se utilizan para acceder a las bases de datos. La principal sentencia es SELECT, cuya sintaxis es la siguiente:

Si quisieramos obtener todos los registros de la tabla ZTABLA_USUARIOS usariamos el siguiente cdigo:

Donde TI_USUARIOS es una tabla interna del mismo tipo de la tabla ZTABLA_USUARIOS. El asterisco indica que se obtendran todos los campos de la tabla. La clasula INTO TABLE se utiliza cuando el resultado de la consulta se guarda en una tabla interna. Evitar el uso del * cuando solo se requiera obtener algunos campos de la tabla origen. En la sentencia anterior, en caso de existir registros en la tabla ZTABLA_USUARIOS, estos pisarn el contenido de la tabla interna TI_USUARIOS. Podra ocurrir que queramos conservar el contenido de la tabla interna TI_USUARIOS luego de reiteradas selecciones. En este caso tendriamos que usar la clasula APPENDING TABLE en lugar de INTO TABLE. Es recomendable hacer CLEAR y REFRESH de la tabla interna antes de realizar la seleccin. Si quisieramos obtener de todos los campos de la tabla ZTABLA_USUARIOS el campo DNI deberiamos crear una tabla auxiliar solo con el campo DNI para alojar el resultado de la consulta.

Siempre despus de un SELECT se debe preguntar por el SY-SUBRC para saber como

proseguir. Si quisieramos obtener la primera ocurrencia de la tabla ZTABLA_USUARIOS donde se cumpla determinada condicin debemos usar la clasula SINGLE como vemos a continuacin:

El resultado de esta consulta ser guardado en la estructura WA_USUARIOS que es del mismo tipo que la tabla ZTABLA_USUARIOS. Si quisieramos hacer la misma consulta anterior pero necesitamos obtener solo el campo DNI entonces ya no sera necesaria la estructura WA_USUARIOS sino que guardariamos el resultado en la variable V_DNI tal como vemos en el siguiente ejemplo:

Si quisieramos obtener de una tabla los registros que cumplan una condicin pero queremos guardarlos en una tabla interna que no tiene la misma estructura que la tabla, entonces tenemos que usar la clasula INTO CORRESPONDING FIELDS OF TABLE.

En el ejemplo anterior, la tabla interna TI_USUARIOS2 est compuesta por los campos NOMBRE_APE y ESTADO_USU. Supongamos que tenemos un reporte que tiene la pantalla de seleccin:

Donde Nombre y Apellido es el parameter P_NOMAPE y Estado Usuario es el select-options S_ESTADO. Si quisieramos hacer una seleccin a la tabla ZTABLA_USUARIOS en base a lo que los usuarios ingresan por pantalla hariamos lo siguiente:

La clasula IN se utiliza para los select-options en las condiciones de un select. Ahora, si quisieramos obtener el usuario activo con DNI ms alto tendriamos que usar la clasula MAX de la siguiente forma:

Si quisieramos saber la cantidad de usuarios con estado = "activo", debemos usar la clasula COUNT de la siguiente manera:

Si quisieramos obtener de una tabla todos los registros que existan en una tabla interna cargada con datos, entonces debemos utilizar la sentencia FOR ALL ENTRIES IN que nos permite especificar condiciones en tiempo de ejecucin. Veamos un ejemplo:

Si quisieramos obtener todos los registros que cumplan con un patrn de texto en alguno de sus campos, debemos utilizar la sentencia LIKE como vemos en el siguiente ejemplo:

Potrebbero piacerti anche