|
| OPTIMISATION DE CODE POUR STATISTIQUE GRAPHE |
| Iniciado por THINK, 10,nov. 2018 07:56 - 12 respuestas |
| |
| | | |
|
| |
Miembro registrado 13 mensajes |
|
| Publicado el 10,noviembre 2018 - 07:56 |
Je le trouve long et je souhaite exécuter le moins possible de requête pour la vitesse. j’exécute 12 fois la même requête, vu mon niveau de développement c'est tout ce que je puisse faire.
refixeAnnee est une chaîne = DateLogiciel..Année MD1,MD2,MD3,MD4,MD5,MD6,MD7,MD8,MD9,MD10,MD11,MD12 sont des Dates MF1,MF2,MF3,MF4,MF5,MF6,MF7,MF8,MF9,dMF10,MF11,MF12 sont des Dates sMJANVIER,sMFEVRIER,sMMARS,sMAVRIL,sMMAI,sMJUIN,sMJUILLET,sMAOUT,sMSEPTEMBRE,sMOCTOBRE,sMNOVEMBRE,sMDECEMBRE sont des chaînes
MD1 = PrefixeAnnee+"0101" MF1 = DernierJourDuMois(PrefixeAnnee+"0101") MD2 = PrefixeAnnee+"0201" MF2 = DernierJourDuMois(PrefixeAnnee+"0201") MD3 = PrefixeAnnee+"0301" MF3 = DernierJourDuMois(PrefixeAnnee+"0301") MD4 = PrefixeAnnee+"0401" MF4 = DernierJourDuMois(PrefixeAnnee+"0401") MD5 = PrefixeAnnee+"0501" MF5 = DernierJourDuMois(PrefixeAnnee+"0501") MD6 = PrefixeAnnee+"0601" MF6 = DernierJourDuMois(PrefixeAnnee+"0601") MD7 = PrefixeAnnee+"0701" MF7 = DernierJourDuMois(PrefixeAnnee+"0701") MD8 = PrefixeAnnee+"0801" MF8 = DernierJourDuMois(PrefixeAnnee+"0801") MD9 = PrefixeAnnee+"0901" MF9 = DernierJourDuMois(PrefixeAnnee+"0901") MD10 = PrefixeAnnee+"1001" dMF10 = DernierJourDuMois(PrefixeAnnee+"1001") MD11 = PrefixeAnnee+"1101" MF11 = DernierJourDuMois(PrefixeAnnee+"1101") MD12 = PrefixeAnnee+"1201" MF12 = DernierJourDuMois(PrefixeAnnee+"1201")
HExécuteRequête(REQ_CA_COMPTANT_JOURNEE,hRequêteDéfaut,MD1,MF1) HExécuteRequête(REQ_CA_CREDIT_JOURNEE,hRequêteDéfaut,MD1,MF1) sMJANVIER =REQ_CA_COMPTANT_JOURNEE.la_somme_TotalEncaissé+REQ_CA_CREDIT_JOURNEE.la_somme_MontantEncaissé grEtiquetteCatégorie(GRF_GrapheCA,1,"Janvier")
HExécuteRequête(REQ_CA_COMPTANT_JOURNEE,hRequêteDéfaut,MD2,MF2) HExécuteRequête(REQ_CA_CREDIT_JOURNEE,hRequêteDéfaut,MD2,MF2) sMFEVRIER =REQ_CA_COMPTANT_JOURNEE.la_somme_TotalEncaissé+REQ_CA_CREDIT_JOURNEE.la_somme_MontantEncaissé
HExécuteRequête(REQ_CA_COMPTANT_JOURNEE,hRequêteDéfaut,MD3,MF3) HExécuteRequête(REQ_CA_CREDIT_JOURNEE,hRequêteDéfaut,MD3,MF3) sMMARS =REQ_CA_COMPTANT_JOURNEE.la_somme_TotalEncaissé+REQ_CA_CREDIT_JOURNEE.la_somme_MontantEncaissé
HExécuteRequête(REQ_CA_COMPTANT_JOURNEE,hRequêteDéfaut,MD4,MF4) HExécuteRequête(REQ_CA_CREDIT_JOURNEE,hRequêteDéfaut,MD4,MF4) sMAVRIL =REQ_CA_COMPTANT_JOURNEE.la_somme_TotalEncaissé+REQ_CA_CREDIT_JOURNEE.la_somme_MontantEncaissé
HExécuteRequête(REQ_CA_COMPTANT_JOURNEE,hRequêteDéfaut,MD5,MF5) HExécuteRequête(REQ_CA_CREDIT_JOURNEE,hRequêteDéfaut,MD5,MF5) sMMAI =REQ_CA_COMPTANT_JOURNEE.la_somme_TotalEncaissé+REQ_CA_CREDIT_JOURNEE.la_somme_MontantEncaissé
HExécuteRequête(REQ_CA_COMPTANT_JOURNEE,hRequêteDéfaut,MD6,MF6) HExécuteRequête(REQ_CA_CREDIT_JOURNEE,hRequêteDéfaut,MD6,MF6) sMJUIN =REQ_CA_COMPTANT_JOURNEE.la_somme_TotalEncaissé+REQ_CA_CREDIT_JOURNEE.la_somme_MontantEncaissé
HExécuteRequête(REQ_CA_COMPTANT_JOURNEE,hRequêteDéfaut,MD7,MF7) HExécuteRequête(REQ_CA_CREDIT_JOURNEE,hRequêteDéfaut,MD7,MF7) sMJUILLET =REQ_CA_COMPTANT_JOURNEE.la_somme_TotalEncaissé+REQ_CA_CREDIT_JOURNEE.la_somme_MontantEncaissé
HExécuteRequête(REQ_CA_COMPTANT_JOURNEE,hRequêteDéfaut,MD8,MF8) HExécuteRequête(REQ_CA_CREDIT_JOURNEE,hRequêteDéfaut,MD8,MF8) sMAOUT =REQ_CA_COMPTANT_JOURNEE.la_somme_TotalEncaissé+REQ_CA_CREDIT_JOURNEE.la_somme_MontantEncaissé
HExécuteRequête(REQ_CA_COMPTANT_JOURNEE,hRequêteDéfaut,MD9,MF9) HExécuteRequête(REQ_CA_CREDIT_JOURNEE,hRequêteDéfaut,MD9,MF9) sMSEPTEMBRE =REQ_CA_COMPTANT_JOURNEE.la_somme_TotalEncaissé+REQ_CA_CREDIT_JOURNEE.la_somme_MontantEncaissé
HExécuteRequête(REQ_CA_COMPTANT_JOURNEE,hRequêteDéfaut,MD10,dMF10) HExécuteRequête(REQ_CA_CREDIT_JOURNEE,hRequêteDéfaut,MD10,dMF10) sMOCTOBRE =REQ_CA_COMPTANT_JOURNEE.la_somme_TotalEncaissé+REQ_CA_CREDIT_JOURNEE.la_somme_MontantEncaissé
HExécuteRequête(REQ_CA_COMPTANT_JOURNEE,hRequêteDéfaut,MD11,MF11) HExécuteRequête(REQ_CA_CREDIT_JOURNEE,hRequêteDéfaut,MD11,MF11) sMNOVEMBRE =REQ_CA_COMPTANT_JOURNEE.la_somme_TotalEncaissé+REQ_CA_CREDIT_JOURNEE.la_somme_MontantEncaissé
HExécuteRequête(REQ_CA_COMPTANT_JOURNEE,hRequêteDéfaut,MD12,MF12) HExécuteRequête(REQ_CA_CREDIT_JOURNEE,hRequêteDéfaut,MD12,MF12) sMDECEMBRE=REQ_CA_COMPTANT_JOURNEE.la_somme_TotalEncaissé+REQ_CA_CREDIT_JOURNEE.la_somme_MontantEncaissé
grAjouteDonnée(GRF_GrapheCA,1,sMJANVIER) grEtiquetteCatégorie(GRF_GrapheCA,1,"Janvier") grAjouteDonnée(GRF_GrapheCA,1,sMFEVRIER) grEtiquetteCatégorie(GRF_GrapheCA,2,"Fevier") grAjouteDonnée(GRF_GrapheCA,1,sMMARS) grEtiquetteCatégorie(GRF_GrapheCA,3,"Mars") grAjouteDonnée(GRF_GrapheCA,1,sMAVRIL) grEtiquetteCatégorie(GRF_GrapheCA,4,"Avril") grAjouteDonnée(GRF_GrapheCA,1,sMMAI) grEtiquetteCatégorie(GRF_GrapheCA,5,"Mai") grAjouteDonnée(GRF_GrapheCA,1,sMJUIN) grEtiquetteCatégorie(GRF_GrapheCA,6,"Juin") grAjouteDonnée(GRF_GrapheCA,1,sMJUILLET) grEtiquetteCatégorie(GRF_GrapheCA,7,"Juillet") grAjouteDonnée(GRF_GrapheCA,1,sMAOUT) grEtiquetteCatégorie(GRF_GrapheCA,8,"Aout") grAjouteDonnée(GRF_GrapheCA,1,sMSEPTEMBRE) grEtiquetteCatégorie(GRF_GrapheCA,9,"Septembre") grAjouteDonnée(GRF_GrapheCA,1,sMOCTOBRE) grEtiquetteCatégorie(GRF_GrapheCA,10,"Octobre") grAjouteDonnée(GRF_GrapheCA,1,sMNOVEMBRE) grEtiquetteCatégorie(GRF_GrapheCA,11,"Novembre") grAjouteDonnée(GRF_GrapheCA,1,sMDECEMBRE) grEtiquetteCatégorie(GRF_GrapheCA,12,"Decembre") grDessine(GRF_GrapheCA)
MERCI
-- PS : I Love WindevMensaje modificado, 10,noviembre 2018 - 08:00 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 1.330 mensajes |
|
| Publicado el 11,noviembre 2018 - 11:53 |
Salut Think,
Tu dois d'abord modifier tes requêtes pour en avoir qu'une seule puisque ton filtre est toujours le même pour les deux données. Dans le code ci-dessous je l'ai appellé REQ_CA_CALCUL_JOURNEE.
Ensuite voici le code qui remplace le tient
PrefixeAnnee est une chaîne = DateLogiciel..Année bReqOk est un booléen = Vrai tabMD est un tableau de 12 Dates tabMF est un tableau de 12 Dates tabMois est un tableau de 12 Monétaires tabMoisNom est un tableau de 12 chaînes = { "Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre" }
MaFenêtre..AffichageActif = Faux
POUR i=1 _À_ 12 tabMD[i] = ChaîneConstruit("%1%2%3", PrefixeAnnee, NumériqueVersChaîne(i,"02d"), "01") tabMF[i] = DernierJourDuMois(ChaîneConstruit("%1%2%3", PrefixeAnnee, NumériqueVersChaîne(i,"02d"), "01"))
SI HExécuteRequête(REQ_CA_CALCUL_JOURNEE, hRequêteDéfaut, tabMD[i], tabMF[i]) ALORS HLitPremier(REQ_CA_CALCUL_JOURNEE) SINON bReqOk = Faux SORTIR FIN tabMois[i] = REQ_CA_CALCUL_JOURNEE.la_somme_TotalEncaissé + REQ_CA_CALCUL_JOURNEE.la_somme_MontantEncaissé grEtiquetteCatégorie(GRF_GrapheCA, i, tabMoisNom[i]) grAjouteDonnée(GRF_GrapheCA, i, tabMois[i]) grEtiquetteCatégorie(GRF_GrapheCA, i, tabMoisNom[i]) FIN
SI bReqOk ALORS grDessine(GRF_GrapheCA) SINON ToastAffiche("Erreur de requête : " + HErreur(hErrEnCours), toastCourt, cvMilieu, chCentre) FIN
MaFenêtre..AffichageActif = Vrai
A+ Daryl
-- http://www.concept4u2.com |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 2.682 mensajes |
|
| Publicado el 11,noviembre 2018 - 15:06 |
Bonjour,
Je te confirme qu'exécuter 12 fois la même requête est une perte de temps. Avant toute chose, il te faudrait poster ta requête pour qu'on travaille d'abord là dessus.
Le reste coulera de source.
@Daryl: Ton code n'est plus ni moins que celui de Think avec des tableaux. Aucun gain de performance à espérer. 
-- Cordialement,
Philippe SAINT-BERTIN |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 334 mensajes |
|
| Publicado el 11,noviembre 2018 - 18:06 |
A voir ton code, la seule solution, c’est de revoir tes requêtes, et si je comprend bien ton besoin, je pense qu’il te faut juste 2 requête avec le bon GROUP BY qui va bien pour alimenter ton GRAPHE…
Voir tout dans une requête avec une jointure.
-- ——————————————————————————————————— Ce qui se conçoit bien se code clairement et se débogue facilement...
- Pastiche d’une citation de Nicolas Boileau -Mensaje modificado, 11,noviembre 2018 - 18:47 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 1.330 mensajes |
|
| Publicado el 14,noviembre 2018 - 00:14 |
Salut Philippe,
Tu as entièrement raison, je voulais juste simplifier son code. Mais on est tous d'accord que c'est sa requête qui plombe tout 
A+ Daryl
-- http://www.concept4u2.com |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 2.682 mensajes |
|
| Publicado el 14,noviembre 2018 - 07:22 |
Etant donné qu'il n'a pas souhaité fournir sa requête ça va être compliqué de l'aider.
-- Cordialement,
Philippe SAINT-BERTIN |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 13 mensajes |
|
| Publicado el 14,noviembre 2018 - 07:48 |
non pas que je ne veuille pas, j’étais juste un peu absent c'est jour ci . La voila !
SELECT VENTECAISSE.TypeVente AS TypeVente, VENTECAISSE.Date AS Date, VENTECAISSE.ETAT AS ETAT, VENTECAISSE.IDMODEDEPAIEMENT AS IDMODEDEPAIEMENT, VENTECAISSE.REFERENCEMODEPAIEMENT AS REFERENCEMODEPAIEMENT, VENTECAISSE.CreerPar AS CreerPar, SUM(VENTECAISSE.TotalVente) AS la_somme_TotalVente, SUM(VENTECAISSE.TotalCredit) AS la_somme_TotalCredit, SUM(VENTECAISSE.TotalRemise) AS la_somme_TotalRemise, SUM(VENTECAISSE.TotalNetAPayer) AS la_somme_TotalNetAPayer FROM VENTECAISSE WHERE VENTECAISSE.Date BETWEEN {pDate1} AND {pDate2} AND VENTECAISSE.TypeVente = {TypeDeVente} AND VENTECAISSE.ETAT = 1 AND VENTECAISSE.IDMODEDEPAIEMENT = {pModePaiment} AND VENTECAISSE.CreerPar = {pVendeur} GROUP BY VENTECAISSE.TypeVente, VENTECAISSE.Date, VENTECAISSE.ETAT, VENTECAISSE.IDMODEDEPAIEMENT, VENTECAISSE.REFERENCEMODEPAIEMENT, VENTECAISSE.CreerPar
Merci a tous
-- PS : I Love Windev |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 2.682 mensajes |
|
| Publicado el 14,noviembre 2018 - 08:19 |
Bonjour,
Ben la requête est presque bonne, il te suffit d'enlever les conditions sur Date et TypeVente, et ta requête terenverra toutes les infos. Ensuite tu peux les traiter ligne par ligne et ça ira beaucoup plus vite.
-- Cordialement,
Philippe SAINT-BERTIN |
| |
| |
| | | |
|
| | |
| |
| Publicado el 14,noviembre 2018 - 08:31 |
Mais comment il pourra traiter ça requête, on est plusieurs comme lui n’allant pas le niveau aboutit en programmation. J’ai aussi le même problème.
SVP plus de détail
Fabian Monty:merci: |
| |
| |
| | | |
|
| | |
| |
| Publicado el 14,noviembre 2018 - 09:53 |
Bonjour,
Il suffit d'enlever les dates dans la clause WHERE comme ceci :
SELECT VENTECAISSE.TypeVente AS TypeVente, VENTECAISSE.Date AS Date, VENTECAISSE.ETAT AS ETAT, VENTECAISSE.IDMODEDEPAIEMENT AS IDMODEDEPAIEMENT, VENTECAISSE.REFERENCEMODEPAIEMENT AS REFERENCEMODEPAIEMENT, VENTECAISSE.CreerPar AS CreerPar, SUM(VENTECAISSE.TotalVente) AS la_somme_TotalVente, SUM(VENTECAISSE.TotalCredit) AS la_somme_TotalCredit, SUM(VENTECAISSE.TotalRemise) AS la_somme_TotalRemise, SUM(VENTECAISSE.TotalNetAPayer) AS la_somme_TotalNetAPayer FROM VENTECAISSE WHERE AND VENTECAISSE.TypeVente = {TypeDeVente} AND VENTECAISSE.ETAT = 1 AND VENTECAISSE.IDMODEDEPAIEMENT = {pModePaiment} AND VENTECAISSE.CreerPar = {pVendeur} GROUP BY VENTECAISSE.TypeVente, VENTECAISSE.Date, VENTECAISSE.ETAT, VENTECAISSE.IDMODEDEPAIEMENT, VENTECAISSE.REFERENCEMODEPAIEMENT, VENTECAISSE.CreerPar
Et de traiter ces conditions de dates dans le code :
HExécuteRequête(REQ_CA_COMPTANT_JOURNEE,hRequêteDéfaut) POUR TOUT REQ_CA_COMPTANT_JOURNEE SELON REQ_CA_COMPTANT_JOURNEE.Date CAS MD1<*<DF1 : CAS MD2<*>DF2 : FIN FIN
A+ |
| |
| |
| | | |
|
| | |
| |
| Publicado el 14,noviembre 2018 - 10:07 |
Mon 2ème cas est faux c'est
CAS MD2<*<DF2 : |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 13 mensajes |
|
| Publicado el 14,noviembre 2018 - 12:37 |
RogerCageot a écrit :
Mon 2ème cas est faux c'est CAS MD2<*<DF2 :

