|
| Uun histogramme par mois et par an... |
| Débuté par WindevNurse, 23 jan. 2021 20:55 - 16 réponses |
| |
| | | |
|
| |
Membre enregistré 57 messages |
|
| Posté le 23 janvier 2021 - 20:55 |
Bonjour à tous, J'ai une petite expérience avec le champ graphe mais des fois certains éléments m'échappent ..
J'ai fait une requête calculant le nombre de jours travaillées par mois, du style: Janvier 2020 > 10 jours Février 2020 > 11 jours etc... Janvier 2021 > 15 jours Février 2021 > 16 jours etc.. Mais je voudrais pouvoir comparer les années mois par mois pour obtenir un champs graphe de ce style:

Avec en Mauve: 2020 Avec en Turquoise: 2021
Cependant je n'y arrive pas avec la description du Graph... Je mets les "Mois" en source des étiquettes... Mais pour les séries...je galère un peu...
Dois je passer par la programmation du graphe ?
Merci à tous pour votre aide. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 213 messages |
|
| Posté le 24 janvier 2021 - 01:32 |
Salutations,
Personnellement il y a longtemps que j'ai renoncé à "lier" mes graphes aux sources de données. Tout se fait par programmation.

On voit l'impact de la COVID sur les jours travaillés. oO
Ma routine ProChargeGraphe(). Avec des données codées en dur pour cet exemple.
Procedure ProChargeGraphe()
tabMois est un tableau de chaînes tab2020 est un tableau d'entiers tab2021 est un tableau d'entiers
tabMois = ["Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"] tab2020 = [22, 20, 22, 21, 18, 21, 22, 21, 22, 22, 20, 22] tab2021 = [20, 20, 16, 5, 7, 6, 8, 22, 22, 21, 20, 5]
grSupprimeTout(FgrfJTM)
grEtiquetteSérie(FgrfJTM, 1, "2020") grEtiquetteSérie(FgrfJTM, 2, "2021")
FgrfJTM[1]..CouleurSérie = RougeFoncé FgrfJTM[2]..CouleurSérie = BleuFoncé
grDégradé(FgrfJTM, FintDégradé[1]..Valeur)
grRelief(FgrfJTM, FpotGrapheRelief..Valeur)
SI FselHorVer..Valeur = 1 ALORS grOrientation(FgrfJTM, grOrdonnée, grADroite, grEnHaut) SINON grOrientation(FgrfJTM, grAbscisse, grADroite, grEnHaut) FIN
POUR X = 1 À 12 grAjouteDonnée(FgrfJTM, 1, X, tab2020[X]) grAjouteDonnée(FgrfJTM, 2, X, tab2021[X]) grEtiquetteCatégorie(FgrfJTM, X, tabMois[X]) FIN
grParamètre(FgrfJTM, grGraduationsOptimiséesX, Vrai) grDessine(FgrfJTM) À chaque modification de l'interrupteur ou du sélecteur:
ProChargeGraphe()
À chaque modification du potentiomètre:
grRelief(FgrfJTM, FpotGrapheRelief..Valeur) grDessine(FgrfJTM)
J'offre aussi un combo de couleurs à mes utilisateurs. Ils peuvent personnaliser la couleur de chaque série.
Et il y a plus encore que tu peux faire.
Bon dev.
Serge
-- ----- Parfois, la logique est implacable... |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 213 messages |
| | |
|
| | |
| |
Membre enregistré 57 messages |
|
| Posté le 24 janvier 2021 - 16:18 |
Merci Serge, Et là, je me dis qu'il y a vraiment des gens qui maitrisent la programmation avec Windev... J'ai encore beaucoup à apprendre, Je vais me servir de tout ça pour aller chercher les données dans mon fichier. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 213 messages |
|
| Posté le 25 janvier 2021 - 01:42 |
Je ne maîtrise pas Windev, et de loin.
J'ai simplement eu à me battre avec le champ graphe au fil de mes développements.

