✒️ABAP Las tablas internas
ABAP Las tablas internas
Las tablas internas
LECCION 1º DE 10
1 - ¿Qué son las tablas internas?
Son objetos de datos que permite guardar en memoria grandes cantidades de registros con la misma estructura, de 0 a n resgistros.El limite maximo esta realacionado con los limites especificados en la instalación de SAP.
Existen solo en tiempo de ejecucion. Este concepto de tabla interna en otros lenguajes se lo conoce como array, vector, lista, colección.
Usos tipicos:
- Para almacenar temporalmente los datos de las tablas bases de datos para un procesamiento futuro.
- Para estructurar y formatear datos que se mostraran como salida del programa.
- Para formatear datos para ser utilizados por otrs servicios.
2 - ¿Cómo se declara una tabla interna?
Para trabajar con una tabla interna necesitamos una estructura o area de trabajo o cabecera de la tabla interna, que tiene el mismo formato que la tabla interna y que nos va a permitir:
- leer el contenido de un registro
- recorrer cada registro.
- agregar registro
- modificar el contenido de un registro.
La estructura solo puede almacenar 1 registro de datos.
ti_ tabla interna
wa_ area de trabajo
Formas de declarar una tabla interna:
TYPES: BEGIN OF ty_proveEderes,
dni(8) TYPE c,
nombre (30) TYPE c,
apellido (30) TYPE c,
END OF ty_proveedores.
DATA ti_proveedores TYPE STANDARD TABLE OF ty_proveedores,
wa_proveedores LIKE LINE OF ti_proveedores.
DATA: BEGIN OF tI_proveEderes OCCURS 0,
dni(8) TYPE c,
nombre (30) TYPE c,
apellido (30) TYPE c,
END OF tI_proveedores.
DATA wa_proveedores LIKE LINE OF ti_proveedores.
DATA: BEGIN OF wa_proveEderes,
dni(8) TYPE c,
nombre (30) TYPE c,
apellido (30) TYPE c,
END OF wa_proveedores.
DATA ti_proveedores LIKE STANDARD TABLE OF wa_proveedores.
DATA: ti_proveedores LIKE TABLE OF lfa1,
wa_proveedores LIKE LINE OF ti_proveedores.
DATA: ti_proveedores LIKE TABLE OF lfa1 WITH HEADER LINE.
3 - Como llena el contenido de una tabla interna?
- se realiza un select y se almacena en la tabla interna el resultado.
- Con INSERT, insertar registros a la TI.
- Añadir registros con APPEND TO
Existen 5 tipos de TI
- AnyTables
- IndexTable
- standard Table. se usa este tipo de tablas
- Sorterd table
- hashedtable.
4 - El ordenamiento de una TI.
Con la sentencia SORT, se puede ordenar por cualquier campo que forme parte de la TI, de forma ascendente (ASCENDING) y de forma descendente (DESCENDING)
SORT ti_proveedores BY dni DESCENDING.
5 - Como recorrer una tabla interna?
Con LOOP - ENDLOOP
LOOP AT ti_proveedores INTO wa_proveedores.
WRITE:/ wa_proveedores-dni,
wa_proveedores-nombre,
wa_proveedores-apellido.
ENDLOOP.
Podemos restingir los registros con la clausula WHERE.
LOOP AT ti_proveedores INTO wa_proveedores WHERE NOT nombre IS INITIAL.
WRITE:/ wa_proveedores-dni,
wa_proveedores-nombre,
wa_proveedores-apellido.
ENDLOOP
6 - La lectura de una tabla interna
Para leer una TI sin recorrer registro a registro se usa la sentencia READ TABLE. Se necesita con el area de trabajo.
READ TABLE ti_proveedores INTO wa_proveedores WITH KEY nombre='Ariel'.
IF sy-subrc EQ 0. ** SI ES IGUAL A 0 ENCONTRÓ RESULTADO.**
ELSE.
ENDIF.
Para optimizar esta busqueda se utiliza la búsqueda binaria--> encuentra la posicion de un valor en una TI ordenada, dividiendo el espacio de busquedad en dos y comparando el valor buscado con el elemento del medio de la TI, si no son iguales, la mitad en la cual el valor no está es eliminada y la busqueda continua en la mitad restante.
Primero se debe ordenar la TI con SORT y luego realizar la lectura con BINARY SEARCH.
SORT ti_provedores ASCENDING BY nombre
READ TABLE ti_proveedores INTO wa_proveedores WITH KEY nombre='Ariel' BINARY SEARCH.
IF sy-subrc EQ 0. ** SI ES IGUAL A 0 ENCONTRÓ RESULTADO.**
ELSE.
ENDIF.
Si se desea encontrar una posicion particular usamos INDEX.
READ TABLE ti_proveedores INTO wa_proveedores INDEX 5.
IF sy-subrc EQ 0. ** SI ES IGUAL A 0 ENCONTRÓ RESULTADO.**
ELSE.
ENDIF.
7 - Modificando una TI.
- Para modificar el contenido se usa MODIFY. Se necesita del area de trabajo.
MODIFY ti_proveedores FROM wa_proveedores INDEX 1.
IF sy-subrc EQ 0. ** SI ES IGUAL A 0 ENCONTRÓ RESULTADO.**
ELSE.
ENDIF.
- Para agregar un registro lo hacemos con INSERT. Se necesita del area de trabajo.
INSERT wa_proveedores INTO ti_proveedores INDEX 2.
IF sy-subrc EQ 0. ** SI ES IGUAL A 0 ENCONTRÓ RESULTADO.**
ELSE.
ENDIF.
- Para eliminar se usa DELETE.
DELETE ti_proveedres WHERE dni='28280933'
IF sy-subrc EQ 0. ** SI ES IGUAL A 0 ENCONTRÓ RESULTADO.**
ELSE.
ENDIF.
- Para borrar todo el contenido de una TI se usa REFRESH.
REFRESH ti_proveedores.
- Para saber cuantos registros tiene una TI usamos DESCRIBE TABLE. se necesita declarar la variable V_LINEAS de tipo i.
DATA: v_leneas TYPE i.
DESCRIBE TABLE ti_proveedores LINES v_lineas.
IF v_lineas > 0.
ENDIF.
Audio:
- Para inicializar el area de trabajo o cabecera se usa CLEAR wa_proveedores.
- Para liberar el espacio ocupado por una TI en memoria FREE ti_proveedores.
 
 
 
Sobre el autor
Publicación académica de Pablo Adrian Oggero, en su ámbito de estudios para la Carrera Consultor ABAP.
Pablo Adrian Oggero
Profesión: Scrum - Analista Funcional - Argentina - Legajo: MC99M
✒️Autor de: 179 Publicaciones Académicas
🎓Cursando Actualmente: Consultor ABAP Nivel Avanzado
🎓Egresado de los módulos:
- Carrera Consultor ABAP Nivel Inicial
- Carrera Consultor en SAP MM Nivel Avanzado
- Carrera Consultor en SAP MM Nivel Inicial