none
Problemas con el CrystalReportViewer de Crystal para visual basic 2008 RRS feed

  • Pregunta

  • Buenas Noches

    El problema es el sigueinte, tengo un reporte el cual es una factura tipo de formato media carta, resulta que ya configure la impresora epson LX 300+ II para este tipo de hoja media carta, luego en el reporte de crystal report configuro la impresora con ese ipo de papel y me sale el reporte bien desde crystal report, resulta que en la aplicacion instalada en otra computadora y con los componentes de crystal ya instalados para visualizar los reportes, el reporte que esta configurado a media carta me sale la hoja completa en el crystalreportviewer, y al seleccionar la impresora que esta ya por defecto la epson, las preferencias de impresion la hoja la muestra por defecto Carta, aunque ya se configuro previamente la impresora en las preferencias que la hoja sea tipo Media carta, y nada desde el reportviewers siempre me muestra carta y no la media carta. Que podra estar pasando? es algun problema del Crystalreportviewer? o que podra ser.

    Gracias y espero haberme explicado bien.


    Miguel Perez

    • Cambiado Joyce_AC miércoles, 24 de mayo de 2017 15:19
    miércoles, 24 de mayo de 2017 2:06

Todas las respuestas

  • Hola Miguel:

    Cuando desde tu programa llamas al rpt, incluye esta línea en dicho método:

    CrReport = New CrystalDecisions.CrystalReports.Engine.ReportDocument()
    CrReport.PrintOptions.PaperSize = CrystalDecisions.Shared.PaperSize.PaperA4

    Cambia el "PaperA4" por el que corresponda a tu media carta.

    De esa forma le estás indicado por código que escoja ese tipo de papel, con lo que si falla en el diseño del informe, aquí lo obligas a coger el tipo de papel que precisas.

    Un saludo.

    Gemma.


    miércoles, 24 de mayo de 2017 5:02
  • Hola gracias Gemma por tu respuesta.

    El Codigo que uso para mostrar el reporte en el CrystalReportViewer es:

                    agr_Reportes1.Rep_despacho.SelectionFormula = " "
                    agr_Reportes1.Rep_despacho.ReportSource = ("C:\bd\Reportes\despacho1.rpt")
                    agr_Reportes1.Rep_despacho.SelectionFormula = "{recibo.codigo}=val('" + codigo.Text + "')"
                    agr_Reportes1.Show()

    agr_Reportes1 es un formulario donde esta el objeto de CrystalReportViewer llamado Rep_despacho, ahora la pregunta es donde iria el codigo que me envias? lo puse antes de eso y no paso nada lo puse despues pero antes del show() y nada. ademas tuve que colocar esto:

       Dim CrReport As CrystalDecisions.CrystalReports.Engine.ReportDocument

    Porque me daba error en el CrReport

    Probe colocando esto:

    agr_Reportes1.Rep_despacho = New CrystalDecisions.CrystalReports.Engine.ReportDocument() porque pense que el CrReport de tu ejemplo era mi objeto de CrystalReportViewer pero tampoco medio un error de que no se puede convertir un agr_Reportes1.Rep_despacho = New CrystalDecisions.CrystalReports.Engine.ReportDocument a un CrystalDecisions.Windows.Forms.CrystalReportviewer

    Disculpa mi ignorancia pero no supe como colocar lo que me dijiste.

    Gracias d Antemano espero me ayudes


    Miguel Perez

    jueves, 25 de mayo de 2017 6:28
  • Hola Miguel:

    Ponlo exactamente ral como lo tienes puesto en mi anterior respuesta, es decir, despues de

    Dim CrReport As CrystalDecisions.CrystalReports.Engine.ReportDocument

    CrReport.PrintOptions.PaperSize = CrystalDecisions.Shared.PaperSize.PaperA4

    De cualquier manera te pongo el código de ejemplo de un informe tal como lo tengo yo.

    Eso te imprimiría el informe de las empresas que tengo, con sus datos, etc.

    Hay partes que no las necesitas pero si veras como se llama al objeto crviewer, etc.

    Private Sub BtnImprimir_Click(sender As Object, e As EventArgs) Handles btnImprimir.Click VarGlobal.bolInformePantalla = True Dim a As Assembly = Assembly.GetExecutingAssembly Dim rm As New ResourceManager(a.GetName.Name & ".Textos", a) Dim oDesplazarTitulo As TextObject Dim frmPreparandoInforme = New frmPreparandoInforme frmPreparandoInforme.Show() Try ''Declaramos y asignamos el objeto CrReports 'Dim CrReport As New CrystalDecisions.CrystalReports.Engine.ReportDocument CrReport = New CrystalDecisions.CrystalReports.Engine.ReportDocument() '// Asigno el tipo de papel a imprimir: Carta o A4 y elegimos el informe y su ruta AccesoDatosInformes.MostrarTipoPapel() Select Case VarGlobal.StrCodPais Case Is = "34", "54", "57", "591", "56", "506", "593", "595", "598", "58" CrReport.PrintOptions.PaperSize = CrystalDecisions.Shared.PaperSize.PaperA4 CrReport.Load(Application.StartupPath & "\Informes\Informes_A4\Empresas.rpt") Case Else CrReport.PrintOptions.PaperSize = CrystalDecisions.Shared.PaperSize.PaperLetter CrReport.Load(Application.StartupPath & "\Informes\Informes_Carta\Empresas_Carta.rpt") End Select 'Llamamos a la seleccón de Datos en la capa AccesoDatosInformes AccesoDatosInformes.InformeEmpresas() 'Llamamos al dataset del informe Dim dsInformes As New DataSet("dsInformes") 'Asignamos el data adapter al objeto crReport CrReport.SetDataSource(AccesoDatosInformes.dsInformes) CrReport.SetParameterValue("parCodEmpresa", rm.GetString("Codigo")) 'Código CrReport.SetParameterValue("parNomEmpresa", rm.GetString("btnEmpresas")) 'Empresas CrReport.SetParameterValue("parNIF", rm.GetString("Nif")) 'Id.Fiscal CrReport.SetParameterValue("parCodActividad", rm.GetString("Sector")) 'Sector CrReport.SetParameterValue("parDescActividad", rm.GetString("DescSector")) 'Descripción del Sector CrReport.SetParameterValue("parFechaAlta", rm.GetString("FechaAlta")) 'Fecha de alta CrReport.SetParameterValue("parPlanContable", rm.GetString("PlanContable")) 'Plan Contable CrReport.SetParameterValue("parCuadre", rm.GetString("Cuadre")) 'Cuadre CrReport.SetParameterValue("parTituloInf", rm.GetString("RelacEmpresasMay")) 'RELACIÓN DE EMPRESAS '//TRATAMIENTO DE LAS IMÁGENES EN EL INFORME 'Asignamos las imagenes de la empresa. If My.Settings.ImagenLogo = True Then If VarGlobal.strImagenGuardadaImagLogotipo = "" Then CrReport.DataDefinition.FormulaFields("PicLogo").Text = "'" & My.Application.Info.DirectoryPath & "\" & "LogoEmpresa\Imagen1.jpg" & "'" Else CrReport.DataDefinition.FormulaFields("PicLogo").Text = "'" & VarGlobal.strImagenGuardadaImagLogotipo & "'" End If CrReport.SetParameterValue("parOcultarImagen1", My.Settings.ImagenLogo) 'Desplazamos el titulo del informe cuando lleva logotipo. If valor = 4 Then 'Solo desplazamos para períodos anuales. 'If VarGlobal.strTipoInforme = "InfValores" Then oDesplazarTitulo = CType(CrReport.ReportDefinition.ReportObjects.Item("Text8"), TextObject) If My.Settings.ImagenLogo = False Then 'No LLeva imagen el logotipo oDesplazarTitulo.Left = 2120 Else oDesplazarTitulo.Left = 2360 End If 'End If End If Else CrReport.DataDefinition.FormulaFields("PicLogo").Text = "" CrReport.SetParameterValue("parOcultarImagen1", My.Settings.ImagenLogo) End If frmPreparandoInforme.Close() 'PARA IMPRIMIR DIRECTAMENTE 'If VarGlobal.bolInformePantalla = False Then ' CrReport.PrintToPrinter(1, False, 0, 0) 'Else '//Llamamos al visor de informes y vemos el informe Dim VisorInforme As frmCrViewer = New frmCrViewer VisorInforme.crViewer1.ReportSource = CrReport 'VisorInforme.crViewer1.Zoom(Convert.ToInt32(50)) VisorInforme.Text = rm.GetString("ImpresionFicheroEmpresas") '"Informe del Fichero de Empresas VisorInforme.ShowDialog() VisorInforme.Dispose() 'End If 'Destruimos todo el informe 'frmPreparandoInforme.Dispose() CrReport.Dispose() AccesoDatosInformes.dsInformes.Dispose() Catch ex As Exception MessageBox.Show(rm.GetString("ErrorCreacionInforme") & ": " & ex.Message, rm.GetString("ImpresionFicheroEmpresas") & ".") frmPreparandoInforme.Close() End Try End Sub

    y en la llamada a los datos del informe, lo tengo en una clase de esta manera.

    Public

    SharedSubInformeEmpresas()

           

    ' Dim valor As Integer = VarGlobal.ObtenerPeriodos(VarGlobal.strPerAnualesAño(0))


           

    'Creamos el acceso a datos mediante el nombre de la cadena de conexión existente en el archivo de configuración de la aplicación.


           

    'Private Shared da As DataAccessInvariant = DataAccessInvariant.GetDataAccessInvariant(Configuracion.CadenaConexion)


           

    ' Declaramos una variable Connection


           

    Usingcnn AsDbConnection= da.CreateConnection()

                cnn.Open()

                dsInformes.Clear()

               

    ' Creamos el Commando


               

    Dimcmd AsDbCommand= cnn.CreateCommand

                cmd.CommandText =

    "SELECT Cod_Empresa, Empresa, NIF, CNAE_93, TIPO_CAE, Descripción, FechaAlta, PlanContable, Cuadre "&

                                           

    "FROM Empresas ORDER BY Cod_Empresa"


               

    'Creamos el dataAdapter


               

    DimdaEmpresas AsDbDataAdapter= da.CreateDataAdapter()

                daEmpresas.SelectCommand = cmd

               

    'Poblar las tablas del dataset desde los dataAdaperts


                daEmpresas.Fill(dsInformes,

    "Empresas")

           

    EndUsing


       

    EndSub

    También es importante que te acostumbres a trabajar cuando lo necesites con datasets tipados y no enlaces el informe a ninguna base de datos, ya que cuando lo instales en otro sitio, vas a tener que cambiar la conexión en todos tus informes.

    Repásalo bien y adáptalo a tus necesidades.

    Un saludo.

    Gemma.

    'Si la respuesta te sirvió, márcala como respuesta correcta, así otros usuarios se beneficiarán de ello."


    jueves, 25 de mayo de 2017 6:57
  • Hola Gemma muchisimas gracias por tu respuesta. Voy a aplicarlo esta noche y si me resulta porsupuesto que la marcomo como respuesta correcta para que los demas la puedan chequear.

    Pero ya vi como hacer el tratamiento del Formulario que posee el CrystalReportViewer. el source seria el CrReport y asi se le envian los datos al informe del tipo de hoja.. Lo que no vi en el listado de

    CrystalDecisions.Shared.PaperSize.PaperA4

    uno que sea de 8 1/2 por 5 1/2 vi uno pero al reves seria cuestion de probar a ver.. muchas gracias de nuevo.


    Miguel Perez

    jueves, 25 de mayo de 2017 20:22
  • GEMMA buenas: tengo problemas con la linea de código siguiente: Dim VisorInforme As frmCrViewer = New frmCrViewer

    Al parecer todo bien con el resto de codigo, pero aun no puedo probarlo por motivo que éste error no me deja continuar. favor estaré atento a tu respuesta, a que se debe y como solucionar ese problema.

    frmCrViewer me sale subrayado con azul y elboton de solución de errores rojo, presiono la flecha hacia bajo en la ventana subyacente dice // El tipo 'frmCrViewer' no está definido\\ y las opciones que puedo hacer es //Generar 'Class frmCrViewer' ó generar nuevo tipo ..\\ AGRADESCO MUCHO TU RESPUESTA POR ATICIPADO.

    MI correo es cutervino@hotmail.com por siacaso.

    ATT. HECTOR CAMPOS 

    miércoles, 12 de septiembre de 2018 17:48
  • Hola Héctor.

    Desde el panel de herramientas tienes que cargar el CrViewer que es el visor de los informes.

    Un saludo.

    Gemma

    Si la respuesta te ha ayudado, se tan amable de marcarla.

    jueves, 13 de septiembre de 2018 4:55
  • MUCHAS GRACIAS GEMA. YA SOLUCIONE EL PROBLEMA. 

    PERO TENGO EL SIGUIENTE PROBLEMA: 

    MUY BUENAS TARDES GEMMA. MIRE YA PUSE dsInformes.Clear(). En varias partes del código pero aun persiste el problema, hago la interrupción que me indica y efectivamente es correcto el valor deLblNumero.tex es 585 (factura actual que quiero imprimir) pero el reporte aparece con la factura 582, que es la que guarde la ultima ves que abrí el reporte con CRYSTAL Report. 

    FAVOR SOLICITO SU AYUDA GEMMA. Deverdad se lo agradezco por anticipado.

    ESTE ES MI CODIGO:

    Dim dsInformes As New DataSet("dsInformes")

    dsInformes.Clear()

            Using cn
                'cn.Open()
                'Creamos el DataAdapter y la sql de seleccion
                Dim cmd As New OleDbCommand("SELECT DetalleFactura.Cantidad ,DetalleFactura.PreUnitario, DetalleFactura.Total, DetalleFactura.Descripcion, DetalleFactura.UnidMedida, Factura.Fecha, Factura.GuiaRemisionR, Factura.RucCliente, Factura.DireccionC, Factura.RazonSocialC, Factura.IdFactura, DetalleFactura.Codigo, Factura.Total, Factura.IGV, Factura.SubTotal, Factura.Letras " & _
                                                     "FROM DetalleFactura INNER JOIN Factura ON DetalleFactura.IdFactura=Factura.IdFactura" & _
                                                    " WHERE Factura.IdFactura=@IdFactura", cn)


                cmd.Parameters.AddWithValue("@IdFactura", LblNumero.Text.Trim)

                Dim DaInformes As New OleDbDataAdapter(cmd)

                DaInformes.Fill(dsInformes, "Informe")
            End Using

            Try
                Dim CrReporte As New CrystalDecisions.CrystalReports.Engine.ReportDocument

                'Le decimos como se llama y donde esta nuestro reaporte
                CrReporte = New CrystalDecisions.CrystalReports.Engine.ReportDocument()
                CrReporte.Load(Application.StartupPath & "\Informes\RptFacturaaa.rpt")

                'Asignamos el data adapter al objeto crReport
                CrReporte.SetDataSource(dsInformes)

                'Llamamos al visor de Informes y vemos el Informe
                Dim VisorInforme As frmCrViewer = New frmCrViewer
                VisorInforme.CrystalReportViewer1.ReportSource = CrReporte
                VisorInforme.Text = "ooooooooooooooooooooooooooooo"
                VisorInforme.ShowDialog()

            Catch ex As Exception
                MessageBox.Show("Error: " & ex.Message, "FACTURA")
            End Try
        End Sub

    lunes, 17 de septiembre de 2018 13:58