Tutorial ABAP básico (II): declaración de datos

domingo, 9 de diciembre de 2012

Day 139: New functions

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 :-)

7 comentarios: