Marco's Web Site
  • Home
  • WiKi
    • Varie
    • ChronoForms
    • MS Excel
    • Sistemi Operativi
      • Linux
      • DOS
    • Sviluppo
      • Visual Studio
      • VB.NET
      • HTML
      • Crystal Reports
      • Asp.NET
      • Php
      • Blazor
      • C#
      • Visual Studio Code
    • Joomla
    • SQL
      • PostgreSql
      • MySql
  • Area Download
  1. You are here:  
  2. Home
  3. WiKi
  4. Crystal Reports

 E' uno strumento di sviluppo per la generazione di reports. Distribuito dalla SAP SE, i punti di forza sono la sua semplicità di utilizzo, velocità di realizzazione dei template. Il suo limite è dato dalle basse performance nel caso di una elevata quantità di dati.

Autenticazione ASP.NET su Crystal Reports

Se si vuole in ASP.NET visualizzare un Report di Crystal Reports, è sufficente inserire in una pagina ASP un oggetto CrystalReportViewer e opportunamente configurarlo per collegarlo al report desiderato. Una volta fatto questo, si presenta il problema che all'apertura del report chiede la password e l'utente per autenticarsi nel database da cui il report legge i dati. Se si presenta questo problema, sarà sufficente riprodurre il codice sottostante nella pagina VB dove l'oggetto CrystalReportViewer è stato inserito.

 

Imports CrystalDecisions.CrystalReports.Engine

Public Class ReportViewer
    Inherits System.Web.UI.Page


    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim Report As New ReportDocument

        'Indico il Report da caricare
        Report.Load(Server.MapPath("ReportDaCaricare"), CrystalDecisions.Shared.OpenReportMethod.OpenReportByTempCopy)

        'Fornisco utente e password per evitare che vengano chieste all'utente
        Report.SetDatabaseLogon("utente", "password")

        'Indico il report da aprire
        CRViewer.ReportSource = Report

    End Sub
End Class

Filtrare i dati da caricare

Molte volte, non si ha la necessità di visualizzare sul report tutti i dati a cui Crystal Report viene collegato, ma si desidera applicare un filtro alla fonte dati, in modo da non caricare tutti i dati. Il comando per poter fare questo è il "SelectionFormula".

Di seguito un esempio:

 

 

 

CRViewer.SelectionFormula= {comando.ID} = 1 AND {comando.PeriodoDal} >= #01/01/2013 00:00:00# AND {comando.PeriodoAl} <= #31/12/2013 23:59:00#

Va tenuto conto che se si vuole filtrare un campo del DB che contiene date, bisogna usare il # (cancelletto) e ovviamente il campo del DB deve essere di tipo Data.

C'è anche un'altro metodo per filtrare i dati su un Report, ed è tramite l'utilizzo dei parametri. Questo metodo però carica tutti i dati dalla sorgente dati e poi a Report filtra i dati. Se i dati sono pochi da visualizzare non presenta molte differenze con il metodo precedente, ma se al contrario i dati sono molti, appesantisce di molto il caricamento del report, senza considerare che lavorando per parametri, ogni volta che desidero filtrare i dati, sono costretto a impostarli tutti, mentre con il metodo SelectionFormula, posso cambiare il filtro ogni volta che desidero.

Il metodo di filtrare con SelectionFormula, di adatta molto bene a prima che il report venga caricato, mentre filtrare per parametri, si adatta meglio a Report già caricato, ma voglio applicare nil filtro in un secondo momento.

Problemi caricamento pagine in Crystal Reports

Se si stà sviluppando in ASP.NET e si vuole caricare un report sviluppato con Crystal Reports, può capitare che non riesca a caricare oltre la seconda pagine. Per risolvere questo problema, ho adottato la seguente soluzione:

 


Private Sub CaricaReport()

'Istruzioni per il caricamento del Report

...............

...............

...............

End Sub


Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Session("ReportGiaCaricato") Is Nothing Then
            CaricaReport()
            Session("ReportGiaCaricato") = 1
        End If
End Sub


Private Sub CRViewer_Init(sender As Object, e As System.EventArgs) Handles CRViewer.Init
        CaricaReport()
End Sub


Private Sub CRViewer_Unload(sender As Object, e As System.EventArgs) Handles CRViewer.Unload
        Session.Remove("ReportGiaCaricaro")
End Sub

Numero progressivo righe

Capita a volte di dover numerare le righe dei nostri report. Ecco la procedura:

 

1) Crea una formula nominandola ad esempio "Progressivo_Righe"

 

2)  Scrivere la seguente formula:

 

WhilePrintingRecords;
NumberVar n;
n := n + 1;

3) Inserire la formula appena creata nelle righe di dettaglio

Tags popolari

Joomla! 1 Novità 1 Struttura tabella SQL 1