✒️ABAP / Las tablas internas Por Mauricio Solis Ibañez

Selector Alummnos / Empresas

ABAP Las tablas internas

ABAP Las tablas internas

1 | ¿Qué son las tablas internas?

Las tablas internas son un objeto de datos que sirven para guardar en memoria grandes cantidades de registros de la misma estructura de datos. Cabe destacar que al momento de ser creadas la capacidad de registros que tienen puede declararse como estática o dinámica, aunque los límites exactos son dictaminados por las capacidades de la instalación del sistema SAP.

Las tablas internas existen exclusivamente en el runtime. Y cabe destacar que lo que de ahora en adelante llamaremos "tabla interna" en otros lenguajes se conoce como array, vector, lista, colección, etc.

En general, usamos las tablas internas como un buffer de datos para las siguientes tareas:

  • Almacenar temporalmente datos de las tablas bases de datos para trabajar con sus datos más adelante
  • Para estructurar y formatear datos que serán la salida de un programa.
  • Para estructurar datos en un formato adaptado para el uso de otros servicios.

2 | ¿Cómo se declara una tabla interna?

Ahora veremos algunas formas de declarar las tablas internas. Aunque mientras que lo hacemos, también crearemos lo que llamamos "estructura". Si usamos la analogía de que los registros de la tabla interna es una cinta con datos, podemos decir que las estructuras (también llamadas "áreas de trabajo" o "cabeceras de tablas internas") son el cursor/cabezal que usamos para navegar la "cinta" (tabla interna), leer y modificar cada uno de sus registros.

Cabe destacar algo sobre esta analogía: No es completamente precisa. La imprecisión es de que en este caso, el cursor constantemente manipula el registro de la tabla interna, cuando en realidad, la estructura es un objeto de datos (en gran parte) independiente de la tabla interna, lo importante es que comparten el hecho que son derivados del mismo tipo de datos compuesto.

Teniendo eso en cuenta, ya podemos ver los métodos que tenemos para declarar las tablas internas, cabe destacar que de ahora en adelante vamos a trabajar consistentemente con un ejemplo en el que creamos una lista de proveedores donde los mismos son guardados en la base de datos a través de los campos: DNI (caracter de 8 posiciones); NOMBRE (caracter de 30 posiciones); APELLIDO (caracter de 30 posiciones).

1er método:

En este método creamos un tipo de datos compuesto, con ese tipo de datos creamos una tabla interna y con la tabla interna creamos una estructura:

TYPES: BEGIN OF ty_proveedores,
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.

Nótese el uso del sufijo "ty" para tipos compuestos, "ti" para tablas internas y "wa" para estructuras, ya que se usarán como estándares.

2do método:

En este método, creamos la tabla a base de darle nombre, definir sus contenidos y implícitamente decirle a SAP que es una tabla interna usando la sentencia OCCURS 0. Luego declaramos la estructura como en el primer método.

DATA: BEGIN OF ti_proveedores 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.

La sentencia OCCURS sirve para reservar el espacio para la cantidad de registros especificada, la cantidad reservada es estática pero la tabla interna puede sobrepasar la cantidad reservada sin causar problemas, por lo que se la puede dejar en 0 para que SAP se arregle y le asigne memoria al programa como lo vea necesario.

3er método:

En este método creamos la estructura y a través de la estructura creamos la tabla interna. En esencia es lo mismo que el método anterior pero cambiando el orden y con la diferencia que la línea de data usaría el formato: ti_foo LIKE STANDARD TABLE OF wa_bar.

4to método:

Este método lo usamos cuando ya tenemos el tipo de datos definido en el diccionario de datos. El significado de todo esto será dado más adelante. Esto se vería de la siguiente forma:

DATA: ti_proveedores LIKE TABLE OF lfal,
wa_proveedores LIKE LINE OF ti_proveedores.

5to método:

En este método usamos la misma tabla interna como una estructura. Esto lo hacemos de la siguiente forma:

DATA: ti_proveedores LIKE TABLE OF lfal WITH HEADER LINE.

Cabe destacar que esta forma de manipular tablas internas se podría considerar obsoleta y por lo tanto su uso es desaconsejable.

3 | ¿Cómo llenar de contenido una tabla interna?

