Está en la página 1de 6

FLUJO DE UN PROGRAMA ABAP/4

2.1. Control INTERNO Y externo:


El flujo de un programa puede controlarse de forma interna (con las sentencias tpicas de control de flujo) o externa (con eventos). Flujo: Base de datos lgica programa Abap/4 pantalla de seleccin PBO, PAI e informe bsico de informe secundario

2.2. EXPRESIONES LGICAS Y OPERADORES:


Las expresiones lgicas tpicas son de la forma: operando1 operador operando2, y devuelven un valor TRUE o FALSE. Las expresiones lgicas simples se pueden combinar con AND, OR y NOT, patentizando adecuadamente (el primer nivel no es necesario). Los tipos de operadores en Abap/4 son:

Para todo tipo de datos: EQ =, NE <> ><, LT <, LE <=, GT >, GE >=.

Para tipos alfanumricos y numricos: Se usan para comparaciones, aparte de los anteriores. CO (contiene slo...), CN (no contiene slo...), CA (contiene algn...), NA (no contiene algn ...) , CS (contiene el string ...), NS (no contiene el string ...), CP (contiene el pattern ...), NP (no contiene el pattern ...).

Para bits: O (los bits son "1"), Z (los bits son "0"), M (los bits son "0" y "1"). Operaciones lgicas especiales: Rango: operando1 BETWEEN operando2 AND operando3. Los valores lmite del rango [operando1, operando2] son inclusive. Esta operacin lgica devuelve cierto s y slo s operando2 <= operando1 <= operando3.

Valor inicial: operando IS INITIAL. Para saber si el valor de operando es el inicial por defecto o no. Para nmeros el valor inicial es 0; para caracteres y cadenas es SPACE (es un string todo en blanco, de la longitud necesaria en cada caso (en particular puede ser cero o uno). til para hacer comparaciones). Criterio de seleccin: operando IN criterio_seleccin. Para saber si el valor de operando est dentro o no del criterio especificado. Muy usado en losCHECKs y en los SELECT ... WHERE ... El criterio de seleccin recoge la informacin que el usuario ha introducido en un SELECT-OPTION.

2.3. Sentencias Abap/4 de eventos (CONTROL EXTERNO):


Cada evento posible es capturado por la sentencia correspondiente. Un programa Abap/4 no es ms que un conjunto de bloques de proceso, cada uno correspondiente a un evento (por tanto, no se ejecutan secuencialmente). Dichas sentencias son:

INITIALIZATION, START-OF-SELECTION, END-OF-SELECTION, GET[LATE], TOP-OF-PAGE, END-OF-PAGE, AT SELECTION-SCREEN, AT LINE-SELECTION, AT PFn, AT USER-COMMAND (Estos tres ltimos son eventos especficos para reports o listados interactivos).

INITIALIZATION. Se ejecuta siempre antes de que aparezca la pantalla de seleccin, una sola vez. Se usa para inicializar parmetros y criterios de seleccin. Ejemplo: PARAMETERS fecha TYPE D DEFAULT sy-datum. INITIALIZATION. fecha+6(2) = '01'. fecha = fecha 1. START-OF-SELECTION. WRITE fecha.

El tipo D indica tipo fecha (8 caracteres. En este caso con el formato aaaammdd); con DEFAULT se indica el valor inicial por defecto (en este caso es la fecha de hoy, que se obtiene del campo del sistema SY-DATUM). Offsets: fecha+6(2) selecciona desde el carcter 6 de la cadena fecha, los 2 siguientes (el primer carcter es el 0). As selecciona el da dentro de la fecha. Tambin, con fecha(n) se obtiene el carcter n-simo de ese string. La funcin STRLEN (campo) devuelve la longitud de salida de campo (no el mximo declarado, sino el valor relleno). Por tanto, este programa devuelve la fecha del ltimo da del mes anterior a la actual (el cual se calcula bien, ya sea 30, 31 28).

Otro ejemplo: TABLES kna1. SELECT-OPTIONS cliente FOR kna1-kunnr. INITIALIZATION. MOVE 'I' TO cliente-sign. MOVE 'EQ' TO cliente-option. MOVE 'I56000' TO cliente-low. APPEND cliente.

El select-options permite meter un rango de valores para cliente, en lugar de uno solo. Adicionalmente pueden introducirse varios valores individuales, o varios intervalos. El valor i para el campo sign indica que el valor est incluido; eq indica seleccionar los valores que sean iguales, es decir, los que coincidan con el criterio de seleccin introducido. START-OF-SELECTION. Bloque de proceso que se ejecutar tras procesar la pantalla de seleccin (despus de INITIALIZATION), y antes de acceder a las tablas de la base de datos lgica, para empezar a escribir la salida (normalmente un programa Abap har uso de una o ms bases de datos lgicas, que son programas estndar que acceden las tablas SAP de forma simple y jerrquica). En este evento tiene lugar la seleccin de datos por parte del usuario. END-OF-SELECTION. Se activa tras procesar todas las tablas de la base de datos lgica (que se acceden en/con el evento GET), o tras finalizar el START-OF-SELECTION si no se usan stas. GET tabla[ LATE ] [ FIELDS c1 c2 ...]. Llama al programa de la base de datos lgica, y devuelve la entrada leda de la tabla especificada. Con LATE, GET se activa cuando se han procesado todas las tablas jerrquicamente inferiores a la dada (las tablas se organizan en rbol, y se van recorriendo pasando por ellas hasta alcanzar el dato a leer). SinLATE, GET se dispara al leer la primera tabla; con LATE espera a recorrer la rama del rbol de tablas. SinFIELDS se leen todos los campos; con FIELDS slo se leen los campos especificados, aparte de los clave. TOP-OF-PAGE [DURING LINE-SELECTION ]. Se activa justo antes de imprimir la pgina actual (antes del primer WRITE). Sirve para escribir cabeceras de pginas y ttulos. Se ejecuta antes de la primera lnea de cada pgina. Sin la opcin DURING LINE-SELECTION, se activa slo en el informe bsico; con esta opcin, se activa adems en los informes secundarios. La sentencia ENDOF-PAGEno activa este evento, pero NEW-PAGE s lo activa. END-OF-PAGE. Se activa si se alcanza el rea de la pgina reservada para este evento (con la opcin LINECOUNT en PROGRAM o REPORT) al final de la pgina; si no hay rea definida, no se activa el evento. Con RESERVE n LINES se reservan n lneas al final de la pgina para escribir el pie de pgina. La sentencia NEW-PAGE no activa este evento.

AT SELECTION-SCREEN [varios parmetros]. Bloque de proceso que se activa mientras se procesa la pantalla de seleccin, o bien despus de sta (PAI). Segn sus parmetros, se activar cuando el usuario realice cierta accin en la pantalla de seleccin, como dar valor a un SELECT-OPTIONS. Por tanto, se usa para controlar los datos que introduce el usuario, y slo tiene sentido en reports. Parmetros: ON_RADIOBUTTON_GROUP grupo, ON criterio_seleccin, ONBLOCK bloque, ON END OF criterio_ seleccin, ON VALUE REQUEST FOR criterio_seleccin, ON OUTPUT (se ejecuta el evento cada vez que se pulse Enter en la pantalla de seleccin, mientras que el evento INITIALIZATION slo se ejecuta una vez, esa es la diferencia).

2.4. EVENTOS PARA REPORTS INTERACTIVOS:


Los listados interactivos se muestran igual por pantalla que los normales (la lista bsica. Se puede usar un modelo estndar de listado, y adaptarlo a cada report concreto), salvo que en ellos el usuario puede lanzar una(s) lista(s) secundaria(s) en funcin del (los) evento(s) que active. La lista secundaria machaca en pantalla la lista primera. Pueden generarse como mucho 20 nuevos listados, salvo que se use la sentencia WINDOW para crear una ventana nueva para el nuevo listado. Sentencias o eventos propias de estos listados:

AT LINE-SELECTION. Para reports interactivos: el usuario puede seleccionar elementos de la lista mostrada. Se activa si el usuario selecciona (pick-up: doble clic) una lnea del informe (generada por WRITE, ULINE, SKIP, ... Pueden incluso seleccionarse lneas en blanco o no vlidas: el programa debe discriminarlas), y slo tras mostrar el informe bsico, o bien pulsando F2 o por men Edit Choose. Se usa para ver informacin asociada al elemento seleccionado.

AT PFn. Se activa al ser pulsada la tecla de funcin Fn especificada (n va de 0 a 99), y slo tras mostrar el informe bsico. Sin crear un status especfico, se pueden usar las funciones Fn que no estn ya predefinidas (como son F1 para la ayuda o F3 para back); el cdigo de la tecla Fn pulsada se guarda en SY-UCOMM. Pero este evento debera usarse slo para probar el programa; para su versin final usar AT USER-COMMAND.

