Mostrando entradas con la etiqueta Crystal Report. Mostrar todas las entradas
Mostrando entradas con la etiqueta Crystal Report. Mostrar todas las entradas

12 de diciembre de 2012

Pasar Parametros a Crystal Report

Algunas veces en nuestra aplicación de escritorio hay que pasar información(parametros) directamente desde el formulario(VB o C#)  hasta nuestro reporte, información que pueden variar en cada presentación de reporte y que el usuario debe especificar como por ejemplo el autor del reporte o simplemente notas especificas para cada reporte y que no se pueden obtener desde la base datos o con alguna formula elaborada, por eso muestro como pasar parametros desde el Windows Form hacia el Crystal Report.

Lo primero va ser crear el reporte, en caso no puedan hacerlo o quieran dar una revisada aquí hay un link en que muestro como hacerlo reporte !!!

Ahora, el ejemplo va para Visual Basic, mas abajo lo muestro para C# y lo primero que debemos hacer es ir a nuestro reporte y declarar un campo parametro del tipo Parameter Field desde el Field Explorer


Luego especificamos el nombre y tipo del parametro a enviar y luego le damos aceptar con lo que tendremos disponible el campo para colocarlo en cualquier parte del informe, en mi caso llame al parametro ejemplo y lo coloque en el pie del reporte:




y luego desde el Windows Form en VB ponemos este código:


Imports System.Data
Imports System.Data.SqlClient
Public Class Form1
    Dim ds As New datos    <---- a="a" crea="crea" dataset="dataset" el="el" font="font" informe="informe" instancia="instancia" llenar="llenar" para="para" que="que" se="se">
    Dim rpt As New reporte   <---- a="a" crystal="crystal" el="el" instancia="instancia" report="report" span="span">

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Using Sql As New SqlConnection(My.Settings.pruebaConnectionString)
            Using da As New SqlDataAdapter("select * from empleado", Sql)
                da.Fill(ds, "empleado")
                rpt.SetDataSource(ds)
                rpt.SetParameterValue("ejemplo", "Hola Mundo")
                CrystalReportViewer1.ReportSource = rpt
            End Using
        End Using
    End Sub
End Class

Pero en caso quieras mandar un valor dentro de una variable, por ejemplo que capture la info desde un textbox para ser mostrado en el informe, haz esto:

Dim variable As String = "lo que quieras"
rpt.SetParameterValue("ejemplo", variable)



pero si lo quieren en C#, aqui esta:


using System.Data.SqlClient;
using System.Configuration;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        SqlConnection sql;
        SqlDataAdapter da;
        reporte rpt = new reporte();
        datos ds = new datos();
        string conexion = ConfigurationManager.ConnectionStrings["pruebaConnectionString"].ConnectionString;
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            using (sql = new SqlConnection(conexion)) {
                using (da = new SqlDataAdapter("select * from empleado", sql)) {
                    da.Fill(ds, "empleado");
                    rpt.SetDataSource(ds);
                    rpt.SetParameterValue("ejemplo", "Hola mundo");
                    this.crystalReportViewer1.ReportSource = rpt;
                    this.ShowDialog();
                }
            }
        }
    }


y de nuevo las lineas para pasar el valor de una variable al reporte:


string variable = "Hola mundo";
rpt.SetParameterValue("ejemplo", variable);


es todo :)

23 de noviembre de 2012

Resultados búsqueda en Crystal Report

Haremos un buscador de datos de un empleado y mostraremos los resultados en un reporte de Crystal Report, para esto utilizaremos VB2010 y la base de datos: empleado, la cual tiene los siguientes campos


el termino de búsqueda sera el código del empleado, el cual en mi caso tiene tres números y para realizar esta búsqueda haremos uso de un formulario el cual solo tiene un campo de texto y un botón  les deje los nombres por defecto a cada control(Form1, TextBox1 y Button1) pues lo importante es el funcionamiento, ustedes sabrán como darle una vista apropiada.


Ahora agreguemos un Dataset, para esto click derecho sobre el proyecto y seleccionamos dentro de la categoría Data al dataset y de nombre le dejamos Datos.xsd


y desde nuestro Server Explorer agregamos desde nuestra base de datos, la tabla empleado y guardamos


