FLUJO DE UN PROGRAMA ABAP/4
2.1. Control interno y externo 2.2. Expresiones lógicas y operadores 2.3. Sentencias Abap/4 de eventos (CONTROL EXTERNO) |
2.2. EXPRESIONES LÓGICAS Y OPERADORES:
Las expresiones lógicas típicas son de la forma:operando1 operador operando2, y devuelven un valor TRUE o FALSE. Las expresiones lógicas simples se pueden combinar con AND, OR y NOT, parentizando 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 alfanuméricos y numéricos:
Se usan para comparaciones, aparte de los anteriores. CO (contiene sólo ...), CN (no contiene sólo ...), CA (contiene algún ...), NA (no contiene algún ...) , 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 lógicas especiales:
Rango: operando1 BETWEEN operando2 ANDoperando3. Los valores límite del rango[ operando1, operando2 ] son inclusive. Esta operación lógica devuelve cierto sí y sólo sí operando2 <= operando1 <= operando3.
Valor inicial: operando IS INITIAL. Para saber si el valor de operando es el inicial por defecto o no. Para números 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 selección: operando IN criterio_selección. Para saber si el valor de operando está dentro o no del criterio especificado. Muy usado en los CHECK’s y en los SELECT ... WHERE ... El criterio de selección recoge la información 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 más 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 específicos para reports o listados interactivos).
PARAMETERS fecha TYPE D DEFAULT sy-datum. INITIALIZATION. fecha+6(2) = '01'. fecha = fecha – 1. START-OF-SELECTION. WRITE fecha. |
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. |
- END-OF-SELECTION.
Se activa tras procesar todas las tablas de la base de datos lógica (que se acceden en/con el evento GET), o tras finalizar elSTART-OF-SELECTION si no se usan éstas.
- GET tabla[ LATE ] [ FIELDS c1 c2 ...].
Llama al programa de la base de datos lógica, y devuelve la entrada leída de la tabla especificada. Con LATE, GET se activa cuando se han procesado todas las tablas jerárquicamente 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; conLATEespera a recorrer la rama del árbol de tablas. SinFIELDS se leen todos los campos; conFIELDS sólo se leen los campos especificados, aparte de los clave.
- TOP-OF-PAGE [ DURING LINE-SELECTION ].
Se activa justo antes de imprimir la página actual (antes del primerWRITE). Sirve para escribir cabeceras de páginas y títulos. Se ejecuta antes de la primera línea de cada página. Sin la opción DURING LINE-SELECTION, se activa sólo en el informe básico; con esta opción, se activa además en los informes secundarios. La sentencia END-OF-PAGEno activa este evento, pero NEW-PAGE sí lo activa.
- END-OF-PAGE.
Se activa si se alcanza el área de la página reservada para este evento (con la opción LINE-COUNT en PROGRAM o REPORT) al final de la página; si no hay área definida, no se activa el evento. Con RESERVE n LINES se reservan n líneas al final de la página para escribir el pie de página. La sentencia NEW-PAGEno activa este evento.
- AT SELECTION-SCREEN [varios parámetros ].
Bloque de proceso que se activa mientras se procesa la pantalla de selección, o bien después de ésta (PAI). Según sus parámetros, se activará cuando el usuario realice cierta acción en la pantalla de selección, como dar valor a un SELECT-OPTIONS. Por tanto, se usa para controlar los datos que introduce el usuario, y sólo tiene sentido en reports. Parámetros: ON RADIOBUTTON GROUP grupo, ON criterio_selección, ONBLOCK bloque, ON END OF criterio_ selección, ON VALUE REQUEST FOR criterio_selección, ON OUTPUT(se ejecuta el evento cada vez que se pulse Enter en la pantalla de selección, mientras que el evento INITIALIZATION sólo se ejecuta una vez, esa es la diferencia).
Los listados interactivos se muestran igual por pantalla que los normales (la lista básica. Se puede usar un modelo estándar de listado, y adaptarlo a cada report concreto), salvo que en ellos el usuario puede lanzar una(s) lista(s) secundaria(s) en función 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:
Se procesa si el usuario activa un comando, asociado a un icono, botón o elemento de menú, en un status específico, y sólo tras mostrar el informe básico. 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 estándar), debe tener el parámetro DURING LINE-SELECTION. En cambio sí funciona el END-OF-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:
Dentro de ellos NO se pueden codificar sentencias / eventos GET para acceder a bases de datos lógicas (deberá hacerse con SELECT’s), ni hacer SUBMIT’s (llamadas a otros programas).
Se puede volver a la lista anterior con el botón BACK (ç) o bien F3. También se puede fijar un valor para el campo SY-LSIND, y darle el número de lista a la que se debe ir (la básica es la 0). El sistema borra los datos de las listas con número mayor al especificado (con lo que con este método sólo 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, menús, … Para ello usar la sentencia SET PF-STATUS nombre [ EXCLUDING f | tabla ]. Con el parámetro EXCLUDING se desactiva en el status dado uno (f) o más (los de la tabla) códigos de función. Así los status pueden hacerse más reutilizables.
Ejemplos:
SET PF-STATUS menu EXCLUDING 'CODE'. " Exclusión de un único código de función DATA: BEGIN OF tabla OCCURS 10, " Se declara una tabla interna normal campo1(4). DATA: END OF tabla. MOVE 'CODE' TO tabla-campo1. " Códigos a excluir 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:
2.5. Sentencias de control DE FLUJO (interno):
Estas sentencias son: IF..., CASE..., DO... y WHILE... Están relacionadas con ellas las sentencias para abandonar bloques de proceso, en particular bucles y sentencias de bifurcación: CONTINUE, CHECK, EXIT.
DO 5 TIMES VARYING campo1 FROM 2 NEXT 3. WRITE campo1. ENDDO. |