Las tablas internas son una de las estructuras más utilizadas en ABAP. Gran parte de la lógica de negocio consiste en leer, modificar, ordenar, filtrar y procesar datos almacenados en ellas.
Aunque muchos desarrolladores conocen las operaciones básicas, ABAP ofrece bastantes más posibilidades de las que suelen usarse en el día a día.
En este artículo repasamos las operaciones más importantes que puedes realizar sobre una tabla interna.
Añadir registros
APPEND
Añade una nueva línea al final de la tabla.
APPEND ls_material TO lt_materiales.
Es la operación más habitual cuando trabajas con tablas estándar.
INSERT
Permite insertar registros en una posición específica o respetando las reglas de una tabla ordenada.
INSERT ls_material INTO TABLE lt_materiales.
O por índice:
INSERT ls_material INTO lt_materiales INDEX 3.
Leer datos
READ TABLE
Busca un registro dentro de la tabla.
READ TABLE lt_materiales INTO ls_material WITH KEY matnr = lv_matnr.
También puede buscarse por índice:
READ TABLE lt_materiales INTO ls_material INDEX 1.
Alternativa más moderna a READ TABLE.
DATA(ls_material) = lt_materiales[ matnr = lv_matnr ].
O recuperar directamente un campo:
DATA(lv_maktx) = lt_materiales[ matnr = lv_matnr ]-maktx.
Recorrer registros
LOOP AT
Permite iterar sobre todos los registros.
LOOP AT lt_materiales INTO DATA(ls_material).
WRITE ls_material-matnr.
ENDLOOP.
También puede usarse con condiciones:
LOOP AT lt_materialesINTO DATA(ls_material)WHERE mtart = 'FERT'.
"Lógica
ENDLOOP.
Modificar registros
MODIFY
Actualiza una línea existente.
MODIFY lt_materiale FROM ls_material.
Por índice:
MODIFY lt_materiales FROM ls_material INDEX 2.
Eliminar registros
DELETE
Elimina registros concretos.
Por clave:
DELETE lt_materiales WHERE matnr = lv_matnr.
Por índice:
DELETE lt_materiales INDEX 1.
Eliminar todo:
DELETE lt_materiales.
Ordenar datos
SORT
Ordena los registros.
Ascendente:
SORT lt_materiales BY matnr.
Descendente:
SORT lt_materiales BY matnr DESCENDING.
Por varios campos:
SORT lt_materiales BY werks matnr.
Buscar duplicados
DELETE ADJACENT DUPLICATES
Elimina registros duplicados consecutivos. Antes es necesario ordenar.
SORT lt_materiales BY matnr.
DELETE ADJACENT DUPLICATES FROM lt_materiales COMPARING matnr.
Vaciar tablas
CLEAR
Vacía la tabla manteniendo memoria reservada.
CLEAR lt_materiales.
FREE
Vacía la tabla y libera la memoria utilizada.
FREE lt_materiales.
REFRESH
Sintaxis antigua equivalente a vaciar la tabla. Hoy se considera obsoleta.
REFRESH lt_materiales.
Comprobar si tiene datos
Antes de procesar una tabla es habitual verificar si contiene registros.
IF lt_materiales IS NOT INITIAL.
ENDIF.
O:
IF lines( lt_materiales ) > 0.
ENDIF.
Obtener número de registros
LINES
Devuelve el número de filas.
DATA(lv_lines) = lines( lt_materiales ).
Crear tablas filtradas
FILTER
ABAP moderno permite filtrar registros fácilmente.
DATA(lt_fert) = FILTER #( lt_materiales WHERE mtart = 'FERT' ).
Evita muchos LOOP con IF.
Construir tablas
VALUE
Permite crear tablas completas en una sola expresión.
DATA(lt_materiales) = VALUE tt_material(
( matnr = 'MAT1' )
( matnr = 'MAT2' )
).
Muy útil para pruebas y datos temporales.
Agrupar registros
COLLECT
Inserta registros acumulando automáticamente los campos numéricos cuando la clave ya existe.
COLLECT ls_ventas INTO lt_ventas.
Aunque sigue existiendo, hoy suele verse menos porque muchos escenarios se resuelven mejor mediante SQL o agrupaciones modernas.
Comprobar existencia de registros
LINE_EXISTS
Permite verificar si existe una línea sin necesidad de READ TABLE.
IF line_exists( lt_materiales[ matnr = lv_matnr ] ).
ENDIF.
Es una alternativa moderna y muy legible.
Obtener posición de un registro
LINE_INDEX
Devuelve la posición de una línea encontrada.
DATA(lv_index) =nline_index(lt_materiales[ matnr = lv_matnr ] ).
A modo resumen
| Operación | Descripción | Ejemplo |
|---|---|---|
| APPEND | Añade una línea al final de la tabla. | APPEND ls_data TO lt_data. |
| INSERT | Inserta una línea. | INSERT ls_data INTO lt_data. |
| MODIFY | Modifica una línea existente. | MODIFY lt_data FROM ls_data INDEX 3. |
| DELETE | Elimina una línea completa. | DELETE lt_data INDEX 5. |
| SORT | Ordena la tabla (ascendente o descendente). | SORT lt_data BY campo1 DESCENDING campo2. |
| LOOP AT | Itera sobre las líneas de la tabla. | LOOP AT lt_data INTO ls_data. |
| READ TABLE | Busca y lee una línea específica. | READ TABLE lt_data WITH KEY id = '123'. |
| COLLECT | Agrupa por claves suma campos numéricos. | COLLECT ls_data INTO lt_data. |
Dominar estas operaciones es fundamental porque gran parte del trabajo diario de un programador ABAP consiste precisamente en mover, transformar y procesar datos dentro de tablas internas.



