SAP Tabla interna ABAP: crear, leer, completar, copiar y eliminar

¿Qué es una tabla interna?

MESA INTERNA se utilizan para obtener datos de una estructura fija para uso dinámico en ABAP. Cada línea de la tabla interna tiene la misma estructura de campos. El uso principal de las tablas internas es almacenar y formatear datos de una tabla de base de datos dentro de un programa.

¿Qué es un Área de Trabajo?

Las áreas de trabajo son filas únicas de datos. Deberán tener el mismo formato que cualquiera de las tablas internas. Se utiliza para procesar los datos en una tabla interna, una línea a la vez.

¿Diferencia entre mesa interna y área de trabajo?

Una imagen dice mil palabras

Diferencia entre mesa interna y área de trabajo

Tipos de tablas internas

Hay dos tipos de tablas internas.

  1. Mesas internas con línea HEADER
  2. Mesas internas sin línea HEADER.

Tablas internas con línea de encabezado

  • Aquí el sistema crea automáticamente el área de trabajo.
  • El área de trabajo tiene el mismo tipo de datos que la tabla interna.
  • Esta área de trabajo se llama línea HEADER.
  • Es aquí donde se realizan todos los cambios o cualquiera de las acciones sobre el contenido de la tabla. Como resultado de esto, los registros se pueden insertar directamente en la tabla o se puede acceder a ellos directamente desde la tabla interna.

Tablas internas sin línea de encabezado :

  • Aquí no hay ningún área de trabajo asociada a la mesa.
  • El área de trabajo debe especificarse explícitamente cuando necesitemos acceder a dichas tablas.
  • Por lo tanto, no se puede acceder a estas tablas directamente.

Crear tablas internas

Hay muchas formas de crear una tabla interna. Veámoslos uno por uno.

1.Utilizando la declaración de tipo

Creemos ahora una tabla interna itab usando el TIPO de declaración.

La sintaxis es -

Types : begin of line,

column1 type I,

column2 type I,

end of line.

Ejemplo:

TYPES : begin of line,

empno		type I,

empname(20)   	type c	,

end of line.

La instrucción TYPES crea una línea de estructura tal como se define.

Para crear realmente una tabla interna itab utilice el siguiente comando:

Data itab type line occurs 10.

Se crea una tabla interna itab con la estructura de línea. Además de declarar la estructura de una tabla interna, la cláusula OCCURS también define cuántas entradas de la tabla se mantienen en el almacenamiento principal (en este caso, 10). Los registros adicionales se escriben en el área de paginación y pueden afectar el rendimiento.

2.Refiriéndose a otra Tabla

Puede crear una tabla interna haciendo referencia a una tabla existente. La mesa existente podría ser un estándar. SAP mesa, una mesa Z u otra mesa interna.

Sintaxis-

Data <f> <type> [with header line].

Ejemplo-

DATA itab TYPE line OCCURS 10 with header line.

Aquí se crea una tabla interna itab del tipo línea con una línea de encabezado. Tenga en cuenta que "con línea de encabezado" es opcional.

3.Refiriéndose a la estructura existente

Sintaxis-

Data	<f> LIKE <struct> occurs n [with header line].

Ejemplo-

DATA itab LIKE sline OCCURS 10.

Aquí se crea una tabla itab que tiene una estructura igual a la de sline.

4.Creando una nueva Estructura

Creemos ahora una tabla interna con una estructura propia. Aquí la tabla se crea con una línea de encabezado, por defecto.

Sintaxis -

Data : Begin of <f> occurs <n>,

<component declaration>,

.................................,

End of <f>.

Ejemplo

Data : Begin of itab occurs 10,

column1       type I,

column2(4)  type C,

column3      like  mara-ernam,

End of itab.

Se crea la tabla interna itab

Llenar tablas internas

Ahora que hemos creado con éxito algunas tablas internas, veamos cómo las llenamos con algunos registros. Hay varios métodos disponibles para completar tablas.

1.Agregar datos línea por línea

El primer método disponible es el uso de la declaración APPEND.

Usando la declaración APPEND podemos agregar una línea de otra área de trabajo a la tabla interna o podemos agregar una línea inicial a la tabla interna.

Sintaxis -

APPEND [<wa> TO / INITIAL LINE TO] <itable>.

Aquí el área de trabajo o la línea inicial se agrega a la tabla interna .

