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

โšก Resumen inteligente

SAP Los objetos de tabla interna de ABAP almacenan datos de una estructura fija para su uso dinรกmico dentro de un programa. Esta pรกgina explica las รกreas de trabajo, las lรญneas de cabecera, los cuatro mรฉtodos de creaciรณn y las instrucciones para rellenar, copiar, leer y eliminar filas de la tabla.

  • ๐Ÿ“‹ Definiciรณn bรกsica: Una tabla interna almacena filas con una estructura idรฉntica en la memoria principal, generalmente para dar formato a los datos leรญdos de una tabla de base de datos.
  • ๐Ÿงพ รrea de trabajo: Un รกrea de trabajo es una sola fila con el mismo formato que la tabla, y procesa la tabla lรญnea por lรญnea.
  • ๐Ÿท๏ธ Lรญnea de encabezado: Una tabla con una lรญnea de cabecera recibe un รกrea de trabajo implรญcita, por lo que las filas se pueden insertar o leer directamente sin necesidad de especificar una.
  • ๐Ÿ› ๏ธ Cuatro mรฉtodos de creaciรณn: Declaraciรณn TYPES, referencia a una tabla existente, referencia a una estructura existente o una nueva estructura declarada con OCCURS.
  • โž• Poblar: APPEND agrega una fila, COLLECT agrupa campos numรฉricos para una clave duplicada e INSERT coloca una fila en un รญndice elegido.
  • ๐Ÿ” Lee y copia: LOOP AT lee todas las filas, READ TABLE lee una fila por รญndice y MOVE o el signo igual copia una tabla completa.
  • ๐Ÿ—‘๏ธ Borrar: La instrucciรณn DELETE dentro de un LOOP elimina la fila actual, y DELETE โ€ฆ INDEX elimina la fila en una posiciรณn conocida.

SAP Tablas internas ABAP

ยฟ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.

Una mesa interior siempre funciona en conjunto con un รกrea de trabajo, por lo que ese concepto se abordarรก a continuaciรณn.

ยฟQuรฉ es un รกrea de trabajo?

Las รกreas de trabajo son filas de datos individuales. Deben tener el mismo formato que cualquiera de las tablas internas. Se utilizan para procesar los datos de una tabla interna lรญnea por lรญnea.

ยฟCuรกl es la diferencia entre una mesa interna y un รกrea de trabajo?

Una imagen dice mil palabras

Diferencia entre mesa interna y รกrea de trabajo

El diagrama muestra la tabla con muchas filas, mientras que el รกrea de trabajo solo contiene la fila que se estรก procesando. El tipo de รกrea de trabajo, ya sea creada por el sistema o por el desarrollador, depende del tipo de tabla que se describe a continuaciรณn.

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.

๐Ÿ’ก Consejo: Una tabla con una lรญnea de encabezado conserva el mismo nombre tanto para la tabla como para su รกrea de trabajo, lo que genera ambigรผedad en el cรณdigo. Los programas nuevos deben declarar una tabla sin lรญnea de encabezado y especificar explรญcitamente el รกrea de trabajo.

Tablas internas estรกndar, ordenadas y con hash

Ademรกs de la distinciรณn en la lรญnea de encabezado, cada tabla interna tambiรฉn tiene un tipo de tabla que determina cรณmo se encuentra una fila. El tipo se elige con la adiciรณn de TYPE STANDARD TABLE, TYPE SORTED TABLE o TYPE HASHED TABLE, y tiene un efecto directo en el tiempo de ejecuciรณn.

Tipo de mesa Mรฉtodo de acceso Clave Mejores usados โ€‹โ€‹para
Estรกndar รndice y clave, con bรบsqueda lineal en la clave. No รบnico Procesamiento secuencial y lectura de tablas pequeรฑas con un รญndice.
Ordenado รndice y clave, con una bรบsqueda binaria en la clave. รšnicos o no รบnicos, se mantienen ordenados automรกticamente. Las tablas mรกs grandes leen repetidamente los campos clave principales.
Hash Solo clave, con un algoritmo hash Unico Tablas muy grandes que siempre se leen mediante la clave completa, como un bรบfer de registros de base de datos.

