www.businessobjects.com
(dataAdapter("select * from nombre_tabla", my_conexion)
(dataAdapter.fill(dataSet,"nombre_tabla")
objCrystal.SetDataSource(dataSet)
objCrystal.Refresh
frmReporte.objViewer.ReportSource = objCrystal
(dataAdapter("select * from nombre_tabla", my_conexion)
dataAdapter.MissingSchemaAction = MissingSchemaAction.Add
dataAdapter.MissingMappingAction = MissingMappingAction.Passthrough
primariKey codigo_sucursal
PrimariKey codigo_sucursal+codigo_empleado
ForeignKey codigo_sucursal con referencia a tabla sucursales en el campo codigo_sucursal
' primero declaramos la variable del tipo objCrystal
dim objCrystal as objCrystal2
(dataAdapter("select * from empleados", my_conexion)
dataAdapter.MissingSchemaAction = MissingSchemaAction.Add
dataAdapter.MissingMappingAction = MissingMappingAction.Passthrough
(dataAdapter.fill(dataSet,"empleados")
' de aqui es lo mismo
objCrystal.SetDataSource(dataSet)
objCrystal.Refresh
frmReporte.objViewer.ReportSource = objCrystal
(dataAdapter2("select * from sucursales", my_conexion)es un dataAdapter2 que llena el mismo dataSet solo que es la tabla "sucursales"
dataAdapter2.MissingSchemaAction = MissingSchemaAction.Add
dataAdapter2.MissingMappingAction = MissingMappingAction.Passthrough
(dataAdapter2.fill(dataSet,"sucursales")
objCrystal.SetDataSource(dataSet)ahora. en el objCrystal en tiempo de diseño selecciona el campo "Nombre de Grupo #1" de la sección "Encabezado de Grupo #1" y cambiale la propiedad "Suppress" a "True"
objCrystal.Refresh
frmReporte.objViewer.ReportSource = objCrystal
Osea lo mejor quzias algunos m digan es imprimir uno primero y seguido el otro.. Pero no lo quiero hacer d un solo.. y q salga cabal justo depues de dond termine el primero!
Buenisimo aporte la verdad.
Yo siempre he tenido una duda, cual es la ventaja de trabajar con Crystal Reports??
Solo es el hecho de ahorrar tiempo, porque es mas facil?? O sera que es mas versatil en cuanto al diseño, trae mas opciones??
Otra consultita, estos reportes se pueden utilizar en ASP 2.0?? Se hace de la misma forma??
Cual es la necesidad de hacerlo uno tras de otro?¿?¿.-..... por como lo planteas no le veo razón de ser a ese reporte....
T pongo un ejemplo... Suponete q estas en tu trabajo y tienen una impreseroa en red o por IP para todas las compu y la impresora esta en el primer piso y vs estas en el octavo piso tendrias q bajar ocho pisos para darla vuelta al papel o volver a poner la hoja y d alli subir de nuevo 8 pisos para volver a imprmir el segundo? No crees q seria mejor de un solo?
hey fijense q estube probando el crystal reports, es facil de usar pero mi problema es cuando quiero probar mi aplicacion en otras maquinas me pide una serial es decir una clave de registro distanta a la q e usado para mi Visual estudio estoy usando visual basic.net 2005 y el crystal Reports q trae por default... podria alguien ayudarme como puedo hacer cuando pruebo en otra maquina mi aplicacion los reportes no me funcionan debido a q debo registrar el CrystalReports
NOSE Q HACER ESTOY EN PRBLEMAS....
de antemano muchas gracias....
a mi mi MAMA me conto que en crystal.. podia yo elegir en que formato quiero mi informacion (exel, word, html, pdf) .... pero no quiero utilizar la opcion que tiene el reportviewer.. de "EXPORTAR"... lo quiero automatico en mi apliacion....mediante una funcioncita....
¿como quedaria eso segun tu ejemplo?
entonces vos lo que quere es una impresion doble cara???? porque hay impresoras que lo hacen...
pues fijate q el error q me da es q no me deja utilizar los reportes q e creado antes de eso me pide q ingrese el serial osea registrarme para utilizarlo.... nose que puedo hacer...
T pongo un ejemplo... Suponete q estas en tu trabajo y tienen una impreseroa en red o por IP para todas las compu y la impresora esta en el primer piso y vs estas en el octavo piso tendrias q bajar ocho pisos para darla vuelta al papel o volver a poner la hoja y d alli subir de nuevo 8 pisos para volver a imprmir el segundo? No crees q seria mejor de un solo?
yo dije imprimir doble cara porque literalmente eso es lo que describes en el parrafo anterior....
Continuando con mi superPost XD....
mas que todo por la solicitud de JGuillen™ ..... retomo este post....
me faltava algo que ya habia adelantado...y es el echo de redistribuir tus app de vs05 que lleven crystalReport... si al momento de ejecutar tu app en otras pc te da un error de archivos de CrystalReport....
puede ser porque no esten instalados CrystalReportsRedist2005_x86.msm .... entonces como hacer pa instalarlos.... es super fácil... el mismo vs05 los hace por ti... solo para que los lleves y los instales antes de ejecutar tu aplicación.... bien aqui te explico como?¿
en las propiedades de tu proyecto, busca la opion Publicar, luego presiona sobre el botón Requisitos Previos, en la pantalla que te aparezca chequea la opción "Crear programas de Instalación para instalar los componentes necesarios"
el cuadrito debe quedar como la siguiente pantalla..
(http://img147.imageshack.us/img147/2418/redist1kx1.th.jpg) (http://img147.imageshack.us/my.php?image=redist1kx1.jpg)
luego... siempre en la pestaña Publicar, en donde te pide "Ubicación de publicación" pón una dirección válida en tu pc.... luego da clic en Publicar Ahora...
hara la publicación en la carpeta que especificaste y ahí creara una carpeta "crystalreports" donde estarán los archivos que necesitas instalar en las pc donde ocuparas tu aplicación.... los demás talvez no te importen...
y Listo.... :thumbsup:
si tenes curiosidad por saber que es eso de la publicación podes preguntar también.... porque es una maravilla :)
Hola me sirvio mucho tus post ahora llegue a al momento que necesito que me corran en diferentes maquinas pero no encuentro esa pestaña Publicar a la que haces referencia, y ya que estoy te pregunto como solucionar el problema de ir cambiando las cadenas de conexion de sql en cada maquina que instale mi aplicacion desde ya muchas gracias.
Un saludo.
Gracias por la explicacion me sirvio, a lo de la conexion me refiero a que yo mi maquina utilizo esta cadena de conexion por ej :
private static SqlConnection oConn = new SqlConnection(" Data Source=DIEL-01C3EBA51E;Initial Catalog=Dielpos;Integrated Security=True "), ahora yo quiero que mi aplicacion corra en diferentes maquinas entonces nose como solucionar el tema de la cadena en cada maquina.Me explico ??. Mi intencion seria entrgar un cd por ej con mi aplicacion, con todas las tablas sin la necesidad de ir cada vez que se quiera instalar la aplicacion...
Option Strict Off
Imports System.Reflection
Imports System.ComponentModel
Imports Microsoft.VisualBasic
Public Class ReportHandler
Implements IDisposable
Private _NombreInforme As String
Private _Origen As New DataTable
Private disposedValue As Boolean = False
Private _Parametro As New List(Of ReportParameter)
Private _Ruta As String
Private _Origen2 As New DataTable
Enum Estadoinf
Pantalla
Impresor
End Enum
Public Property Parametros() As List(Of ReportParameter)
Get
Return Me._Parametro
End Get
Set(ByVal value As List(Of ReportParameter))
Me._Parametro = value
End Set
End Property
''' <summary>
''' Obtiene o establece el nombre del reporte que se mostrará
''' </summary>
''' <value>String</value>
''' <returns>String</returns>
''' <remarks></remarks>
<Description("Obtiene o establece el nombre del reporte que se mostrará")> _
Public Property NombreInforme() As String
Get
Return Me._NombreInforme
End Get
Set(ByVal value As String)
Me._NombreInforme = value
End Set
End Property
''' <summary>
''' Obtiene o establece
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public Property Origen() As DataTable
Get
Return Me._Origen
End Get
Set(ByVal value As DataTable)
Me._Origen = value
End Set
End Property
Public Property Origen2() As DataTable
Get
Return Me._Origen2
End Get
Set(ByVal value As DataTable)
Me._Origen2 = value
End Set
End Property
Public Property Ruta() As String
Get
Return Me._Ruta
End Get
Set(ByVal value As String)
Me._Ruta = value
End Set
End Property
''' <summary>
''' Inicializa la instancia ReportHandler
''' </summary>
''' <remarks></remarks>
Public Sub New()
End Sub
''' <summary>
''' Inicializa la instancia ReportHandler configurando al mismo tiempo el Nombre del Informe
''' </summary>
''' <param name="NombreInforme"></param>
''' <remarks></remarks>
Public Sub New(ByVal NombreInforme As String)
Me.NombreInforme = NombreInforme
End Sub
''' <summary>
''' Inicializa la instancia de ReportHandler configurando al mismo tiempo el Nombre y el Origen del Informe
''' </summary>
''' <param name="NombreInforme"></param>
''' <param name="Origen"></param>
''' <remarks></remarks>
Public Sub New(ByVal NombreInforme As String, ByVal Origen As DataTable)
Me.NombreInforme = NombreInforme
Me.Origen = Origen
End Sub
''' <summary>
''' Función privada que crea un objeto a partir de el nombre del informe que existe en el proyecto
''' </summary>
''' <param name="nombreInforme"></param>
''' <returns></returns>
''' <remarks></remarks>
Private Function CrearObjeto(ByVal nombreInforme As String) As Object
Dim Frm As New Object
Dim toop As New Object
nombreInforme = System.Reflection.Assembly.GetExecutingAssembly.GetName.Name & "." & nombreInforme
Dim valor As New System.Runtime.Remoting.ObjectHandle(Frm)
valor = AppDomain.CurrentDomain.CreateInstance(Assembly.GetExecutingAssembly().FullName, nombreInforme)
toop = valor.Unwrap
Return toop
End Function
''' <summary>
''' Procedimiento que imprime el informe configurado
''' </summary>
''' <remarks></remarks>
Public Sub PrintToPrinter()
If Me.Origen.Rows.Count = 0 Then
Throw New Exception("No hay datos que asignar")
End If
Dim rpt As New CrystalDecisions.CrystalReports.Engine.ReportDocument
rpt.Load(Me.Ruta & "\Informes\" & Me.NombreInforme & ".rpt")
'Dim rpt As Object = CrearObjeto(Me.NombreInforme)
Dim frmVisor As New FrmVisor
rpt.SetDataSource(Me.Origen)
frmVisor.CRViewer.ReportSource = rpt
frmVisor.CRViewer.PrintReport()
End Sub
''' <summary>
''' Procedimiento que imprime un reporte configurado con los parametros indicados directamente al Impresor
''' </summary>
''' <remarks></remarks>
Public Sub PrintToPrinterwithParameters()
If Me.Origen.Rows.Count = 0 Then
Throw New Exception("No hay datos que asignar")
End If
Dim rpt As New CrystalDecisions.CrystalReports.Engine.ReportDocument
rpt.Load(Me.Ruta & "\Informes\" & Me.NombreInforme & ".rpt")
'Dim rpt As Object = CrearObjeto(Me.NombreInforme)
Dim frmVisor As New FrmVisor
rpt.SetDataSource(Me.Origen)
For Each param As ReportParameter In Me.Parametros
rpt.SetParameterValue(param.NombreParametro, param.Value)
Next
frmVisor.CRViewer.ReportSource = rpt
frmVisor.CRViewer.PrintReport()
End Sub
''' <summary>
''' Procedimiento que imprime un reporte configurado con los parametros indicados en Vista Preliminar
''' </summary>
''' <remarks></remarks>
Public Sub PrintToPromptPreviewWithParameters()
If Me.Origen.Rows.Count = 0 Then
Throw New Exception("No hay datos que asignar")
End If
Dim rpt As New CrystalDecisions.CrystalReports.Engine.ReportDocument
rpt.Load(Me.Ruta & "\Informes\" & Me.NombreInforme & ".rpt")
'Dim rpt As Object = CrearObjeto(Me.NombreInforme)
Dim frmVisor As New FrmVisor
rpt.SetDataSource(Me.Origen)
For Each param As ReportParameter In Me.Parametros
rpt.SetParameterValue(param.NombreParametro, param.Value)
Next
frmVisor.CRViewer.ReportSource = rpt
frmVisor.ShowDialog()
End Sub
''' <summary>
''' Procedimiento que imprime un reporte configurado con los parametros indicados en Vista Preliminar
''' </summary>
''' <remarks></remarks>
Public Sub PrintToPromptPreviewMultitableWithParameters()
If Me.Origen.Rows.Count = 0 Then
Throw New Exception("No hay datos que asignar")
End If
Dim rpt As New CrystalDecisions.CrystalReports.Engine.ReportDocument
rpt.Load(Me.Ruta & "\Informes\" & Me.NombreInforme & ".rpt")
'Dim rpt As Object = CrearObjeto(Me.NombreInforme)
Dim frmVisor As New FrmVisor
Dim ds As New DataSet("DSReportes")
ds.Tables.Add(Me.Origen2)
ds.Tables.Add(Me.Origen)
rpt.SetDataSource(ds)
For Each param As ReportParameter In Me.Parametros
rpt.SetParameterValue(param.NombreParametro, param.Value)
Next
frmVisor.CRViewer.ReportSource = rpt
frmVisor.ShowDialog()
End Sub
''' <summary>
''' Procedimiento que muestra el informe en vista preliminar
''' </summary>
''' <remarks></remarks>
Public Sub PrintToPromptPreview()
If Me.Origen.Rows.Count = 0 Then
Throw New Exception("No hay datos que asignar")
End If
Dim rpt As New CrystalDecisions.CrystalReports.Engine.ReportDocument
rpt.Load(Me.Ruta & "\Informes\" & Me.NombreInforme & ".rpt")
'Dim rpt As Object = CrearObjeto(Me.NombreInforme)
Dim frmVisor As New FrmVisor
rpt.SetDataSource(Me.Origen)
If Not Me.Origen2.Rows.Count = 0 Then
rpt.SetDataSource(Me.Origen2)
End If
frmVisor.CRViewer.ReportSource = rpt
frmVisor.ShowDialog()
End Sub
''' <summary>
''' Procedimiento utilizado para Agregar los parametros adecuados para mostrar los informes
''' </summary>
''' <param name="NombreParametro"></param>
''' <param name="valor"></param>
''' <remarks></remarks>
Public Sub AgregarParametro(ByVal NombreParametro As String, ByVal valor As Object)
Dim nParametro As New ReportParameter(NombreParametro, valor)
Me.Parametros.Add(nParametro)
End Sub
' IDisposable
Protected Overridable Sub Dispose(ByVal disposing As Boolean)
If Not Me.disposedValue Then
If disposing Then
' TODO: Liberar recursos administrados cuando se llamen explícitamente
End If
' TODO: Liberar recursos no administrados compartidos
End If
Me.disposedValue = True
End Sub
#Region " IDisposable Support "
''' <summary>
''' elimina de memoria la información utilizada por ReportHandler
''' </summary>
''' <remarks></remarks>
Public Sub Dispose() Implements IDisposable.Dispose
' No cambie este código. Coloque el código de limpieza en Dispose (ByVal que se dispone como Boolean).
Dispose(True)
GC.SuppressFinalize(Me)
End Sub
#End Region
End Class
Partial Public Class ReportParameter
Private _NombreParametro As String
Private _value As Object
''' <summary>
''' Obtiene o establece el nombre del parametro con el ID establecido en el reporte
''' </summary>
''' <value>String </value>
''' <returns>Nombre del Parametro</returns>
''' <remarks></remarks>
Public Property NombreParametro() As String
Get
Return Me._NombreParametro
End Get
Set(ByVal value As String)
Me._NombreParametro = value
End Set
End Property
''' <summary>
''' Obtiene o establece el objeto que representa el valor del objeto
''' </summary>
''' <value>Object</value>
''' <returns>Valor del parametro</returns>
''' <remarks></remarks>
Public Property Value() As Object
Get
Return Me._value
End Get
Set(ByVal value As Object)
Me._value = value
End Set
End Property
''' <summary>
''' Inicializa la instancia de la clase
''' </summary>
''' <remarks></remarks>
Public Sub New()
End Sub
''' <summary>
''' Inicializa la instancia de la clase con el nombre del parametro
''' </summary>
''' <param name="NombreParametro"></param>
''' <remarks></remarks>
Public Sub New(ByVal NombreParametro As String)
Me.NombreParametro = NombreParametro
End Sub
''' <summary>
''' Inicializa la instancia de la clase con el nombre del parametro y su respectivo valor
''' </summary>
''' <param name="NombreParametro"></param>
''' <param name="valor"></param>
''' <remarks></remarks>
Public Sub New(ByVal NombreParametro As String, ByVal valor As Object)
Me.NombreParametro = NombreParametro
Me.Value = valor
End Sub
End Class
Private Const rpt_ConglomeradoPartidas As String = "rpt_Partidas"
Enum Timpr
impresor
VistaPrevia
End Enum
Public Sub ImprimirConglomeradoPartidas(ByVal Impresion As Timpr, ByVal Ruta As String)
Dim repoHandler As New ReportHandler
repoHandler.NombreInforme = ReportManager.rpt_ConglomeradoPartidas
repoHandler.Ruta = Ruta
Dim dt As New DataTable
Dim cSource As New cAvance
dt = cSource.ConglomeradoPartidasSource()
repoHandler.Origen = dt
If Impresion = Timpr.VistaPrevia Then
repoHandler.PrintToPromptPreview()
Else
repoHandler.PrintToPrinter()
End If
End Sub
Esto ultimo me lleva a una pregunta, ¿ tu aplicación la podes ejecutar en cualquier computadora sin problema de instalar los servicios del ReportViewer ?
Dim rpt As New CrystalDecisions.CrystalReports.Engine.ReportDocument
rpt.Load(Me.Ruta & "\Informes\" & Me.NombreInforme & ".rpt")
'Dim rpt As Object = CrearObjeto(Me.NombreInforme)