Crystal XI e databse Remoto

venerdì 01 febbraio 2008 - 10.44

DANINAPOLI Profilo | Junior Member

Salve a tutti.
Ho un grosso problema di lentazza con crystal report XI.
Mi spiego meglio.
Ho un database firebird installato in sede remota sul quale tramite un mio gestionale mi collego senza problemi atraverso una VPN con 256k di banda garantita.
Nel mio gestionale uso crystal report XI collegato al mio gestionale tramite ODBC.

La stampa di un report a questo punto risulta lentissima circa 1 minuto 1/2 per la stampa di una fattura.
La stampa carica dei record distinti, ma non trovo soluzione.

Mi chiedevo se c'era una soluzione per i report che vengono lanciati da remoto con ODBC.

freeteo Profilo | Guru

ciao,
cosi' su 2 piedi (e seduto sulla sedia ) non saprei darti una soluzione diretta, pero' possiamo provare a ragionarci insieme.
Innanzitutto ti consiglio di farti un programmino semplice e ci copi dentro il report, e lo fai puntare ad un db con la stessa struttura ma di prova con dentro pochi dati, per capire se:

- la lentezza potrebbe essere dovuta alla fase di caricamento del report, quando il file remoto ".rpt" viene parsato dal runtime e generato l'oggetto "ReportDocument" da passare al viewer => prova a caricarlo da disco locale

- effettivamente la lentezza è nel reperimento dei dati => fai dei test con pochi dati con un db di prova

Magari dammi qualche risultato su questi test che vediamo come fare...

ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

DANINAPOLI Profilo | Junior Member

Ciao.
Ascolta parliamo di un gestionale di magazzino.
Il report ha al suo interno diverse tabelle collegato con il valore esterno sinistro.

Praticamente devo stampare una fattura.
Io passo al report solo un parametro il numero di registrazione della mia testata.
Quindi perndermi solo una testata e i record delle tabelle collegate.
In questo caso i dati incriminato sono davvero pochi 1 record di testata e 3 record di dettaglio(articoli della fattura).

Ho visto da debug del mio gestionale che passa tanto tempo per il caricamento al momento in cui faccio lancio il comando Viewer sul componente di cristal XI, sembra che carichi una miriade di DLL prima di caricarmi la videata.

Ti mando di seguito il codice della quesry composta da crystal XI:

SELECT DISTINCT "CFP"."BAS_PROV", "CFP"."BAS_CITTA", "CFP"."BAS_CAP", "CFP"."BAS_INDIR", "CFP"."NOME", "CFP"."CODICE", "CFP"."CODFISC", "CFP"."PARTIVA", "ORD_MVH"."DOCDAT", "ORD_MVH"."DOCNUM", "ORD_MVR"."CODART", "ORD_MVR"."DESCRIZIONE", "ORD_MVR"."QTAORD", "ORD_MVR"."IMPORTO", "TAB_PAG"."DESCRIZIONE", "CFP"."TEL1", "CFP"."CEL", "ORD_MVH"."CODAGE", "ORD_MVR"."SCOCAT", "ORD_MVR"."SCORGP", "ORD_MVR"."SCOCLI", "ORD_MVR"."SCOART", "ORD_MVH"."REGNUM", "ORD_MVR"."CNSDAT_F", "ORD_MVR"."STATUS", "CFP"."TEL2", "ORD_MVH"."ACCONTO", "ORD_MVR"."RECNUM", "ORD_MVH"."NOTE"
FROM {oj (("ORD_MVH" "ORD_MVH" LEFT OUTER JOIN "ORD_MVR" "ORD_MVR" ON "ORD_MVH"."REGNUM"="ORD_MVR"."NUMORH") LEFT OUTER JOIN "TAB_PAG" "TAB_PAG" ON "ORD_MVH"."CODPAG"="TAB_PAG"."CODICE") LEFT OUTER JOIN "CFP" "CFP" ON "ORD_MVH"."CLIFOR"="CFP"."CODICE"}
WHERE "ORD_MVH"."REGNUM"=1
ORDER BY "ORD_MVR"."RECNUM"

Ci sono parametri o funzioni da usare nel caso di report che caricano dati da un database remoto ?



freeteo Profilo | Guru

>Praticamente devo stampare una fattura.
>Io passo al report solo un parametro il numero di registrazione
>della mia testata.
>Quindi perndermi solo una testata e i record delle tabelle collegate.
>In questo caso i dati incriminato sono davvero pochi 1 record
>di testata e 3 record di dettaglio(articoli della fattura).
ok


>Ho visto da debug del mio gestionale che passa tanto tempo per
>il caricamento al momento in cui faccio lancio il comando Viewer
>sul componente di cristal XI, sembra che carichi una miriade
>di DLL prima di caricarmi la videata.
sei riuscito a capire in quale riga di codice è lento? prova a postare 1po di codice.
Cmq sia il caricamento delle librerie avviene sicuramente per generare il report, quindi caricare il visualizzatore, caricare i formati di esportazione etc...pero' quelle librerie dovrebbero essere locali, gia' presenti nel pc perche' installate tramite pacchetto di installalzione e quindi velocissime...non capisco dove sia il tempo lungo, hai fatto la prova con lo stesso report su un programma veloce di test che carica il file da locale?



>Ci sono parametri o funzioni da usare nel caso di report che
>caricano dati da un database remoto ?
diciamo che tutti i database sono remoti, la comunicazione avviene via tcp e quindi serializzata in bytes, ma questo è assolutamente velocissimo...il problema sta da qualche altra parte, non penso nella query e nemmeno nella mole di dati che carichi.

ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

DANINAPOLI Profilo | Junior Member

Le librerie in realtà sono instalate localemente, ho fatto un setup apposta per i client.
non mi spego !!!
cosa posso controllare ?
Conviene che anzicche lanciare l'anteprima avvio direttamente la stampa ?

Da dove posso partire per indagare sul problema ?

freeteo Profilo | Guru

>Le librerie in realtà sono instalate localemente, ho fatto un
>setup apposta per i client.
>non mi spego !!!
>cosa posso controllare ?
perfetto allora scongiuriamo problemi di dll mancanti


>Conviene che anzicche lanciare l'anteprima avvio direttamente
>la stampa ?
se vuoi provare, ma sinceramente non penso sia quello il problema, il tempo di elaborazione sara' lo stesso...


>Da dove posso partire per indagare sul problema ?
come ti dicevo nei post precedenti, prima dovresti verificare con un progetto di prova che fa le query e carica lo stesso report, pero' il report è pescato da una dir locale.
Poi controlla il modo in cui apri il report, so che c'e' un overload che ti permette di specificare il modo in cui aprire il file (OpenReportMethod) :
ReportDocument report = new ReportDocument(); report.Load( "c:\....\CrystalReport1.rpt", CrystalDecisions.Shared.OpenReportMethod.OpenReportByTempCopy); report.SetDataSource(miaDataTable); crystalReportViewer1.ReportSource = report;

ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

DANINAPOLI Profilo | Junior Member

Ho creato dei file TTX in locale passando il clientdataset locale e non il remoto.
Credo di aver risolto.
E' decisamente + veloce.
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-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5