Una tabla estรกndar es la predeterminada y se adapta al procesamiento secuencial. Una tabla hash mantiene el tiempo de acceso constante sin importar cuรกntas filas se almacenen, razรณn por la cual las reglas de rendimiento de Open SQL Lo recomiendo para almacenar registros en bรบfer.

Crear tablas internas

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

1.Utilizando la declaraciรณn de tipo

Ahora vamos a crear una tabla interna itab utilizando la instrucciรณn TYPE.

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

Puedes crear una tabla interna haciendo referencia a una tabla existente. La tabla existente podrรญa ser una tabla 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 con la misma estructura que 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

Una tabla vacรญa es de poca utilidad, por lo que la siguiente secciรณn la llena con filas.

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'

La instrucciรณn `initial lines` 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 initial line` agrega una lรญnea inicializada con respecto al tipo de datos de las columnas, es decir, espacio en blanco para `col1` y cero 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 instrucciรณ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 INICIAL LINE se inserta en la tabla interna en el รญndice .

Copiar tablas internas

El contenido de una tabla interna se puede copiar a otra mediante la funciรณn APPEND. LINES o INSERTAR LINEDeclaraciรณn S. 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 ya sabemos cรณmo crear tablas internas y cรณmo rellenarlas con datos. A continuaciรณn, veremos cรณmo utilizar o recuperar esos 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 instrucciรณn lee la lรญnea actual o la lรญnea especificada por รญndice. El valor de SY-TABIX corresponde al รญndice de la lรญnea leรญda. Si se encuentra una entrada con el รญndice especificado, 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, SY-SUBRC se establece en 4.

โš ๏ธ Advertencia: La instrucciรณn READ TABLE โ€ฆ INDEX 0 genera un error en tiempo de ejecuciรณn, por lo que se debe verificar un รญndice calculado en tiempo de ejecuciรณn antes de que se ejecute la instrucciรณn.

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.

3. Eliminar lรญneas duplicadas.

Las filas duplicadas se eliminan despuรฉs de que la tabla se haya ordenado por los campos clave.

SORT itab BY col1.

DELETE ADJACENT DUPLICATES FROM itab COMPARING col1.

Solo se comparan las filas adyacentes, por lo que la instrucciรณn SORT debe ejecutarse primero. Para vaciar la tabla por completo, utilice CLEAR itab[] o REFRESH itab.

Preguntas Frecuentes

CLEAR itab vacรญa solo la lรญnea de encabezado, y CLEAR itab[] vacรญa el cuerpo. REFRESH siempre vacรญa el cuerpo, pero mantiene la memoria reservada. FREE vacรญa el cuerpo y tambiรฉn libera la memoria.

SY-TABIX almacena el nรบmero de fila de la tabla interna que se estรก procesando. SY-INDEX almacena el nรบmero de iteraciรณn de un bucle DO o WHILE. Una tabla hash deja SY-TABIX en cero, ya que no tiene รญndice.

La operaciรณn LOOP AT itab ASIGNAR un sรญmbolo de campo evita copiar cada fila en un รกrea de trabajo, por lo que se ejecuta mรกs rรกpido en tablas grandes y permite modificar la fila directamente sin una instrucciรณn MODIFY.

Sรญ. Los asistentes de IA en las herramientas de desarrollo ABAP reescriben las declaraciones OCCURS y de la lรญnea de encabezado en TYPE STANDARD TABLE OF con un รกrea de trabajo explรญcita, y seรฑalan las instrucciones que fallan una vez que desaparece la lรญnea de encabezado.

Los asesores de rendimiento de IA inspeccionan cรณmo se llena y se lee una tabla, y luego recomiendan una tabla ordenada o hash cuando una bรบsqueda lineal domina el tiempo de ejecuciรณn. La recomendaciรณn se confirma con un trace en la transacciรณn SAT.

Resumir este post con: