Crystal report 7.0. ¿Funciona del todo bien?

Ante todo agradecerte tu atención para leer mi pregunta.
Tengo un problema con el crystal report 7.0, y después de darle muchas vueltas he llegado a la conclusión de que no funciona bien del todo.
Te cuento mi caso:
Tengo realizado un report que engancha con una consulta realizada con access 97, sobre una tabla.
El report está agrupado por fecha (que es uno de los campos de la consulta)
Tengo varios campos que totalizan los resultados por fecha, es decir cuando cambia de fecha totaliza la suma de los registros anteriores.
Pues bien, cuando quiere, la suma de los registros funciona bien y aleatoriamente aproximadamente cada 10 o 12 grupos el total sale mal. Lo que si me he dado cuenta es que es como si los campos de totales no se reseteasen bien al cambiar de grupo, es decir, que en vez de poner la variable a cero, toma como valor inicial para empezar a sumar, el valor que tiene el último registro del grupo anterior. He de decirte que cuando esto ocurre pasa en todos y cada uno delo campos de totales.
He realizado varios report nuevos y siempre pasa lo mismo.
Me gustaría saber si hay alguna manera de poder tratar estos campos de totales de forma manual, tal y como se realizaba a la antigua usanza, es decir, poder controlar el reseteo a voluntad.
A la espera de tu respuesta te saluda Att Tomás Rodríguez.

2 Respuestas

