PDA

Ver la Versión Completa : Obligatory o Required en Pantalla de Selección


Abaunus
19/06/09, 20:34:14
Hola amigos: estoy jugando con una pantalla de selección, la cual tiene un par de radiobuttons, según el que se elija se visualizan diferentes SELECT-OPTION. Este es el código:

AT SELECTION-SCREEN OUTPUT.

LOOP AT SCREEN.

IF SCREEN-GROUP1 = 'FAC'.
CASE R_FACT.
WHEN C_X.
SCREEN-ACTIVE = 1.
* SCREEN-REQUIRED = 1.
WHEN OTHERS.
SCREEN-ACTIVE = 0.
* SCREEN-REQUIRED = 0.
ENDCASE.
ELSEIF SCREEN-GROUP1 = 'DAT'.
CASE R_FACT.
WHEN C_X.
SCREEN-ACTIVE = 0.
* SCREEN-REQUIRED = 0.
WHEN OTHERS.
SCREEN-ACTIVE = 1.
* SCREEN-REQUIRED = 1.
ENDCASE.
ENDIF.

MODIFY SCREEN.

ENDLOOP.

La cuestión es que necesito que en uno otro caso, los S-O que se visualizan sean obligatorios. Ya probé con poner el required junto al active (se ven las sentencias "asterisqueadas" en mi código), y con todas las formas posibles de los AT SELECTION-SCREEN. La cosa es que al hacerlo ya no me deja seleccionar en el radiobutton si el S-O está vacío... ¿me explico? Ya que me pide que lo complete... No sé si me hago entender: si pongo de alguna forma obligatorios los SELECT-OPTIONS, ya no puedo cambiar de block activo....

No creo que sea muy complicado, pero ya probé de todas las formas... Espero su amable ayuda.
Saludos a todos,
Abaunus

Dennis Urbano E.
19/06/09, 22:01:27
Si te sirve ..

No es una solución en código .. pero quizas para evitarte eso podrias ponerle valores por default en los Select Options .. asi no se bloquean xP! ..

esto es un workaround pero sirve x)!

Saludos

Dennis Urbano E.

zonanet
19/06/09, 23:30:47
Hola Abaunus:


Por qué no validas que tus Select-Options estén llenos sin ponerlos como obligatorios, me explico en el Start-of-Selection, validas que tengan datos según sea el caso seleccionado, si no se cumple con la condicion manda un mensaje de error, si se cumple pues que siga el curso normal de tu reporte.

Saludos y espero te de una idea.

Abaunus
20/06/09, 14:23:14
Entiendo lo que me dicen, y es una salida viable... si no encuentro la otra manera voy a apelar a ella... ¡Gracias!

Abaunus
22/06/09, 02:05:49
Bueno, acá encontré la solución:

Declaro:
DATA: V_ERR.

y el código:

AT SELECTION-SCREEN OUTPUT.

LOOP AT SCREEN.

IF SCREEN-GROUP1 = 'FAC'.
CASE R_FACT.
WHEN C_X.
SCREEN-ACTIVE = 1.
WHEN OTHERS.
SCREEN-ACTIVE = 0.
ENDCASE.

ELSEIF SCREEN-GROUP1 = 'DAT'.
CASE R_FACT.
WHEN C_X.
SCREEN-ACTIVE = 0.
WHEN OTHERS.
SCREEN-ACTIVE = 1.
ENDCASE.
ENDIF.

MODIFY SCREEN.

ENDLOOP.



AT SELECTION-SCREEN.

CLEAR: V_ERR.

LOOP AT SCREEN.

IF SCREEN-GROUP1 = 'FAC'.
IF SCREEN-ACTIVE = 1 AND R_FACT = C_X AND S_VBELN IS INITIAL.
V_ERR = C_X.
ENDIF.
ELSEIF SCREEN-GROUP1 = 'DAT'.
IF SCREEN-ACTIVE = 1 AND R_FACT <> C_X AND S_FKDAT IS INITIAL.
V_ERR = C_X.
ENDIF.
ENDIF.

ENDLOOP.

IF V_ERR = C_X AND R_FACT = C_X.
MESSAGE 'Complete Número de Factura' TYPE 'E'.
ELSEIF V_ERR = C_X AND R_FACT <> C_X.
MESSAGE 'Complete Fecha de Factura' TYPE 'E'.
ENDIF.

:p

¡Gracias a todos!
Un abrazo!!

MetalGod
07/02/14, 13:10:46
Hola, me pasa lo mismo, voy a tener que recurrir a la opcion que das, solo que estaria bueno poder ponerle al parametro fecha el check que indica que es obligatorio, alguna solucion a eso?