Ahora agregamos un reporte de Crystal Report, de nuevo click derecho sobre nuestro proyecto y agregamos un nuevo item


escogemos Crystal Report y de nombre le dejamos Reporte


Escogemos usar el asistente y seleccionamos el origen de datos, que sera la tabla empleado y todos los campos de esta tal como se muestra




Ahora agregamos un nuevo formulario al que llamare Show y sobre este agrego un control CrystalreportViewer, luego sobre el Form1, que es el que tiene el botón y la caja de texto, ponemos este código:

Imports System.Data
Imports System.Data.SqlClient

Public Class Form1

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim codigo As String = TextBox1.Text   'de aquí tomo el valor del código a buscar
        Dim ds As New Datos        'referencia al Dataset creado: Datos   
        Dim rpt As New Reporte     'referencia al reporte en Crystal Report
        Dim muestra As New Show    'nombre del formulario con el CrystalReportViewer
        Try
            Using Sql As New SqlConnection(My.Settings.cnn)  'cnn conexión en app.config
                Sql.Open()
                Using cmd As New SqlCommand()
                    cmd.Connection = Sql
                    cmd.CommandText = "select * from empleado where codigo=@codigo"  
                    cmd.Parameters.AddWithValue("@codigo", codigo) 
                    Using da As New SqlDataAdapter(cmd)  
                        da.Fill(ds, "busqueda")   
                        rpt.SetDataSource(ds.Tables("busqueda")) 
                        muestra.CrystalReportViewer1.ReportSource = rpt  
                        muestra.ShowDialog()  
                    End Using
                End Using
            End Using
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub

End Class


y solo ejecutamos, como ven toda la información se obtiene en Form1 y luego solo presentamos el Formulario show con el reporte.

************************************************************************************

PERO si lo que quieren es que el formulario que contenga el CrystalreportViewer sea el que haga la busqueda, pues hagamos esto en Form1

Imports System.Data
Imports System.Data.SqlClient

Public Class Form1

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim formulario As New Show
        formulario.buscar(TextBox1.Text)
        formulario.ShowDialog()
    End Sub

End Class


y en el formulario Show para que este realice la búsqueda, debemos poner esto:

Imports System.Data
Imports System.Data.SqlClient
Public Class Form2

    Public Sub buscar(ByVal codigo As String)
        Dim codigoB As String = codigo
        Dim ds As New Datos
        Dim rpt As New Reporte
        Try
            Using Sql As New SqlConnection(My.Settings.cnn)
                Sql.Open()
                Using cmd As New SqlCommand()
                    cmd.Connection = Sql
                    cmd.CommandText = "select * from empleado where codigo=@codigo"
                    cmd.Parameters.AddWithValue("@codigo", codigoB)
                    cmd.ExecuteNonQuery()
                    Using da As New SqlDataAdapter(cmd)
                        da.Fill(ds, "tblBusqueda")
                        rpt.SetDataSource(ds.Tables("tblBusqueda"))
                        CrystalReportViewer1.ReportSource = rpt
                    End Using
                End Using
            End Using
        Catch ex As Exception

        End Try
    End Sub
End Class

eso es todo :)

21 de noviembre de 2012

Crear reporte en CR y sumar campos string

Mostrare como crear un reporte usando VB2010, un Dataset y la información de una tabla en SQL 2008 para luego obtener el total de resultados de una columna especifica del reporte, lo primero sea crear el proyecto en VB y añadir el Dataset, así que damos click derecho sobre el proyecto tal como se muestra:


y en la parte izquierda seleccionamos Data, luego en el panel principal seleccionamos Dataset y de nombre le ponemos Datos, luego presionamos el botón agregar o Add.


Antes de continuar les muestro los campos de la tabla sobre la que creare el reporte:


siguiendo con el Dataset, al presionar el botón Agregar o Add, aparecerá esta pantalla, como recomendación deberían tener el Server Explorer disponible y con una conexión a la base de datos donde este la tabla(s) sobre la cual van hacer el reporte, la pantalla que deberían ver es la siguiente:


Lo siguiente sera "arrastrar" la tabla sobre la que se creara el reporte desde el Server Explorer a la parte gris del Dataset, tal como se muestra:


luego guardamos el trabajo realizado y vamos a agregar un nuevo item al proyecto