El proceso real suele emplear un SELECT a una tabla base de datos, el almacenado de los resultados de dicho SELECT en una tabla interna, la modificación de la tabla interna o la adición de datos en la misma usando la sentencia INSERT o APPEND TO.

Todo este proceso será explicado a profundidad más adelante, pero de momento podemos hablar del APPEND TO y de cómo modificamos los valores dentro de la estructura/tipo de datos compuesto.

Primero, tenemos que usar CLEAR en nuestra estructura. Luego, ya podemos empezar a meterle valores a cada variable dentro de la estructura.

Algo que no se había explicado antes es cómo acceder a las variables dentro de un tipo de datos compuesto. Esto lo hacemos escribiendo el nombre del tipo de datos y luego escribimos el nombre de la variable dentro del tipo de datos separando ambos nombres con un guión, es decir, un ejemplo sería: "ty_foo-bar" para acceder a la variable "bar" dentro del tipo "ty_foo".

Una vez ya tengamos nuestra estructura con los datos que queremos podemos ponerla en la tabla interna, para eso, por el momento vamos a usar APPEND TO, el cual es una sentencia que sirve para sumar datos al final de la tabla. La forma en la que usamos dicha sentencia es con la sintaxis: APPEND wa_foo TO ti_bar.

Un ejemplo con en el listado de proovedores en el que creamos un registro desde la estructura y la pasamos a la tabla interna se vería de la siguiente forma:

CLEAR wa_proveedores.
wa_proveedores-dni = '24987564'.
wa_proveedores-nombre = 'Ernesto'.
wa_proveedores-apellido = 'Villanueva'.
APPEND wa_proveedores TO ti_proveedores.

También podemos ver que si hacemos este ejemplo en el editor de ABAP y lo debugueamos podremos ver que en la parte de variables de debugger podemos ver como una variable la tabla interna y en la columna de valores podemos ver que aparece "standard table [n1xn2(n3)]". n1 es el número de registros (filas), n2 es el número de variables por registro (columnas) y n3 es la cantidad total de caracteres dentro de la tabla. Dándole doble clic al la tabla interna en el listado de variables del debug abre la tabla interna para ver sus contenidos en otra sección del debugger.

4 | El ordenamiento de una tabla interna

Para ordenar una tabla usamos las siguientes sentencias de la siguiente forma:

SORT ti_foo BY v_bar DESCENDING/ASCENDING.

Donde ti_foo es la tabla a ordenar, v_bar es el campo/columna que se usará para ordenar los contenidos de la tabla y definimos si queremos ordenar de forma descendiente o ascendiente usando una de las dos palabras clave: DESCENDING o ASCENDING (Nótese que puede descartarse la adición de esta cláusula teniendo en cuenta que por defecto se ordena de forma ascendente).

Cabe destacar que las tablas pueden ser ordenada por varios campos, es decir, pueden haber varios "v_bar".

5 | ¿Cómo recorrer una tabla interna?

Para lograr esto, usamos la sentencia LOOP AT-ENDLOOP usando la siguiente sintaxis:

LOOP AT ti_foo INTO wa_bar.
(SENTENCIAS)
ENDLOOP.

En este ejemplo las sentencias serán ejecutadas mientras que se itera por cada registro de la tabla interna (por supuesto, cada iteración emplea los valores del registro actual).

Sin embargo, iterar por cada uno de los registros no es idóneo, por esto, tenemos formas de filtrar registros para iterar a través de un grupo específico de registros. Esto lo logramos con la cláusula WHERE.

Ejemplos del uso de WHERE para filtrar registros serían:

-Para filtrar los registros en los cuales la variable "nombre" es la variable por defecto:

LOOP AT it_proveedores INTO wa_proveedores WHERE NOT nombre IS INITIAL.
(SENTENCIAS)
ENDLOOP

-Lo mismo que antes pero también descartamos registros en los cuales el dni no es "25986584":

LOOP AT it_proveedores INTO wa_proveedores WHERE NOT nombre IS INITIAL.
AND dni NE '25986584'.
(SENTENCIAS)
ENDLOOP

6 | La lectura de una tabla interna

Si queremos leer un registro en específico usaremos la sentencia READ TABLE. El problema es que necesitamos aislar el registro en específico de los demás. Para esto tenemos dos opciones: Buscar el registro o usar el número de la posición exacta del registro.

