Crystal Report - Visualizzazione Dettagli

giovedì 20 ottobre 2005 - 10.26

PIPPAZZO Profilo | Newbie

Buon Giorno a tutti,
ho creato un report con Crystal report fornito con VS.NET 2003.
La mia applicazione VB crea una form in cui mediante un button seleziono il report da visualizzare.
Quando il report viene visualizzato nella form, i dettagli vengono visualizzati in una pagina diversa dal resto del report.

Come posso fare a visualizzare tutto il report in un unica pagina; come è possibile impostare il salto pagina.

Ringrazio anticipatamente tutti coloro che potranno darmi un aiuto.

Grazie.

Ciciu Profilo | Senior Member

Ciao.

Nella parte sinistra della maschera di design del report dovresTi vedere alcune info che riguardano le Sections disponibili (avrai uno o più Headers, gruppi e dettagli).
Con il tasto destro del mouse accedi ad un menu contestuale e selezioni "Format Section..."
A questo punto, per ogni section verifichi che il check box "New Page Before" non sia selezionato... Nel caso in cui lo sia, hai trovato il motivo per cui Ti fa un salto pagina PRIMA della stampa della sezione....
Ciao - Fabio

Fabio G

PIPPAZZO Profilo | Newbie

Grazie dell'aiuto.
Ho verificato il mio report è l'opzione che mi hai segnalato non è abilitata.
Può essere che venga abilitata quando lancio l'applicazione.

Mi potresti dire quali opzioni devo settare e quali formule relative usare per le seguenti sezioni:
Intestazione Report (Section 1)
Intestazione Pagina (Section 2)
Dettagli (Section3)
Piè di pagina report §(Section 4)
Piè di pagina (Section 5)

Grazie.

trinity Profilo | Guru

Ma te utilizzi il controllo crystalreportviewer per visualizzare l'anteprima dei report?

Ciao

Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz

PIPPAZZO Profilo | Newbie

Per visualizzare il report utilizzo il seguente codice:

Imports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.Shared

Public Class Form1
Inherits System.Windows.Forms.Form

Dim myReport As Report

#Region " Windows Form Designer generated code "

Public Sub New()
MyBase.New()

'This call is required by the Windows Form Designer.
InitializeComponent()
ConfigureCrystalReports()

'Add any initialization after the InitializeComponent() call

End Sub

'Form overrides dispose to clean up the component list.
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub

'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer

'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
Friend WithEvents myCrystalReportViewer As CrystalDecisions.Windows.Forms.CrystalReportViewer
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
Me.myCrystalReportViewer = New CrystalDecisions.Windows.Forms.CrystalReportViewer
Me.SuspendLayout()
'
'myCrystalReportViewer
'
Me.myCrystalReportViewer.ActiveViewIndex = -1
Me.myCrystalReportViewer.Dock = System.Windows.Forms.DockStyle.Fill
Me.myCrystalReportViewer.Location = New System.Drawing.Point(0, 0)
Me.myCrystalReportViewer.Name = "myCrystalReportViewer"
Me.myCrystalReportViewer.ReportSource = Nothing
Me.myCrystalReportViewer.Size = New System.Drawing.Size(616, 366)
Me.myCrystalReportViewer.TabIndex = 0
'
'Form1
'
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.ClientSize = New System.Drawing.Size(616, 366)
Me.Controls.Add(Me.myCrystalReportViewer)
Me.Name = "Visualizzazione Report"
Me.Text = "Visualizzazione Report"
Me.ResumeLayout(False)

End Sub

#End Region

Private Sub ConfigureCrystalReports()
myReport = New Report
myCrystalReportViewer.ReportSource = Environment.CurrentDirectory & "\ReportFattura_" & SerieDescription & "_" & DocNum & ".rpt"
End Sub
End Class


Spero mi possa aiutare.
Grazie.

Ciciu Profilo | Senior Member

