Академический Документы
Профессиональный Документы
Культура Документы
1 Sintaxis en ABAP
La sintaxis en ABAP consta de los siguientes elementos:
Este ejemplo contiene dos sentencias, una por lnea. Las palabras clave son PROGRAM y
WRITE. El programa en cuestin presenta una lista por pantalla, que consiste en la lnea Mi
primer programa.
Las palabras clave determinan la categora de la sentencia. El siguiente diagrama muestra la
estructura de una sentencia ABAP. El siguiente diagrama muestra la estructura de una sentencia
ABAP:
Curso SAP
Pgina 2 de 19
PROGRAM
TEST.
WRITE
Esto es una sentencia.
Por tanto, la forma de escribir las sentencias se deja a decisin del propio programador, que
deber guiarse por la inteligibilidad de sus programas.
Todos los espacios habidos entre ambas comillas se interpretan como parte del literal.
Letras en literales dentro de una lnea que no est temrinada en comillas simples se
interpretan como maysculas por el editor ABAP.
Para paliar el problema de escribir literales que abarquen ms de una lnea, ABAP nos brinda el
carcter &, para concatenar varias cadenas de caracteres. Por ejemplo:
PROGRAM TEST.
WRITE 'Esto
es
una sentencia.
inserta todos los espacios entre las comillas simples como literales, y convierte las letras a
maysculas. Por tanto, lo que hemos de hacer es lo siguiente:
PROGRAM TEST.
WRITE 'This' &
' is ' &
'a statement'.
con lo que conseguimos combinar los tres literales en uno slo.
Curso SAP
Pgina 3 de 19
SUM = SUM + 4.
Chain statement:
SUM = SUM + : 1, 2, 3, 4.
Curso SAP
Pgina 4 de 19
1.10
Por definicin, una tabla interna bien puede ser un tipo de dato o un objeto de dato, por lo que la
implementacin en ABAP bien podra ser de esta forma:
DATA: BEGIN OF <itab> OCCURS <n>,
{<f1>,...,<fn> | INCLUDE STRUCTURE <str>},
END OF <itab>.
1.11
Para la declaracin de variables en nuestro programa habremos de usar la sentencia DATA. Para
ello, podemos definirlas de tres formas diferentes:
Carcter
Espacio en blanco
Texto Numrico
00 0
Fecha YYYYMMDD
00000000
Hora HHMMSS
000000
Byte (hexadecimal)
X00
Entero
Nmero empaquetado
0.0
Asignando tipo y atributos del campo de una tabla del diccionario a la variable que
queramos declarar:
DATA: Variable LIKE tabla_dicc-nom_campo.
Curso SAP
Pgina 5 de 19
1.12
En ABAP, reciben el nombre de pantallas de seleccin aquellas en las que el usuario introduce
datos de entrada, que sern empleados posteriormente por el sistema para generar una salida.
Dentro de una pantalla de seleccin, podemos estructurar la informacin a introducir por el usuario
en bloques diferenciados, que reciben el mismo nombre dentro de ABAP.
En general, y para hacernos una mejor idea, ste sera el aspecto de una pantalla de seleccin
corriente:
Esto generara una pantalla de seleccin con un nico bloque de entrada de datos.
No obstante, tambin es posible generar varias pantallas de seleccin para un mismo programa
mediante las sentencias:
SELECTION-SCREEN BEGIN OF SCREEN scr.
INSTRUCCIONES.
SELECTION-SCREEN END
OF SCREEN scr.
Como es lgico, dentro de las screen creadas se pueden ir definiendo los bloques que queramos
para el ingreso de datos.
Veamos el siguiente ejemplo:
TABLES: SPFLI.
SELECT-OPTIONS SEL0 FOR SY-TABIX.
PARAMETERS PAR0(5).
ULINE
SKIP n
1.13
2.5.1.- PARAMETERS
En las dos primeras, se tratara de definir la clase de variable que va a contener el dato
ingresado por el usuario, bien por la sentencia TYPE o por LIKE, como a continuacin se
explicar.
Las dos ltimas sirven para definir las variables de entrada como checkbox o radiobuttons,
elementos tambin muy importantes en la estructuracin de cualquier pantalla de
seleccin.
Las opciones de campo posibles son las siguientes:
Curso SAP
OBLIGATORY
Fuerza al usuario a introducir un valor para ese campo de
entrada.
LOWER CASE
Convierte la cadena de caracteres introducida a minscula.
MATCHCODE OBJECT nombre_matchcode
Esta sentencia asocia un
matchcode creado a la variable de entrada.
GROUP n
Este parmetro se usa con los radiobutton, agrupndolos
funcionalmente.
MODIF ID group
Esta clusula indica que el objeto puede modificarse,
debiendo ste estar previamente incluido en un grupo.
Pgina 7 de 19
1.14
2.5.2.- SELECT-OPTIONS
Esta clusula nos permite trabajar con una serie de valores prefijados de antemano y
comprendidos dentro de un rango, que podrn ser seleccionados dentro de la pantalla de
seleccin. Su sintaxis es la siguiente:
SELECT-OPTION nombre_seleccin FOR CAMPO_1
1.15
1.16
2.7.- Subrutinas
Una subrutina no es ms que un trozo de cdigo ligado al resto, pero diferenciado del mismo por
razones de funcionalidad. En otros lenguajes de programacin puede recibir el nombre de
procedimiento.
Para la creacin de subrutinas, debemos usar la siguiente instruccin:
PERFORM nom-subrutina.
Al hacer doble click sobre la instruccin, el editor nos pregunta si queremos crear dicha subrutina.
Contestamos que s, y despus nos da la opcin de crearla, bien en el propio cuerpo del cdigo
del programa principal, o bien en un include aparte.
Curso SAP
Pgina 8 de 19
En cualquier caso, al margen de lo que hayamos escogido, ABAP genera solo el cdigo
correspondiente de la siguiente manera:
*----------------------------------------------------------------------*
***INCLUDE ZPRUEBA .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&
Form PRUEBA
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
form prueba.
endform.
" PRUEBA
Ya slo nos quedara ingresar el cdigo pertinente entre las instrucciones form prueba y endform.
1.18
para referirnos a cualquier tipo de dato <type> que ya es conocido en ese punto del programa. Se
puede usar en cualquiera de las sentencias listadas a continuacin:
1.19
LINE OF <table-type>
Curso SAP
Pgina 9 de 19
Los atributos tcnicos del parmetro formal <p> se heredan de aquellos que estn
declarados para el tipo <type>.
Como en el anterior caso, los atributos tcnicos de <p> son heredados de los declarados
en <type>.
se puede usar en las mismas sentencias que TYPE para referirnos a cualquier objeto de datos ya visibles
en ese punto del programa en el que nos encontremos.
En general, la sentencia LIKE la usamos para que el nuevo objeto o tipo que estemos creando herede los
atributos tcnicos del objeto referenciado ya existente.
1.21
Curso SAP
Pgina 10 de 19
sta es la forma ms normal de asignar valores a una variable. Sin embargo, ABAP tambin nos ha
provisto de la sentencia MOVE, como ya se ha comentado, cuyos efectos en nada difieren de los de la
sentencia anterior. Su sintaxis sera como sigue:
1.23
5.1.- MOVE f TO g.
Curso SAP
Pgina 11 de 19
1.24
En este caso, el campo g recibe los contenidos del campo f desplazados off1 y con un tamao
len1 (referidos a la primera variable f), con un desplazamiento y tamao off2 y len2,
respectivamente (referidos ahora a la segunda variable g).
Veamos el siguiente ejemplo:
DATA: FIELD1(10) VALUE '1234567890',
OFF1 TYPE I VALUE 1,
LEN1 TYPE I VALUE 2,
FIELD2(8) VALUE 'abcdefgh',
OFF2 TYPE I VALUE 3,
LEN2 TYPE I VALUE 4.
MOVE FIELD1+OFF1(LEN1) TO FIELD2+OFF2(LEN2).
1.25
C1 y c2 deben ser campos de tipo C; n es un campo con un valor numrico comprendido entre 0 y
100. La parte izquierda del campo c1 (el porcentaje n) se mueve al campo c2 y se justifica a la
izquierda. Llegado el caso, c2 se rellena con campos en blanco si es necesario.
o
IF logexp.
processing1
ELSE.
processing2
ENDIF.
o
IF logexp1.
processing1
ELSEIF logexp2.
processing2
ELSEIF ...
...
ELSE.
processingN
ENDIF.
Dependiendo de las condiciones lgicas definidas en logexp, esta sentencia inicia un flujo
de instrucciones u otro.
ntimamente relacionadas con esta sentencia encontramos a los operadores lgicos:
Curso SAP
Pgina 12 de 19
=,
<>,
>,
<,
>=,
<=,
EQ: EQual to
NE: Not Equal to
GT: Greater Than
LT: Less Than
GE: Greater or Equal
LE: Less or Equal
Sentencia DO: Repite el proceso encerrado entre DO y ENDDO hasta que el bucle se
termina con la sentencia EXIT, STOP o REJECT.
Podemos usar la sentencia CONTINUE para terminar la pasada de LOOP actual antes de
tiempo y continuar con la siguiente.
La variable de sistema SY-INDEX cuenta el nmero de pasadas del LOOP, comenzando
desde el 1. De igual forma, nos es posible anidar varias sentencias DO. Cuando el
proceso pasa de un bucle DO interno a otro ms externo, SY-INDEX es resstablecida.
Esta sentencia repite el proceso contenido entre WHILE y ENDWHILE siempre que logexp
se cumpla.
Antes de cada pasada del bucle, la sentencia chequea la condicin; de no cumplirse ms,
el flujo de programa retorna justo despus del ENDWHILE.
Aqu podemos ver el siguiente ejemplo:
DATA: SEARCH_ME TYPE I,
MIN
TYPE I VALUE 0,
MAX
TYPE I VALUE 1000,
TRIES
TYPE I,
NUMBER
TYPE I.
SEARCH_ME = 23.
WHILE NUMBER <> SEARCH_ME.
ADD 1 TO TRIES.
NUMBER = ( MIN + MAX ) / 2.
IF NUMBER > SEARCH_ME.
MAX = NUMBER - 1.
ELSE.
MIN = NUMBER + 1.
ENDIF.
ENDWHILE.
El cdigo realiza una bsqueda binaria para el nmero desconocido SEARCH_ME que se
encuentra entre MIN y MAX. Tries contiene el nmero de veces que ha hecho falta buscarlo para
encontrarlo.
Esta sentencia comprueba que se cumpla logexp, y caso de que as sea, contina con el flujo
del programa; de no cumplirse, interrumpe la rutina o mdulo en el que se encuentre.
Curso SAP
Pgina 13 de 19
1.28
7.1.- EXIT
Nota: Si tenemos varios LOOP anidados, la sentencia EXIT termina slo con el LOOP actual,
recuperando el proceso en el punto en que se dej en el LOOP inmediatamente posterior.
1.29
7.2.- CONTINUE
En este ejemplo, cuando la variable de sistema SY-INDEX estuviera entre 10 y 20, sta no se imprimira.
1.30
7.3.- Control del nivel de procesamiento: AT FIRST,
AT LAST, AT NEW, AT END OF.
Este control consiste en que podemos dividir secuencias de entradas en grupos basndonos en el
contenido de ciertos campos.
Curso SAP
Pgina 14 de 19
Las tablas internas estn divididas en grupos de acuerdo con la secuencia de los campos en la
lnea estructurada.
Dicho de otro modo, nos es posible estructurar el desarrollo del LOOP en funcin de los valores
de los campos, segn las siguientes variantes:
<level>
FIRST
Meaning
LAST
NEW <f>
END Of <f>
El siguiente diagrama ilustra el control de nivel de procesamiento en una tabla ordenada, donde los diferentes contenidos
de cada campo se diferencian por el color:
Con la sentencia AT se nos permite gestionar la sentencia LOOP en funcin de esos cambios en
los contenidos de los campos que aqu referenciamos mediante un cambio de color.
En general, la sentencia AT tiene el siguiente aspecto:
LOOP AT <itab>.
AT FIRST. ... ENDAT.
AT NEW <f1>. ...... ENDAT.
AT NEW <f2 >. ...... ENDAT.
.......
<single line processing>
.......
AT END OF <f2>. ... ENDAT.
AT END OF <f1>. ... ENDAT.
Curso SAP
Pgina 15 de 19
Si estamos trabajando con un wa, ste no contiene la lnea actual en el bloque AT ENDAT.
Todos los caracteres a la derecha de la actual clave de grupo son rellenados con asteriscos.
Todos los dems campos a la derecha de la clave de grupo actual contienen su valor inicial.
Dentro de un bloque AT ENDAT, podemos calcular los contenidos de los campos numricos
correspondientes al nivel actual mediante la sentencia SUM.
Si la tabla contiene otra tabla anidada, no podremos usar la sentencia SUM.
Veamos los siuientes ejemplos:
DATA: BEGIN OF LINE,
COL1 TYPE C,
COL2 TYPE I,
COL3 TYPE I,
END OF LINE.
DATA ITAB LIKE HASHED TABLE OF LINE
WITH UNIQUE KEY COL1 COL2.
LINE-COL1 = 'A'.
DO 3 TIMES.
LINE-COL2 = SY-INDEX.
LINE-COL3 = SY-INDEX ** 2.
INSERT LINE INTO TABLE ITAB.
ENDDO.
LINE-COL1 = 'B'.
DO 3 TIMES.
LINE-COL2 = 2 * SY-INDEX.
LINE-COL3 = ( 2 * SY-INDEX ) ** 2.
INSERT LINE INTO TABLE ITAB.
ENDDO.
SORT ITAB.
LOOP AT ITAB INTO LINE.
WRITE: / LINE-COL1, LINE-COL2, LINE-COL3.
AT END OF COL1.
SUM.
ULINE.
WRITE: / LINE-COL1, LINE-COL2, LINE-COL3.
SKIP.
ENDAT.
AT LAST.
SUM.
ULINE.
WRITE: / LINE-COL1, LINE-COL2, LINE-COL3.
ENDAT.
ENDLOOP.
A 1 1
A 2 4
Curso SAP
Pgina 16 de 19
A
3
9
________________________________
A
14
B 4 16
B 6 36
________________________________
B
12
56
________________________________
*
18
70
El programa crea una tabla hashed ITAB, la rellena con seis lneas y la ordena. En el bloque
LOOP-ENDLOOP, el work area LINE es presentado por pantalla en cada pasada del LOOP. El
primer campo de la clave de la tabla, COL1, se usa para el control del nivel de procesamiento. El
total para todos los campos numricos siempre se calcula cuando el contenido de COL1 cambia y
el sistema se encuentra en la ltima pasada del LOOP.
DATA: BEGIN OF LINE,
CARRID
TYPE
CONNID
TYPE
FLDATE
TYPE
CUSTTYPE TYPE
CLASS
TYPE
BOOKID
TYPE
END OF LINE.
SBOOK-CARRID,
SBOOK-CONNID,
SBOOK-FLDATE,
SBOOK-CUSTTYPE,
SBOOK-CLASS,
SBOOK-BOOKID,
DATA ITAB LIKE SORTED TABLE OF LINE WITH UNIQUE KEY TABLE LINE.
SELECT CARRID CONNID FLDATE CUSTTYPE CLASS BOOKID
FROM SBOOK INTO CORRESPONDING FIELDS OF TABLE ITAB.
LOOP AT ITAB INTO LINE.
AT FIRST.
WRITE / 'List of Bookings'.
ULINE.
ENDAT.
AT NEW CARRID.
WRITE: / 'Carrid:', LINE-CARRID.
ENDAT.
AT NEW CONNID.
WRITE: / 'Connid:', LINE-CONNID.
ENDAT.
AT NEW FLDATE.
WRITE: / 'Fldate:', LINE-FLDATE.
ENDAT.
Curso SAP
Pgina 17 de 19
AT NEW CUSTTYPE.
WRITE: / 'Custtype:', LINE-CUSTTYPE.
ENDAT.
WRITE: / LINE-BOOKID, LINE-CLASS.
AT END OF CLASS.
ULINE.
ENDAT.
ENDLOOP.
En este ejemplo, la tabla sorted interna es rellenada con datos de la tabla de la base de datos
SBOOK mediante la sentencia SELECT. La secuencia de las columnas en la tabla interna define
la jerarqua del nivel de control. Debido a que la clave de la tabla es la lnea entera, la sequencia
de ordenacin y la jerarqua del nivel de control son las mismas.
El programa genera la siguiente salida:
List of Bookings
Carrid: AA
Connid: 0017
Fldate: 1998/11/22
Custtype: B
00063509 C
00063517 C
...
______________________________________________
00063532 F
00063535 F
...
______________________________________________
Custtype: P
00063653 C
00063654 C
...
______________________________________________
00063668 F
00063670 F
...
______________________________________________
Fldate: 1998/29/11
Custtype: B
00064120 C
00064121 C
...
Suma
F1 = f1 + f3
ADD f2 to f1
Resta
F1 = f2 f3
SUBTRACT f2 FROM f1
Multiplicacin
F1 = f2 * f3
MULTIPLAY f1 BY f2
Curso SAP
Pgina 18 de 19
Divisin
Divisin entera
Resto de una divisin entera
Operacin con exponente
F1 = f2 / f3
DIVIDE f1 BY f2
F1 = f2 DIV f3
F1 = f2 MOD f3
F1 = f2 ** f3
Significado
abs
Sign
-1 si es negativo.
0 si es igual a 0.
1 si es positivo.
Ceil
Floor
Trunc
Frac
Funciones trigonomtricas.
Funciones hiperblicas.
Exp
Log
Log10
sqrt
Raz cuadrada.
Curso SAP
Pgina 19 de 19