PROMO JULIO en CVOSOFT United States Of America: 💎Calidad, 🔥Bonificaciones, 🥶Precios Congelados y MÁS!

 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 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 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 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 SemiSenior

tablas internas. es un objeto de datos. append to

Acceder a esta publicación

Creado y Compartido por: Christian Camilo Alzate Duque

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

SAP Master

TABLAS INTERNAS Objeto de datos que permite guardar en memoria grandes cantidades de registros de datos con la misma estructura. cuyo límite se especifica en la instalacoón del sistema. Usos: Almacenamiento temporal de datos de bases de datos para futuro procesamiento. Estructurar y formatear datos que se mostrarán como salida del programa. Formatear datos para ser utilizados por otrs servicios. DECLARACIÓN DE TABLAS INTERNAS DATA: BEGIN OF <tabla> OCCURS <n>, <Def.Campo>, ... END OF <tabla> Tabla interna es la misma tabla interna estándar DATA: ti_vuelos like standard table of SFLIGHT with header line 3. LLENADO DE TABLA INTERNA Para llenar de datos las tablas internas...

Acceder a esta publicación

Creado y Compartido por: Jorge Alirio Carrillo García

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

SAP Senior

- Tablas Internas Las tablas internas son un objeto de datos que nos permite guardar grandes cantidades de registros con la misma estructura, para evitar el acceso a las bases de datos constantemente. La cantidad de registros máxima está limitada a las especificaciones en la instalación del sistema. - Usos de las tablas internas: Almacenar temporalmente los datos de las BD para su procesamiento. Estructurar y formatear datos que se mostrarán como salida del programa. Formatear datos para utilizarlos en otros servicios. - Declaración de una tabla interna: DATA: BEGIN OF <tabla> OCCURS <n>, <Def. Campo>, .... ...

Acceder a esta publicación

Creado y Compartido por: Sandra Erika Bernabe Abreu

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

SAP Senior

Las tablas internas sirven para realizar operaciones con la data de las tablas estándares sin tener que acceder a estas tablas cada vez que se necesite un dato. El agregado OCCURS en la declaración de una tabla interna limitan la cantidad de registros de la misma. El agregado WITH HEADER LINE define una cabecera a la tabla interna. Se puede declarar una tabla interna de la siguiente manera: <nombre_tabla_1> LIKE STANDARD TABLE OF <work_area>, siendo <work_area> una estructura. CLEAR inicializa una cabecera o work area de una tabla interna. APPEND añade un registro al final de la tabla interna. LOOP - ENDLOOP recorre el contenido de una tabla interna. READ TABLE lee un registro de una tabla interna dada...

Acceder a esta publicación

Creado y Compartido por: George Yunkichi Okuma Zavala

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

SAP Senior

Tablas Internas Las tablas internas son un objeto de datos que nos permite guardar grandes cantidades de registros con la misma estructura, para evitar el acceso a las bases de datos constantemente. La cantidad de registros máxima está limitada a las especificaciones en la instalación del sistema. - Usos de las tablas internas: Almacenar temporalmente los datos de las BD para su procesamiento. Estructurar y formatear datos que se mostrarán como salida del programa. Formatear datos para utilizarlos en otros servicios. - Declaración de una tabla interna: DATA: BEGIN OF <tabla> OCCURS <n>, <Def. Campo>, .... ...

Acceder a esta publicación

Creado y Compartido por: Juan Rodrigo Meza Avina

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

SAP Senior

TABLA INTERNA Es un objeto de datos que permite guardar en memoria grandes cantidades de registros de datos con la misma estructura. AREA DE TRABAJO: Cabecera de una tabla interna que tiene el contenido del registro de la tabla interna que se esta procesando. OCURRS: Clausula ABAP que se utiliza para especificar la cantidad de registro en memoria de una tabla interna. Por lo general en el parametro OCURRS se especifica la cantidad 0 lo que permite trabajar con tablas de gran cantidad de registros. AREA DE TRABAJO (WA): Cabecera de una tabla interna que tiene el contenido del registro de la tabla interna que se esta procesando. SELECT: Sentencia ABAP que se utiliza para acceder a las bases de datos de SAP. SORT: Sentencia ABAP que se utiliza...

Acceder a esta publicación

Creado y Compartido por: David Camacho Espinoza

 


 

👌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!