Está en la página 1de 8

ABAP. Tablas internas.

TABLAS INTERNAS. Una tabla interna es una tabla temporal en la memoria del servidor de aplicaciones. Es creada y mantenida por un programa durante la ejecucin, y es descartada cuando el programa termina. Como una tabla de bases de datos, una tabla interna consiste de varios registros con la misma estructura, poro sus datos desaparecen cuando el programa termina. Se usa como almacen temporal para manipular datos, o como un buffer temporal privado. Una tabla interna se compone de un cuerpo y una cabecera opcional.. El cuerpo es el que almacena los registros de la tabla interna. Normalmente cuando se habla de tabla interna, se refiere al cuerpo de la tabla interna. La cabecera de la tabla interna es un unico registro que se utiliza para aadir y recoger datos del cuerpo de la tabla interna. Como crear una basica tabla interna: Creando con data un field string, podemos crear una tabla interna con la sintaxis: con header: begin of it1 occurs n. data it1 like fs1 occurs n with header line. sin header: data it1 like fs1 occurs n. Pienso que no necesita explicacin. El numero de registros simplemente es orientativo, pese a que es posible que haya algn problema cuando nos pasamos este nmero, por ejemplo que no haga el rolling completo. (consultar versiones) Es importante el nmero de registros (puede ser incluso cero) para la 'perfomance'. La mayor confusin con respecto a las tablas internas est en que el cuerpo y la cabecera se llaman igual, pero esto no es problema porque la propia codificacin nos dice si estamos usando el cuerpo o la cabecera, por ejemplo los asignamientos de campos de las tablas internas siempre se refieren al header. Aadir datos a una tabla interna con la sentencia append. append it. Aade los datos introducidos en la cabecera it (usar it como si fuera un field string) al final de la tabla it. append wa to it Aade los datos de wa (un field string conla misma estructura que it).

append initial line to it Aade un registro en 'blanco' a la tabla interna.

sy-tabix es una variable del sistema que nos dice que numero de registro es el que acabamos de aadir. Leyendo datos de una tabla interna Sentencia loop at loop at it [into wa] [from m] [to n] [where exp]. --endloop. donde:

it es una tabla interna wa es el nombre del work area (si se omite, por defecto es el header). m y n son enteros literales,constantes o variables representando numeros de registros. exp es una expresin lgica restrigiendo el numero de registros. --- Son lineas de codigo que se ejecutan una vez por registro de la tabla interna. Mas explicaciones:

wa tiene que tener la misma estructura que la tabla interna. wa puede ser la cabecera de la tabla interna. Si no se expecifica work area se usa por defecto la cabecera.. Si from no se especifica es el primer registro Si to no se especifica es el ultimo registro. En la expresion logica, los componentes os subcampos de la it no tienen que escribirse it-componente, sino componente. Incluso da error si se hace asi. En exp, cualquie uso de los componentes de la tabla tiene que estar a la izquierda del operador relacin. sy-tabix nos muestra en cualquier momento el numero de registro por el que vamos. Si hay bucles anidados, nos da el del bucle en el que estamos. Despues del bucle, es cero si se han leido registro y no-cero si no se ha leido ninguno (comprobar). En la condicin, hay que intentar que no se hagan transformaciones que no llegen a hacer el program amuy pesado.

Sentencias del control de bucle. Sentencias que alteran el bucle de proceso de tablas internas

Statement
exit Continue Check exp

Effect Termina el bucle y sigue en la linea siguiente a endloop El programa va inmediatamente a la sentencia endloop y continuea el siguiente registro. Si no hay mas, linea siguiente a endloop. Si if es true, el proceso continua y si no, lo mismo que continue.

Sentencia read table : Se usa para leer un solo registro de una tabla interna. read table it [into wa] [index i | with key keyexp [binary search] ] [comparing cmpexp] [transporting texp].

it es una tabla interna wa es un work area i es un nmero de registro. keyexp una condicin para buscar el registro cmpexp es una expresion de comparacin de test sobre el registro encontrado. texp es una expresion que representa los campos que se transportan al work area despues que el registro ha sido encontrado. Si comparing y transporting son especificados primero se realiza el comparing.

read table con la opcion index


En una tabla interna el indice de registros es el numero de registro de cada registro.En la sentencia read table , index i , especifica el registro numero i. Ejemplo:

read table it index 7


lee el registro 7 en cabecera. Si es correcto: sy-subrc=0 y sy-tabix=i

Ejemplo: REPORT . data: begin of mitabla occurs 10, cliente(4),

nombre(20), importe type i, end of mitabla. mitabla-cliente = append mitabla. mitabla-cliente = append mitabla. mitabla-cliente = append mitabla. mitabla-cliente = append mitabla. mitabla-cliente = 5000. append mitabla. mitabla-cliente = append mitabla. '0001'. mitabla-nombre = 'pepito perez'. mitabla-importe = 1000. '0002'. mitabla-nombre = 'antonio leches'. mitabla-importe = 2000. '0003'. mitabla-nombre = 'ramiro oveja'. mitabla-importe = 3000. '0004'. mitabla-nombre = 'jesus boina'. mitabla-importe = 4000. '0005'. mitabla-nombre = 'remigio gutierrez'. mitabla-importe =

'0006'. mitabla-nombre = 'wenceslao roto'. mitabla-importe = 6000.

read table mitabla index 3. write: /, / 'sy-subrc =', sy-subrc, / 'sy-tabix =', sy-tabix, / mitabla-cliente, / mitabla-nombre. Resultado: sy-subrc=0 sy-tabix=3 0003 ramiro obeja Si ejecutamos con read table mitabla index 9. cRead

table con la opcion key

