Problema con Reporte Agrupado

Hola, tengo este problema con un reporte. Tengo 2 tablas, una llamada TipoAct y la otra
Llamada Actividades, con estas dos tablas trato de obtener un reporte que me muestre cada
Uno de los tipos de actividades y los minutos invertidos en cada uno de los tipos y
También la suma total de minutos de todos los tipos. Si no hay actividades para un tipo
De actividad debe de mostrarme el tipo de actividad en el reporte con el campo número de
Minutos invertidos igual a 0. Una salida sería algo así:
TipoAct----NombreAct------CantidadRealizadaDeTipo---MinutosTot
1-----------SOPORTE----------------2--------------------30
2-----------APOYO SOFT------------1---------------------20
3-----------APOYO HARD------------0----------------------0
4-----------OTROS------------------3---------------------15
Ese sería un ejemplo sencillo de lo que quiero obtener y significa que por ejemplo, del
Tipo de actividad 1 se han realizado 2 actividades que arrojaron un total de 30 minutos,
1 del tipo 2 que dio 20 min, etc. Bueno, mi reporte está agrupado por el id del tipo de
Actividad y la tabla tipoact está ligada con la actividades por medio del iIdTipoAct y la
Liga es de tipo LEFT OUTER JOIN (la cual pongo en visual linker que está en crystal),
Para que cuando no exista alguna actividad de un tipo, me ponga de todas maneras el tipo
Con su suma en 0. Bueno, hasta aquí estaba todo correcto, pero resulta que este reporte
No me es del todo útil así, sino que realmente lo necesito obtener filtrado entre dos
Fechas. Bueno, al agregarle el selection fórmula y 2 parámetros que me representan la
Fecha inicial y la fecha final queda algo así en mi record selection fórmula:
{Actividades.dFechaAct}>={?pdFechaIni} and {Actividades.dFechaAct}<={?pdFechaFin}.
Bueno, pues cuando hago esto el filtro funciona, pero si en los registros que se obtienen
Del filtro, no hay una actividad de un tipo en ese rango, no me pone la fila
Correspondiente en el reporte. Por ejemplo, si al reporte de arriba le aplico un filtro
De fechas y resulta que las última actividades del tipo OTROS no están en ese rango, el
Reporte queda:
TipoAct----NombreAct------CantidadRealizadaDeTipo---MinutosTot
1-----------SOPORTE----------------2--------------------30
2-----------APOYO SOFT------------1---------------------20
3-----------APOYO HARD------------0----------------------0
debiendo quedar:
TipoAct----NombreAct------CantidadRealizadaDeTipo---MinutosTot
1-----------SOPORTE----------------2--------------------30
2-----------APOYO SOFT------------1---------------------20
3-----------APOYO HARD------------0----------------------0
4-----------OTROS------------------0----------------------0
¿Alguien sabe qué está mal o por qué al aplicarle el filtro hace eso? Cómo puedo hacer
¿Qué me lo ponga como debe de ser?. Agradezco la ayuda... Si alguien está interesado, le
Puedo mandar la base de datos y el rpt a su correo. Les agradezco de antemano la ayuda,
Llevo 2 días con esto y no sale...

2 respuestas

Respuesta
1
El problema lo tienes por lo siguiente:
Al enlazar las dos tablas con LEFT OUTER JOIN se crea una tabla virtual con los campos de ambas, teniendo todos los registros de una y los coincidentes de la otra, hasta aquí todo va bien.
El problema es que cuando filtras la consulta se eliminan los registros de la tabla virtual que no cumplen la condición establecida y por tanto se "salta" el LEFT JOIN ya que aunque cargue todos los registro de TipoAct luego los elimina por que no cumplen con la condición establecida.
CONCLUSIÓN: No puedes crear este informe a no ser que enlaces TipoAct con una tabla de actividades prefiltrada.
Puede que sea mucho jaleo pero crea una tabla igual a actividades en la que cargues los registros de las fechas deseadas y enlazala a TipoAct en el informe.
Ok, sí te entendí... pero creo que ayer sin querer encontré otra posible solución y que consiste en no filtrar los registros, sino, más bien como solo me interesa obtener las sumas de los tiempos, ingreso un Running Totals Fields, donde a la hora de evaluarlo, le pongo la condición de filtrado para que solo me sume los que me cumplan esa condición. Creo que sí va a funcionar... :-D. Muchas gracias por tomarte el tiempo de responderme, saludos y que estés bien. Bye.
Respuesta
1
No se si esto te puede ayudar pero yo antes de realizar un informe creo la tabla que necesite, puedes crear una consulta de las dos tablas y que tenga todos los campos que desees.
Si necesitas más información no dudes en preguntarme e intentaré ayudarte.
O sea, que haces un recordset que contenga los campos que quieres y los registros que deseas y luego se lo pasas al crystal reports por medio del datasource (¿es esa? No recuerdo bien, cómo se llama la propiedad...)?.
Gracias. Voy a intentarlo de esta manera, a ver si sale. Gracias de nuevo y saludos.
Efectivamente. Además la consulta que realices puedes hacerla con sentencias SQL, que es lo que yo utilizo. Yo, para los informes directamente le paso las propiedades a los "textos del crystal report" desde la función que haya creado y al final, una vez montado el Reporte, la imprimo por medio de su propiedad.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas