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.4. Eventos para reports interactivos

2.5. Sentencias de control de flujo (INTERNO)

 

 

 


 

2.1. Control INTERNO Y 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).

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

2.4. EVENTOS PARA REPORTS INTERACTIVOS:

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.