Problemas con ALV

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • aelma
    Junior Member
    • jul
    • 9

    #1

    Problemas con ALV

    Saludos,

    Tengo un reporte usando ALV, y me esta dando un problema muy poco usual, resulta que este tiene algunas columnas por las cuales no puedo hacer filtrado, por ej. tengo las columnas nombre, apellido, direccion, telef. y cedula, puedo hacer filtros por nombre y apellido, pero si intento filtrar por los campos cedula, telef. y direccion, me presenta el ALV en blanco aunque el dato por el que este filtrando exista.

    Las funciones que estoy usando para generar el ALV son REUSE_ALV_FIELDCATALOG_MERGE y REUSE_ALV_GRID_DISPLAY.

    Espero que sus opiniones me den luz con esto.
    Gracias,

    Ana Elisa Martinez
  • Jotabin
    Senior Member
    • may
    • 117

    #2
    ¿a qué te referís con "filtrar"?
    ¿decís que cuando recuperás los datos de las tablas buscás que esos campos coincidan con determinados valores o qué?
    resistance is futile

    Comentario

    • chivi82
      Member
      • mar
      • 64

      #3
      Problemas con ALV

      Me parece que nos ha definido correctamente el catálogo del ALV. Para que funcione el filtro, a la hora de crear el catalogo se debe indicar que campo y a tabla va relacionado. Son los siguientes campos :
      ls_fieldcat-ref_fieldname = p_4.
      ls_fieldcat-ref_tabname = p_5.

      Espero que te haya servido de ayuda.

      Comentario

      • aelma
        Junior Member
        • jul
        • 9

        #4
        Problemas con ALV

        Con filtrar me refiero a la opcion que tiene el ALV ( con icono de embudo) que permite mostrar solo una parte de los datos segun el criterio o valor que coloquemos en una o varias columnas del reporte.

        El prob. es que hay ciertas columnas de mi reporte en las que cuando trato de filtrar, no aparece ningun valor y las celdas se ven vacias, cuando en realidad si existen datos para ese filtro.

        He estado usando los parametros FIELDNAME y TABNAME, adicione los recomendados REF_FIELDNAME y REF_TABNAME y tengo el mismo resultado.

        Comentario

        • MariLu
          Junior Member
          • jul
          • 5

          #5
          Hola!
          Me da que esos campos por los que no puedes filtrar es porque son carácteres. En el filtro te salen en mayúsculas y tu los tienes en minúsculas en el ALV y por eso no los filtra.
          Marilu

          Comentario

          • ibecerra

            #6
            mira cuando me ocurre eso hago lo siguiente y te va funcionar!!
            entra al diccionario de datos del campo ve cuanto tiene d longitud y de q tipo es y luego cuando este declarado los campos en el ALV
            coloco los siguiente atributos

            ls_fieldcat-fieldname = 'NAME1'.
            ls_fieldcat-tabname = 'TU TABLA INTERNA'
            ls_fieldcat-datatype = 'CHAR'.---> tipo de dato del campo
            ls_fieldcat-outputlen = '30'. --->longitud del campo

            o has lo siguiente

            ls_fieldcat-fieldname = 'NAME1'.
            ls_fieldcat-tabname = 'TU TABLA INTERNA'
            ls_fieldcat-ref_tabname = 'KNA1'.
            ls_fieldcat-ref_fieldname = 'NAME1'.

            Comentario

            • lalola
              Junior Member
              • nov
              • 2

              #7
              Hola!

              Fijate en esta página que te indica cómo verificar qué has hecho mal.

              Verificar ALV

              Dime si fue util!!

              Comentario

              • Prometeo
                Junior Member
                • abr
                • 7

                #8
                este codigo es el que a experiencia propia sirve

                ls_fieldcat-fieldname = 'NAME1'.
                ls_fieldcat-tabname = 'TU TABLA INTERNA'
                ls_fieldcat-ref_tabname = 'KNA1'.
                ls_fieldcat-ref_fieldname = 'NAME1'.

                salu2.

                Comentario

                • cmejiab
                  Junior Member
                  • nov
                  • 13

                  #9
                  Hola, yo tambien tuve el mismo problema con el filtro use REF_FIELD y REF_TABLE.

                  Ahora el problema es que me muestra la descripción de ese campo en el diccionario y no la descripcion que yo colocado en: scrtext_l y scrtext_s para mostrar el texto en las columnas.

                  Alguien puede ayudarme con eso, gracias de antemano.

                  Saludos
                  César.

                  Comentario

                  • Bmamba
                    Member
                    • jun
                    • 91

                    #10
                    Hola,

                    Si pruebas a ponerlo de esta forma:

                    CLEAR wa_catalogo.
                    wa_catalogo-tabname = 'IT_DATOS'.
                    wa_catalogo-fieldname = 'MSG'.
                    wa_catalogo-col_pos = l_lin.
                    wa_catalogo-inttype = 'C'.
                    wa_catalogo-intlen = 50.
                    wa_catalogo-scrtext_s = 'Mensaje'.
                    wa_catalogo-scrtext_m = 'Mensaje'.
                    wa_catalogo-scrtext_l = 'Mensaje'.
                    APPEND wa_catalogo TO catalogo.

                    Es decir, en lugar de usar el campo del catálogo "ref_table", ir a la tabla en cuestión y ver las propiedades del elemento de datos y usar los campos inttype e intlen.

                    Comentario

                    • yozgart
                      Junior Member
                      • ago
                      • 2

                      #11
                      Ninguna de las soluciones me ha funcionado

                      Estimados todos,

                      He tratado de solucionar el mismo problema con las soluciones antes expuestas sin exito.

                      Quisiera saber si alguién más tine otra solución que pueda yo aplicar.

                      Este es el código que utilizo para escribir el ALV.

                      FORM write_report.
                      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
                      EXPORTING
                      i_callback_program = repname
                      i_save = 'A'
                      is_layout = layout
                      it_fieldcat = gt_fieldcat[]
                      it_events = events[]
                      is_variant = variante
                      * it_sort = ordena
                      * it_filter = filter
                      i_callback_pf_status_set = formname_pf_status
                      i_callback_user_command = formname_user_command
                      i_bypassing_buffer = 'X'
                      i_buffer_active = 'X'
                      TABLES
                      t_outtab = it_alv
                      EXCEPTIONS
                      program_error = 1
                      OTHERS = 2.
                      IF sy-subrc <> 0.
                      WRITE: 'SY-SUBRC: ', sy-subrc, 'REUSE_ALV_LIST_DISPLAY'.
                      ENDIF.


                      Este es el código que utilizó para llenar el fieldcat, pongo el ejemplo de la variable MATNR.

                      *Material
                      CLEAR: l_fieldcat, fieldcat_ln.
                      fieldcat_ln-seltext_l = ' Material '.
                      fieldcat_ln-fieldname = 'MATNR'.
                      fieldcat_ln-tabname = 'TI_ALV'.
                      fieldcat_ln-inttype = 'C'.
                      fieldcat_ln-intlen = 18.
                      APPEND fieldcat_ln TO gt_fieldcat.


                      Muchísimas gracias de antemano, esperando que alguién me pueda ayudar.

                      Saludos cordiales a todos.

                      Comentario

                      • ibecerra

                        #12
                        hola yo lo hago de esta manera y me funciona bien

                        CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
                        EXPORTING
                        i_callback_program = g_repid
                        i_structure_name = 'TI_ORDENES' ---> te falta esto
                        is_layout = gs_layout
                        it_fieldcat = gt_fieldcat[]
                        i_save = g_save
                        * is_variant = g_variant
                        it_events = gt_events[]
                        is_print = gs_print
                        TABLES
                        t_outtab = TI_ORDENES
                        EXCEPTIONS
                        program_error = 1
                        OTHERS

                        Comentario

                        • yozgart
                          Junior Member
                          • ago
                          • 2

                          #13
                          Solución encontrada.

                          Antes que nada, muchísimas gracias a Israel, que si no fuese por su asesoría, no hubiese encontrado esta solución.

                          Les adhiero aquí el código con el que me funcionarón los filtros.

                          Primero, el llamado de la función de ALV quedó como sigue.

                          CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
                          EXPORTING
                          i_callback_program = repname
                          i_save = 'A'
                          i_structure_name = 'IT_ALV'
                          is_layout = layout
                          it_fieldcat = gt_fieldcat[]
                          it_events = events[]
                          is_variant = variante
                          it_sort = ordena
                          it_filter = filter
                          i_callback_pf_status_set = formname_pf_status
                          i_callback_user_command = formname_user_command
                          i_bypassing_buffer = 'X'
                          i_buffer_active = 'X'
                          TABLES
                          t_outtab = it_alv
                          EXCEPTIONS
                          program_error = 1
                          OTHERS = 2.
                          IF sy-subrc <> 0.
                          WRITE: 'SY-SUBRC: ', sy-subrc, 'REUSE_ALV_LIST_DISPLAY'.
                          ENDIF.

                          El fieldcat es muy amplio, así que solo colocaré uno ejemplo.

                          *Cant x Comp
                          CLEAR: l_fieldcat, fieldcat_ln.
                          fieldcat_ln-fieldname = 'INPCOM'.
                          fieldcat_ln-tabname = 'IT_ALV'.
                          fieldcat_ln-key = 'X'.
                          fieldcat_ln-seltext_s = ' Cant x Comp '.---┐
                          fieldcat_ln-seltext_m = ' Cant x Comp '.---┼-- Estos tres campos los tienes que colocar
                          fieldcat_ln-seltext_l = ' Cant x Comp '.---┘
                          fieldcat_ln-reptext_ddic = ' Cant x Comp '.
                          fieldcat_ln-ref_tabname = 'ZMXSD005'. -- > Esta tabla es la que utilizó para llenar la tabla del ALV.
                          fieldcat_ln-ref_fieldname = 'INPCOM'. -- > Campo referencia.
                          APPEND fieldcat_ln TO gt_fieldcat.

                          Muchísimas gracias Israel.

                          Comentario

                          • ibecerra

                            #14
                            por nada socio, estamos para apoyarnos

                            Comentario

                            • ccpmad
                              Junior Member
                              • feb
                              • 3

                              #15
                              El problema se soluciona marcando con 'X' el campo LOWERCASE del fieldcat.

                              Un saludo.

                              Comentario

                              Trabajando...