Voy a comenzar a publicar varios post sobre los conceptos básicos del lenguaje de programación de SAP, ABAP.
El primer apartado lo vamos a dedicar a la definición de datos. El primer caso es conocer que tipos de datos nos proporciona el lenguaje. Os voy a presentar los tipos básicos que nos proporciona ABAP:
Variables
Las variables se definen por defecto de tipo carácter Texto con longitud 1.
Ejemplo: DATA d_caracter. (Vble de texto con long 1)
DATA d_caracter(8). (Vble de texto con long 8)
DATA: d_numero_car(5) TYPE N,
d_numero TYPE I,
d_fecha TYPE D.
DATA d_contador TYPE I VALUE 1.
Con la cláusula LIKE podemos declarar una variable con los mismos atributos de longitud y tipo que un campo del diccionario de datos o que otra variable definida anteriormente.
Ejemplo: DATA d_dato LIKE lfa1-lifnr.
Constantes
Las constantes se definen con la sentencia CONSTANTS:
CONSTANTS <constante> (longitud) TYPE <tipo> VALUE <valor>.
Mismas reglas que para variables, excepto que siempre hay que inicializarlo y no puede ser modificado durante la ejecución.
Ejemplo: CONSTANTS c_dato LIKE lfa1-lifnr VALUE ‘JOSE’.
Estructuras
Una estructura es un conjunto de campos relacionados lógicamente y se define con
DATA:
DATA: BEGIN OF <estructura>
………………,
END OF <estructura>.
Ejemplo: DATA: BEGIN OF r_estructura
Codigo LIKE lfa1-lifnr,
Fecha TYPE d,
END OF r_estructura.
También se puede incluir en la definición de una estructura, la de una tabla del diccionario de datos o una estructura definida previamente en el programa utilizando la instrucción
INCLUDE ESTRUCTURE ......... .
Ejemplo: DATA BEGIN OF r_sociedades OCCURS 0.
INCLUDE STRUCTURE T001.
DATA: contador(20) TYPE N,
END OF r_sociedades.
Para llamar a los campos de una estructura se especifica el nombre de la estructura y del campo, separados por guión.
Ejemplo: r_sociedades-nombre = ‘JOSE’.
Rangos
Los rangos son tablas internas con una estructura determinada que se utilizan para almacenar rangos de valores para un tipo de campo y se definen con
RANGES:
RANGES: <rango> FOR <campo>.
La estructura de un rango se compone de los siguientes campos:
-SIGN: Campo de tipo carácter de longitud 1, que indica si los valores especificados en el rango se incluyen (I) o se excluyen (E) del mismo.
-
OPTION: Campo de tipo carácter de dos posiciones que indica el operador lógico que une los valores especificados en el rango. Los valores que puede tomar son:
- EQ = equal
- NE = not equal
- GE = greater or equal
- GT = greater than
- LE = less or equal
- LT = less than
- CP = contains pattern
- NP = not contains pattern
-
LOW: Valor inicial del rango. Este campo tiene el mismo tipo que el campo al que hace referencia el rango.
-
HIGH: Valor final del rango. Es del mismo tipo que el campo al que hace referencia el rango.
Los rangos se utilizan para chequear valores válidos en sentencias condicionales del campo en cuestión. Si el rango no tiene ningún registro, se asume que cualquier valor del campo es válido.
Ejemplo: TABLES: LFA1.
RANGES: r_rango FOR lfa1-lifnr.
r_rango-sign = ‘I’.
r_rango-option = ‘BT’. (entre)
r_rango-low = ‘1’.
r_rango-high = ‘9’.
APPEND r_rango.
El rango creado hace referencia a los valores del campo lfa1-lifnr comprendidos entre el 1 y el 9, ambos inclusive por tener ‘I’.
Field-Symbols
Los Field-Symbols son campos simbólicos que se pueden referenciar a un campo concreto, en tiempo de ejecución del programa y se definen con
FIELD-SYIBOLS:
FIELD-SYMBOLS <nombre>. ¡¡Poner <........>!!
Utilizando ASSIGN se asigna un campo al field-symbol y a partir de entonces, las operaciones que se realicen sobre el field-symbol, hacen referencia al campo asignado.
Ejemplo:
FIELD-SYMBOLS: <campo>.
DATA: d_contador1 TYPE i,
d_contador2 TYPE i.
ASSIGN d_contador1 to <campo>.
<campo> = <campo> + 1.
ASSIGN d_contador2 to <campo>.
<campo> = <campo> + 2.
Ahora d_contador1 tiene el valor 1 y d_contador2 tiene el valor 2.