Parámetros de selección dinámicos

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • javierlosa
    Junior Member
    • jul
    • 13

    #1

    Parámetros de selección dinámicos

    Hola, espero puedan entender mi duda y ayudarme.

    Tengo un reporte con 4 parámetros. 3 de ellos son "no modificables" ( solo deberían mostrar información según lo ingresado en 4to. parámetro).

    Por lo tanto, cuando modifico el cuarto parámetro de selección, con un valor de su correspondiente matchcode, deberían antualizarce los restantes parámetros no modificables.

    No logro esta funcionalidad, solo puedo hacer que recién se actualicen al presionar ENTER.

    Gracias!!
  • mysmb2
    Senior Member
    • ene
    • 406

    #2
    Hola haces esto?

    AT SELECTION-SCREEN ON VALUE-REQUEST FOR so_xxx-low
    aca tu rutina para actualizar los demás parámetros.

    Saludos.
    Sebastián Chiavia
    http://www.programacionabap.com.ar

    Comentario

    • javierlosa
      Junior Member
      • jul
      • 13

      #3
      Exacto amigo.
      En el Dubugging veo que los valores de los parámetros cambian pero no aparecen en pantalla hasta presionar ENTER.

      Si presiono ENTER funciona todo correctamente.
      Pero sino lo hago los parámetros vuelven a tomar los últimos valores que se mostraban en pantalla.

      Gracias.-
      Editado por última vez por javierlosa; 19/10/2010, 20:49:47.

      Comentario

      • Neo_25
        Member
        • jun
        • 51

        #4
        A ver si me explico, eso nos ha pasado hace poco:
        Yo tengo

        PARAMETERS: p_f1 TYPE zcod_firma,
        p_nom_f1 TYPE znombre_firma MODIF ID fir,
        p_pue_f1 TYPE zpuesto_firma MODIF ID fir.
        * Cuando se selecciona el matchcode de P_F1 se ha de escribir algo en P_NOM_F1 y P_PUE_F1
        Nos pasaba lo mismo, hasta q no le dábamos al enter no hacía nada.
        Lo q te han dicho más arriba es lo q hicimos

        Nosotros mostramos el matchcode con una FUNCIÓN
        F4IF_INT_TABLE_VALUE_REQUEST
        y ella nos devolvió qué línea habíamos seleccionado en el matchcode.
        Esta parte no te la pongo porque entiendo por lo q comentas q sabes q línea has seleccionado.

        * Creas una tabla para introducir q valor poner en q parámetro
        TYPES: BEGIN OF ty_tyl_dyn.
        INCLUDE STRUCTURE dynpread.
        TYPES: END OF ty_tyl_dyn.
        TYPES: ty_tab_dyn TYPE STANDARD TABLE OF ty_tyl_dyn.

        DATA: li_dyn TYPE ty_tab_dyn.

        * Se introducen los valores en la tabla
        CLEAR: li_dyn.
        PERFORM f_introducir_valores USING p_f1
        lw_datos-cod_firma
        CHANGING li_dyn.

        PERFORM f_introducir_valores USING p_nom_f1
        lw_datos-nombre
        CHANGING li_dyn.

        PERFORM f_introducir_valores USING p_pue_f1
        lw_datos-puesto
        CHANGING li_dyn.

        * Se introducen los valores en los parámetros
        CALL FUNCTION 'DYNP_VALUES_UPDATE'
        EXPORTING
        dyname = sy-repid
        dynumb = sy-dynnr
        TABLES
        dynpfields = li_dyn
        EXCEPTIONS
        invalid_abapworkarea = 1
        invalid_dynprofield = 2
        invalid_dynproname = 3
        invalid_dynpronummer = 4
        invalid_request = 5
        no_fielddescription = 6
        undefind_error = 7
        OTHERS = 8.
        IF sy-subrc <> 0.
        * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
        * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
        ENDIF.

        FORM f_introducir_valores USING pi_dato TYPE dynfnam
        pi_valor TYPE any
        CHANGING po_tabla TYPE ty_tab_dyn.

        DATA: lv_campo TYPE dynfnam, "Nombre del campo
        lv_valor TYPE dynfieldvalue. "Valor del campo

        DATA: lw_dyn TYPE dynpread.


        CLEAR: lv_campo,
        lv_valor,
        lw_dyn.
        lv_campo = pi_dato.
        lv_valor = pi_valor.
        lw_dyn-fieldname = lv_campo.
        lw_dyn-fieldvalue = lv_valor.
        APPEND lw_dyn TO po_tabla.

        ENDFORM. " F_INTRODUCIR_VALORES
        Si la parte de la función te hace falta me dices

        El tema es q hay q introducir los datos en los parámetros

        Comentario

        • mysmb2
          Senior Member
          • ene
          • 406

          #5
          Lo que te hace falta es llamar a la función para actualizar la pantalla como dice Neo 25

          Código:
            DATA  dynpfields  TYPE TABLE OF dynpread WITH HEADER LINE.
          
            CLEAR dynpfields.
            dynpfields-fieldname = 'SO_XXX-LOW'.
            dynpfields-fieldvalue = 'xxxxxx'.
            dynpfields-stepl = sy-index.
            APPEND dynpfields.
          
          
            CALL FUNCTION 'DYNP_VALUES_UPDATE'
              EXPORTING
                dyname               = sy-cprog
                dynumb               = sy-dynnr
              TABLES
                dynpfields           = dynpfields
              EXCEPTIONS
                invalid_abapworkarea = 1
                invalid_dynprofield  = 2
                invalid_dynproname   = 3
                invalid_dynpronummer = 4
                invalid_request      = 5
                no_fielddescription  = 6
                undefind_error       = 7
                OTHERS               = 8.
            IF sy-subrc <> 0.
              MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                      WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
            ENDIF.
          Sebastián Chiavia
          http://www.programacionabap.com.ar

          Comentario

          • javierlosa
            Junior Member
            • jul
            • 13

            #6
            Muchísimas gracias a todos!
            Realmente desconocía esa función y es exactamente necesitaba.

            Ahora solo consulto un detalle mas si es que es posible...
            Podría adaptar el parámetro de selección para que solo tome valores del Matchcode y no permista escrir cualquier cosa??

            Mil gracias de nuevo!!

            Comentario

            • mysmb2
              Senior Member
              • ene
              • 406

              #7
              tenes que verificar el valor ingresado en el parámetro contra la tabla de valores, si ya la tenes en una tabla interna solo tenes que hacer un read table sino tenes que hacer un select single a la tabla de valores y si no se encuentra el registro emitís el mensaje de error correspondiente.

              Saludos.
              Sebastián Chiavia
              http://www.programacionabap.com.ar

              Comentario

              • javierlosa
                Junior Member
                • jul
                • 13

                #8
                Perfecto Seba, te entendí. Pensé que se podía modificar algún atributo para no permitir IMPUT pero si seleccionar valores del Matchcode.

                Gracias!!

                Comentario

                • Neo_25
                  Member
                  • jun
                  • 51

                  #9
                  Sí, otra forma en vez de hacer el read y puede q más cómodo es no permitir q escriba el usuario en en recuadro. Pero si déjara seleccionar y escribir el matchcode.

                  AT SELECTION-SCREEN OUTPUT.
                  LOOP AT SCREEN.
                  CASE screen-name.
                  WHEN 'P_WERKS'.
                  screen-input = 0. "se inhabilita
                  ENDCASE.
                  MODIFY SCREEN.
                  ENDLOOP.

                  Comentario

                  • javierlosa
                    Junior Member
                    • jul
                    • 13

                    #10
                    Gracias Neo! Tu opción permite abrir el matchcode pero no toma el valor seleccionado hasta presionar ENTER. Volví al paso anterior! jaja!
                    Le incorporé la función DYNP_VALUES_UPDATE para ese parámetro y tampoco lo actualiza.

                    Igualmente le incorporé una validación "tradicional" al parámetro y quedó bien. Aunque esta opción sería simplemente un lindo detalle pero no indispensable. Por eso no te mates buscando mas alternativas si es que no sabes que está sucediendo.

                    Como siempre muchas gracias!

                    Comentario

                    • Neo_25
                      Member
                      • jun
                      • 51

                      #11
                      Tu problema lo tuvimos el lunes pasado, y lo resolvimos leyendo el registro elegido en el matchcode (F4IF_INT_TABLE_VALUE_REQUEST) y apartir de éste valor rellenamos otros dos campos (+ el del propio matchcode) con la función dicha antes: DYNP_VALUES_UPDATE.

                      A nosotros nos funcionó, igual no lo codificas bien
                      Si no sabes implementarlas puedes preguntar

                      Comentario

                      • grandnomade
                        Junior Member
                        • ene
                        • 18

                        #12
                        Saludos docs, perdon si mi consulta es obvia, pero como lleno el dynpfields-fieldvalue ?? el dynpfields-fieldname viendo el ejemplo es el nombre del parametro, pero el dynpfields-fieldvalue ???

                        Gracias!.

                        Originalmente publicado por mysmb2
                        Lo que te hace falta es llamar a la función para actualizar la pantalla como dice Neo 25

                        Código:
                          DATA  dynpfields  TYPE TABLE OF dynpread WITH HEADER LINE.
                        
                          CLEAR dynpfields.
                          dynpfields-fieldname = 'SO_XXX-LOW'.
                          dynpfields-fieldvalue = 'xxxxxx'.
                          dynpfields-stepl = sy-index.
                          APPEND dynpfields.
                        
                        
                          CALL FUNCTION 'DYNP_VALUES_UPDATE'
                            EXPORTING
                              dyname               = sy-cprog
                              dynumb               = sy-dynnr
                            TABLES
                              dynpfields           = dynpfields
                            EXCEPTIONS
                              invalid_abapworkarea = 1
                              invalid_dynprofield  = 2
                              invalid_dynproname   = 3
                              invalid_dynpronummer = 4
                              invalid_request      = 5
                              no_fielddescription  = 6
                              undefind_error       = 7
                              OTHERS               = 8.
                          IF sy-subrc <> 0.
                            MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                                    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
                          ENDIF.

                        Comentario

                        • DCErick
                          Moderator
                          • mar
                          • 1090

                          #13
                          Originalmente publicado por grandnomade
                          Saludos docs, perdon si mi consulta es obvia, pero como lleno el dynpfields-fieldvalue ?? el dynpfields-fieldname viendo el ejemplo es el nombre del parametro, pero el dynpfields-fieldvalue ???

                          Gracias!.
                          FIELDVALUE-->FIELD VALUE -> Valor de Campo
                          -------------------
                          ¿Dudas para descargar manuales? Ver este tema -> Cómo descargar manuales de la sección "Descargas" ?

                          Comentario

                          Trabajando...