Rapport Crystal impression avec un argument

cs_dragon Messages postés 2336 Date d'inscription samedi 14 juillet 2001 Statut Membre Dernière intervention 5 mai 2009 - 9 nov. 2006 à 17:29
razaphi Messages postés 43 Date d'inscription dimanche 18 juin 2006 Statut Membre Derniè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
-------------------------------------------------

4 réponses

cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
9 nov. 2006 à 17:42
Salut, effectivement y'avais lonnnngggteeemmmpp ^^

Si tu utilise une DataTable, tu peux y faire un Select directement dessus, exemple : MaTable.Select("Date<Today"),...) non ?

Chris...
Web : Firstruner
0
cs_dragon Messages postés 2336 Date d'inscription samedi 14 juillet 2001 Statut Membre Dernière intervention 5 mai 2009 6
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
-------------------------------------------------
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
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).

Tu peux le trouver sur sourceforge.net
0
razaphi Messages postés 43 Date d'inscription dimanche 18 juin 2006 Statut Membre Derniè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é.
0
Rejoignez-nous