martes, 19 de noviembre de 2013

Pantalla de selección dinámica

En este ejercicio va a existir un RADIOBUTTON en el que si indica búsqueda básica, se mostrarán los tres primeros campos de búsqueda del SELECT-OPTIONS de la tabla SFLIGHT, mientras que si indica búsqueda avanzada, se mostrarán los 6 primeros:

Búsqueda básica de SFLIGHT.
Búsqueda avanzada de SFLIGHT.
El truco está en utilizar el evento AT SELECTION SCREEN OUTPUT y modificar las propiedades de la tabla interna SCREEN. En este caso, se utilizará un identificador en el campo SCREEN-GROUP1 y se desactivará los campos correspondientes del SELECT-OPTIONS según el tipo de búsqueda seleccionado.


Valores de la variable interna SCREEN.

REPORT  z_sflight.

* Cargar la tabla SFLIGHT de la base de datos
TABLES: sflight.

* Definición de variables
DATA: g_it_sflight TYPE TABLE OF sflight,
      g_st_sflight TYPE sflight.

DATA: g_it_screen TYPE TABLE OF screen.

* Pantalla de selección
PARAMETERS: p01 RADIOBUTTON GROUP rb1 USER-COMMAND uc DEFAULT 'X' .

SELECT-OPTIONS: so1 FOR sflight-carrid MODIF ID MD1,
                so2 FOR sflight-connid MODIF ID MD1,
                so3 FOR sflight-fldate MODIF ID MD1.
SELECTION-SCREEN SKIP 1.

PARAMETERS: p02 RADIOBUTTON GROUP rb1.

SELECT-OPTIONS: so4 FOR sflight-carrid MODIF ID MD2,
                so5 FOR sflight-connid MODIF ID MD2,
                so6 FOR sflight-fldate MODIF ID MD2.
SELECTION-SCREEN SKIP 1.
SELECT-OPTIONS: so7 FOR sflight-price MODIF ID MD2,
                so8 FOR sflight-currency MODIF ID MD2,
                so9 FOR sflight-planetype MODIF ID MD2.

AT SELECTION-SCREEN OUTPUT.
  IF p01 = 'X'.
    LOOP AT SCREEN.
      IF screen-group1 = 'MD2'.
        screen-active = 0.
        MODIFY SCREEN.
      ENDIF.
    ENDLOOP.
  ELSE.
    LOOP AT SCREEN.
      IF screen-group1 = 'MD1'.
        screen-active = 0.
        MODIFY SCREEN.
      ENDIF.
    ENDLOOP.
  ENDIF.
  APPEND screen TO g_it_screen.   

START-OF-SELECTION.
  BREAK-POINT.

¿Que diferencias hay entre los eventos AT SELECTION SCREEN y AT SELECTION SCREEN OUTPUT? En el primero, el evento se ejecuta cuando se ha dado al botón de ejecutar, mientras que en el segundo se ejecuta cada vez que se ha hecho un cambio en la pantalla de selección.


0 comentarios :

Publicar un comentario