🚀PROMO #PLANCARRERA2024 - 🔥Bonificaciones, Precios Congelados y Cuotas

 X 

✒️ABAP Las tablas internas

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.


 

 

 


Sobre el autor

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

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 SemiSenior

TABLAS INTERNAS: En ABAP las tablas internas hacen la función de los ARRAYS bidimensionales de otros lenguajes de programación. El uso más frecuente de una tabla interna es almacenar en memoria los datos de una tabla de una base de datos durante la ejecución de un programa ABAP. Por lo tanto, las tablas internas son memoria dinámica, es decir, se crean en tiempo de ejecución del programa en la parte de memoria RAM asignada para este propósito, y desaparecen una vez que se ha ejecutado el bloque o programa para el que se habían creado.

Acceder a esta publicación

Creado y Compartido por: Marvin Ernesto Gómez Ayala

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

SAP Senior

El uso de tablas internas facilita y ayuda a que en sap no se generen tablas Z innecesarias.

Acceder a esta publicación

Creado y Compartido por: Faharid Manjarrez

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

SAP Expert


En ABAP (Advanced Business Application Programming), las tablas internas son estructuras de datos que permiten almacenar conjuntos de información de manera temporal durante la ejecución de un programa. Estas tablas internas son muy útiles para procesar y manipular datos en la memoria del programa, sin necesidad de acceder a la base de datos de manera directa. Las tablas internas son similares a los arrays o listas en otros lenguajes de programación. Permiten almacenar datos de diferentes tipos, como números, caracteres, fechas, entre otros, y pueden contener múltiples filas de datos. A diferencia de las tablas de la base de datos, las tablas internas solo existen en tiempo de ejecución y no se...

Acceder a esta publicación

Creado y Compartido por: Darling Geraldino

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

SAP Master

Tablas internas si queremos guardar datos en la misma estructura de meoria sin necesidad de acceder continuamente a las bases de datos y poder realizar diversas operaciones con este conjunto, entonces se utilizan las tablas internas. uso tipico tablas internas: 1. para almacenar temporalmente los datos de las bases de datos para un procesamiento futuro. 2. para estructurar y formatear datos que se mostraran como salida de programas 3.para formatear datos para ser utilizados por otros servicios. como se crea una tabla interna se crea con la senticia data:begin of (nombre de la tabla) occurs (nunmero de datos a almacenar) (estructura de campos) end of (nombre de la tabla) llenado de una tabla interna: se utiliza al final la senticia append to...

Acceder a esta publicación

Creado y Compartido por: Oscar Sebastian Caicedo Carlier / Disponibilidad Laboral: PartTime + Carta Presentación

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

SAP Master

Para el manejo de tablas internas, es importante saber cuando deben llevar un area de trabajo de tal forma de agilizar y poder explotar la versatilidad del lenguaje de programacion ABAP, porque permita diferenciar el trabajo simple, del trabajo con tablas del sistema.

Acceder a esta publicación

Creado y Compartido por: Luis Enrique Quintero Florido

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

SAP Senior

LAS TABLA INTERNAS. Si se quiere 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, entonces utilizaremos tablas internas. 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 verdad es que la cantidad de registros máxima está íntimamente relacionada con los límites especificados...

Acceder a esta publicación

Creado y Compartido por: Juan Alberto Peñalver Alvarez / Disponibilidad Laboral: FullTime + Carta Presentación

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

SAP Master

Tabla internas alamcenar temporalmente coleccion de daros sin estar que accediendo a la base de datos para ello utilizamos tablas internas uso tipico almacenar temporalmente los datos de las bases de datos para un procesamiento futuro. estructurar y formatear datos que se mostraran como salida del programa formatear datos para ser utilizados por otros servicios como declarar tablas internas DATA: BEGIN OF <TABLA> OCCURS <N> <DEF CAMPO> END OF <TABLA> OCCURS: especifica la cantidad de registros en memoria AREA DE TRABAJO Cabecera de una tabla interna que tiene el contenido de una tabla interna que se esta procesando APPEND TO : se añade un registro a la tabla interna en la ultima posicion con los valores que...

Acceder a esta publicación

Creado y Compartido por: Andres Felipe Escobar Lopez

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

SAP Master

Tablas internas Para acabar (por el momento) tenemos las tablas internas. Sirven básicamente para almacenar la información que extraemos de las tablas de la base de datos. Una tabla interna es también una matriz de datos, pero bidimensional. Al contrario que las estructuras que sólo pueden contener un valor para cada campo, las tablas internas contendrán muchos registros. Cada registro llevará un valor diferente en el mismo campo a la manera que tiene una tabla transparente de diccionario. Podemos declarar tablas internas de diferentes maneras: Ejemplo de declaración de tablas internas: ************************************************************************ *Tablas internas ************************************************************************...

Acceder a esta publicación

Creado y Compartido por: Cesar Ismael Rodriguez Zorrilla

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

SAP Expert


Tablas internas: Es un objeto de datos que permite guardar en memoria grandes cantidades de registros de datos con la misma estructura. Uso de las tablas internas: Para almacenar temporalmente los datos de las BD para procesamiento futuro. Para estructurar y formatear datos que se mostraran como salida del programa. Para formatear datos para ser utilizados por otros servicios. La cantidad de lineas definidas en las tablas internas con la palabra OCCURS no limitan el tamaño de la tabla sino la cantidad de registros que se guardaran en memoria simultaneamente, por lo general se define con 0 para trabajar con tablas con grandes registros. APPEND TO: Añade un registro a la tabla interna en la ultima posición...

Acceder a esta publicación

Creado y Compartido por: Dairy Alejandra Torrenegra Cera

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

SAP Expert


Tablas internas Es un objeto de datos que permite guardar en memoria grandes cantidades de registros de datos con la misma estructura. Usos de la tabla interna Almacenar temporalmente los datos de las bases de datos para un procesamiento futuro. Para estructurar y formatear datos que se mostrarán como salida del programa Para formatear datos para ser utilizados por otros servicios. Declaración de tablas internas: Usando la sintaxis: DATA: BEGIN OF TABLA (Definiendo el tamaño OCCURS)....Campos END OF TABLA Usando la sintaxis: DATA: TABLA TYPE TABLE OF Estructura Usando la sintaxis: DATA: TABLA LIKE STANDARD TABLE OF Estructura WITH HEADER LINE. Operaciones de tablas internas APPEND TO: Añade...

Acceder a esta publicación

Creado y Compartido por: Marvin Raul Lopez Morales / Disponibilidad Laboral: FullTime + Carta Presentación

 


 

👌Genial!, estos fueron los últimos artículos sobre más de 79.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!