-- PS : I Love Windev |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 334 mensajes |
|
| Publicado el 14,noviembre 2018 - 19:28 |
Sans être devant un PC pour valider ma proposition, j’aurai testé un truc du genre :
SELECT VENTECAISSE.TypeVente AS TypeVente, VENTECAISSE.Date AS Date, VENTECAISSE.ETAT AS ETAT, VENTECAISSE.IDMODEDEPAIEMENT AS IDMODEDEPAIEMENT, VENTECAISSE.REFERENCEMODEPAIEMENT AS REFERENCEMODEPAIEMENT, VENTECAISSE.CreerPar AS CreerPar, SUM(VENTECAISSE.TotalVente) AS la_somme_TotalVente, SUM(VENTECAISSE.TotalCredit) AS la_somme_TotalCredit, SUM(VENTECAISSE.TotalRemise) AS la_somme_TotalRemise, SUM(VENTECAISSE.TotalNetAPayer) AS la_somme_TotalNetAPayer FROM VENTECAISSE WHERE (VENTECAISSE.Date BETWEEN {pDate1} AND {pDate2}) AND VENTECAISSE.TypeVente = {TypeDeVente} AND VENTECAISSE.ETAT = 1 AND VENTECAISSE.IDMODEDEPAIEMENT = {pModePaiment} AND VENTECAISSE.CreerPar = {pVendeur} GROUP BY VENTECAISSE.TypeVente, YEAR(VENTECAISSE.Date), MONTH(VENTECAISSE.Date), VENTECAISSE.ETAT, VENTECAISSE.IDMODEDEPAIEMENT, VENTECAISSE.REFERENCEMODEPAIEMENT, VENTECAISSE.CreerPar
Ou pDate1 serait égale au 1 janvier de l’année à traiter et pDate2 serait le 31 décembre de l’années à traiter.
-- ——————————————————————————————————— Ce qui se conçoit bien se code clairement et se débogue facilement...
- Pastiche d’une citation de Nicolas Boileau -Mensaje modificado, 14,noviembre 2018 - 19:32 |
| |
| |
| | | |
|
| | | | |
| | |
|