Partage
  • Partager sur Facebook
  • Partager sur Twitter

Crystal Reports : mise en forme

Anonyme
    27 juin 2019 à 16:12:47

    Bonjour !

    Actuellement débutante en programmation je viens à vous afin de solliciter votre aide sur un problème sur lequel je penche depuis plusieurs jours, je m'explique;

    Dans le projet sur lequel je suis, je suis amené à faire un bilan individuel par agent,donc pour ça j'ai utilisé un DataSet avec une table qui me récupère mes données pour ensuite les afficher dans un rapport Crystal Reports, donc je récupère le mois, le jour, le matricule et notamment, celui qui me pose problème, le type jour. Le type jour c'est, par exemple, savoir si un salarié est en repos, en maladie etc. Il faut qu'à chaque type jour différent, je puisse obtenir une couleur différente.

    En farfouillant un peu dans le logiciel, j'ai vu que pour, par exemple, afficher le jour avec le fond d'une certaine couleur les jours de la semaine et d'une autre couleur les dimanche, je devais créer une formule "Jour" ou je récupérais dans mon DataSet la table correspondante et la colonne correspondant au jour (donc en l’occurrence la table Planning) et ensuite passer par l'éditeur de mise en forme et utiliser une formule de mise en forme pour effectuer le changement de couleur. Le soucis, c'est que je ne sais pas comment faire pour le type jour, il faudrait que j'arrive à récupérer la valeur du champ en question pour que je puisse y voir tout les différents types jours mais je ne sais comment faire...

    Merci d'avance à ceux qui pourront m'aider !

    • Partager sur Facebook
    • Partager sur Twitter
      27 juin 2019 à 16:30:32

      Salut,

      D'abord je ne connais pas Crystal Reports

      Qu'est ce que tu appeles une "formule" ?

      Vu comme tu le racontes, je suppose qu'il y a une autre table en lien avec "Planning" qui récapitule les différents types de jours , ou au minima une énumération dans le logiciel.

      On peut avoir plus de contexte ? du code ? structure des tables mises en jeu, toussa

      Parce que la même si c'est bien expliqué ta question reste floue

      -
      Edité par earp91 27 juin 2019 à 16:41:12

      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        27 juin 2019 à 16:58:28

        Salut,

        Alors je te donne des captures d'écran, ça devrait plus te parler, et les morceaux de code utilisés pour remplir le DataSet;

          // Remplir le dataset
                        // ******************************************************************************* //
        
        
                        //--------------------- Partie planning ---------------------
        
                        /* J'instancie un DataSet du nom de DsPlanning, je déclare une chaîne de caractère du nom de StSQL Planning ou je vais
                        récupérer les données de la table planning en fonction du matricule et des dates de début et  de fin */
        
                        DataSet DsPlanning = new DataSet();
                        string StSQLPlanning = "SELECT * FROM Planning "
                           + " WHERE Matricule ='" + matricule + "'" +
                           " AND Jour >='" + DatesDebutFin.Debut + "'" + " AND Jour <='" + DatesDebutFin.Fin + "';";
        
                        /* Rempli le Dataset DsPlanning en initialisant une connexion SQL à la BDD qui va rechercher la table "Planning" 
                        et la remplir avec la requête StSQLPlanning */
        
                        try
                        {
                            DsPlanning = ClassLibraryProget.DataBase.SELECTSqlServer(oConnection, "Planning", StSQLPlanning);
                        }
                        catch (SqlException exc)
                        {
                            System.Windows.MessageBox.Show("Lecture impossible des données de la table " + "Planning" + " " + exc.Message, "Erreur");
                            Close = true;
                        }
        
                        /* J'instancie un DataRow auquel je fais une boucle en comptant le nombre de lignes et de colonnes 
                        que j'ajoue ensuite a la table des données du DsPlanning */
        
                        for (int j = 0; j < DsPlanning.Tables[0].Rows.Count; j++)
                        {
                            DtRow = DsBilanInd.Tables["Planning"].NewRow();
                            for (int i = 0; i < DsPlanning.Tables[0].Columns.Count; i++)
                            DtRow[i] = DsPlanning.Tables[0].Rows[j][i];
                            DsBilanInd.Tables["Planning"].Rows.Add(DtRow);
                        }
        
        
                      //--------------------- Partie Agents ---------------------
        
                      DataSet DsAgent = new DataSet();
                      string StSQL = "SELECT  * FROM Agents "
                          + " WHERE Matricule ='" + matricule + "';";
        
                      try
                      {
                          DsAgent = ClassLibraryProget.DataBase.SELECTSqlServer(oConnection, "Agents", StSQL);
                      }
                      catch (SqlException exc)
                      {
                          System.Windows.MessageBox.Show("Lecture impossible des données de la table " + "Agents" + " " + exc.Message, "Erreur");
                          Close = true;
                      }
                        
                        /* 0 désigne la ligne et "Nom", "NomPrenom" et "Prénom" les noms des colonnes. J'ajoute une nouvelle colonne issue
                        de la table "Agents" dans la table "Planning" dans le DataSet "DsBilanInd" */
        
        
                        for (int i = 0; i < DsBilanInd.Tables[0].Rows.Count; i++)
                        {
                            DsBilanInd.Tables["Planning"].Rows[i]["NomPrenom"] = DsAgent.Tables[0].Rows[0]["Nom"] + " " + DsAgent.Tables[0].Rows[0]["Prénom"];
                        }
                    
        
                    //--------------------- Partie etablissements ---------------------
        
                        DataSet DsEtablissements = new DataSet();
        
                        string StSQLEtablissements = "SELECT  * FROM Etablissements "
                            + " WHERE IDEtablissement ='" + ParamGlobaux.IDEtablissement + "';";
        
                    try
                        {
                            DsEtablissements = ClassLibraryProget.DataBase.SELECTSqlServer(oConnection, "Etablissements", StSQLEtablissements);
                        }
                        catch (SqlException exc)
                        {
                            System.Windows.MessageBox.Show("Lecture impossible des données de la table " + "Etablissements" + " " + exc.Message, "Erreur");
                            Close = true;
                        }
        
                 
                        for (int i = 0; i < DsBilanInd.Tables[0].Rows.Count; i++)
                        {
                            DsBilanInd.Tables["Planning"].Rows[i]["Etablissement"] = DsEtablissements.Tables[0].Rows[0]["Nom"];
                        }
                    }


        Ensuite, la formule c'est, dans le cas du changement de la couleur d'arrière plan pour le jour celle-ci,apparemment c'est du code bien spécifique, je me suis inspiré d'un autre code présent dans le projet pour faire cette formule, et je ne trouve aucune qui correspond à ce que je voudrais;

        • Partager sur Facebook
        • Partager sur Twitter
          27 juin 2019 à 17:39:21

          Du coup ton problème, c'est cette fonction de Crystal Report (formule) que tu ne sais pas reproduire ?

          De ce que je vois c'est du VB.

          Est ce toi qui a crée cette formule ? Ou bien est ce une formule qui marche ? Parce que sa construction me semble erronée.

          As-tu la liste des différents type de jours ? Sans ça ca va être compliqué.

          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            28 juin 2019 à 9:09:56

            Salut,

            Oui exactement !

            Alors non, je l'avais récupérée et modifié car elle marche (en tout cas pour l'arrière plan des jours en question, j'obtiens bien une couleur pour les jours de la semaine et une autre pour le dimanche, en revanche je l'ai pas fait pour les jours fériés)

            Non justement, je ne sais pas comment je pourrais les récupérer, d’où mon problème, comme tu dis sans ça je ne pourrais pas le faire...

            -
            Edité par Anonyme 28 juin 2019 à 9:33:52

            • Partager sur Facebook
            • Partager sur Twitter
              28 juin 2019 à 9:55:22

              Je suppose que tu fais ca dans une entreprise ?

              Il n'y a personne pour t'aiguiller ? Parce que là ca a l'air assez spécifique tout de même.

              Personne ici ne pourra te dire ou trouver ces types de jours..

              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                28 juin 2019 à 10:47:42

                Oui c'est ça !

                Eh ben pas vraiment, l'on est tous des stagiaires débutants...

                D'accord, je vais essayer sur un autre forum, merci quand même !

                • Partager sur Facebook
                • Partager sur Twitter
                  28 juin 2019 à 20:14:01

                  Bon, la récupération en 3 fois des données au lieu d'une via une simple jointure SQL, c'est vraiment de compliquer la vie pour rien.

                  Mais bon, ne pas avoir un DataReader tout mois mais bien un DataSet (un vraisemblablement un DataAdapter dans votre couche DAL), c'est déjà pas mal.

                  Manque plus qu'à utiliser des requêtes préparer et vous serez "up to date". ;)

                  En gros, cela devrait ressembler à un truc du genre :

                  string StSQLPlanning = "SELECT Planning.*,Agents.Nom + " " + Agents.Prénom As NomPrenom, @Etablissements FROM Planning JOIN Agents ON Agents.Matricule = Planning.Matricule WHERE Planning.Matricule =@matricule AND Jour >=@Debut AND Planning.Jour <=@Fin"


                  Je vous laisse regarder via Google comment associer les valeurs aux paramètres de cette requête.

                  Pour votre problème initial, il suffit de configurer votre requête pour quelle dispose d'une colonne avec l'information qui vous intéresse (jour de repos etc...) et d'utiliser cette colonne à la place de "Planning.Jour" de votre exemple.

                  -
                  Edité par bacelar 28 juin 2019 à 20:15:30

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.

                  Crystal Reports : mise en forme

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown