Estructuras y tablas internas en SAP - ABAP

Que es una estructura?
Una estructura es un grupo de campos agrupados que perteneces a un diccionario de datos. Sin embargo estos no son guardados en el diccionario, sino que  se mantienen temporalmente en la memoria del programa, la estructura es usada comúnmente como una base para tablas internas, vemos un ejemplo:

TYPES: BEGIN OF str_per,
  id(2)       TYPE c,
  nombre(10)  TYPE c,
  apell(10)   TYPE c,
END OF str_per.

TYPES ty_per TYPE str_per. <--Declaración de una estructura

Como se puede ver la estructura se compone de tres campos y luego es declarada para su uso como TYPES. Las estructuras también pueden ser de tipo DATA. Dentro de su definición se puede incluir diferentes tipos de campos incluyendo referencias a otros objectos de diccionario de datos.

Que es una tabla interna?
Una tabla interna es un conjunto de registros contenidos en una configuración parecida a una tabla y la cual es creada a partir de una estructura definida. Una tabla interna solo existe dentro de la ejecución de un programa, las tablas sirven para guardas datos temporalmente, la tabla puede ser definida como ordenada usando el tipo TYPE SORTED TABLE. Es necesario declarar una area de trabajo (Work Area:  wa_per) para poder manipular los registros de la tabla:

REPORT y_jose_crud_ti.

TYPES: BEGIN OF str_per,
  id(2)       TYPE c,
  nombre(10)  TYPE c,
  apell(10)   TYPE c,
  END OF str_per.

TYPES ty_per TYPE str_per.

DATA ti_per TYPE SORTED TABLE OF ty_per WITH UNIQUE KEY id.
DATA wa_per TYPE ty_per.

Existen tres tipos de tablas internas:
  • Standard
  • Sorted
  • Hashed
Existen diferentes beneficios dependiendo del tipo de tabla que se utiliza, incluyendo desempeño, algoritmos de guardado y recuperación de datos, forma de los datos y ordenamiento.

Insertando datos en una tabla interna.
Para insertar datos se utiliza el work area, se asignan los datos y luego se utiliza la instrucción  APPEND para agregarlos a la tabla, si se desea agregar otro registro se limpia el work area y se repite el proceso, veamos:

wa_per-id = '01'.
wa_per-nombre = 'jose luis'.
wa_per-apell = 'garcia'.

"Insert
APPEND wa_per TO ti_per.

"clear structure
CLEAR wa_per.
wa_per-id = '02'.
wa_per-nombre = 'alvaro'.
wa_per-apell = 'hernandez'.

"Insert
APPEND wa_per TO ti_per.

Leer datos de una tabla interna.
Para leer datos se usa la instrucción READ TABLE, la cual carga los registros de la tabla interna en un work area con el indice del registro que se necesita leer, también es posible indicar una clave para la lectura del registro, veamos:

"Read
READ TABLE ti_per INTO wa_per INDEX 1.
WRITE wa_per-id.

"Read with conditions
READ TABLE ti_per WITH KEY id = '02' INTO wa_per .
WRITE wa_per-id.

También es posible leer utilizando una sentencia LOOP para cargar cada uno de los registros en el  work area. A continuación se muestra un ejemplo encapsulado en una función la cual podríamos llamar en cualquier parte del código:

FORM show_table .

  "Read a internal table
  WRITE / '---------------------------------------------'.
  LOOP AT ti_per INTO wa_per.
    WRITE: / wa_per-id, / wa_per-nombre, / wa_per-apell.
  ENDLOOP.
ENDFORM.                    " SHOW TABLE


Modificar datos en una tabla interna.
Para modificar los datos es necesario leerlos, con una instrucción READ. El registro se carga en el work area y se modifica directamente, luego con la instrucción  MODIFY TABLE se realiza el cambio en la tabla interna. veamos un ejemplo en el cual se utiliza una tabla ordenada:

"Read with conditions
READ TABLE ti_per WITH KEY id = '02' INTO wa_per .

WRITE wa_per-id.

"Modify
wa_per-nombre = 'camilo'.
MODIFY TABLE ti_per FROM wa_per.

PERFORM show_table.

Eliminar registros de una tabla interna.
Para eliminar se utiliza la instrucción DELETE indicando el indice del registro que se desea borrar o utilizando la condición WHERE, veamos:

"Delete
DELETE ti_per INDEX 1.

PERFORM show_table.

"Delete
DELETE ti_per WHERE id = '02'.

PERFORM show_table.

Comentarios

Publicar un comentario

Entradas populares