La variable del sistema SY-TABIX contiene el índice de la línea adjunta.

Ejemplo:

Data: Begin of itab occurs 10,

col1 type C,

col2 type I,

end of itab.

Append initial line to itab.

Resultados: ' ' '0'

Líneas iniciales agrega una línea inicializada con el valor correcto para su tipo a la tabla. Aquí, col1 es un carácter y col2 es un número entero. Luego APPEND línea inicial, agrega una línea inicializada con respecto al tipo de datos de las columnas, es decir, espacio para col1 y 0 para col2.

2.Usar la declaración COLLECT

COLLECT es otra forma de declaración utilizada para completar las tablas internas. Generalmente, COLLECT se usa al insertar líneas en una tabla interna con una clave estándar única.

Sintaxis-

COLLECT [<wa> INTO] <itable>.

En el caso de tablas con línea de encabezado, se omite la opción INTO. Supongamos que ya hay una entrada que tiene la misma clave que la que está intentando agregar, entonces no se agrega una nueva línea a la tabla, pero se agregan los campos numéricos de ambas entradas y solo está presente una entrada correspondiente a la clave. . El valor de SY-TABIX se cambia a la fila de la entrada original. De lo contrario, COLLECT actúa de manera similar a APPEND y SY-TABIX contiene el índice de la línea procesada.

3.Usando la declaración INSERT

La instrucción INSERT agrega una línea/área de trabajo a la tabla interna. Puede especificar la posición en la que se agregará la nueva línea utilizando la cláusula INDEX con la instrucción INSERT.

Sintaxis

INSERT [<wa> INTO / INITIAL LINE INTO] <itable> [index <idx>].

Aquí, el área de trabajo o LÍNEA INICIAL se inserta en la tabla interna en el índice .

Copiar tablas internas

El contenido de una tabla interna se puede copiar a otra utilizando la instrucción APPEND LINES o INSERT LINES. Una forma más sencilla es utilizar cualquiera de las siguientes sintaxis.

MOVE  <itab1> To <itab2>.

OR

<itab1> = <itab2>.

Estos copian el contenido de ITAB1 a ITAB2. En el caso de tablas internas con línea de encabezado, tenemos que usar [] para distinguirlas del área de trabajo. Entonces, para copiar el contenido de las tablas internas con la línea de encabezado, la sintaxis es:

itab1[] = itab2[].

Leer tablas internas

Ahora estamos familiarizados con la creación de tablas internas y su llenado con datos. Ahora veremos cómo utilizamos realmente los datos o recuperamos los datos de las tablas internas.

1. Usando Bucle -Endloop

Una de las formas de acceder o leer la tabla interna es mediante LOOP-ENDLOOP.

Sintaxis

LOOP AT <itable> [INTO <wa>]

...................................

ENDLOOP.

Aquí, cuando dice LOOP AT ITABLE, la tabla interna ITABLE se lee línea por línea. Puede acceder a los valores de las columnas para esa línea durante cualquier parte de la estructura LOOP-ENDLOOP. El valor de SY-SUBRC se establece en 0, incluso si solo se lee un registro.

2. Usando LEER

El otro método para leer la tabla interna es mediante la instrucción READ.

Sintaxis-

READ TABLE <itable> [INTO <wa>] INDEX <idx>.

Esta declaración lee la línea actual o la línea especificada por el índice . El valor de SY-TABIX es el índice de la línea leída. Si se encuentra una entrada con el índice especificado, entonces SY-SUBRC se establece en 0. Si el índice especificado es menor que 0, se produce un error en tiempo de ejecución. Si el índice especificado excede el tamaño de la tabla, entonces SY-SUBRC se establece en 4.

Eliminar tablas internas

Hay muchas formas de eliminar líneas de una tabla interna.

1.Eliminar líneas en un bucle.

Esta es la forma más sencilla de eliminar líneas.

Sintaxis

DELETE <ITABLE>.

Esta declaración sólo funciona dentro de un bucle. Elimina la línea actual. Puede eliminar las líneas en un bucle condicionalmente agregando el Dónde cláusula.

2.Eliminar líneas usando el índice.

Esto se utiliza para eliminar una línea de la tabla interna en cualquier índice conocido.

Sintaxis

DELETE <ITABLE> INDEX <IDX>.

La línea con el índice se elimina. El índice de la siguiente línea se decrementa en 1.