Está en la página 1de 19

FORMACIN SAP Fundamentos ABAP

Ejercicios Flujo de ABAP

Formacin SAP ABAP


Documentacin de los Mdulos de SAP
Flujo Gestin de ABAP - Sintaxis ABAP

1 Sintaxis en ABAP
La sintaxis en ABAP consta de los siguientes elementos:

1.1 1.- Generalidades


1.2 1.1.- Sentencias
Un programa en ABAP no es ms que un conjunto de sentencias ABAP interrelacionadas entre s.
Cada sentencia comienza con una palabra clave y termina con un punto.
PROGRAM FIRST_PROGRAM.
WRITE Mi primer programa.

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:

1.3 1.2.- Formateo de sentencias ABAP


ABAP no tiene restricciones en lo que a la forma de disponer las sentencias se refiere, de modo
que escribir:
PROGRAM TEST.
WRITE Esto es una sentencia.
es lo mismo que escribir:
PROGRAM TEST. WRITE Esto es una sentencia.
o lo mismo que:

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.

1.4 1.3.- Un caso especial: literales


Los literales son secuencias de caracteres alfanumricos dentro del cdigo de programa que
estn encerradas entre comillas simples. Si un literal se extiende ms all de una lnea, podemos
encontrarnos con las siguientes dificultades:

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.

1.5 1.4.- Sentencias encadenadas


ABAP nos permite concatenar sentencias consecutivas con idnticas primeras partes dentro de
una sentencia encadenada.
Para ello, hemos de escribir la parte comn de las sentencias slo una vez, escribir dos puntos y
poner las partes de las sentencias diferencias separadas por comas. Por ejemplo:
WRITE SPFLI-CITYFROM.
WRITE SPFLI-CITYTO.
WRITE SPFLI-AIRPTO.
Podemos escribirlo de esta otra forma:

WRITE: SPFLI-CITYFROM, SPFLI-CITYTO, SPFLI-AIRPTO.


Aqu podemos ver otro ejemplo:
SUM = SUM + 1.
SUM = SUM + 2.
SUM = SUM + 3.

Curso SAP

Pgina 3 de 19

SUM = SUM + 4.
Chain statement:
SUM = SUM + : 1, 2, 3, 4.

1.6 1.5.- Comentarios


Los comentarios son textos que se escriben al objeto de ilustrar mejor al lector el propsito y
funcionamiento de nuestro programa.
Para insertar lneas enteras de comentarios en nuestro programa, habremos de precederlas de un
asterisco (*). Si lo que queremos es insertar un comentario en cualquier lugar de una lnea de
cdigo habremos de precederlo con dobles comillas ().
* Comienzo de la seleccin
START-OF-SELECTION.
i_tab-nombre = p_nombre." Entrada de nombre
i_tab-direccion = p_direcc.
i_tab-telefono = p_telef.
i_tab-dni = p_dni.

1.7 2.- Estructura de un programa en ABAP


En general, podramos seguir el siguiente esquema a la hora de escribir un programa en ABAP:

Sentencia REPORT (slo si se trata de un programa ON LINE).


Declaracin de las tablas del diccionario que vayamos a usar.
Declaracin de las tablas internas.
Declaracin de variables.
Especificacin de las pantallas de seleccin.
Declaracin de eventos.
Subrutinas.

1.8 2.1.- Sentencia REPORT


REPORT es la primera sentencia en un programa, y sirve para especificar al sistema que se trata
de un listado on line.
Esta sentencia tiene las siguientes opciones:

NO STANDARD PAGE HEADING


