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 |
¿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é? |
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. |
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. :( |
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. |
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'. |
Hola!
Fijate en esta página que te indica cómo verificar qué has hecho mal. Dime si fue util!!:) |
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. |
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. |
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. |
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. |
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 |
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. |
por nada socio, estamos para apoyarnos
|
El problema se soluciona marcando con 'X' el campo LOWERCASE del fieldcat.
Un saludo. |
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.
|
Husos Horarios son GMT. La hora en este momento es 21:17:53. |
www.mundosap.com 2006 - Spain
software crm, crm on demand, software call center, crm act, crm solutions, crm gratis, crm web