Si se especifica la opcin key keyexp, el sistema busca un registro que cumpla la expresin clave y lo coloca en el header. Caso de encontrarse varios registros que cumplan la keyexp, solo el primero encontrado se retorna (por orden de registro). Es de suponer que la busqueda que hace es secuencial. Expresiones de la opcion key y sus efectos.

Key Expression c1 = v1 c2 = v2 ...

Effect Localiza el primer registro de la tabla interna cuyo componente c1 tiene el valor v1(literal, constante o vaariable) y as sucesivamente.

(f1) = v1 (f2) = v2 ... = wa

f1 contiene el nombre del componente cuyo contenido se va a comparar. (el contenido de f1 es en mayusculas).
wa

es un work area identico en estructura a la tabla interna. Se localiza el primer registro que es igual a wa, comparando incluso blancos.. Tiene que coincidir el registro entero.
wa es un work area idntico en estructura a la tabla interna pero solo los primeros n campos. Busca el primer registro que cumple todos los n campos. Tienen que cumplir los n campos perfectamente valores de SY-SUBRC and SY-TABIX despues de key exp

Wa

Result Lectura correcta. Se encontro un registro No se encontro un registro pero hay uno con una clave mayor que la leida No se encontro un registro ni igual ni mayor, (esto a mi no me funciona)
----------------------Ejemplo anterior usando key expr:

sy-subrc 0 4 8

sy-tabix index of matching row index of row with next higher key number of rows in it+ 1

read table mitabla with key cliente = '0004'. Resultado: sy-subrc=0 sy-tabix=4 0004 jesus boina --------------------Otro ejemplo: read table mitabla with key cliente = '0009'. Resultado: sy-subrc=4 sy-tabix=0 0006 wenceslao roto -----------------------------read table mitabla with key importe = 1000."con datos numericos sy-subrc=0 sy-tabix=1 0001 pepito perez ---------------------------------

data clave(7) value 'CLIENTE'. read table mitabla with key (clave) = '0001'. " indirecto sy-subrc=0 sy-tabix=1 0001 pepito perez ------------------------------------

read table con la opcion binary search Cuando usamos la opcion key addition, podemos usar la opcion binary search, que causa que el registro se localice usando una busqueda bianaria en lugar de una busqueda lineal. Claro que antes necesita ser indexada en ascendente orden por los componentes especificados en la key exp. (ver la opcion on sorting). ???? esto hay que mirarlo mas, no se muy bien como funciona cuando los valores van con espacios.... CAUTION
Only blanks in a default key field will match all values. This means that you cannot clear types d, t, n, and x and obtain a match-clearing will set them to zeros, not blanks. You must force blanks into these fields for them to match. You can do this using a field string (see the following example), using a subfield, or using a field symbol (see the previous section on field symbols for more information).

Sin opciones como funciona?. read table mitable. Es como si la clave fuera todo Usando la opcion comparing.

La opcion comparing es seguida por campos de la tabla, la busqueda y el resultado es el mismo, pero segn el resultado de comparar el work area y el registro encontrado, el valor de sy-subrc cambia. Table 11.4 Forms for the Comparison Expression in the Read Table Statement

Cmpexp

Description

f1 f2 ...

Si los valores de f1, f2 son iguales en registroencontrado y work area , sy-subrcis set to 0. Si hay alguno diferente, sy-subrc es 2. Todos los campos son comparados. No se compara nada, valor por defecto

all fields no fields

El workarea es la cabecera o el into workarea. Hemos de tener en cuenta pues, el contenido inicial del workarea. La utilidad de esta opcin es evitarse unos if despues del read table.

La opcin transporting : La opcion transporte, es para indicar los campos del registro encontrado que pasarn al workarea. Table 11.5 Forms for the Transporting Expression in the READ TABLE Statement

Cmpexp
f1 f2 ...

Description After a row is found, the value of f1 in the found row overlays the value of f1 in the work area. Then the value of f2overlays the value of f2 in the work area, and so on. Only the components named after transporting are moved. All other components remain unchanged. All fields are transported. This is the default, and has the same effect as leaving off the transporting addition. No fields are transported. None of the fields in the work area are changed.

All fields no fields

Es util para controlar el contenido del workarea si encuentra un registro. ORDENANDO EL CONTENIDO DE UNA TABLA INTERNA Para ordenar el contenido de una tabla interna, hay que usar la sentencia sort. Los registros son ordenados por una o mas colunas en orden ascendente o descendente. La secuencia de ordenacin puede ser modificada.

Syntax de la sentencia SORT

sort it [descending] [as text] [by f1 [ascending|descending] [as text] f2 ...]. : it el nombre de una tabla interna. f1 y f2 son campos de la tabla interna La tabla se ordena con los campos indicados con la opcin de ascending/descending y/o como texto.. mas propiedades: ascending es por defecto. Si descending aparece antes de los campos, se aplica a todos los campos por defecto. Por defecto se ordena por la clave por defecto , que son los campos char de la tagbla en orden ascendiente. El orden de registros con la misma clave es impredecible.

La opcin text, se reffiere a las palabras acentuadas y 's. Por defecto en un entorno ASCII se ordena por codigo ascii del caracter. EL text environment(entorno de texto) es un conjunto de caracteristicas asociadas con el lenguaje al hacer el usuario logon. Se caracteriza por el conjunto de caracteres utilizados y su secuencia. Se puede puede cambiar usando la sentencia set locale. La variable dels sistema sy-langu guarda el contenido de lenguaje especificado En todo caso lo siguiente se aplica a la opcion text en la sentencia sort.

Solo se aplica a campos tipo c. Puede especificarse para todos o campo por campo.

También podría gustarte