Suprime la salida de la cabecera estndar de
pgina. De esta forma, visualizaremos los ttulos o cabeceras que hayamos creado.
LINE-SIZE
Nmero de columnas contenidos en una lnea.
LINE-COUNT
Nmero de filas contenidas en una lnea.
DEFINING DATABASE
Aqu especificaremos el nombre de la base de datos lgica
a la que pertenece nuestro programa, si procede.
MESSAGE xx
Este parmetro define la clase de mensaje estndar para el
programa principal; xx es el nmero de la librera donde podemos encontrar los
mensajes.
RESERVE n LINES
Si no hay espacio suficiente en la actual pgina para al menos
n lneas, el programa comienza una nueva pgina para el listado de dichas lneas. El
parmetro n puede ser bien una constante o una variable.
PAGE-COUNT
Aqu especificaremos el nmero mximo de pginas por listado.

1.9 2.2.- Declaracin de tablas del diccionario


En esta parte del programa es donde le especificamos al sistema qu tablas del diccionario vamos
a usar. Para ello, debemos usar la sentencia TABLES. Ejemplo:
TABLES: spfli, mara.

Curso SAP

Pgina 4 de 19

1.10

2.3.- Declaracin de tablas internas

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

O bien de estas otras:


1. TYPES itabtype {TYPE tabkind OF linetype
LIKE tabkind OF lineobj}
[WITH [UNIQUE NON-UNIQUE] keydef] [INITIAL SIZE n].
2. TYPES itabtype TYPE RANGE OF type.
TYPES itabtype LIKE RANGE OF f.
3. TYPES itabtype {TYPE linetype LIKE lineobj} OCCURS n.

Dependiendo de si la definimos como un objeto de dato o un tipo de dato, respectivamente.


En la definicin de la tabla interna, hemos de tener en cuenta que adems se establece una lnea
de cabecera o rea de trabajo.

1.11

2.4.- Declaracin de variables

Para la declaracin de variables en nuestro programa habremos de usar la sentencia DATA. Para
ello, podemos definirlas de tres formas diferentes:

Directamente, mediante la sentencia TYPE (ver epgrafe 3). En concreto, ABAP


distingue entre los siguientes tipos de variable:
Tipo
Descripcin
Longitud
Valor inicial
C

Carcter

Espacio en blanco

Texto Numrico

00 0

Fecha YYYYMMDD

00000000

Hora HHMMSS

000000

Byte (hexadecimal)

X00

Entero

Nmero empaquetado

Nmero en coma flotante

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.

Y finalmente, declarndola con la estructura de otra:


DATA: variable1 LIKE variable2.

De esta manera, variable1 hereda la estructura de variable2.


Anlogamente, podemos hacer lo mismo con una tabla:

Curso SAP

Pgina 5 de 19

DATA: i_table LIKE spfli.

1.12

2.5.- Especificacin de las pantallas de seleccin

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:

En un programa ABAP, podemos implementar tantas pantallas de seleccin como queramos.


La sintaxis para especificar una pantalla de seleccin sera la siguiente:
SELECTION-SCREEN BEGIN OF BLOCK nom-bloque WITH FRAME TITLE nom-titulo.
INSTRUCCIONES
SELECTION-SCREEN END OF BLOCK nom-bloque.

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

SELECTION-SCREEN BEGIN OF SCREEN 123 AS WINDOW TITLE TEXT-456.


SELECTION-SCREEN BEGIN OF BLOCK BL1 WITH FRAME TITLE TEXT-BL1
NO INTERVALS.
SELECT-OPTIONS SEL1 FOR SY-SUBRC.
PARAMETERS
PAR1 LIKE SPFLI-CARRID.
SELECTION-SCREEN COMMENT /10(20) TEXT-COM.
SELECTION-SCREEN END OF BLOCK BL1.
SELECTION-SCREEN END OF SCREEN 123.
SELECTION-SCREEN ULINE.
SELECTION-SCREEN BEGIN OF SCREEN 99.
SELECTION-SCREEN PUSHBUTTON 15(25) PUBU
USER-COMMAND US01.
SELECT-OPTIONS SEL2 FOR SPFLI-CONNID.
PARAMETERS
PAR2 TYPE I.
SELECTION-SCREEN END OF SCREEN 99.

