Stampa immediata

giovedì 06 novembre 2008 - 10.52

lanfra Profilo | Senior Member

Salve, c'è un comanda che invia la stampa immediata del report senza visualizzarlo?

grazie x qualsiasi suggerimento
Lanfra

BillyRay Profilo | Newbie

lo cerco anche io lol

Aeghé Profilo | Newbie

Poniamo che nelle dichiarazioni del form dove hai inserito l'oggetto CrystalActiveXReportViewer abbia inserito il codice:
Dim crAPP As New CRAXDRT.Application Dim Report As CRAXDRT.Report

eppoi nella sub form_activate il codice:
Set crAPP = New CRAXDRT.Application Set Report = crAPP.OpenReport(NomeFile)
dove NomeFile è la stringa dell'indirizzo completo del report da stampare

eppoi tu abbia inserito un bottone comando chiamato ad esempio cmd3dStampa
nella sub cmd3dStampa_click inserisci il codice:
Report.RecordSelectionFormula = NomeFormula Report.RecordSortFields.Add fld, crAscendingOrder Report.PrintOut
dove NomeFormula è una stringa vuota o contenente la formula di selezione record del report da stampare

... e il gioco è fatto.
Aeghé vi saluta!

freeteo Profilo | Guru

Ciao,
il codice postato da Aeghé si riferisce ad un'installazione COM (tipicamente usata in visual basic 6 o c++) e non in .net.

Se vi interessa .net, il procedimento è simile a quello indicato da Aeghé ma differisce ovviamente 1po nel codice:
Dim tabella as new DataTable() ...riempi i dati nella tabella... Dim mioreport as new ReportDocument() mioreport.Load("c:\...\mioreport.rpt") mioreport.SetDataSource (tabella) mioreport.PrintToPrinter(...); ...
come si vede, un reportDocument viene elaborato indipendentemente dal fatto che sia o meno visualizzato sul suo viewer, infatti è possibile stamparlo (metodo PrintToPrinter) o esportarlo (metodo Export) con i relativi metodi.

Nell'esempio vengono caricati i dati in qualche modo sulla DataTable e poi passato al report, se invece volete impostare diversamente il modo di accedere ai dati, potete usare uno di questi 2 metodi:
http://www.dotnethell.it/forum/messages.aspx?ThreadID=21962

ciao.

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

lanfra Profilo | Senior Member

Grazie Teo, lo provo e poi ti faccio sapere...
Lanfra

BillyRay Profilo | Newbie

allora matteo scusa ma in .net nel codice di un default.aspx.vb il tuo codice mi da errore....

Dim mioreport as new ReportDocument()

ReportDocument() non me lo riconosce e questo vale anche per il codice che mi avevi passato per il post dei Multi Pdf... alla fine del codice usi il ";" che codice è? java? ti ripeto a me non me lo riconosce...
grazie ciao Billy

freeteo Profilo | Guru

>allora matteo scusa ma in .net nel codice di un default.aspx.vb
>il tuo codice mi da errore....
>Dim mioreport as new ReportDocument()
devi aggiungere il riferimento al runtime di Crystal Report, il quale ha quella classe "ReportDocument".
Questa referenza viene aggiunta in automatico se fai un report dentro al tuo progetto (tastoDX->Add Item->Crystal Report), pensavo tu avessi fatto il report dentro al progetto e quindi fosse già referenziato tutto.
In questo caso, tastoDX sul nodo del progetto->add reference e scegli:
- CrystalDecisions.CrystalReports.Engine
- CrystalDecisions.ReportSource
- CrystalDecisions.Shared
dovrebbero bastarti.



>il codice che mi avevi passato per il post dei Multi Pdf... alla
>fine del codice usi il ";" che codice è? java? ti ripeto a me
eh scusami scrivo in C# e non in Vb.net, quindi ogni tanto mi scappa il terminatore dell'istruzione, come in Java/C++ etc... infatti anche C# termini la riga di istruzione con ";" cosa che in vb non si fa, nel tuo caso quindi, toglila.
ciao.

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

BillyRay Profilo | Newbie

Ci provo Mateo poi ti faccio sapere... tnx

BillyRay Profilo | Newbie

Niente Matteo continua a non riconoscere il codice:
Dim mioreport as new ReportDocument()


ReportDocument() non lo riconosce...
anche se prima avevo inserito dei report nel progetto ho provato a fare un nuovo progetto da capo e seguire passo passo quello che mi hai detto di fare ma ancora nulla... non me lo riconosce...
le reference non le avevo inserite... ora le ho inserite ma niente... c'è modo di vedere se le ho inserite o meno dopo aver fatto add reference... etc..?
comunque credo che manchi come dici il runtime di Crystal... io l'unica cosa che so è che normalmente nel mio progetto i report si visualizzano correttamente e li esporto correttamente in un unico pdf... l'unica cosa che non riesco a fare e dirgli di esportarli in automatico...




BillyRay Profilo | Newbie

