IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SAP Crystal Reports Discussion :

Automatiser la création de rapports


Sujet :

SAP Crystal Reports

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 35
    Points : 13
    Points
    13
    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...

    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)
    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
    Merci d'avance !

  2. #2
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 35
    Points : 13
    Points
    13
    Par défaut
    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é.

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 35
    Points : 13
    Points
    13
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  4. #4
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 35
    Points : 13
    Points
    13
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

Discussions similaires

  1. Création de rapport Crystal report
    Par gibea00 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 09/07/2007, 16h54
  2. Automatisation requête création table
    Par lito74 dans le forum Access
    Réponses: 4
    Dernier message: 14/11/2006, 16h28
  3. Règle d'automatisation de création de répertoire
    Par laindown dans le forum Windows Serveur
    Réponses: 4
    Dernier message: 18/07/2006, 11h04
  4. comment automatiser la création d'une source ODBC ?
    Par belmansour tidjani dans le forum Windows
    Réponses: 2
    Dernier message: 22/02/2006, 10h10
  5. Réponses: 4
    Dernier message: 28/10/2005, 20h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo