Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > Crystal Reports
Crystal Reports Forum d'entraide sur Crystal Reports. Avant de poster --> FAQ Crystal, Tutoriels Crystal
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/07/2011, 10h11   #1
Invité de passage
 
Inscription : avril 2010
Messages : 35
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 35
Points : 4
Points : 4
Par défaut Automatiser la création de rapports

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...

Citation:
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)
Citation:
Code :
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
Merci d'avance !
.Spirit est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2011, 17h07   #2
Invité de passage
 
Inscription : avril 2010
Messages : 35
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 35
Points : 4
Points : 4
Bonjour,

Je m'auto-réponds, mais je nécessite toujours de l'aide

J'ai installé Visual Studio 2008 en compagnie de Crystal Reports 2008.
Nouveau projet, une Windows Application car je vais devoir utiliser une fenêtre avec quelques fonctionnalités.

Et là... le néant.
Je trouve pas de doc permettant de faire ce que je veux faire, c'est à dire sortir un rapport (en PDF par exemple) Crystal Report qui lui prend des données dans une base de données Access. Pour compliquer le tout bien entendu il me faut passer deux dates en paramètre.

Une première question donc :
- Dois-je intégrer des .dll, si oui lesquelles ? J'ai quelques sources sur internet mais ces dernières datent de 2004... De l'eau a coulé sous les ponts depuis.

Vu que l'on touche à du VB et non plus uniquement à Crystal Reports, je ne sais pas si mon post est toujours dans la bonne section par contre.

Merci d'avance en tout cas. Je continue mes recherches de mon côté.
.Spirit est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2011, 11h43   #3
Invité de passage
 
Inscription : avril 2010
Messages : 35
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 35
Points : 4
Points : 4
J'avance donc je donne les solutions, ça pourra toujours servir.

J'ai trouvé cette source :
http://www.vbforums.com/showthread.php?t=437587

Elle permet d'ouvrir un rapport. Ce qui est à inclure est :

Code :
1
2
3
4
5
6
7
    CrystalDecisions.CrystalReport.Engine
    CrystalDecisions.Enterprise.Framework
    CrystalDecisions.Enterprise.infoStore
    CrystalDecisions.ReportSource
    CrystalDecisions.Shared
    CrystalDecisions.Web
    CrystalDecisions.Windows.Forms
A première vue. Ensuite au niveau de mon usage j'aurais peut-être des choses à ajouter ou à enlever.

Etape suivante, puisque le rapport (de test) s'ouvre, c'est de tenter de passer des paramètres afin de générer le rapport par périodes.
.Spirit est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2011, 15h36   #4
Invité de passage
 
Inscription : avril 2010
Messages : 35
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 35
Points : 4
Points : 4
Bonjour,

Je remonte ce post, j'ai pu avancer sur les rapports.
En gros, avec le code qui lance un rapport grâce à une requête SQL, il est possible d'obtenir les informations que l'on souhaite, dans un diagramme.
La seconde étape est donc de mettre en forme les rapports directement dans Crystal Reports pour obtenir toutes les informations désirées dans notre logiciel.

Je bloque depuis 2 jours sur une problématique, qui a l'air pourtant simple :
Comment est-il possible de récupérer la dernière valeur générée dans mon diagramme par une requête SQL ?
En gros j'ai mes valeurs, récupérées via une requête du style :
Code :
SELECT * FROM matable" WHERE date_du_jour BETWEEN #madatededebut# AND #madatedefin#
Mon diagramme s'affiche très bien grâce à ça.
Cependant, je souhaite ajouter en dessous un champ de formule (un chiffre) qui affiche la différence entre la valeur de fin de la requête et la valeur de début (= dernière valeur du diagramme - première valeur).
Je parviens bien, via l'éditeur de formules, à récupérer la première valeur via cette ligne :
Code :
IF OnFirstRecord Then {matable.monchamp}
Mais impossible de retourner la dernière valeur via le même genre de commande (OnLastRecord). J'ai l'impression qu'il ne s'intéresse qu'au premier enregistrement, donc il me retourne 0 car ne "passe" jamais sur le dernier enregistrement.
J'ai bien tenté de créer un groupe classé par date et de prendre le maximum, mais sans succès...

Il doit y avoir un concept que je n'ai pas encore saisi...
Si des experts passent par là je leur en serais reconnaissant.

Merci d'avance.
.Spirit est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h55.


 
 
 
 
Partenaires

Hébergement Web