Adicionalmente, la sentencia SELECTION-SCREEN contiene un par de parmetros interesantes


para la salida formateada de datos:

ULINE
SKIP n

Intercala en la salida una lnea horizontal.


El programa da un salto de n lneas para imprimir la siguiente.

As mismo, disponemos de las siguientes herramientas para pedir informacin a travs de la


pantalla de seleccin:

1.13

2.5.1.- PARAMETERS

Esta sentencia sirve para intercalar un campo de entrada de datos en la pantalla de


seleccin. Su sintaxis es la siguiente:
PARAMETERS: variable LIKE campo-tabla-dicc.
Idem variable(longitud) TYPE opciones-campo.
Idem variable AS CHECKBOX DEFAULT X.
Idem variable RADIOBUTTON opciones-resto.

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

Por lo tanto, campo_1 va a contener todas las posibles entradas.


As mismo, disponemos de una clusula adicional denominada DEFAULT para proponer
valores nicos o intervalos:
DEFAULT XXX TO YYY.
DAFAULT ZZZ.

1.15

2.6.- Declaracin de eventos

En ABAP, los eventos pueden ser de dos tipos:


Sncronos
Que suceden con cierta periodicidad.
Asncronos
Que pueden suceder en cualquier momento.
As mismo, podemos distinguir entre los siguientes eventos:

1.16

INITIALIZATON: En este evento, todas las variables de nuestro programa se


inicializan.
START-OF-SELECTION: este es un evento que se utiliza para la seleccin de datos
de tablas o ficheros, o para la carga de los mismos.
END-OF-SELECTION: este evento provoca la finalizacin de la seleccin de datos,
bien sea desde fichero o desde una base de datos lgica.
TOP-OF-PAGE: este evento se ejecuta justo antes de que el primer dato salga por
pantalla. Suele utilizarse conjuntamente con la sentencia NO STANDARD PAGE
HEADING para el formateo de ttulos.
As mismo, si aadimos la instruccin DURING LINE SELECTION, se ejecutar slo
en los listados secundarios provenientes de una accin del usuario en el Report.
END-OF-PAGE: este evento se lanza al trmino de la pgina actual.
AT LINE-SELECTION: que se lanza tras la seleccin por parte del usuario de una
lnea cualquiera dentro del listado en un REPORT.
AT USER-COMMAND: este evento se lanza cuando el usuario selecciona una tecla
de funcin o ingresa un algn valor en la ventana de comandos.
AT SELECTION-SCREEN: este evento se lanza justo despus de haber sido
procesada la pantalla de seleccin, en el PAI. Merece la pena destacar, entre sus
adiciones, la de ON VALUE-REQUEST FOR campo; esto lanza un proceso en la
pantalla de seleccin que provoca la presentacin al usuario de todos los valores
posibles que el campo de la variable a la que referencia permite ingresar.

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.17 3.- Clusula TYPE


Usamos esta clusula en varias sentencias ABAP para definir los tipos de datos y especificar los tipos de
los parmetros de la interfaz y los fields symbols. La clusula TYPE puede tener varios significados en
funcin de la sintaxis y el contexto.

1.18

3.1.- Referencia a tipos de datos conocidos

Podemos usar la sentencia:


TYPE <type>

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

En este caso, la clusula TYPE descripe el tipo de lnea de


un tipo de tabla <table-type> que es visible en este punto del programa.

LINE OF <table-type>

3.2.- Sentencias ABAP con referencias TYPE

Definicin de tipos de programa locales mediante:


TYPES <t> TYPE <type>.

El nuevo tipo de dato <t> tiene el mismo tipo que <type>.

Declaracin de objetos de datos mediante:


DATA <f> TYPE <type>.
CLASS-DATA <f> TYPE <type>.
CONSTANTS <f> TYPE <type>.
STATICS <f> TYPE <type>.

Curso SAP

Pgina 9 de 19

PARAMETERS <f> TYPE <type>.

El objeto de datos <f> tiene un tipo de datos correspondiente al tipo <type>.

Creacin dinmica de objetos de datos mediante:


CREATE DATA <dref> TYPE <type>.

Especificacin del tipo de un parmetro formal en una subrutina:


FORM <sub> ... USING|CHANGING <p> TYPE <type> ...

Los atributos tcnicos del parmetro formal <p> se heredan de aquellos que estn
declarados para el tipo <type>.

Especificacin del tipo de un parmetro formal en un mtodo mediante


METHODS <meth> ... IMPORTING|EXPORTING|CHANGING <p> TYPE <type> ...

Como en el anterior caso, los atributos tcnicos de <p> son heredados de los declarados
en <type>.

Especificacin del tipo de un field symbol:


FIELD-SYMBOLS <fs> TYPE <type>.

Y aqu ocurre lo mismo que en los dos anteriores casos de herencia.

1.20 4.- La clusula LIKE


Usamos esta clusula de manera muy similar a la TYPE para definir tipos de datos y especificar los tipos
de los parmetros de interfaz o los field symbols. La clusula
LIKE <obj>

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

4.1.- Sentencias ABAP con referencias LIKE

Definicin de tipos locales en un programa mediante


TYPES <t> LIKE <obj>.

El nuevo tipo de dato <t> hereda los atributos tcnicos de <obj>.

Declaracin de objetos de datos mediante


DATA <f> LIKE <obj>.
CLASS-DATA <f> LIKE <obj>.
CONSTANTS <f> LIKE <obj>.

Curso SAP

Pgina 10 de 19

STATICS <f> LIKE <obj>.


PARAMETERS <f> LIKE <obj>.

El objeto de datos <f> hereda los atributos tcnicos de <obj>.

Creacin de objetos de datos dinmica mediante


CREATE DATA <dref> LIKE <obj>.

Especificacin del tipo del parmetro en una subrutina mediante:

FORM <sub> ... USING|CHANGING <p> LIKE <obj> ...


Los atributos tcnicos del parmtro <p> son heredados del objeto <obj>.

Especificacin del tipo de un parmetro en la implementacin de un mtodo:

METHODS <meth> ... IMPORTING|EXPORTING|CHANGING <p> LIKE <obj> ...

Especificacin del tipo en un field symbol:

FIELD-SYMBOLS <fs> LIKE <obj>.

1.22 5.- Asignacin de valores y manejo de variables


A tal efecto, disponemos de dos instrucciones bsicas en ABAP: MOVE y el signo =.
El que ms nos sonar ser, precisamente, ste ltimo:
p_nombre = zclientes-nombre.

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.

Copia el contenido del campo f al g, quedando aqul sin cambios. Ejemplo:


DATA: NUMBER TYPE I,
FIVE
TYPE I.
MOVE 5 TO FIVE.
MOVE FIVE TO NUMBER.

Ahora, los campos FIVE y NUMBER contienen el valor 5.


Nota: Tambin es posible la asignacin simultnea de valores a varias variables, de la siguiente
forma: NUMBER = FIVE = 5.
En este caso, ABAP ejecuta la sentencia de derecha a izquierda.
Esta sentencia nos permite copiar estructuras y tablas complejas que contengan, as mismo, otras
estructuras y tablas.

Curso SAP

Pgina 11 de 19

1.24

5.2.- MOVE f+off1(len1) TO g+off2(len2).

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

FIELD2 tiene ahora el valor 'abc23 h'.

1.25

5.3.- MOVE c1 TO c2 PERCENTAGE n.

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.

1.26 6.- Instrucciones de control de flujo


Para controlar el flujo de lgico de un programa disponemos de diferentes instrucciones:

Sentencia IF: Esta sentencia adopta las diferentes formas:


IF logexp.
processing1
ENDIF.

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.