I check hanno significati abbastanza esplicativi : pagine nuove prima/dopo la sezione, Sopprimi/Nascondi (magari in base a formule), etc...
Forse, unaltra opzione che potresTi verificare, è il check "Keep Together" : se lo selezioni, Crystal cerca di stampare tutta la sezione nella stessa pagina... Ma se non ci riesce, allora la inizia in una nuova pagina. Se deduco correttamente la tipologia di stampa dall'esempio che hai postato, posso immaginare che le righe della fattura siano "Keep Together"...
Ciao - Fabio

Fabio G

PIPPAZZO Profilo | Newbie

Ho eliminato da tutti gli oggetti presenti nel mio report l'opzione Mantieni uniti gli oggetti, e non ho selezionato alcuna proprietà per le sezioni.

Nella prima pagina del report ho:
Intestazione Report
Intestazione Pagina
Piè di pagina

Nella pagina 2 del report ho:
Intestazione pagina
dettagli
Piè di pagina report

Nella sezione dettagli (seconda pagina) vengono visualizzati correttamente tutti i record estrapolati da una tabella del mio database (MySQL)

Non riesco a capire cosa stà succedendo???

Ciciu Profilo | Senior Member

Scusa, ma mi sfugge il concetti di "Pagina" in Crystal.
Hai forse inserito un SubReport ? Ovvero : se lo stai progettando in Dot.Net, hai due tab nella parte inferiore della finestra di Crystal ?
Se così fosse dovresTi andare sul primo report (che contiene il/i subreport(s)), identificare nella finestra di design il frame che contiene il subreport, fare click col tasto destro, selezionare formato e togliere anche da li il check "Keep Object Together".
In linea di massima, però, sappi che non è mai una buona cosa quella di utilizzare i SubReports, in quanto appesantiscono notevolmente l'elaborazione. Tipicamente, è sempre meglio lavorare con un solo report (ove possibile), che sfrutta i gruppi di Crystal per agregare i dati...
Spero di aver centrato il problema
Ciao - Fabio

Fabio G

PIPPAZZO Profilo | Newbie

Il mio report è formato da campi testo, campi formula e da una l'estrazione dati da un tabella de db che avviene grazie all'impostazione di una selectionformula.

Nell'intestazione di pagina ci sono solo campi testo e campi formula che vengono visualizzati nella prima e seconda pagina del report

Nella sezione dettagli ci dovrebbero essere le righe estratte
Invece la prima riga viene visualizzata nella prima pagina, mentre le altre nella seconda pagina.

Mentre la sezione Piè di pagina report viene visualizzata nella seconda pagina.




PIPPAZZO Profilo | Newbie

Grazie a tutti per l'aiuto.

Dopo una serie di prove sono riuscito a sistemare il mio report.


Ciciu Profilo | Senior Member

Beh, a questo punto, però, mi hai un po' incuriosito.... Cosa non andava ?

Fabio G

freeteo Profilo | Guru

ciao,
a occhio sembra che la tua sezione sia troppo lunga per starci nella prima pagina ma questo è perche probabilmente è impostato il flag di "mantieni unita" della sezione o dell'oggetto.
Questa cosa ogni tanto "sporca" il report con questi effetti, sopratutto se usi oggetti come subreport o campi memo o altro che si allunga troppo...
Percui controlla questo flag sugli oggetti e sulla sezione e togliendolo 2o me dovrebbe funzionare come ti immagini.

ps: a meno che no nabbia impostato il flag di "nuova pagina dopo" ma penso tu abbia gia controllato...
ciao

Matteo Raumer
.net addicted :-)
http://blogs.dotnethell.it/freeteo

PIPPAZZO Profilo | Newbie

Il problema precedente l'ho risdolto eliminano un po di opzioni mantieni unite. Questo causava lo sforamento in altre pagine.


Nella sezione dettagli visualizzo le righe estratte dalla tabella del mio db.
Esiste un modo per dirgli di stampare n righe per pagina???

Grazie.

freeteo Profilo | Guru

ciao
puoi mettere 1a formula nel flag "nuova pagina dopo" della sezione dettagli:

recordnumber mod 12 = 0