Ho aggiunto un Classdesigner e mi mi si è aperto un mondo...
vedo di capirci qualcosa ma le reference di CrystalReport sono tutte inserite e appaiono nel menu Dx quando entro nel Classdesigner... forse ora devo inserire dalla toolbox di sx una classe non so... vedo di fare qualche prova se ti viene in mente qualcosa o se sai che sto navigando in alto mare fammi sapere tnx Billy

freeteo Profilo | Guru

Billy meglio che partiamo dall'inizio
- Che report hai aggiunto? un file ".rdlc" o un file ".rpt" ?
- quando hai scritto nel codice ... ReportDocument se vai sopra con il mouse si attiva un trattino rosso in basso a destra? vai li sopra e fai "import..." in modo che venga scritto in testa al file .vb "Imports CrystalDecisions.CrystalReports.Engine" ossia che venga importato a livello di intellisense questo Namespace, così puoi evitare di scriverlo completo ogni volta.

Cmq la prima domanda è la più importante, perchè io ho inteso tu stessi facendo del codice con Crystal, ma se hai creato report ".rdlc" stai usando Sql Reporting, quindi il codice cambia
ciao.

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

BillyRay Profilo | Newbie

bella, allora sempre tamite i tuoi post sono finalmente riuscito a trovare la risposta e quando l'ho trovata mi hai risposto dandomi la stessa soluzione... che è questa...

Dim Rpt As New CrystalDecisions.CrystalReports.Engine.ReportDocument

ora funziona lol
per ora tutto ok vado avanti e se trovo maagne ti faccio sapere, cmq grazie mille e resto in ascolto...
bella... Billy

freeteo Profilo | Guru

>Dim Rpt As New CrystalDecisions.CrystalReports.Engine.ReportDocument
si come ti dicevo prima, o lo specifichi tutto come hai fatto tu, oppure gli dici di fare l'import (che equivale a "using" di C#) in modo che lui faccia da solo riferimento a quel Namespace.
Sinceramente io preferisco il secondo, così scrivo meno codice


>ora funziona lol
>per ora tutto ok vado avanti e se trovo maagne ti faccio sapere,
>cmq grazie mille e resto in ascolto...
ok se ti è stata utile, accetta una risposta così chiudiamo il thread.Grazie.

ciao.

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

lanfra Profilo | Senior Member

Grazie Teo, il guru di CR... anche a me funziona...
Era il nome dell'evento che non mi suonava famigliare quando scorrevo eventi, metodi e proprietà dell'oggetto RPT

Io uso gli oggetti per creare i miei report, ma se volessi passare una semplice query, utilizzando più tabelle e visualizzare il risultato in un report, hai doc, suggerimenti da darmi? Con db Oracle....

grazie mille
Lanfra

freeteo Profilo | Guru

>Era il nome dell'evento che non mi suonava famigliare quando
>scorrevo eventi, metodi e proprietà dell'oggetto RPT
ok


>Io uso gli oggetti per creare i miei report, ma se volessi passare
>una semplice query, utilizzando più tabelle e visualizzare il
>risultato in un report, hai doc, suggerimenti da darmi? Con db Oracle....
puoi costruirti il report specificando nell'esperto database di fare una connessione con Oracle (per quanto ne so io, presumo via ODBC o OLEDB).
Quando si connette, invece di dargli in pasto tutta una tabella completa, puoi specificare un "Comando" che non è altro che la stringa Sql da scrivere dentro li che il report esegue per caricare i dati.
Con questo modo ad esempio puoi fare join, alias etc...in modo da avere i dati già "adhoc" per il tuo report.

Dopodichè, da codice non gli passi i dati con SetDataSource, ma lasci che sia il report ad andare a prenderseli, specificandogli solamente le credenziali d'accesso al db, con LogonInfo:
http://www.dotnethell.it/forum/messages.aspx?ThreadID=21962 (primo tipo)
Ecco, da controllare (vista la mancanza mia di esperienza in merito) che sia corretta la sintassi etc...

ps: se vuoi usare un filtro nella query, ti basta aggiungere un parametro nella finestra dove definisci il comando nell'esperto database, poi con doppio-click lo aggiungi alla stringa (prende una forma tipo {?nomeparametro} se non ricordo male).
Poi da codice, lo tratti come se fosse un parametro diretto, ossia lo valorizzi con il metodo "SetParameter(...)" ovviaemnte prima di visualizzarlo :-)
ciao.

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

lanfra Profilo | Senior Member

Grazie mille, come al solito sei fantastico.....
Lanfra

freeteo Profilo | Guru

>Grazie mille, come al solito sei fantastico.....
eh...addirittura? grazi, troppo gentile.

Se hai risolto, accetta una risposta così chiudiamo il thread.Grazie.

ciao.

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

lanfra Profilo | Senior Member

Alt, scusa Teo, è possibile che quando provo l'applicazine web in locale mi funziona la stampa immadiata, mentre se pubblico il tutto sul server mi dà errore?

il codice è
rpt.PrintToPrinter(1, True, 1, 1)

Mentre l'errore non lo sò x' gestisco gli errori con una pagina comune...
Lanfra
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