Para el primero, usamos READ TABLE junto a la sentencia WITH KEY de la siguiente forma:

READ TABLE ti_proveedores INTO wa_proveedores WITH KEY nombre = 'Ariel'.
IF sy-subrc EQ 0.
ELSE.
ENDIF.

Lo que hacemos con esto es buscar en el campo "nombre" el string "Ariel". Tenemos el condicional "IF sy-subrc 0" para hacer algo si sy-subrc es diferente de cero, ya que cuando READ TABLE no encuentra el registro que busca se altera el valor de sy-subrc.

Hay un problema con este método de búsqueda, el problema es de que no es eficiente. En este caso el programa navega todos los registros, uno a uno desde el primero hasta el último hasta que encuentre el registro que busca. Para hacer que esto sea más eficiente podemos usar un algoritmo de búsqueda, en este caso, podemos usar la búsqueda binaria, tengamos en cuenta que para buscar de esta forma nuestra lista tiene que estar ordenada. Si el ejemplo anterior usase este método se vería así:

SORT ti_proveedores ASCENDING BY nombre.
READ TABLE ti_proveedores INTO wa_proveedores WITH KEY nombre = 'Ariel'
BINARY SEARCH.
IF sy-subrc EQ 0.
ELSE.
ENDIF.

Alternativamente, podemos usar el número de la posición del registro. Esto se vería de la siguiente forma:

READ TABLE ti_proveedores INTO wa_proveedores INDEX n.

Donde n es el número de posición (Algo a aclarar: ABAP no considera el cero como el primer número posible para un índice, arranca desde el uno).

7 | Modificando una tabla interna

Tenemos una buena variedad de formas de modificar las tablas, las que manipularemos de momento son: MODIFY, INSERT, DELETE, REFRESH y DESCRIBE TABLE.

MODIFY

Esta sirve para modificar un registro específico de una tabla interna, para esto es necesario escribir algo en un campo a elección y luego usar la sentencia MODIFY ti_foo FROM wa_bar INDEX n. Donde n es el número de índice del registro a modificar.

Si MODIFY no encuentra un registro en el índice especificado sy-subrc será distinto a cero.

INSERT

El cual inserta la estructura como un nuevo registro en la tabla interna. Usa la sintaxis INSERT wa_foo INTO ti_bar INDEX n.

DELETE

Borra un registro. La sintaxis puede variar mucho ya que esta sentencia puede operar de varias formas, es recomendable ver la documentación oficial de SAP.

REFRESH

Inicializa/borra los contenidos de una tabla interna. Usa el formato REFRESH ti_foo.

DESCRIBE TABLE

Nos da información sobre la tabla interna. Puede darnos 3 datos dependiendo de cómo se use. La sintaxis es: DESCRIBE TABLE ti_foo (LINES/KIND/OCCURS) v_bar. LINES nos dice la cantidad de registros de ti_foo y guarda el número en v_bar; KIND guarda el tipo de tabla que ti_foo es, emplea una variable de tipo c de un solo carácter para guardar el tipo de la tabla; OCCURS dice la cantidad de espacio reservado para la tabla interna y guarda el valor en v_bar.


 

Escanear / Compartir

 

 


Sobre el autor

Publicación académica de Mauricio Javier Solis Ibañez, en su ámbito de estudios para la Carrera Consultor ABAP Nivel Inicial.

SAP SemiSenior

Mauricio Javier Solis Ibañez

Profesión: Técnico Electrónico - Argentina - Legajo: CF20Z

✒️Autor de: 28 Publicaciones Académicas

🎓Egresado del módulo:

Disponibilidad Laboral: FullTime

Certificación Académica de Mauricio Solis

✒️+Comunidad Académica CVOSOFT

Continúe aprendiendo sobre el tema "Las tablas internas" de la mano de nuestros alumnos.

SAP Junior