Sentencia WHILE: Presenta el siguiente aspecto:


WHILE logexp
INTRUCCIONES
ENDWHILE

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.

Sentencia CHECK: Presenta esta forma:


CHECK logexp.

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.27 7.- Instrucciones de ruptura de control de flujo


ABAP nos aporta ciertas sentencias con las que poder alterar el flujo lgico del programa, a saber: EXIT y
CONTINUE.

1.28

7.1.- EXIT

Dependiendo de dnde se vaya a utilizar, esta sentencia tiene diversos efectos:

Dentro de un bucle LOOP, termina el proceso y rompe el bucle.


Dentro de subrutinas u otras unidades de modularizacin, provoca que el programa salga de
ellas.
Fuera de los dos casos anteriores, termina los procesos report y lanza un display en forma de
lista.
Veamos el siguiente ejemplo:
DATA: SAP_COUNT TYPE I,
WA_T100 TYPE T100.
SELECT * FROM T100 INTO WA_T100 WHERE SPRSL = SY-LANGU AND
ARBGB = 'DS'.
WRITE / WA_T100-TEXT.
IF WA_T100-TEXT CS 'SAP'.
ADD 1 TO SAP_COUNT.
IF SAP_COUNT = 3.
EXIT.
ENDIF.
ENDIF.
ENDSELECT.

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

Dentro de estructuras en forma de bucle, como:


- DO ENDDO.
- WHILE ENDWHILE.
- LOOP ENDLOOP.
- SELECT ENDSELECT.
CONTINUE termina la actual pasada del loop, vuelve el proceso al principio del mismo y comienza
la siguiente pasada del loop, si la hay.
Ejemplo:
DO 100 TIMES.
IF SY-INDEX >= 10 AND SY-INDEX <= 20.
CONTINUE.
ENDIF.
ENDDO.

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

ltima lnea de la tabla interna

NEW <f>

Comienzo de un grupo de lneas con contenidos idnticos en el campo <f>

END Of <f>

Final de un grupo de lneas con contenidos idnticos en el campo <f>

Primera lnea de la tabla interna

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

AT LAST. .... ENDAT.


ENDLOOP.

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.

Que genera la siguiente salida:

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

1.31 8.- Clculos aritmticos


stos se dan, generalmente, como expresiones matemticas entre valores numricos; no obstante,
tambin pueden implementarse mediante algunas palabras claves del cdigo. En la siguiente tabla
aparecen resumidos los operadores y sus correspondientes palabras reservadas:
Operacin

Clculo con expresiones


matemticas

Clculo con palabras


reservadas

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

1.32 9.- Funciones matemticas


ABAP provee de varias funciones matemticas que representan expresiones completas y que se pueden
usar como operandos en clculos aritmticos. Al igual que ocurra con stos ltimos, los argumentos de
las funciones pueden ser cualquier campo cuyos contenidos se puedan convertir a valores numricos.
Podemos distinguir entre funciones que afectan y que no afectan al tipo de clculo de una expresin
matemtica. La siguiente tabla resume las funciones matemticas que ABAP aporta:
Funcin

Significado

abs

Valor absoluto del argumento

Sign

Signo del argumento. Devuelve los siguientes


valores:

-1 si es negativo.
0 si es igual a 0.
1 si es positivo.

Ceil

Valor entero ms pequeo que no es menor que el


argumento.

Floor

Valor entero ms grande que no es mayor que el


argumento.

Trunc

Parte entera del argumento.

Frac

Parte decimal del argumento.

Acos, asin, atan, cos, sin ,tan

Funciones trigonomtricas.

Cosh, sinh, tanh

Funciones hiperblicas.

Exp

Funcin exponencial con base e.

Log

Funcin logartmica de base e.

Log10

Funcin logartmica de base decimal.

sqrt

Raz cuadrada.

Curso SAP

Pgina 19 de 19

También podría gustarte