none
Separar informes del proyecto principal RRS feed

  • Pregunta

  • Hola,

    He abierto varios post preguntando cosas sobre informes, pero no hay nada claro al respecto.

    Mi idea es que cualquier empleado pueda modificar un informe sin recurrir al programador.
    Utilizo .Net con SQL Server y Crystal report

    Ahora mismo los informes están incrustados en el proyecto, habría forma de crear un proyecto para los informes y llamar a ese informe desde el proyecto principal? o es una tontería lo que digo?
    Otra opción sería que los informes los coja de una carpeta y cada empleado pueda modificarlos si quiere?

    Los informes los tengo enlazados a un Dataset principal.

    jueves, 24 de septiembre de 2020 8:51

Todas las respuestas

  • Hola:
    > Mi idea es que cualquier empleado pueda modificar un informe sin recurrir al programador. <
    Si el empleado tiene instalado Visual Studio y Crystal Reports, si tiene conocimiento de Crsytal, NO hay problema, sino NO se puede.

    > habría forma de crear un proyecto para los informes y llamar a ese informe desde el proyecto principal <
    Te cuento la forma en la que tengo una aplicacion para informes y cada registro de una tabla es un informe.
    La estructura de la seria algo como esto

    CRYSTAL
    ===========
    id_crystal    tinyint    PK
    descripcion   varchar(50)
    rpt           varbinary(max)

    Cuando abres el Form de los listados llamandole desde otro Form, le pasas el numero de listado y el datatable con los datos del listado
    Hay que recuperar el fichero crystal de la base de datos y lo pasamos a un fichero
    El codigo es el siguiente

            Dim aBytCrystal As Byte() = Nothing
            Dim oFileStream As FileStream
            Try
                Using loConexion As New SqlConnection(msCadenaSQL)
                    Dim lsQuery As String = "SELECT rpt FROM CRYSTAL Where id_crystal=" & miNumero.ToString
                    loConexion.Open()
                    Using loComando As New SqlCommand(lsQuery, loConexion)
                        Using drCrystal As SqlDataReader = loComando.ExecuteReader(CommandBehavior.SingleRow)
                            If drCrystal.Read() Then
                                aBytCrystal = CType(drCrystal("rpt"), Byte())
                            End If
                        End Using
                    End Using
                End Using
                msFicheroRPT = msFicheroPDF & "\TEMPORAL.RPT"
                If IO.File.Exists(msFicheroRPT) Then
                    IO.File.Delete(msFicheroRPT)
                End If
                oFileStream = New FileStream(msFicheroRPT, FileMode.CreateNew, FileAccess.Write)
                oFileStream.Write(aBytCrystal, 0, aBytCrystal.Length)
                oFileStream.Close()
                Me.rdInforme.Load(msFicheroRPT)
                'Crear el conjunto de datos para llenar el fichero de Crystal
                Me.rdInforme.SetDataSource(mdtDataTable)
                Me.crvInforme.ReportSource = Me.rdInforme
            Catch Exp As Exception
                MessageBox.Show(Exp.Message, "FrmCrystal_Load", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try

    miNumero es el numero de listado
    mdtDataTable es el datatable origen de datos
    msFicheroPDF es el Path de una carpeta donde se graban los ficheros RPT, PDF, etc 
    rdInforme es un ReportDocument
    crvInforme es un CrystalReportViewer

    Espero que se entienda

    Un saludo desde Bilbo
    Carlos
    jueves, 24 de septiembre de 2020 10:03
  • Hola J.Ramon, 

    te funcionó la respuesta?

    Saludos

    viernes, 25 de septiembre de 2020 17:48
    Moderador