Problemi per esportare in ODF da Crystal report 8 tramite Visual Basic...

giovedì 12 marzo 2009 - 14.33

gabbito Profilo | Newbie

Salve a tutti,
ho un problema per esportare in PDF una stampa con Crysta report 8 con visual basic 6, praticamente quando lancio il mio programma e genero il file PDF non ho problemi il problema ce l'ho quando dopo aver esportato provo a visualizzare lo stesso report ma con crystal report praticamente dal mio applicativo o stampo in cristal poi esco del tutto e poi lo riapro ed eseguo l'esportazione in PDF perchè se non faccio così ma va in crash visual basic o il file compilato. Vi ringrazio anticipatamente

Gabriele

ysdemarc Profilo | Expert

non ho capito niente

potresti riscriverlo un pò meglio?
Vincenzo
Programmatore sbilenco

gabbito Profilo | Newbie

In effetti hai ragione, ho scritto la cosa troppo di fretta. Provo a spiegarmi meglio. In VB ho sviluppato un applicativo per stampare e contestualmente spedire via e-mail un documento in PDF utilizzando questo codice:

Public Sub FattDaProposta(ByVal IdCliente As Integer, _
ByVal NomePDF As String, _
ByVal GeneraPDF As Boolean)

'
Dim Sql As String
Dim Msg As String
Dim MyNota As String
'
On Error GoTo Errore
AzzeraStampe
' Impostazione percorso DB
Principale.Report.DataFiles(0) = DB.PercorsoArchivi & DB.NomeDB
' Nome Report
Principale.Report.ReportFileName = DirectoryStampe & "FatturaDaProposta.rpt"
' Titolo
Principale.Report.WindowTitle = "ANTEPRIMA FATTURA CLIENTE"
'
Msg = "Pronto per la stampa"
MsgBox Msg, vbInformation, NomeProgramma
'
Sql = "not isnull({" & DB.PropostaFatt.NomeTabellaQryStampaFatt & ".IdCliente}) "
Sql = Sql & " and {" & DB.PropostaFatt.NomeTabellaQryStampaFatt & ".ProtFattura} = 0"
Sql = Sql & " and {" & DB.PropostaFatt.NomeTabellaQryStampaFatt & ".optDaFatturare} = 1"
'
If IdCliente > 0 Then
Sql = Sql & " and {" & DB.PropostaFatt.NomeTabellaQryStampaFatt & ".IdCliente} = " & IdCliente
End If
'
If GeneraPDF Then
Principale.Report.Destination = crptToWindow
Dim objApp As CRAXDRT.Application
Dim objReport As CRAXDRT.Report
Dim objExportOptions As CRAXDRT.ExportOptions
'
Set objApp = New CRAXDRT.Application
Set objReport = objApp.OpenReport(DirectoryStampe & "FatturaDaProposta.rpt")
Set objExportOptions = objReport.ExportOptions

' Impostazione percorso DB
objReport.GroupSelectionFormula = Sql
objReport.RecordSelectionFormula = Sql
'
objReport.ExportOptions.DestinationType = crEDTDiskFile
objReport.ExportOptions.FormatType = crEFTPortableDocFormat
objReport.ExportOptions.DiskFileName = DirectoryStampePDF & NomePDF & ".pdf"
On Error GoTo Errore
objReport.Export False: DoEvents
'
Set objExportOptions = Nothing
Set objReport = Nothing
Set objApp = Nothing

MsgBox "Il file : " & DirectoryStampePDF & NomePDF & ".pdf" & vbCrLf & "E' stato creato!", vbInformation

Risposta = MsgBox("Desideri aprire il file PDF appena Creato?", vbYesNo + vbQuestion + vbDefaultButton1)
If Risposta = vbYes Then
ShellExecute 0, vbNullString, DirectoryStampePDF & NomePDF & ".pdf", vbNullString, vbNullString, 1
End If
Else
Principale.Report.GroupSelectionFormula = Sql
Principale.Report.SelectionFormula = Sql
Principale.Report.Action = crptToPrinter
DoEvents
End If
'
Exit Sub
Errore:
GestioneErrore "Stampa FattureDaProposta Protocollo Clienti", vbCritical
End Sub

Il file PDF viene generato e spedito senza problemi se non stampo nessun documento in Crystal Report ossia devo entrare nella procedura e generare ed inviare i files PDF senza aver effettuata nessuna stampa con Crystal Rep. Al momento in cui effettuo una stampa (una qualsiasi) con Crystal Rep e rirpovo a generare un PDF per poi inviarlo via e-mail il sistema mi va in crash in questo punto: objReport.Export False: DoEvents.
Grazie.

freeteo Profilo | Guru

Ciao,
sembra quasi che rimanga in memoria qualcosa di sporco, o che dopo l'esportazione rimanga bloccato qualcosa.
Hai provato a vedere se per la tua versione ci sono degli aggiornamenti/bugfix?

Ti lascio qualche link:
http://service.sap.com/sap/bc/bsp/spn/bobj_download/main.htm
http://help.sap.com/content/bobj/bobj/index.htm

Ciao.

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

gabbito Profilo | Newbie

Ciao Matteo,
innanzi tutto grazie per il tuo interessamento... ma purtroppo non ne riesco a venire fuori

ysdemarc Profilo | Expert

hai già provato ad svuotare il tuo oggetto di nome Principale?

o magari a provare a crearlo, fare la stampa e distruggerlo?
Vincenzo
Programmatore sbilenco

freeteo Profilo | Guru

Si infatti sembra proprio che rimanga in memoria, bho visto che tu usi direttamente una variabile che hai nella form "Principale.Report".
Prova a creare l'oggetto nuovo, ad ogni stampa, caricare il file dal disco e passare i dati come hai fatto, qualcosa come:

Dim crApp As New CRAXDDRT.Application Dim crRep As CRAXDDRT.Report '--- carichi il report Set crRep = crApp.OpenReport(App.Path & "\report1.rpt") crRep.Database.SetDataSource zRsCli '--- eventuale il sottoreport crRep.OpenSubreport("indirizzi").Database.SetDataSource zRsCli '--- gli passi i dati come hai fatto tu

e vediamo se cambia qualcosa.

Ciao.

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

gabbito Profilo | Newbie

Ho risolto praticamnete metto il controllo crystal report in una form che poi dopo aver esportato/stampato faccio l'unload ed il gioco è fatto!.
grazzie a tutti per le Vostre risposte!
In particolare a freeteo e ysdemarc!
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-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5