Respuesta
1
Se de lo que hablas. En ocasiones nos parece que no funciona correctamente, como que algo le quedó mal al reporteador. La realidad es que es muy estable y lo que lo hace tener esas variaciones es la forma en la que preparamos e intentamos mostrar la información. Muchas veces he visto a personas con estos problemas y generalmente es que está mal la liga entre las tablas o crean fórmulas que de acuerdo a los tiempos de generación del reporte no debieran haberse estructurado así. Sin embargo, a diferencia de un lenguaje, Crystal no nos da un error en específico por esto, solo nos muestra errores en los resultados. En tu caso que no parece que deba tener mayor complicación, sin embargo, debe ser por alguna razón similar. Sería conveniente que aunque funcione con esta alternativa revisaras la forma en que generas el reporte ya que los subtotales es de lo que difícilmente falla en Crystal.
Hay dos formas de hacerlo. "A pie" y con un asistente.
Existe una serie de campos llamados "Running Total" o "Totales acumulados" que puedes crear en el explorador de campos(o en el menú Insert->Running Total Field) y te mostrará una ventana donde te preguntará
El nombre para el campo Running Total
Sobre que campo deseas hacer el total
Que tipo de operación (suma, resta, promedio, etc. En este caso suma)
Luego hay una sección llamada de evaluación
Esta suma para que momento se va a realizar:
En este caso seleccionarás "al cambiar de grupo" y te mostrará un combo con la lista de grupos sobre la que quieres totalizar.
Enseguida esta la sección "Restablecer" que como lo dice nos sirve para indicarle en que momento se va a restablecer el campo que creamos.
Le indicaremos la opción "al cambiar de grupo" y seleccionaremos el grupo.
Una vez tenido esto se inserta el campo en el reporte y listo.
Otra forma de hacerlo es creando campos fórmula para hacer las sumas usando el tradicional Variable = Variable + {Tabla.Campo} con la sentencia WhilePrintingRecords pero hay mucho que explicar porque al ser el control "a pie" hay que controlar varias cosas.
Si no te funciona o tienes dudas dímelo
Hasta pronto.
Hola Marcos
Muchas gracias por tu aclaración.
En el report del que te hablo, todos los subtotales están hechos con el asistente. El problema que tengo es que de forma aleatoria la suma del subtotal falla, pero solo en algunos casos.
Intentare explicarte algo mejor lo que me ocurre.
Imagina una consulta en access con el siguiente resultado:
Año Fecha Nº Cajas
------ -------------- ----------
2001 01/01/2001 10
2001 01/01/2001 15
2001 02/01/2001 12
2001 02/01/2001 12
2001 03/01/2001 11
2001 03/01/2001 10
2001 04/01/2001 16
2001 04/01/2001 12
Bien, insertamos un primer grupo que es Año y luego insertamos un segundo grupo que es Fecha, el resultado quedaría más o menos así
Año: 2001
Fecha 01/01/2001
Cajas 10
Cajas 15
Fecha 02/01/2001
Cajas 12
Cajas 12
Fecha 03/01/2001
Cajas 11
Cajas 10
Fecha 04/01/2001
Cajas 16
Cajas 12
Bien, ahora insertamos un "Running Total" con la siguiente descripción:
Nombre: Suma_Cajas
Tipo Operacion: Sum
Evaluacion: Para cada Registro
Restablecer: al cambiar de grupo ( en el combo ponemos Fecha)
Ahora insertamos el campo Suma_cajas en el report y debería de quedar algo así:
Año: 2001
Fecha 01/01/2001
Cajas 10
Cajas 15
Total Suma Cajas : 25
Fecha 02/01/2001
Cajas 12
Cajas 12
Total Suma Cajas : 24
Fecha 03/01/2001
Cajas 11
Cajas 10
Total Suma Cajas : 21
Fecha 04/01/2001
Cajas 16
Cajas 12
Total Suma Cajas : 28
Pues bien, de manera aleatoria el total suma cajas no funciona y sale mal. Cuando falla coge como valor inicial el ultimo registro del grupo anterior en vez de cero. Imagina que falla para la fecha 03/01/2001 y en vez de dar como resultado 11 + 10 = 21, resulta que da 12 + 11 +10 = 33.
Es curioso, pero lo he probado en Windows 95 y aparentemente no me falla, pero con Windows 98 y posteriores falla continuamente.
No obstante te agradecería que me enseñases a utilizar el campo fórmula para realizar las sumas y los reseteos a mano. Es muy importante para mi solucionar este problema ya que tengo la aplicación terminada y la información que sale impresa es vital. No puedo cambiar todos los ordenadores a windows 95 ya que tienen aplicaciones que funcionan con windows 98 que no se pueden dejar de utilizar.
Muchas gracias de antemano
El campo "Running Total" debe sumar por Grupo, no por cada registro.
Y por otro lado para hacer la suma "a pie" hay que hacer lo siguiente.
1. Crear un campo fórmula llamado "Cantidad" con el código //Hace la suma tradicional
WhilePrintingRecords;
NumberVar TotalDia;
NumberVar TotalAño;
TotalDia := TotalDia + {Tabla.Cantidad};
TotalAño := TotalAño + {Tabla.Cantidad}
colocado en el detalle
2. Crear un campo fórmula llamado "TotalDia" con el código //Muestra el acumulado que lleva
WhilePrintingRecords;
NumberVar TotalDia;
colocado en el grupo que hace corte por dia
3. Crear un campo fórmula llamado "ResetDia" con el código //Restablece la variable para el siguiente grupo o corte
WhilePrintingRecords;
NumberVar TotalDia:=0;
colocado en el grupo que hace corte por día
Ahora para hacer lo mismo pero por el campo Año hay que hacer lo mismo
4. Crear un campo fórmula llamado "TotalAño" con el código
WhilePrintingRecords;
NumberVar TotalAño;
colocado en el grupo que hace corte por el campo Año
5. Crear un campo fórmula llamado "ResetAño" con el código
WhilePrintingRecords;
NumberVar TotalAño:=0;
Esta es la forma de hacer sumarizaciones con código.
La sentencia WhilePrintingRecords es para indicarle que la suma la haga en el momento que está colocando los datos en el archivo de reporte(3er tiempo al generar el reporte de crystal)
Si tienes alguna duda dímelo
Eres un fenómeno ! Muchas gracias, tu solución me ha funcionado perfectamente. Te deseo que pases unas felices navidades y un prospero año nuevo
Respuesta
1
Realmente, desconozco que puede ocurrir, ya que yo no suelo trabajar con Cristal Report, sino que los informes los suelo realizar directamente con Access.
No obstante, con base en Access, imagino que el fallo está en que existen algunos valores nulos, ya que cuando fallan las sumas en las agrupaciones, suele deberse, generalmente a esta causa.
Revisa las agrupaciones en las que fallan, comprobando el intervalo de los registros que la componen de forma individual, y si es este el problema, procura asignar de forma predeterminada un valor inicial a esos campos de la tabla, como por ejemplo, el cero.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas