La declaración de datos debe ser la primera parte de todo report que escribamos en ABAP. En este artículo describiré cómo declarar variables, constantes, tablas internas… y en general, diferentes estructuras de datos globales que serán utilizadas en tiempo de ejecución del programa.
Tablas de diccionario
En primer lugar debemos declarar las tablas de diccionario.
Serán aquellas tablas de las que vamos a extraer información y que vamos a
utilizar posteriormente. La sentencia que utilizamos para ello es la sentencia
tables.
Ejemplo de la sentencia tables:
***********************************************************************
Tablas
***********************************************************************
TABLES:
sflight,
saplane,
scarr.
En este ejemplo declaramos tres tablas del diccionario
(sflight, saplane y scarr) a través de la sentencia tables. En ABAP una
sentencia seguida por dos puntos (:) sirve para enumerar una serie de
componentes y éstos siempre deben estar separados por coma. Finalmente todas las
sentencias ABAP acaban en punto (.).
Además podéis ver que hemos añadido un título con
asteriscos (*). Todo literal que vaya precedido por un
asterisco en ABAP será interpretado como un simple comentario para que el
programador entienda lo que sigue a continuación. Son muy útiles para que otros
programadores que “lean” vuestro programa entiendan mejor lo que habéis escrito.
En este caso sirve para estructurar mejor el report.
Variables globales
Son aquellas variables visibles desde cualquier punto del
programa y que contienen un único dato. Se declaran mediante la sentencia
data seguida del tipo de dato.
Ejemplo:
************************************************************************
*Variables globales
************************************************************************
DATA:
g_vuelo(4) TYPE n, "Número de vuelo
g_fecha TYPE s_date, "Fecha del vuelo
g_precio LIKE sflight-price. "Precio del vuelo
Podemos declarar estos objetos de datos de distintas formas:
-
A través del tipo de datos predefinido en ABAP (caso de la variable g_vuelo). Utilizamos type para definir el tipo. Los tipos ABAP predefinidos más comunes que podemos encontrar son:
-
c: carácter o alfanumérico.
-
d: fecha. ABAP los guarda internamente como AAAAMMDD, es decir, cuatro dígitos para el año, dos dígitos para el mes y dos dígitos para el día.
-
t: para la hora.
-
i: para números enteros.
-
n: para variables que contendrán textos exclusivamente numéricos.
-
f: numéricos con coma flotante.
-
p: numéricos empaquetados.
-
-
A través de un elemento de datos que ya exista en el diccionario ABAP (caso de la variable g_fecha). También utilizamos type para definir el tipo de dato.
-
A través de un campo que ya exista en una tabla de diccionario (caso de la variable g_precio). No utilizamos type sino like. SAP entenderá la variable como el dato que se contiene en ese campo del diccionario.
En el ejemplo también hemos introducio otro concepto, el de las
comillas (“). Escribir unas comillas después de cualquier
sentencia ABAP indica a SAP que lo que sigue a continuación es un simple
comentario que puede ser leído pero no se tiene en consideración a la hora de
ejecutar el programa. Son muy importantes, al igual que los asteriscos, para
introducir comentarios útiles que ayuden a entender mejor el programa.
Constantes
Al contrario que una variable, las constantes que se declaran
al principio del programa nunca podrán modificar su valor durante la ejecución
del programa. En un programa se utilizan para evitar escribir valores literales.
La sentencia utilizada es la sentencia constants.
Ejemplo de la sentencia constants:
************************************************************************
*Constantes
************************************************************************
CONSTANTS:
c_vuelo(5) TYPE c VALUE 'Vuelo',
c_fecha TYPE d VALUE '20121231'.
En este caso vemos que la declaración de constantes y variables
es igual, la diferencia radica en la cláusula value. Así
dotamos de contenido a nuestra constante durante toda la ejecución del programa.
No intentéis asignar nunca un valor a una constante durante la ejecución del
programa (hacedlo sólo en la declaración de la constante) ya que ABAP no lo va a
aceptar.
Estructuras
Son matrices de datos unidimensionales. En palabras sencillas,
una estructura es un encadenamiento de variables. En lugar de declarar,
diferentes variables por separado, una estructura es una declaración de
variables o campos conjunta.
Ejemplo:
************************************************************************
*Estructuras
************************************************************************
DATA:
BEGIN OF e_aerolinea,
carrid LIKE scarr-carrid, "Código de aerolinea
carname TYPE s_carrname, "Nombre de aerolínea
url(255) TYPE c,
END OF e_aerolinea.
El ejemplo declara una estructura de tres campos (carrid,
carname y url) juntos. Para declarar una estructura utilizamos la sentencia
data, luego abrimos la estructura con la cláusula begin
of nombre_de_la_estructura. Una vez declarados los campos cerramos la
sentencia con la claúsula end of nombre_de_la_estructura.
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
************************************************************************
* Tabla de vuelos: primera forma de declaración de tablas internas
DATA:
BEGIN OF i_vuelos occurs 0,
carrid LIKE sflight-carrid,
connid LIKE sflight-connid,
fldate LIKE sflight-fldate,
planetype LIKE sflight-planetype,
END OF i_vuelos.
* Tabla de aviones: segunda forma de declaración de tablas internas
TYPES:
BEGIN OF ty_aviones,
planetype LIKE saplane-planetype,
seatsmax LIKE saplane-seatsmax,
END OF ty_aviones.
DATA:
i_aviones TYPE STANDARD TABLE OF ty_aviones.
-
La primera forma de declarar una tabla interna es muy parecida a la declaración de estructuras, pero añadiendo la cláusula occurs 0. Al declarar una tabla interna de este modo también estamos diciendo a SAP que nuestra tabla interna tendrá una cabecera.
-
La segunda forma se realiza mediante sentencia types, que permite la declaración de tipos de datos. Esta segunda forma parece más complicada y más larga, pero es preferible utilizarla ya que la primera no es útil en ciertos entornos ABAP como en programación de queries, smartforms o ABAP orientado a objetos. Al declarar una tabla interna de este modo también estamos diciendo a SAP que nuestra tabla interna tendrá una cabecera. En otro artículo veremos qué implicaciones tiene esto.
Resumen de sentencias
-
Tables.
-
Data.
-
Constants.
-
Data: begin of nombre_estructura … end of nombre_estructura.
-
Data: begin of nombre_tabla_interna … end of nombre_tabla_interna.
-
Types: begin of nombre_tipo … end of nombre_tipo.
Por supuesto, existen más tipos de datos y objetos de datos en SAP. Sin embargo, para un tutorial básico ABAP como es éste y para empezar a aprender a programar conocer estos tipos es más que suficiente. Si queréis profundizar más en este aspecto podéis consultar el libro de José Luis Herrero Lucas Programación en ABAP/4 para SAP R/3 y en la help de SAP Data types and objects.
En el próximo post sobre la serie: pantallas de selección.
Imagen inicial | Qfamily
Si crees que este artículo es útil ayúdame a compartirlo a través de alguno de los botones sociales :-)
Este comentario ha sido eliminado por el autor.
ResponderEliminarExcelete Post...
ResponderEliminarEXCELENTE !!!
ResponderEliminarDefiniciones basicas, buen post
ResponderEliminarMuy bien explicado todo. +10
ResponderEliminarGenial !!
ResponderEliminarexcelente muy bien explicado
ResponderEliminar