Bonjour,
je peux peut- être vous aider.
Voici un code VB6, puis en dessous, un code Visual Basic .Net pour la génération de multiples factures au format PDF.
Code VB6
SQL = "SELECT NroFact,PaysFactur,PJ,MailFactur" _
& "$ FROM FACTURE" _
& "$ WHERE TypFact = 'MENS'" _
& "$ AND PeriodeFact = '" & sPeriodeFact & "'" _
& "$ AND " & sBicWhere _
& "$ AND Ok = 0" _
& "$ ORDER BY NroFact"
Set rs = SqlExecute(SQL)
Set crRepp = crApp.OpenReport(rptfile)
crRepp.DisplayProgressDialog = False
' Fill report parameters
Set crParamDefs = crRepp.ParameterFields
'Passage des paramètres fixes du rapport
For Each crParamDef In crParamDefs
Select Case crParamDef.ParameterFieldName
Case "TypeDocument": crParamDef.SetCurrentValue sFactureTitre
Case "Responsable": crParamDef.SetCurrentValue sResponsable
Case "Telephone": crParamDef.SetCurrentValue sTelephone
Case "email": crParamDef.SetCurrentValue sEmail
End Select
Next
crRepp.EnableParameterPrompting = False
crRepp.Database.Tables(1).SetLogOnInfo "", "", sDbUser, sDbPassword
crRepp.ExportOptions.DestinationType = crEDTDiskFile
crRepp.ExportOptions.FormatType = crEFTPortableDocFormat
crRepp.ExportOptions.PDFExportAllPages = True
Do Until rs.EOF
sNoDoc = rs("NroFact")
sPaysFact = rs("PaysFactur")
sMail = rs("MailFactur")
If sNoDoc <> sPreviousNoDoc Then
sPreviousNoDoc = sNoDoc
End If
SQL = "SELECT FACTURATION.*" _
& " ,FACTURE.ConditionPaie" _
& " FROM FACTURATION" _
& " LEFT JOIN FACTURE" _
& " ON FACTURATION.NroFact = FACTURE.NroFact" _
& " WHERE FACTURATION.NroFact = '" & sNoDoc & "'" _
& " ORDER BY ID"
crRepp.SQLQueryString = SQL
crRepp.ExportOptions.DiskFileName = sPathPJ & rs("PJ")
crRepp.Export (False)
rs.MoveNext
Loop
Code VisualBasic .Net
crReport = New ReportDocument()
crReport.Load(rptfile)
crApp.ReportSource = crReport
crApp.ShowRefreshButton = False
crApp.ShowCloseButton = False
crApp.ShowGroupTreeButton = False
Dim crLogin As CrystalDecisions.Shared.TableLogOnInfo
crLogin = crReport.Database.Tables(1).LogOnInfo
'crLogin.ConnectionInfo.ServerName = sServerName
'crLogin.ConnectionInfo.DatabaseName = "Antennes"
crLogin.ConnectionInfo.UserID = sDbUser
crLogin.ConnectionInfo.Password = sDbPassword
crReport.Database.Tables(1).ApplyLogOnInfo(crLogin)
' Fill report parameters
'Dim crParameters As ParameterFields = crApp.ParameterFieldInfo
'Dim crParam As New ParameterValues()
For Each crParamDef In crReport.DataDefinition.ParameterFields
Select Case crParamDef.Name '.ParameterFieldName
Case "TypeDocument" : SetCurrentValue(sFactureTitre)
Case "Responsable" : SetCurrentValue(sResponsable)
Case "Telephone" : SetCurrentValue(sTelephone)
Case "email" : SetCurrentValue(sEmail)
End Select
Next crParamDef
SQL = "SELECT NroFact,PaysFactur,PJ,MailFactur" _
& "$ FROM FACTURE" _
& "$ WHERE TypFact = 'MENS'" _
& "$ AND PeriodeFact = '" & sPeriodeFact & "'" _
& "$ AND " & sBicWhere _
& "$ AND Ok = 0" _
& "$ ORDER BY NroFact"
rs = SqlExecute(SQL)
Do Until rs.EOF
sNoDoc = rs.Fields("NroFact").Value
sPaysFact = rs.Fields("PaysFactur").Value
sMail = rs.Fields("MailFactur").Value
If sNoDoc <> sPreviousNoDoc Then
sPreviousNoDoc = sNoDoc
End If
sWhere = "{FACTURATION.NroFact} = '" & sNoDoc & "'"
crReport.RecordSelectionFormula = sWhere
'oDiskOpts.DiskFileName = sPathPJ & rs.Fields("PJ").Value
'oExportOptions.ExportDestinationOptions = oDiskOpts
'crReport.Refresh()
'crReport.Export(oExportOptions)
crReport.ExportToDisk(ExportFormatType.PortableDocFormat, sPathPJ & rs.Fields("PJ").Value)
rs.MoveNext()
Loop
crReport.Close()
End Sub
Ceci est est exemple. Il n'est certainement pas parfait, mais il fonctionne !
En VB6 pour 1200 clients il met 10 minutes. En Visual Basic .Net avec CrystalReport 10, il met 2 heures du fait que je n'ai plus pû utiliser la méthode SQLQueryString et que je dois donc ouvrir le rapport à chaque étape de ma boucle.
Si quelqu'un à une idée pour générer rapidement les 1200 factures sans passer à une machine plus puissante, je suis intéressé.Cordialement
:) je suis vraiment tres contente d'avoir trouvé ton code (help ; cryst10+vb) ça m'a sauvé!! :) Merci encor!!!!
Bon, je me permets de te demander une autre choz, a propos du meme sujet(cryst10+vb6)
Bon voila, chui bloquée dans mon application de fin d'études!
bref, j'ai créé une facture sous CR10, les acheteurs (clients) sont sous forme de subreport!
le prob est : je veux que les fields(CIN, nom, prénom...) soient inclus dans une seule zone de texte, sous forme :
Mr Nom Prénom, titulaire de la carte d'identité nationale N° CIN
voila, les fields dans une phrase!
Ce que je voudrai l'éviter, ce sont les espaces, parceque par exp : la longueur maximale d'un champ nom est 25 caaracteres, sinon y aura des nom qui ne dépasse meme pas 10 caracteres!!
voici mon prob en expl:
mauvais exp:
Mr, Alin Billy , titulaire de la carte d'identité nationale N° XXXXXX.
Exp parfai:
Mr, Alin Billy, titulaire de la carte d'identité nationale N° XXXXXX.
C'est tout, ouf, je crois que je vous embête!! Sorry!
Merci d'avance!!
je suis tres content de trouver votre solution apropos de crystal report 10 avec vb .
ci vous me permetter de vous demander de l'aide a mon probleme
qui consiste a attribuer une source comme requete paramétré a mon etat que je n ai pas su faire ca.
merci de votre aide
je n ai trop besoin