Abaunus
07/02/14, 13:18:20
Hola, me pasa lo mismo, voy a tener que recurrir a la opcion que das, solo que estaria bueno poder ponerle al parametro fecha el check que indica que es obligatorio, alguna solucion a eso?
Hola, cómo estás. Disculpame pero no entiendo lo que estás necesitando.

MetalGod
07/02/14, 14:14:37
no me di a entender muy bien.

tengo el mismo problema que comentabas originalmente, queria ocular un parameter de acuerdo al radiobutton que se selecciona.

Dicho parameter esta como obligatorio, cuando quiero hacer desaparecer al seleccionar otro radiobutton, no me deja porque espera un valor si o si.

Implemente la funcionalidad que diste como solucion en tu ultimo comentario en este post.

Pero queria ver si se podia de alguna forma poner en el parameter el check que se visualiza en su interior que indica que es obligatorio, pero sin serlo, no se si me explico, te adjunto una imagen de como se ve un parameter con opcion de obligatorio. Lo mismo sucede si uso la opcion screen-required.

http://nsae01.casimages.net/img/2014/02/07/140207041900730146.jpg

MetalGod
07/02/14, 14:22:00
si no lo pongo como obligatorio ni screen-required, usando la validacion solamente, este tilde no aparece, es porque soy un poco perfeccionista, y para que se vea que es obligatorio

Abaunus
07/02/14, 14:29:36
Es que entonces tenés que hacer eso tal cual está en la solución.

Primero, sacá la obligatoriedad de ese, llamémoslo, P_DATUM, con GROUP DAT. Y supongamos que los RB se llaman RB_PROC y RB_REPRO. Cuando está marcado RB_PROC, la fecha no se muestra y por supuesto no es obligatoria. En cambio si está marcado RB_REPRO, se muestra la fecha y es obligatoria.

Quedaría así, por ejemplo:

AT SELECTION-SCREEN OUTPUT.

LOOP AT SCREEN.

IF SCREEN-GROUP1 = 'DAT'.
CASE RB_PROC.
WHEN C_X.
SCREEN-ACTIVE = 0.
WHEN OTHERS.
SCREEN-ACTIVE = 1.
ENDCASE.
ENDIF.

MODIFY SCREEN.

ENDLOOP.



AT SELECTION-SCREEN.

CLEAR: V_ERR.

LOOP AT SCREEN.

IF SCREEN-GROUP1 = 'DAT'.
IF SCREEN-ACTIVE = 1 AND RB_REPRO = C_X AND P_DATUM IS INITIAL.
V_ERR = C_X.
ENDIF.
ENDIF.

ENDLOOP.

IF V_ERR = C_X.
MESSAGE 'Complete Fecha' TYPE 'E'.
ENDIF.


Recordemos que C_X es una constante = 'X'.

Abaunus
07/02/14, 14:31:49
Mientras te respondía justo estabas escribiendo otro mensaje. No hay forma de que aparezca ese simbolito si no está como obligatorio. Lo que podés hacer entonces, es dejarlo como obligatorio, y siempre con un valor, por ej. la fecha del día. Si se oculta no importa, no usás el valor y listo. Pero lo tiene.

MetalGod
07/02/14, 14:33:08
no estoy diciendo eso, lo solucione como posteaste, me anda bien la validacion. A lo que me refiero es a la visualizacion del parameter en la pantalla de seleccion, ya que como no es obligatorio, por mas que en el codigo haga una validacion, no se muestra con el tilde indicando que si lo es, y queria saber si habia alguna forma de mostrarlo asi, nada mas.

MetalGod
07/02/14, 14:34:55
si, es lo que suponia, pero como no me especificaron un valor por defecto, y son bastante estricos con las cosas que especifican y no, queria ver su habia alguna opcion de visualizarlo asi pero sin valor, Muchas gracias por tus respuestas,

Abaunus
07/02/14, 14:35:21
Probaría haciendo eso entonces, lo pondría obligatorio y lo llenaría todo el tiempo en los AT SELECTION para que no me tire error. Total, si no lo necesito después no utilizo el valor y listo (o lo vacío en el START-OF).

MetalGod
07/02/14, 14:37:07
Gracias, voy a probar eso

SMJimenez
12/02/14, 07:35:57
Puede que ya no sea mucho de ayuda, pero la forma de conseguir que se muestre la marca de obligatorio por código es con screen-required = 2.

MetalGod
12/02/14, 11:10:01
Muchisimas gracias. Es de gran ayuda, no sabia que se ponía el valor dos en esa propiedad. Gracias

Abaunus
12/02/14, 12:02:07
Puede que ya no sea mucho de ayuda, pero la forma de conseguir que se muestre la marca de obligatorio por código es con screen-required = 2.
Excelente dato! Gracias.