cosi facendo quando il numero di record è multiplo di 12 cambia pagina.
ovviamente 12 è 1 numero di esempio....

ciao

Matteo Raumer
.net addicted :-)
http://blogs.dotnethell.it/freeteo

Ciciu Profilo | Senior Member

Questo è ok, ma esiste un problema...
Se esistono dei campi che possono "crescere" (Can Grow), il fatto di "fissare" il numero di record per pagina può essere deleterio, in quanto rischi di stamparne 11 (a causa di una crescita inaspettata), saltare la pagina, stamparne 1 e risaltare la pagina...

La cosa migliore è lasciar fare all'automatismo di Crystal che, in base alla dimensione dell'header di pagina e a quella del trailer di pagina, imposta la domensione dell'area di dettaglio (gruppi compresi).

Se vuoi comunque seguire la strada da freeteo, ricordati di eliminare tutti i "Can Grow" sui campidel dettaglio, altrimenti rischi di "sballare".

Ciò che Ti consiglio di fare, è rivedere il Tuo concetto di "stampare 12 righe per pagina", convertendolo in "stampare al massimo 12 righe per pagina"... Adattando la formula di freeteo, potresTi forzare un salto pagina PRIMA della stampa della 13a riga della pagina... Questo Ti assicura che nella pagina non vengano stampate più di 12 righe...

Ciao - Fabio

Fabio G

PIPPAZZO Profilo | Newbie

Grazie dell'aiuto , anche questo problema è stato risolto.

Ho creato un dataset nel mio progetto VB.NET però quando cerco di aggiungerlo al report, non viene visto dal Database Expert.

Cosa stà succedendo???

Grazie.

Ciciu Profilo | Senior Member

Non ho ancora esperienza nell'utilizzo di Crystal in ambiente .Net.
Però, non credo sia possibile "passare" a Crystal un DataSet...
Per quanto ne so io, Crystal apre una sua connessione (e transazione) autonoma, sfruttando il suo motore, e "leggendo" il database con drivers ODBC (piuttosto che con OLEDB)...
La sola cosa che mi viene in mente è quella di scrivere il dataset su una tabella temporanea (non nel senso stretto del termine, se parliamo di Oracle, altrimenti le altre sessioni non la vedrebbero...), in modo che Crystal possa attingere da essa...
Vorrei ulteriori conferme, in questo caso : magari sto scrivendo una fesseria, e Crystal riesce effettivamente ad interagire con un dataset di .Net...

Ciao - Fabio

Fabio G

trinity Profilo | Guru

Come no è possibile passare unn dataset vi acodice a crystal.net io l'ho fatto...

Ciao

Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz

Ciciu Profilo | Senior Member

Non si finisce mai di imparare... Effettivamente, la parte di interazione .Net/Crystal devo ancora iniziare a guardarla...
Cmq, buono a sapersi !
Ciao - fg

Fabio G

PIPPAZZO Profilo | Newbie

Ho creato un report inserendo una tabella appartenente ad un db. E' possibile modificare il nome del db in run time, visto che nella mia applicazione il nome della tabella è fisso mentre cambia il nome del DB per l'appunto.

Grazie.


freeteo Profilo | Guru

ciao,
devi lavorare con le logoinfo cosicche' cambi i dati che il report carica...
da 1occhiata qui:
http://www.dotnethell.it/forum/messages.aspx?ThreadID=603
http://www.dotnethell.it/forum/messages.aspx?ThreadID=198

e anche altri messaggi prova a spulciare 1po il forum..

cmq se usi le logoninfo puoi cambiare il percorso del db e quindi la tabella.

Pero' deve avere la struttura uguale a quiella con cui hai costruito il report altrimenti lui non trrova i campi ti da erroreo non visualizza nessun dato.Purtroppo se intedi quet'ultima cosa non si puo' fare...dovresti lavorare con la query sql che ti dia la stessa struttura mappando i campi del tipo:

select campo22 as data,campo23 as ora etc.... insomma 1po 1a noia :-)


Matteo Raumer
.net addicted :-)
http://blogs.dotnethell.it/freeteo
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5