ABAP " Crea automáticamente la tabla lt_materiales (Standard Table) con " la estructura exacta de lo que devuelve el SELECT. SELECT matnr, mtart, meins FROM mara INTO TABLE @DATA(lt_materiales) UP TO 100 ROWS. " También puedes crear tablas dinámicas a partir de otras usando VALUE DATA(lt_numeros) = VALUE int4_table( ( 1 ) ( 2 ) ( 3 ) ). Tip de Experto: Úsala siempre que extraigas datos de la base de datos o llames a métodos que devuelven tablas. Tu código será mucho más limpio. 2. Declaración basada en el Diccionario de Datos (DDIC) Utilizas objetos que ya existen en el Diccionario de Datos (Transacción SE11), como Tablas Transparentes, Estructuras...

Acceder a esta publicación

Creado y Compartido por: Mauro Repetto

*** CVOSOFT - Nuestros Alumnos - Nuestro Mayor Orgullo como Academia ***

SAP Expert


1. Definición y Propósito Las tablas internas son objetos de datos que permiten almacenar en la memoria del servidor de aplicaciones una colección de registros con la misma estructura,. Temporalidad: Existen únicamente en tiempo de ejecución; cuando el programa termina, los datos se pierden. Usos: Se utilizan para almacenar temporalmente datos de la base de datos para su procesamiento, formatear datos para reportes de salida, o preparar datos para otros servicios,. Equivalencia: En otros lenguajes, este concepto es similar a arrays, vectores o colecciones. 2. Estructura y Componentes Para trabajar con una tabla interna, generalmente se necesitan dos elementos: Cuerpo de la tabla: Donde se...

Acceder a esta publicación

Creado y Compartido por: Gabriel José Luces González

*** CVOSOFT - Nuestros Alumnos - Nuestro Mayor Orgullo como Academia ***

SAP Senior

Las tablas internas 1| ¿Qué son las tablas internas? Son objeto de datos que permite guardar en memoria grandes cantidades de registros de datos con la misma estructura. Una tabla interna puede almacenar entre 0 a n registros de datos. Si bien al momento de declarar una tabla interna es posible especificar la cantidad de registros que puede almacenar, la verdad es que la cantidad de registros máximos está íntimamente relacionada con los límites especificados en la instalación del sistema SAP. Una tabla interna existe únicamente en memoria en tiempo de ejecución es decir mientras se está ejecutando un programa ABAP. El mismo concepto que en ABAP se denomina tabla interna,...

Acceder a esta publicación

Creado y Compartido por: Felipe De Jesus Arrona Rodriguez

*** CVOSOFT - Nuestros Alumnos - Nuestro Mayor Orgullo como Academia ***

SAP Master


Tablas internas y reflexiones Conceptos y manejo de tablas internas Se explican las tablas internas como objetos de datos útiles para almacenar información temporal, como una colección de fotos de vacaciones, sin necesidad de acceder directamente a los archivos originales. Se menciona que las tablas internas permiten manejar diferentes opciones y almacenar información en memoria. La cantidad de líneas asignada en su parámetro "minus" no limita la cantidad de líneas que puede tener realmente la tabla, solo el espacio reservado inicialmente. Es común establecer "minus = 0" para permitir el manejo de grandes cantidades de información en memoria...

Acceder a esta publicación

Creado y Compartido por: Juan Ignacio Romero

*** CVOSOFT - Nuestros Alumnos - Nuestro Mayor Orgullo como Academia ***

SAP Senior

¿Qué son las tablas internas? Son un objeto de datos que permite guardar en memoria grandes cantidades de registros de datos con la misma estructura. Una tabla interna puede almacenar entre 0 a n registros de datos. Si bien al momento de declarar una tabla interna es posible especificar la cantidad de registros que puede almacenar, la cantidad de registros máxima está íntimamente con relacionada con los límites especificados en la instalación en la instalación del sistema SAP. Una tabla interna existe únicamente en memoria en tiempo de ejecución es decir mientras se está ejecutando un programa ABAP. El mismo concepto que en ABAP se denomina tabla interna, en...

Acceder a esta publicación

Creado y Compartido por: Mara Fadua Romero Hernandez

*** CVOSOFT - Nuestros Alumnos - Nuestro Mayor Orgullo como Academia ***

SAP Master

Introducción: Las tablas internas son estructuras de memoria que almacenan múltiples registros de datos para procesamiento eficiente en ABAP. 1. ¿Qué son las tablas internas? Definición: Colecciones dinámicas que almacenan registros con la misma estructura en memoria durante la ejecución. Capacidad: Desde 0 hasta millones de registros (límites definidos por la instalación SAP). Usos clave: Almacenar datos temporales de tablas de BD. Formatear información para reportes o archivos. Preparar datos para servicios externos. Ventaja: Evitan...