N'hésites pas à glisser une note si tu as encore des questions.
Bon Dev.
Serge
-- ----- Parfois, la logique est implacable... |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 57 messages |
|
| Posté le 25 janvier 2021 - 12:31 |
Merci Serge, Je vais abuser un peu mais après je clôturerai le sujet. Cette méthode fonctionne si l'on a des valeurs de janvier à décembre. Mais comment procéder si les premières valeurs commencent à partir de septembre par exemple...? Imaginons que la personne veuille voir le résultat de la requête à partir d'une requête paramétrée avec date de début et date de fin. Surtout que le résultat de la requête apparait sous la forme:
202011 > 5 jours 202012 > 6 jours 202101 > 7 jours etc... ça se complique.. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 4 328 messages |
|
| Posté le 25 janvier 2021 - 13:15 |
Bonjour, Une requête dans le style :
SELECT SUM(Janvier) AS NbJanvier, SUM(Février) AS NbFévrier //etc FROM ( SELECT NbJours AS Janvier, 0 AS Fevrier FROM JourOuvre WHERE MoisMesure=1 AND AnnéeMesure={pAnnée} UNION
SELECT 0 AS Janvier, NbJours AS Février FROM JourOuvre WHERE MoisMesure=2 AND AnnéeMesure={pAnnée} //ETC ) devrait faire l'affaire. Pour les mois qui manquent, il suffit de créer une nouvelle UNION en mettant à 0 les mois non concernés
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 4 328 messages |
|
| Posté le 25 janvier 2021 - 13:17 |
EDIT
Et en complétant les 2 premières sous requêtes
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 4 328 messages |
|
| Posté le 25 janvier 2021 - 15:00 |
| En utilisant la requête ci dessus, on peut créer La fonction AfficheHisto pour afficher les données Procedure AfficheHisto(nDébut est entier,nFin est entier) stJourAnnée est STJourOuvré sSourceJour est chaîne nIndice est entier
REQ_JourOuvrés.pDébut=nDébut REQ_JourOuvrés.pFin=nFin HExécuteRequête(REQ_JourOuvrés) FichierVersTableau(gtabRécap,REQ_JourOuvrés)
POUR TOUT stJourAnnée de gtabRécap nIndice++ sSourceJour=ChaîneConstruit("%1;%2",stJourAnnée:NbJanvier,stJourAnnée:NbFévrier) grSourceSérie(GRF_JourOuvré,nIndice,grProgrammation,sSourceJour) grEtiquetteSérie(GRF_JourOuvré,nIndice,stJourAnnée:Année) FIN grDessine(GRF_JourOuvré)
STJourOuvré est une structure basée sur la requête :
STJourOuvré est structure NbJanvier est entier NbFévrier est un entier Année est entier FIN
gtabRécap est tableau de STJourOuvré
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 213 messages |
|
| Posté le 26 janvier 2021 - 05:53 |
Sautations,
Heure du Québec il est temps pour moi de penser à ma nuit de sommeil. J'ai bricolé un petit "tout inclus" que je compte compléter demain soir.

Le tout est basé sur une requête toute simple.
SELECT GrapheTest.Année AS Année, GrapheTest.Mois AS Mois, GrapheTest.JoursTravaillés AS JoursTravaillés FROM GrapheTest WHERE GrapheTest.Année >= {pDébutAnnée} AND GrapheTest.Année <= {pFinAnnée} AND GrapheTest.Mois >= {pDébutMois} AND GrapheTest.Mois <= {pFinMois} ORDER by Année Asc, Mois Asc Est-ce que la requête correspond à ton besoin ?
Le graphe sectoriel, c'est pour mon plaisir. Je voulais le découvrir depuis un moment et ta demande répond au besoin.
Je laisse chaque bloc de code sur le forum demain soir (partage à long terme). Je fournirai un lien pour le téléchargement du projet (ZIP).
Bon dev.
Serge
-- ----- Parfois, la logique est implacable... |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 4 328 messages |
|
| Posté le 31 janvier 2021 - 10:51 |
Voici une nouvelle mouture un peu moins lourde que la première pour prendre en compte les mois où il n'y a pas eu de pointage :
SELECT ISNULL(JourOuvre.NbJours,0) AS NbJours, //Les mesure qui manquent seront à 0 PlageMesure.MoisMesure AS MoisMesure, PlageMesure.AnnéeMesure AS AnnéeMesure FROM JourOuvre RIGHT OUTER JOIN //ON prend en compte les mesures qui ne sont pas dans la plage théorique //ON récupère la plage théorique ie toutes les paires Mois/Années (SELECT PlageMois.MoisMesure AS MoisMesure, PlageAnnée.AnnéeMesure AS AnnéeMesure FROM //ON initialise tous les mois de l'année (SELECT 1 AS MoisMesure UNION SELECT 2 AS MoisMesure UNION SELECT 3 AS MoisMesure UNION SELECT 4 AS MoisMesure UNION SELECT 5 AS MoisMesure UNION SELECT 6 AS MoisMesure UNION SELECT 7 AS MoisMesure UNION SELECT 8 AS MoisMesure UNION SELECT 9 AS MoisMesure UNION SELECT 10 AS MoisMesure UNION SELECT 11 AS MoisMesure UNION SELECT 12 AS MoisMesure) AS PlageMois, //On récupère les années dans la plage demandée (SELECT DISTINCT JourOuvre.AnnéeMesure AS AnnéeMesure FROM JourOuvre WHERE JourOuvre.AnnéeMesure BETWEEN {pAnnéeDébut} AND {pAnnéeFin}) AS PlageAnnée) AS PlageMesure ON PlageMesure.MoisMesure = JourOuvre.MoisMesure AND PlageMesure.AnnéeMesure = JourOuvre.AnnéeMesure ORDER BY AnnéeMesure ASC, MoisMesure ASC
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 213 messages |
|
| Posté le 01 février 2021 - 04:15 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 213 messages |
|
| Posté le 01 février 2021 - 04:20 |
Je viens de poster une réponse et elle se retrouve "devant" la dernière réponse de Voroltinquo. Le forum a tenu compte de l'heure "locale"...