AT USER-COMMAND. Se procesa si el usuario activa un comando, asociado a un icono, botn o elemento de men, en un status especfico, y slo tras mostrar el informe bsico. Una vez disparado el evento es cuando se puede decidir qu comando se ha pulsado, consultando el campo del sistema SY-UCOMM.

Para que el evento TOP-OF-PAGE se active en un listado secundario (as como las cabeceras estndar), debe tener el parmetro DURING LINE-SELECTION. En cambio s funciona el ENDOF-PAGE. Dentro de uno de estos 3 eventos propios de los listados interactivos, usar IF o CASE para decidir las acciones a realizar, en lugar de intentar activar otros eventos.

Los siguientes campos del sistema (tabla SYST) pueden servir para controlar el flujo de programa:

SY-LSIND: Nmero del listado (el bsico es el n 0), aunque est en una ventana diferente. SY-LISTI: N de la lista en la que se activ el evento. SY-LILLI: N de lnea de la lista en la que se activ el evento. SY-LISEL: Contenido de la lnea en la que se activ el evento. SY-CUROW: Posicin de la lnea en la que se activ el evento. SY-UCOMM: Cdigo de funcin que activ el evento. SY-PFKEY: Status de la lista.

Dentro de ellos NO se pueden codificar sentencias / eventos GET para acceder a bases de datos lgicas (deber hacerse con SELECTs), ni hacer SUBMITs (llamadas a otros programas). Se puede volver a la lista anterior con el botn BACK () o bien F3. Tambin se puede fijar un valor para el campo SY-LSIND, y darle el nmero de lista a la que se debe ir (la bsica es la 0). El sistema borra los datos de las listas con nmero mayor al especificado (con lo que con este mtodo slo se puede retroceder), las anteriores no. Debe actualizarse SY-LSIND como ltima sentencia del evento o bloque, para evitar que otras sentencias interfieran y aparezcan problemas.

Pueden asignarse distintos status a las listas secundarias, para crearles botones, mens, Para ello usar la sentencia SET PF-STATUS nombre [EXCLUDING f | tabla ]. Con el parmetro EXCLUDING se desactiva en el status dado uno (f) o ms (los de la tabla) cdigos de funcin. As los status pueden hacerse ms reutilizables. Ejemplos:
SET PF-STATUS menu EXCLUDING 'CODE'. DATA: BEGIN OF tabla OCCURS 10, campo1 (4). DATA: END OF tabla. MOVE 'CODE' TO tabla-campo1. APPEND tabla. MOVE 'BACK' TO tabla-campo1. APPEND tabla. SET PF-STATUS menu2 EXCLUDING tabla. Hay 3 formas para pasar datos del listado secundario al programa: Exclusin de un nico cdigo de funcin Se declara una tabla interna normal

Cdigos a excluir

Usando directamente los campos del sistema SY-LSIND, SY-UCOMM,

Usando sentencias especficas para ello, como HIDE, READ LINE, SET CURSOR FIELD o GET CURSOR LINE. Bien pasando atributos del listado al programa con las sentencias DESCRIBE LIST (NUMBER, LINE o PAGE).

2.5. Sentencias de control DE FLUJO (interno):


Estas sentencias son: IF..., CASE..., DO... y WHILE... Estn relacionadas con ellas las sentencias para abandonar bloques de proceso, en particular bucles y sentencias de bifurcacin: CONTINUE, CHECK, EXIT.

IF condicin. bloque [ ELSEIF condicin. bloque ] ... [ ELSE. bloque ] ENDIF. CASE campo. WHEN valor. Bloque WHEN valor. bloque ... [WHEN OTHERS.] bloque ENDCASE.

DO [n TIMES ] [ VARYING campo FROM v1 NEXT v2]. bloque ENDDO. Con n TIMES, el bucle da n vueltas, de forma incondicional. Sin esta opcin deber salirse del bucle con EXIT, STOP o REJECT (para salir de un bucle que es infinito). La opcin VARYING incrementa el campo, numrico o no, desde el valor inicial v1, con incrementos v2. Ejemplo: (aparece en pantalla: 2, 5, 8, 11, 14:campo1 empieza en 2, y avanza de 3 en 3). DO 5 TIMES VARYING campo1 FROM 2 NEXT 3. WRITE campo1. ENDDO.

WHILE condicin [ VARY campoFROMv1 NEXT v2 ]. bloque ENDWHILE. Se repite el cuerpo (bloque) del bucle mientras la condicin sea cierta (tambin se puede salir con EXIT o similar). La opcin VARY es anloga a la VARYINGde DO.