You are on page 1of 4

Pantalla de seleccin dinmica.

En este ejercicio va a existir un RADIOBUTTON en el que si indica bsqueda bsica, se mostrarn


los tres primeros campos de bsqueda del SELECT-OPTIONS de la tabla SFLIGHT, mientras que
si indica bsqueda avanzada, se mostrarn los 6 primeros:

Bsqueda bsica de SFLIGHT.

Bsqueda 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 segn el tipo de
bsqueda seleccionado.

Valores de la variable interna SCREEN.


REPORT z_sflight.

* Cargar la tabla SFLIGHT de la base de datos


TABLES: sflight.

* Definicin 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 seleccin
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 botn de ejecutar, mientras
que en el segundo se ejecuta cada vez que se ha hecho un cambio en la pantalla de seleccin.
Deshabilitar el INPUT a un campo de SELECTION-
OPTIONS
En algunos casos, se exige que unos determinados usuarios no puedan utilizar unos campos
especficos en la pantalla de seleccin. En este ejemplo se mostrar como deshabilitar el input de
un campo LOW y HIGH de un SELECTION-OPTIONS.

Para empezar, tendremos los cuatro primeros campos del SELECTION-OPTIONS de la tabla
SFLIGHT (carrid, connid, fldate y price).

Los cuatro SELECTION-OPTIONS para la tabla SFLIGHT.

A continuacin, se recorre un LOOP AT SCREEN y almacenamos los datos en una tabla auxiliar
para ver los datos iniciales:

LOOP AT SCREEN.
APPEND screen TO g_it_screen.
ENDLOOP.

Valores de la tabla interna screen sin modificaciones.

Una vez conocido los datos de la tabla interna, cambiaremos las propiedades de los campos
INPUT en el primer SELECTION-OPTIONS con un IF.

El cdigo es el siguiente:
REPORT z_sflight.

* Cargar la tabla SFLIGHT de la base de datos


TABLES: sflight.

* Definicin 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 seleccin
SELECTION-SCREEN: BEGIN OF BLOCK b01 WITH FRAME.

SELECT-OPTIONS: p01 FOR sflight-carrid,


p02 FOR sflight-connid,
p03 FOR sflight-fldate.

SELECTION-SCREEN SKIP 1.

SELECT-OPTIONS: p04 FOR sflight-price.

SELECTION-SCREEN: END OF BLOCK b01.

INITIALIZATION.
* Deshabilitar un campo
LOOP AT SCREEN.
IF screen-name = 'P01-LOW'.
screen-input = 0.
ELSEIF screen-name = 'P01-HIGH'.
screen-input = 0.
ENDIF.

MODIFY SCREEN.
APPEND screen TO g_it_screen.
ENDLOOP.

START-OF-SELECTION.
BREAK-POINT.

Se observa que ahora los campos input del primer parmetro se han desactivado.

Campos input del SELECTION-OPTIONS desactivados.

You might also like