Pero esta vez sera un item dentro de la categoría Reporting y seleccionamos Crystal report y como nombre a este item le ponemos ejemplo.rpt


y le damos al botón Add, al hacer esto esperas un momento y tendrás una pantalla como esta, de la cual seleccionamos el  Usar asistente de informes, así pues al tener esta pantalla solo damos al botón Aceptar


Tendremos la siguiente pantalla, como ya creamos un Dataset en nuestro proyecto escogemos desde Origenes de datos disponibles-->ADO.NET Datasets y buscamos nuestra tabla y la agregamos, luego presionamos el botón siguiente:


y seleccionamos todos los campos, luego presionamos el botón finalizar


Inmediatamente al presionar finalizar tendremos la siguiente pantalla que muestra los campos y el orden de nuestro reporte, los podemos cambiar como queramos, por el momento dejemolo así  guardamos y vamos al formulario de nuestro proyecto


Al formulario le agregamos un CrystalreportViewer desde las herramientas o Toolbox del proyecto y en el evento Load del formulario ponemos el siguiente código:


Imports System.Data
Imports System.Data.SqlClient
Imports System.Configuration

Public Class Reporte

    Private Sub Reporte_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Dim rpt As New Ejemplo 'este es el nombre del reporte que creamos con crystal report
        Dim info As New Datos  'este es el nombre del Dataset

        Try
            Using Sql As New SqlConnection(My.Settings.cnn)
                Using da As New SqlDataAdapter("select * from empleado", Sql)
                    da.Fill(info, "empleado")
                    rpt.SetDataSource(info)
                    CrystalReportViewer2.ReportSource = rpt
                End Using
            End Using
        Catch ex As Exception

        End Try
    End Sub
End Class


y al ejecutar el proyecto deberíamos tener un reporte mostrando los datos de su tabla o de las tablas que seleccionaron, en mi caso tengo esto como resultado:


Pero y si quiero por ejemplo que en el reporte aparezca el total de empleados, lo primero que se debe hacer es converitr el campo string a numérico pues solo se pueden sumar valores numéricos, para eso haremos lo siguiente, nos vamos al reporte en Crystal Reporte, en nuestro caso el que se llama ejemplo y sobre campos de formula damos click derecho y seleccionamos nuevo y tendremos la siguiente pantalla:


le damos aceptar y tendremos esta ventana, coloquen ToNumber(aquí el campo) tal como se muestra, se pueden jalar el campo desde Campos de informe, luego seleccionamos Guardar y cerrar


Ahora como ven ya tendremos suma desde campos de formula, tal como esta:


el siguiente paso es agregar otro campo de formula

y como nombre le ponemos Total o el que te de la gana y le damos aceptar para tener esta ventana, de la cual seleccionamos Resumen para desplegar el menú de opciones, como pueden fijarse en el panel izquierdo ya tenemos los dos campos de formula: Suma y Total


y seleccionamos Sum y el campo que anteriormente habíamos creado que es Suma, así:


le damos guardar y cerra y luego solo jalamos el campo Total a nuestro reporte.

20 de agosto de 2012