Acceder a esta publicación

Creado y Compartido por: Oscar Aravena Muller / Disponibilidad Laboral: FullTime

*** CVOSOFT - Nuestros Alumnos - Nuestro Mayor Orgullo como Academia ***

SAP Junior

Las tablas internas 1 | ¿Qué son las tablas intemas? Si queremos guardar una colección de registros de datos de la misma estructura en memoria, sin necesidad de acceder continuamente a las tablas bases de datos y poder realizar diversas operaciones con este conjunto de información, entonces utilizaremos tablas internas. Tablas internas Son un objeto de datos que permite guardar en memoria grandes cantidades de registros de datos con la misma estructura. Una tabla interna puede almacenar entre 0 a n registros de datos. Si bien al momento de declarar una tabla interna es posible especificar la cantidad de registros que puede almacenar, la verdad es que la cantidad ce registros máxima está íntimamente...

Acceder a esta publicación

Creado y Compartido por: Gustavo Jose Rondon Hernandez / Disponibilidad Laboral: FullTime + Carta Presentación

*** CVOSOFT - Nuestros Alumnos - Nuestro Mayor Orgullo como Academia ***

SAP Expert


Las tablas internas 1 Qué son las tablas internas? Son estructuras de datos que existen solo en memoria durante la ejecución del programa. Son utilizadas para almacenar y procesar múltiples registros de forma temporal, lo que permite trabajar con grandes volúmenes de datos sin afectar directamente a la base de datos. Características principales: Tienen una estructura fija, que puede basarse en una tabla de base de datos o definirse como una estructura personalizada. Son utilizadas para consultas, filtrados, agrupaciones y cálculos dentro de un programa. Permiten mejorar el rendimiento ya que evitan acceder constantemente a la base de datos. Tipos de tablas...

Acceder a esta publicación

Creado y Compartido por: Geovanny Martínez Campoverde

*** CVOSOFT - Nuestros Alumnos - Nuestro Mayor Orgullo como Academia ***

SAP Expert



Las Tablas Internas en SAP Las tablas internas son estructuras fundamentales en el lenguaje de programación ABAP (Advanced Business Application Programming), el cual es el núcleo del sistema SAP. Estas tablas funcionan como estructuras de datos temporales en la memoria del sistema y se utilizan principalmente para almacenar, procesar y manipular grandes volúmenes de datos durante la ejecución de un programa. A diferencia de las tablas de base de datos, las tablas internas no se almacenan de forma permanente; desaparecen al finalizar el programa que las utiliza. Función de las Tablas Internas En un entorno SAP, donde se manejan grandes cantidades de datos provenientes de tablas de base de datos (como VBAK para...

Acceder a esta publicación

Creado y Compartido por: David Ibarra / Disponibilidad Laboral: FullTime + Carta Presentación

*** CVOSOFT - Nuestros Alumnos - Nuestro Mayor Orgullo como Academia ***

SAP Senior

Las tablas internas 1. Que son las tablas internas? Son un objeto de datos que permite guardar en memoria grandes cantidades de registros de datos con la misma estructura. Una tabla interna puede almacenar entre 0 a n registros de datos. Se utilizan las tablas internas cuando se necesita guardar una colección de registros de datos de la misma estructura en memoria, sin necesidad de acceder continuamente a la tablas bases de datos y poder realizar diversas operaciones con este conjunto de información. Los usos típicos que se le da a una tabla interna son los siguientes: *Para almacenar temporalmente los datos de las tablas bases de datos para un procesamiento futuro: Es decir se seleccionan los datos de las tablas bases...

Acceder a esta publicación

Creado y Compartido por: Yeny Gisela Yanes Bautista

 


 

👌Genial!, estos fueron los últimos artículos sobre más de 99.000 publicaciones académicas abiertas, libres y gratuitas compartidas con la comunidad, para acceder a ellas le dejamos el enlace a CVOPEN ACADEMY.

🔎Buscador de Publicaciones:

 


 

No sea Juan... Solo podrá llegar alto si realiza su formación con los mejores!