Introducción
Cuando se requiere trabajar con Crystal en la creación de reportes un punto interesante es poder agregar condiciones a los campos de agregación, como se una sumatoria al final de la pagina, para ello tenemos herramientas en Crystal que utilizaremos en este ejemplo
Desarrollo
Para el ejemplo haremos uso de un ambiente simple en donde tendremos una lista de usuarios y sus asistencias a determinado evento.
Para ello ene le ejemplo se hará uso como origen de datos un DataSet Tipado, el cual era cargado en este caso de forma manual, pero bien podría hacerse accediendo a una base de datos
Como próximo paso se creara el reporte agregando a la sección de detalle los campos definidos en el DataSet.
Una vez que tenemos el reporte armado, se procederá a la creación del campo de sumatoria, para ello se realiza un click sobre el campos al cual se le quiere aplicar la suma y se selecciona Insert –> Running Total …
En el dialogo que se visualizara se podrá cambiar el nombre en este caso se utilizo “AsistenciasTotal”, y la parte mas importante será definir la formula que usara, para ello se deberá utilizar la opción que dice “Use a formula”
Al presionarla se visualizara otro cuadro en donde se introducirá la formula que es requerida en este caso filtraremos por un nombre, por ejemplo “Carlos”, por último se acepta el cuadro con el botón superior “Save and close”.
Cuando se acepte el ultimo cuadro seguramente los campos pueden quedar encimados, pera solucionarlo solo hace falta moverlos, ubicándolos donde sea requerido.
El reporte final, luego de ubicar correctamente los campos, quedara de esta forma:
Y al ejecutarlo el resultado será el siguiente:
Debe notarse además que si se visualiza el “Field Explorer” se encontrara el campo de sumatoria recién creado.
[C#] |
Hola Leandro,
ResponderEliminarMe preguntaba como hago para imprimir un reporte desde código, sin presionar el botón print, de la barra de herramientas del reportviewer. He visto q hay q crear un printdocument, y usar el evento printpage, pero tendria q exportar el reporte, me parece engorroso. Habrá un forma más sencilla, como la de lanzar el método print al mostrar el preview del reporte??
Gracias.
hola Pierina
ResponderEliminarDisculpa la tardanza en la respuesta
Algo no me quedo claro, si te refieres al ReportViewer entonces no estas usando Crystal, sino que se trata de Reporting Service, o me equivoco ? el archivo que usas tiene la extension .rpt, o es .rdlc ?
Si se trata de Crystal podrias usar el metodos
ReportDocument.PrintToPrinter Method
de esta forma ya no necesitas el CrystalReportViewer, sino que creando la instancia del ReportDocument puedes imprimirlo.
saludos
Hola Leandro te hago una consulta con respecto al crystal report.
ResponderEliminarEstoy haciendo un sistema en el que tengo que mostrar muchos informes que derivan de diferentes formularios con diferente información. La pregunta es para cada informe debo crear un crystalreport con un dataset y utilizar el mismo crystalReportViewer?(lo q hago actualmente es crear un dataset tipiado y se lo asigno al crystalreport que he creado y lo muestro con un crystalReportViewer). O puedo crear un solo crystal report y desde el codigo ir asignando y quitando y/o agregando columnas al reporte?
Desde ya muchas gracias
hola tintaroja
ResponderEliminarLa pregunta es para cada informe debo crear un crystalreport con un dataset y utilizar el mismo crystalReportViewer?
ojo porque son cosas distintas
Por un lado tienes el reporte y el dataset, debes crear uno por reporte, no aconsejaria entrar en el juego de agregar o quitar columnas dinamicamente porque va a ser muy tedioso de realizar, (si es que es factible), Crystal no se caracterisa por ser flexible ni dinamico en este aspectos.
Por el otro lado tienes el CrystalReportViewer, este es solo un control para visualizar los reportes que hicistes en el paso previo, de este si puedes tener uno solo he ir cargando los .rpt o instancias de reporte.
Se tiende a creer un Form con un CrystalReportViewer y luego pasarle la instancia del reporte (ya asignada con los datos) que quieres visualizar en ese Form que se abre, similar a un popup. En ese Form si puedes tener un solo control de visualizacion, pero reporte aconsejaria hagas uno por cada pantalla, el tema de dinamismo no lo veo muy conveniente.
saludos
Como estas Leandro necesito restar dos campos en crystal reports
ResponderEliminarhola Marcelo
ResponderEliminarSeguramente debas crear una formula que aplique el calculo que buscas
podrias crear una formula
{campo1} - {campo2}
Aunque si te animas a usar dataset tipados, podrias definir el calculo directo en los datos, en la query cuandoc argas el dataset tipados y ali realizar esta operacion para que en Crystal solo se reciban los datos ya calculados.
saludos
Hola Leandro! tengo una duda y ojala puedas ayudarme! en un reporte seccionado en grupos tengo
ResponderEliminarfactura fechafactura monto (En el encabezado de grupo) y en el detalle tengo
fechapago y monto del pago
Necesito sumar el monto de la factura siempre q la fecha sea la q indique, pero si el pago tiene dos registros me evalua doble, como hago para q solo evalue una vez. gracias
hola Isis
ResponderEliminarAlgo que me llama la atencion es que tengas en el encabezado algo compuesto por trees campos, y que ademas sea un monto uno de ellos
el importe no deberia ser un campo que tengas en una tabla, sino que deberia calaularse por la suma de todos los montos individuales de los detalles
es por eso que ese monto del grupo deberias quitarlo, para solo dejar el campos sumatoria del detalle
y que este claculo el monto
o sea en el encabezado solo deberias tener factura y fecha factura
y en el detalle la fechapago monto
pero adiocionalmente el total deberia ser solo la suma del importe del detalle, no usar algun campo calculado del encabezado, porque es logico que lo agregara al calculo
saludos
Hola leandro, una consulta estoy haciendo un reporte, en el cual visualizo unos datos numericos, como haria para poder sumar solo los datos que me muestra el reporte y no los que jala el campo, digo esto ya que por unas condiciones muestro ciertos valores y solo necesito sumar los valores que se ven en el reporte.
ResponderEliminarGracias.
hola Manuel Armando
ResponderEliminarLa verdad no entendi la consulta, ya que la info que se muestra en el reporte deberia ser la misma que jala el campo, o sea la informacion proviene de la misma consulta, lo que ves en el reporte es lo mismo que el campo tiene, salvo que agregues filtros.
saludos
Hola Leandro,
ResponderEliminarLo que pasa es que cuando muestro los datos en el reporte, si cumple una condición que muestre cierto grupo de datos, sino que muestre otro grupo.
El detalle es que cuando inserto un total por grupo me suma todos los valores incluidos los que no se muestran por la condición.
Me gustaría saber si se hacer que solo sume los datos que se muestran en el reporte.
Gracias.
Hola leandro quise descargar este articulo, pero no puedo, haber si puedes corregir ese problemita.
ResponderEliminarEstan muy buenos tus articulos sobre Çrystal Report...
hola Manuel Armando
ResponderEliminarestas definiendo en la formula de la sumatoria que aplique la misma regla que usas para ocultar los registros ?
esto es clave para que la sumatoria conozca que registros se estan quitando
saludos
hola Luis Muñoz Hidalgo
ResponderEliminartuve problemas hace tiempo con el SkyDrive por eso algunso articulos perdieron los links, algunos articulos fueron actualizandose, pero se me pasaron otros
este ya estaria actualizado
saludos
Hola, como seria en el caso de que la condicion no exista, porque me muestra nulo y lo que quiero es que muestre la suma = '0'
ResponderEliminarhola, como hago en caso de que la condición no se cumpla, en ese caso muestra null, pero quiero que muestre aunquesea el valor cero, gracias de antemano
ResponderEliminarhola julio anyosa
ResponderEliminarno has evaluado por medio de una formaula en el campo de poner una conficion que valide si la info es null que muestre un cero
a donde apunto es que una formula en el campo podrias definir esto que planteas
saludos
Hola Leandro, pero la verdad ya he intentado de todo y no me sale, lo que pasa que debe mostrar el total de ventas de productos por boleta, factura o ticket, para todos esos casos cumple dos condiciones, que no esté anulado y que sea o boleta, o factura o ticket. y si en el día no se ha vendido por ejemplo ninguna boleta, en ese campo donde debe mostrarse aparece vacio, y al final debo sumar todos pero cuando uno de ellos es vacio el campo donde debe mostrarse la suma de estos tres tipos de comprobantes tambien aparece vacio:
ResponderEliminarif {Comprobante.FlgEst} = true and {Comprobante.NomTipoComprobante} = 'TICKET' then
sum({Comprobante.Pagado})
else
0.00
hice algo asi pero igual no me sale
hola julio anyosa
ResponderEliminarno sera que aparece vacio porque estas tratando el vacio como un valor numerico y para realziar calculos este no es compatible
deberas hacer que el campo, a nivel de datos en el datatable venga con un cero, no lo hagas sino sale a nivel de reporte, hazlo a nivel de datos esta adaptacion para ponder informacion donde no la hay
saludos
como se haria esto que mencionas de crystal reports pero en un rldc, ya que no se como hacer una sumatoria condicional en un textbox de un reporte que estoy realizando.
ResponderEliminargracias por su atencion y respuesta
hola Unknown
ResponderEliminarla verdad no estoy seguro, porque nunca he aplciado este mismo concepto en reporting service
aunque quizas esto de una pista
Conditional sum in reporting services
como veras aqui tambien hay formulas, pero la verdad no lo he probado
saludos
Saludos Leandro,
ResponderEliminarCon respecto a las sumatorias en Crystal, sabrás como puedo hacer para crear sumatorias de una fórmula??
Mi formula se llama: "{@04 Ausencias Valor (Max 408 x Max 401)}" pero si hago esto:
SUM({@04 Ausencias Valor (Max 408 x Max 401)})
Me dice que ese campo no se pude resumir.
Por tu ayuda muy agradecido!!!
hola Rop
ResponderEliminardisculpa la demora
la verdad nunca he intentado sumar una formula, por eso no sabria decirte si se puede hacerlo lo que planteas
lo que si no me qudo claro es si ese campo de formula termina devolviendo un valor numerico como respuesta, porque ojo sino devuelve un numerio valido seguro no podra sumarlo
saludos
hola leandro con se podria hacer lo mismo pero en lenguaje VB.NET no VB C# ES DECIR QUE ME SUME TODOS LOS NUMERO DE UNA COLUMNA EN CRISTAL REPOSRTS
ResponderEliminarhola BLAIDER200
ResponderEliminaren realidad la sumatoria ni siquiera la realiza c# es el propio crystal quien la realiza
saludos
Yo tengo una gran duda.
ResponderEliminarEstoy sacando un precio ponderado entre una columna PRECIO y otra PESO NETO.
El problema esta que no debe incluirse los registros con PRECIOS menores a 5. intente {TABLA.PRECIO} > 5.
Pero no me devuelve ningún valor.
simplemente cuando tengo un precio menor a 5 no me suma nada.,
hola Juan
ResponderEliminarcomo es que defines el origen de datos del reporte ? usas un dataset tipado o conectas el reporte directo a la db
porque podrias filtrar esto directo directo en la query que usas para tomar los datos (de la db) que luego asignas al reporte, asi no tienes que filtrar nada dentro del reporte, lo haces antes de asignar los datos
saludos
Hola Leandro,
ResponderEliminarBueno e visto lo que haces pero a mi no me aparece la funcion de sum del crystal reports estoy usando Visual Studio 2010 y el Crystal Reports que le corresponde y en ninguna opcion me da la opcion de sum para realizar la suma de una columna podrias ayudarme.
hola lil junior
ResponderEliminarbueno la verdad es raro lo que comentas, pero me pregunto, estaras colocando los campos en la seccion adecuada del reporte
digo quizas si pones los campos en el header o alguna otra seccion no funcione, pero si los ubicas en el Details si
saludos
Hola Leandro, estoy relaizando la misma funcionalidad del SUM, y quisiera saber cuando el sum devuelve 0 no me muestra ningún valor en el reporte y quisiera que muestre 0.00 sabrías darme una solución ? Gracias de Antemano
ResponderEliminarcOMO HARIA PARA QUE ME SUME TODA LA COLUMNA SIN USAR FILTRO, SALUDOS
ResponderEliminarhola jhording
ResponderEliminarsino necesitas ningun filtro solo define un campo de suma simple
Crystal Reports Summary Fields
saludos
Hola, Leandro ..
ResponderEliminarHace poco se me planteó una cuestión en relación a las sumas condicionales de campos no agrupados.
La solución que tú propones consiste en crear una fórmula por cada registro que queramos sumar, pero ¿Y si quiero hacer que los registros se sumen utilizando una sola formula? Por ejemplo si tengo un gran número de registros y no sé cuáles aparecerán en el informe porque se pueden utilizar filtros.
Por ejemplo:
01012014 - Código_01 - XXXX - VIVV
01012014 - Código_01 - XUUX - FVVV
02012014 - Código_03 - XXYY - VVPP
03012014 - Código_02 - XOOX - VVVV
04012014 - Código_01 - XXZZ - UUVV
04012014 - Código_03 - GGXX - VVRR
05012014 - Código_01 - XXII - VSVV
-----------------------------------
Total Código_01 : 4
Total Código_02 : 1
Total Código_03 : 2
-----------------
Total Códigos : 7
Lo que no quiero es escribir una fórmula para cada uno de los totales y que además muchas veces esos registros ni siquiera aparezcan en el informe.
No sirve agrupar los registros porque el informe se presenta ordenado por otros datos.
Gracias y saludos cordiales.
Buenas tardes LEandro.
ResponderEliminarTengo una inquietud.
Cómo sumo campos tipo string en el total de un grupo reportviewer.
todo en la misma tabla:
sexo total
masculino 100
femenino 50
el count(fileds!sexo.value) me hace el conteo, pero cuando agrego el total de ese count me devuelve el total del autonumerico id de la tabla, no me suma 100+50=150.
Gracias ,
hola Orlando
ResponderEliminarlos datos al reporte desde donde los envias?
lo pregunto porque quizas esta info deberias trabajarla previamente fuera del reporte y luego asignarla ya con algunos valores calculados para que el reporte los pueda tomar directamente
no se si quizas con alguna formaula dentro del campo de suma se solucionaria, pero me pregunto cual es el campo que sumas, porque si sumas el id esta claro que ira acumulando ese campos
deberias aplicar el sum sobre el campo count que tenias definido
saludos
Hola tuttini queria felicitarte por todos los tutoriales que has hecho no solo me han ayudado a mi sino a mucho pero queria preguntarte si puedes hacer una partado para crear reportes con crystal report usando el gestor de base de datos de postgres sql muchas gracias y hasta pronto
ResponderEliminarBuenas tardes, aprovechando tu generosidad y humildad, tendrás la parte de agregar al carrito de compras en c#?
ResponderEliminarBuenos dias, no cargan las imagenes de tu post
ResponderEliminarBuenas Tardes . Leandro una consulta ? tengo un Reporte en Excel Gerencial en formato .xlsx y el formato es bien complejo y me han pedido que desde el .NET lo genere el Excel, Mi pregunta seria ? que desde el .NET en modo windowform , el reportview tiene una opcion o comandos avanzados como matrices avanzadas , columas y filas personalizadas para poder generar el reporte en excel,quisas tengas un Ejemplo practico que me pueda servir como guia.Agradeceria tu ayuda
ResponderEliminarBuenos Días, tengo un reporte con 2 totales acumulados, donde aplico suma y se evalúa con condición usando una formula.
ResponderEliminarEl problema es cuando no cumple con la condición no me muestra nada, quisiera que para esos casos muestre "0.00". Por favor si me pueden ayudar. Gracias
Hola buenas tardes, tengo una duda. Estoy tratando de hacer unas etquetas en Crystal Reports de un listado de articulos, cada una de las etiquetas debe llevar un folio y otros datos que los obtiene de la base de datos, pero me pone el mismo folio en todas las etiquetas como se le puede hacer para que ese folio cambie???
ResponderEliminarBuenas tardes, una consulta quiero imprimir al final del informe los totales según los tipos que contenga los detalles (totaltipo a=x; totaltipo b =y; totaltipo c=z) si en los detalles no esta algún tipo no se imprime. habrá alguna forma?
ResponderEliminar