Bonjour,
Voilà je suis assez nouveau sur Crystal Report 2008, et même Crystal Report tout court, bien que j'ai pu suivre le tutoriel de Fleur-Anne Blain et créer un rapport de test.
Cependant le but de la manipulation est, à terme, de pouvoir créer des rapports à la volée, utilisant les données d'une base Microsoft Access. Par exemple, un simple double clic sur un raccourci lance la création des (nombreux) rapports ou, mieux, ces rapports sont créés périodiquement, une fois par semaine par exemple.
Je parle de plusieurs rapports car il s'agit de données récoltées dans une usine et on veut pouvoir suivre ça au fil du temps.
Je voudrais savoir si Crystal Report intégrait fonctionnalité qui permettrait de faire ça ou dois-je me tourner vers une application externe, comme un programme VB ou quelque chose dans le genre ?
J'avais trouvé ce code source, fait en VB, pour commencer...
Ce programme permet d'exécuter des Crystal Reports en passant comme paramètres :
1. le nom du rapport
2. le type de sortie (1 = impression / 2 = sauvegarde sur le disque)
3. le nom de l'imprimante ou le répertoire de sauvegarde (selon l'option choisie au point 2)
4. une date de début (format jj/MM/aaaa)
5. une date de fin (format jj/MM/aaaa)
************************************* *
Explications détaillées :
J'utilise dans mon code la méthode Environment.GetCommandLineArgs qui permet de passer les paramètres à mon application sur la ligne de commande (Menu Démarrer - Exécuter).
Exemple d'appel à taper sur la ligne de commande :
"C:\Program Files\CR\CR.exe" rapportMensuel 2 C:\Mensuel\ 07/04/2004 07/05/2004
J'ai donc ajouté à ma solution un projet de déploiement, afin de pouvoir installer l'exécutable sur mon disque, de pouvoir faire les appels via la ligne de commande, et passer des paramètres.
**********************************
P our appeler ce programme dans un autre programme, il suffit d'employer un shell.
Exemple :
Dim cmd As String = """C:\Program Files\CR\CR.exe""" & " rptXXX 1 hp0001 " & dateDebut & " " & dateFin
Shell(cmd, AppWinStyle.NormalFocus, True)Merci d'avance !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120 Imports CRAXDRT Imports CrystalDecisions.Shared Const DIR_RPT As String = "C:\rpt\" 'répertoire où sont stockés les .rpt à exécuter Const SERVER As String = "Nom serveur" Const DB As String = "Nom BD" Const USER As String = "Nom utilisateur" Const PWD As String = "Mot de passe" Private Sub frmCR_Load() Me.Hide() Call executeCrystal() Me.Close() End Sub Private Sub executeCrystal() Dim crApplication As CRAXDRT.Application Dim crReport As CRAXDRT.Report Dim crTables As CRAXDRT.DatabaseTables Dim crTable As CRAXDRT.DatabaseTable Dim crParameterFieldDefs As CRAXDRT.ParameterFieldDefinitions Dim crParameterFieldDef As CRAXDRT.ParameterFieldDefinition Dim crConnectionInfo As New ConnectionInfo Dim crTableLogonInfos As New TableLogOnInfos Dim crTableLogonInfo As New TableLogOnInfo Dim cpt As Integer Dim i As Integer Dim nbreParam As Integer Dim orientationPapier Dim nomDLL Dim nomServeur Dim nomBD Dim userName Dim password Dim paramNomReport As String Dim paramTypeSortie As Integer Dim paramSortie As String Dim paramDate As Date Dim paramDate1 As String Dim paramDate2 As String Try For cpt = 0 To UBound(Environment.GetCommandLineArgs) Select Case cpt Case 1 'Nom du Crystal Report (sans l'extension .rpt) paramNomReport = Environment.GetCommandLineArgs(1) Case 2 '1 = impression '2 = sauvegarde sur le disque paramTypeSortie = Environment.GetCommandLineArgs(2) Case 3 'Selon paramTypeSortie : ' 1 = nom de l'imprimante ' 2 = Chemin du répertoire de sauvegarde (avec "\" à la fin) paramSortie = Environment.GetCommandLineArgs(3) Case 4 'Date de Début (format jj/MM/aaaa) paramDate1 = Environment.GetCommandLineArgs(4) Case 5 'Date de Fin (format jj/MM/aaaa) paramDate2 = Environment.GetCommandLineArgs(5) End Select Next If paramDate1 <> "" Then paramDate = CDate(paramDate1) End If With crConnectionInfo .ServerName = SERVER .DatabaseName = DB .UserID = USER .Password = PWD End With nomDLL = "Dll de la DB" nomServeur = crConnectionInfo.ServerName nomBD = crConnectionInfo.DatabaseName userName = crConnectionInfo.UserID password = crConnectionInfo.Password crApplication = CreateObject("CrystalRuntime.Application") crReport = crApplication.OpenReport(DIR_RPT & paramNomReport & ".rpt", OpenReportMethod.OpenReportByTempCopy) crParameterFieldDefs = crReport.ParameterFields '************* TABLES ************* crTables = crReport.Database.Tables For Each crTable In crReport.Database.Tables crTable.SetLogOnInfo(nomServeur, nomBD, USER, PWD) Next crTable '************* PARAMETRES ************* crReport.EnableParameterPrompting = False nbreParam = crParameterFieldDefs.Count For i = 1 To nbreParam crParameterFieldDef = crParameterFieldDefs.Item(i) If crParameterFieldDef.ReportName = "" Then crParameterFieldDef.SetCurrentValue(paramDate) If paramDate2 <> "" Then paramDate = CDate(paramDate2) End If End If Next i '************* CONNECTION BD ************* crApplication.LogOnServer(nomDLL, nomServeur, nomBD, USER, PWD) If paramTypeSortie = 1 Then '************* IMPRESSION ************* orientationPapier = crReport.PaperOrientation With crReport .SelectPrinter("", paramSortie, "") .PaperOrientation = orientationPapier .PaperSource = crReport.PaperSource.crPRBinMiddle .PrintOut(False, 1) End With Else If paramTypeSortie = 2 Then '************* EXPORTATION ************* With crReport .ExportOptions.FormatType = CRExportFormatType.crEFTCrystalReport .ExportOptions.DestinationType = CRExportDestinationType.crEDTDiskFile .ExportOptions.DiskFileName = paramSortie & paramNomReport & ".rpt" .Export(False) End With End If End If Catch ex As Exception MsgBox("ERREUR :" & ex.Message, MsgBoxStyle.Information, "Exécution du rapport " & paramNomReport) End Try End Sub
Partager