Crystal Report con VS2010 (VB y C#)

Hacer reportes en VB o en C# es de los mas cotidiano, incluso es parte de las actividades en una prueba cuando te presentas aplicando a un trabajo(área de login-ACME-reporte con resultados de búsqueda), así que vamos a hacer uno de los mas sencillo pero a partir del cual podrás añadir cosas según te interese.

Para empezar el Crystal Report no viene con el VS2010, así que debes descargarlo, yo te recomiendo que lo bajes desde el link que te ofrece el VS2010 porque es el link directo, sino pues aquí esta, al descargarlo tendrás un archivo Winrar y al comenzar la instalación deberás tener algo como lo que muestro:




Antes de terminar con la instalación es recomendable instalar tiempo de ejecución de 64 bits, tal como se muestra:

Una vez lo hayas descargado e instalado en tu computadora(dar next --> next -->next) vamos a crear un nuevo proyecto, en la imagen se muestra VB como lenguaje pero aquí también postearé para C#.


y lo primero que vamos a hacer sera cambiar el .NET Framework 4 Client Profile que se asigna por defecto a todo proyecto nuevo en VS2010 por el .NET Framework 4 a fin de no tener problemas para utilizar Crystal Report en el proyecto, para eso damos click derecho sobre el proyecto --> propiedades --> Compile --> Advanced Compile Options


y luego cambiamos el .NET Framework 4 Client Profile por el .NET Framework 4


también y dependiendo que estés haciendo en tu proyecto, podrías utilizar el .NET Framework 3.5, pero bueno, si como en este ejemplo te quedas con el .NET Framework 4, debes hacer algo mas, deberas abrir el app.config de tu proyecto, el que esta en el Solution Explorer y cambias el contenido entre las etiquetas <startup></startup>, asi

<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
</startup>

Listo, ahora se debe crear un Dataset, no es la única manera para "jalar" los datos que necesitara tu reporte(podemos hacerlo con procedimientos almacenados), pero es de las mas sencillas, algo que recomiendo antes de crear el Dataset es que crees una conexión a la base de datos que necesitaras desde el Server Explorer para así tener a mano la(s) tabla(s) que te interesen, para esto abres el Server Explorer y escojes una nueva conexión a base de datos.


luego de conectarte a tu base de datos en especifico, pasamos a crear el DataSet, solamente se debe dar click derecho en el proyecto, Add --> New Item

en la parte izquierda de la ventana nos aparecen los common items, buscamos el item Data y seleccionamos el DataSet, en mi caso le pondré de nombre datos.xsd


al hacer esto, tendremos una pantalla gris como en al figura, ahora desde el Server Explorer, arrastramos la(s) tabla(s) sobre la(s) cual(es) basaremos el reporte, para este ejemplo solo sera una tabla y se llama empleado, guardamos y listo, estamos hechos con el dataset, pasemos al reporte.


Ahora vamos a agregar un nuevo item, pero esta vez sera un Crystal Report, por tanto en la parte izquierda de la ventana seleccionamos Reporting y luego entre los items seleccionamos Crystal Report y le especificamos un nombre tal como se muestra, en mi caso le puse el nombre de reporte(es importante recordar estos nombres)


al dar aceptar se va abrir esta ventana con tres opciones, en este ejemplo se utilizara el asistente de informes por lo que damos Aceptar.


el siguiente paso es seleccionar la fuente de datos, como en nuestro caso hicimos un Dataset entonces solo debemos especificarlo desde Datos del proyecto así:


y luego seleccionar todos los campos de la tabla ya que en este ejemplo queremos mostrarlos todos, en este caso solo son tres campos, pero aquí deberías seleccionar los campos en especifico que te importan, ademas luego de seleccionar los campos en esta ventana, para el ejemplo daré click en finalizar, pero tu puedes seguir y definir especificaciones que llevara tu reporte.


Fácil, ahora guardamos y nos vamos al Form1.vb que teníamos desde un principio y lo que haremos es irnos a la ventana de Toolbox y agregar a nuestro formulario vació el componente de CrystalReportViewer


Listo y ahora la parte de programación, en el evento Load del formulario en VB ponemos esto:

Dim sqlConsulta As String = "select * from empleado"
        Dim ds As New datos
        Dim rpt As New reporte
        Try
            Using cnn = New SqlConnection(tu string de conexión a la base de datos)
                Using da = New SqlDataAdapter(sqlConsulta, cnn)
                    da.Fill(ds, "empleado")
                    rpt.SetDataSource(ds)
                    CrystalReportViewer1.ReportSource = rpt
                End Using
            End Using
        Catch ex As Exception
        End Try



ese era el código para una aplicación en lenguaje VB, si lo necesitan en C# aquí esta:

namespace WindowsFormsApplication1

{
    public partial class Form1 : Form
    {
        Datos ds = new Datos();
        reporte rpt = new reporte();
        string conexion = ConfigurationManager.ConnectionStrings["cnn"].ConnectionString;
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            string sqlConsulta = "select * from empleado";
           
            try {
                using (SqlConnection cnn = new SqlConnection(conexion)) {
                  using (SqlDataAdapter da = new SqlDataAdapter(sqlConsulta, cnn)) {
                        da.Fill(ds, "empleado");
                        rpt.SetDataSource(ds);
                        this.crystalReportViewer1.ReportSource = rpt;
                    }
                }
           
            }catch(Exception ex){
                MessageBox.Show(ex.Message);
            }
        }
    }
}