cs_dragon
Messages postés2336Date d'inscriptionsamedi 14 juillet 2001StatutMembreDernière intervention 5 mai 2009
-
9 nov. 2006 à 17:29
razaphi
Messages postés43Date d'inscriptiondimanche 18 juin 2006StatutMembreDernière intervention 7 août 2007
-
9 nov. 2006 à 22:19
Bonjour, ça fait un bout que je n'ai plus posté ici
alors voilà,
je suis en train de faire un service qui imprime, de façon automatique, des rapports Crytal.
tout fonctionne à merveille, sauf que je veux aller encore plus loin. J'aimerais donner la possibilité de passer des conditions personnalisés à mon rapport
ex:
j'ai un rapport qui affiche 100% les données d'une requête. J'aimerais pouvoir passer un argument qui limiterait à certains résultat (passer le WHERE quoi), mais ceci en argument et non que la condition soit directement dans le rapport
tenez, voilà un exemple plus précis:
je veux que toutes les jours de la semaine, un compte rendu sorte à l'imprimante à la fin de la journée, mais en plus, je veux que le vendredi, un 2e rapport sorte avec le compte rendu de la semaine.
J'aimerais avoir un seul rapport, mais passer le WHERE en argument
Présentement, l'impression ressemble à ceci
<hr size="2" width="100%" />'Ici on envoi le lien complet du rapport à l'impression et ceci a été
mis dans une boucle, au cas qu'on doit imprimmer 2 rapports dinstincts
Private Sub formulaire(ByVal dr As SqlClient.SqlDataReader)
Dim iterateur As IEnumerator = getAllByteOK(dr.Item("Rapport"))
Dim xml As New XMLFile("rapport.xml")
While iterateur.MoveNext
imprimante(dr, xml.GetElementValue("rapports/rapport", "url", iterateur.Current))
End While
iterateur = Nothing
xml.CloseFile()
xml = Nothing
End Sub
'C'est ici le bout intéressant. Il reçoi le lien du rapport et le Load dans un ReportDocument de Crystal. Je met le nom de l'imprimante, puis j'imprime. Donc ça derait être entre le load et le PrintToPrinter que je devrais passer le filtre
'Le code a été
mis dans une boucle, au cas qu'on doit imprimer sur 2 imprimantes
distincte (genre je veux le rapport et mon boss aussi)
Private Sub imprimante(ByVal dr As SqlClient.SqlDataReader, ByVal rapport As String)
Dim iterateur As IEnumerator = getAllByteOK(dr.Item("Imprimante"))
Dim colImprimante As System.Drawing.Printing.PrinterSettings.StringCollection = System.Drawing.Printing.PrinterSettings.InstalledPrinters
While iterateur.MoveNext
Dim oRpt As New CrystalDecisions.CrystalReports.Engine.ReportDocument
With oRpt
.Load(rapport)
.PrintOptions.PrinterName = colImprimante(iterateur.Current)
.PrintToPrinter(1, False, 0, 0)
.Close()
End With
oRpt = Nothing
End While
colImprimante = Nothing
iterateur = Nothing
End Sub
<hr size="2" width="100%" />
-------------------------------------------------
Dragon alias aussi Waxime mais bon, pas le gout de refaire un nouveau profil lol
-------------------------------------------------
cs_dragon
Messages postés2336Date d'inscriptionsamedi 14 juillet 2001StatutMembreDernière intervention 5 mai 20096 9 nov. 2006 à 18:33
Salut,
non, je ne peux pas utiliser un dataTable, puisque mon impression de rapport utilise la connection de la base de données qui est directement dans le rapport (en tout cas, en ce moment il ne permet que ça)
donc j'essai de conservé la structure actuel et si je ne vois pas de solution, puisque je déteste doubler quoi que ce soit, je verrai pour donner la possibilité d'envoyer le datatable.
-------------------------------------------------
Dragon alias aussi Waxime mais bon, pas le gout de refaire un nouveau profil lol
-------------------------------------------------
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 9 nov. 2006 à 19:33
Sous crystal, je ne sais pas, mais perso, je lui préfère Report Manager, qui est open source, gratuit, et qui permet beaucoup de chose (nottament le passage de paramètre, que ce soit pour la requête du report, ou pour les champs visibles).
razaphi
Messages postés43Date d'inscriptiondimanche 18 juin 2006StatutMembreDernière intervention 7 août 2007 9 nov. 2006 à 22:19
Essaye ceci, c'est ce que je fait et ça marche. Crée un formulaire où tu place un ReportViewer. Supposont que le ReportViewer s'appele Report_View. Tu fera
Report_View.ReportSource = (Chemin de l'état)
Report_View.SelectionFormula = (Formule de sélection des enregistrements)
Report_View.Refresh()
"Report_View.SelectionFormula" contient des chaine du genre
{TB_ELEVES.EL_NOM} ="FEGON GABRIEL"
{TB_ELEVES.EL_DNAIS} = DATETIME(1982,3,15)
Les critères devront être écrits selon que Crystal Report les faits pas de SQL et pas de Select ...
Pour savoir comment Crystal Report écrit ses critères, allez sue un etat en mode création, cliquez sur la barre d'outil sur le bouton "Sélectionner l'Expert", définissez un critère et cliquez sur le bouton "Afficher Formule" pour voir comment Crystal Report code ses formules.
J'espère t'avoir aidé.