PDA

Ver la Versión Completa : Problemas con ALV


aelma
03/10/06, 13:52:00
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
03/10/06, 14:30:26
¿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é?

chivi82
03/10/06, 15:02:31
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.

aelma
04/10/06, 13:06:48
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. :(

MariLu
05/12/07, 07:50:54
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.

ibecerra
05/12/07, 13:12:31
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'.

lalola
06/12/07, 19:54:36
Hola!

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

Verificar ALV

Dime si fue util!!:)

Prometeo
28/03/08, 15:19:23
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.

cmejiab
15/09/08, 14:45:59
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.

Bmamba
18/09/08, 09:58:05
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.

yozgart
22/09/08, 22:25:17
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.

ibecerra
23/09/08, 12:51:25
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

yozgart
23/09/08, 17:35:41
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.

ibecerra
23/09/08, 18:15:39
por nada socio, estamos para apoyarnos

ccpmad
29/04/09, 07:39:27
El problema se soluciona marcando con 'X' el campo LOWERCASE del fieldcat.

Un saludo.

FuryNocturn
29/11/17, 10:01:16
el problema también puede derivar si la tabla tiene registros en minúscula, sap al escribir el en el filtro el internamente lo que escribes lo pone en mayúsculas por el motivo de no mostrar ningún resultado, tendrás que ir rellenando toda la tabla en mayúsculas.