Obligatory o Required en Pantalla de Selección

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • Abaunus
    Senior Member
    • nov
    • 119

    #1

    Obligatory o Required en Pantalla de Selección

    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:

    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.
    Junior Member
    • nov
    • 28

    #2
    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.

    Comentario

    • zonanet
      Senior Member
      • mar
      • 195

      #3
      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.

      Comentario

      • Abaunus
        Senior Member
        • nov
        • 119

        #4
        Entiendo lo que me dicen, y es una salida viable... si no encuentro la otra manera voy a apelar a ella... ¡Gracias!

        Comentario

        • Abaunus
          Senior Member
          • nov
          • 119

          #5
          Bueno, acá encontré la solución:

          Declaro:
          Código:
          DATA: V_ERR.
          y el código:

          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.


          ¡Gracias a todos!
          Un abrazo!!

          Comentario

          • MetalGod
            Senior Member
            • jun
            • 110

            #6
            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?

            Comentario

            • Abaunus
              Senior Member
              • nov
              • 119

              #7
              Originalmente publicado por MetalGod
              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.

              Comentario

              • MetalGod
                Senior Member
                • jun
                • 110

                #8
                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.

                Comentario

                • MetalGod
                  Senior Member
                  • jun
                  • 110

                  #9
                  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

                  Comentario

                  • Abaunus
                    Senior Member
                    • nov
                    • 119

                    #10
                    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:
                    Código:
                    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'.

                    Comentario

                    • Abaunus
                      Senior Member
                      • nov
                      • 119

                      #11
                      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.

                      Comentario

                      • MetalGod
                        Senior Member
                        • jun
                        • 110

                        #12
                        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.

                        Comentario

                        • MetalGod
                          Senior Member
                          • jun
                          • 110

                          #13
                          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,

                          Comentario

                          • Abaunus
                            Senior Member
                            • nov
                            • 119

                            #14
                            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).

                            Comentario

                            • MetalGod
                              Senior Member
                              • jun
                              • 110

                              #15
                              Gracias, voy a probar eso

                              Comentario

                              Trabajando...