[CRYSTAL REPORT] Stampare diversi dettagli per record

giovedì 07 ottobre 2010 - 00.00

gigi90 Profilo | Senior Member

Salva a tutti,
sto preparando un report urgente e sono in difficoltà in pratica ho la seguente necessità: devo stampare un elenco di clienti e per ogni cliente devono essere stampati 2 dettagli Ordini e Fatture che hanno campi differenti, in pratica il report deve avere il seguente aspetto:
-------------Cliente 1
***Elenco ordini
--Ordine 1
--Ordine 2
--Ordine 3
***Elenco fatture
--Fattura 1
--Fattura 2
--------------Cliente 2
***Elenco ordini
--Ordine 1
--Ordine 2
***Elenco fatture
--Fattura 1
--Fattura 2
--------------Cliente N

Non so come stampare piu dettagli per ogni cliente.
Spero che possiate risolvere il mio problema.
saluti a tutti

freeteo Profilo | Guru

Ciao,
il tuo caso è proprio quello tipico in cui usare un raggruppamento

Ti basta creare la sezione dettagli con gli ordini e poi raggruppare per Cliente (id o nome vedi tu il campo "cliente" insomma).
Chirametne in gruppi possono essere anche innestati se hai un'ulteriore raggruppamento, con la gerarchia che vuoi...

Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo

gigi90 Profilo | Senior Member

Si ma il raggruppamento va bene per un solo dettaglio, per l'altro come faccio?

freeteo Profilo | Guru

>Si ma il raggruppamento va bene per un solo dettaglio, per l'altro
>come faccio?
appunto se hai tutto piatto in un resultSet dalla query usi un raggruppamento.
Se invece i dati provengono da tabelle diverse legate magari tramite un campo in comune, puoi mettere un (o più di uno, quanti vuoi) sottoreport nella sezione dettagli del raggruppamento.

Poi fai tastoDX->Subreport Links e specifichi il campo da usare come "join", nel tuo caso se raggruppi per cliente sarà il campo cliente...

Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo

gigi90 Profilo | Senior Member

Va benissimo questa soluzione per un numero limitato di record, il fatto è che quando stampo esempio 15000 clienti il report ha un elaborazione lunghissima che non termina mai: ho controllato il task manager e vedo la RAM aumentare di KB in KB ed arriva a superare dopo 30 min i 150MB per la mia applicazione senza mai visualizzare il report(poichè non l'ha terminato ancora).
Ho un dataset con i 3 datatable clienti ordini e fatture e collego i 2 sottoreport(uno per fatture ed uno per gli ordini) tramite IDCliente.
Per caso esiste qualche metodo per ottimizzare l'elaborazione o magari sbaglio io qualcosa facendo fare a Crystal Report operazioni lunghe.
Grazie per la risposta.
Attendo tue info.

freeteo Profilo | Guru

Ciao,
i sottoreport sono sempre stati un motivo di appesantimento forte dei report, sia in termini di velocità che di memoria, chiaramente non puoi farne a meno nel tuo caso, a meno che tu non faccia tornare alla query tutto piatto (left join tra le tabelle) e poi nel report lavori con i raggruppamenti.

Io infatti tendo a fare questa cosa, magari nel tuo caso di 2 join diventa un po' più difficile, magari potresti intanto provare a togliere uno dei 2 sottoreport e fare la join su quella tabella a livello sql per avere un risultato piatto (e poi raggruppare nel report) almeno per quella prima gerarchia.

Un'ultima cosa, io ti consiglio se possibile di non lavorare con dataset tipizzati di visual studio, se puoi fatti una classe tua, oppure fai direttamente le query in una DataTable e passi quella al report che sicuramente fa meno codice dietro...

Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
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