Original...
-- ----- Parfois, la logique est implacable... |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 57 messages |
|
| Posté le 01 février 2021 - 11:59 |
Merci à tous, Je dois avouer que vous m'avez tous beaucoup aidé! Je me rends compte que j'ai encore beaucoup à apprendre. Merci aussi à Monsieur SERGE, je suis impressionné! Pour la petite histoire, je suis un infirmier qui a découvert windev...et qui adore utiliser cet AGL. Tous les jours, j'en découvre un peu plus! c'est une vraie source d'inspiration pour moi. J'ai ouvert une petite chaîne Youtube sur la programmation windev. J'essaye d'y traiter les problèmes de compréhension que j'ai eu lorsque j'ai commencé à coder en vba puis en wlangage. Vous pouvez faire un saut sur cette chaine en tapant "windevnurse".
Maintenant, j'avais tenté de trouver un moyen "contourné" pour arriver à mes fins! En fait, j'ai crée 2 tableaux invisibles sur ma fenêtre:
un premier qui renseigne les résultats par an et qui alimente les séries. Pour chaque ligne du premier tableau, je relance une requête qui remplit le deuxième tableau avec les résultats de chaque mois. Puis je les lis, pour remplir ces résultats mois par mois....
Pas très conventionnel mais ça marche aussi. Comme quoi, en programmation il y a toujours un moyen d'y arriver.
Encore merci à tous! |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 213 messages |
|
| Posté le 01 février 2021 - 23:25 |
Bonjour,
Depuis le projet test que je propose tu peux extraire les seuls parties de code dont tu as besoin.
La requête SQL est on ne peut plus simple et s'adapte facilement:
SELECT (GAM.Année * 100) + GAM.Mois AS AnnéeMois, GAM.Année AS Année, GAM.Mois AS Mois, GAM.JoursTravaillés AS JoursTravaillés FROM GAM WHERE AnnéeMois >= {pDébutAnnéeMois} AND AnnéeMois <= {pFinAnnéeMois}
ORDER by Année Asc, Mois Asc
Quelque chose pour la sélection des dates, dans mon cas quelques combos.

Le "moteur" du filtre sur dates, que tu trouves dans ProChargeFiltres(). Puis le chargement du graphe lui-même, par exemple ProHistogrammeCharge().
ProHistogrammeDessine(), c'est pour les fonctions complémentaires. Orientation, relief, espacement, etc.
Si tu t'y aventures et que tu as des questions glisse un mot. Idem si tu n'as pas Windev 23 ou plus, je peux extraire les portions de code.
Bon dev.
Serge
-- ----- Parfois, la logique est implacable... |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 91 messages |
|
| Posté le 02 février 2021 - 09:47 |
En tout cas, merci pour cet exemple bien agréable à étudier.
bon dev à tous
Eric |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 57 messages |
|
| Posté le 04 avril 2021 - 13:14 |
Des petites news...alors j'ai contourn'e le problème en passant par un champs table que je remplis à partir du requête donnant des résultats par mois: 202001 = 12 202002 = 20 202003 = ... Ensuite je lis les différents champs en décomposant les données: Serie = Gauche(202001,4) Indice = Droite (202001,2) et ensuite je remplis le graphique par programmation.
C'est une petite bidouille qui marche bien! En tout cas merci pour votre aide à tous! |
| |
| |
| | | |
|
| | | | |
| | |
|