|
Votre avis sur sql +la boucle POUR |
Débuté par simon, 21 sep. 2017 17:44 - 4 réponses |
| |
| | | |
|
| |
Posté le 21 septembre 2017 - 17:44 |
Bonjour
Je voudrais afficher le journal de caisse mensuel (12 mois) (total esp, total chq, total crdit)
Mon code sql est le suivant qui ma' affiche le bon résultat
TableSupprimeTout(TableJournalCaisse)
POUR K= 1 A 12 mois est une chaîne=ChaîneConstruit(" AND VENTES.Mois_Doc ='%1' ",K) fnContenuRequete = [ select VENTES.Mois_Doc as Mois_Doc , sum(case when VENTES.ETATCOMMANDE in (%1) AND VENTES.ModeReglement ='ESPECE' then VENTES.TOTALTTC else 0 end) as V_ESP, sum(case when VENTES.ETATCOMMANDE in (%1) AND VENTES.ModeReglement ='EN COMPTE' then FCommandes.TOTALTTC else 0 end) as V_CRD, sum(case when VENTES.ETATCOMMANDE in (%1) AND VENTES.ModeReglement ='CHEQUE' then VENTES.TOTALTTC else 0 end) as V_CHQ, // Partie avoir sum(case when VENTES.ETATCOMMANDE in (%2) AND VENTES.ModeReglement ='ESPECE' then VENTES.TOTALTTC else 0 end) as A_ESP, sum(case when FCommandes.ETATCOMMANDE in (%2) AND VENTES.ModeReglement ='EN COMPTE' then VENTES.TOTALTTC else 0 end) as A_CRD, sum(case when VENTES.ETATCOMMANDE in (%2) AND VENTES.ModeReglement ='CHEQUE' then VENTES.TOTALTTC else 0 end) as A_CHQ FROM VENTES WHERE VENTES.EtatTransfert <> '1' %3 GROUP BY Mois_Doc ORDER BY Mois_Doc ASC ]
fnContenuRequete=ChaîneConstruit(fnContenuRequete,"'FA'","'AV'",mois )
SI PAS HExécuteRequêteSQL(fnsdSourceRequete,hRequêteDéfaut,fnContenuRequete)ALORS Erreur(HErreurInfo()) RETOUR FIN SI HNbEnr(fnsdSourceRequete)<>0 ALORS TableAjouteLigne(TableJournalCaisse,... K,... (fnsdSourceRequete.V_esp-fnsdSourceRequete.A_esp),... fnsdSourceRequete.V_CHQ,... fnsdSourceRequete.V_CRD) FIN FIN
HAnnuleDéclaration(fnsdSourceRequete)
Ma question est que l'utilisation de la boucle POUR est une bonne idée ou il y a une autre méthode pour calculer les totaux de 12 mois ?
Merci d'avance pour vos aides |
| |
| |
| | | |
|
| | |
| |
Posté le 22 septembre 2017 - 11:40 |
Bonjour
Merci de me donner une piste |
| |
| |
| | | |
|
| | |
| |
Posté le 22 septembre 2017 - 11:51 |
Bonjour, Plutôt que de lancer une requête par mois, je lancerai une requête qui renvoie les 12 mois, avec une boucle sur le résultat. Ce sera certainement plus rapide.
Frédéric.
"simon" a écrit dans le message de groupe de discussion : 20176d551087632489891f2233b7193d1491@news.pcsoft.fr...
Bonjour
Merci de me donner une piste |
| |
| |
| | | |
|
| | |
| |
Posté le 22 septembre 2017 - 21:25 |
Bonsoir Frédéric et merci de votre retour
fnContenuRequete = [ SELECT MONTH (VENTES.dateDoc) as mois,
sum(case when VENTES.ETATCOMMANDE in (%1) AND VENTES.ModeReglement ='ESPECE' then VENTES.TOTALTTC else 0 end) as V_ESP, FROM VENTES
WHERE VENTES.EtatTransfert <> '1' %3 GROUP BY Mois_Doc ORDER BY Mois_Doc ASC ]
J'essayer avec ça mais j'ai un message "La procédure stockée n'a pas été trouvée
Merci de me corriger mon code |
| |
| |
| | | |
|
| | |
| |
Posté le 25 septembre 2017 - 08:18 |
Bonjour, Je ne sais pas s'il s'agit d'une erreur de copier/coller, mais il y a une virgule en trop dans la requête, après V_ESP. Sinon pour "corriger le code", il nous faudrait la procédure telle qu'elle est envoyer à la BDD, donc après le ChaineConstruit(), parce qu'ici nous n'avons aucune idée de ce que contient %3...
Frédéric.
"simon" a écrit dans le message de groupe de discussion : 2017a99e16afaaa04f59f9a72085ec4d7d31@news.pcsoft.fr...
Bonsoir Frédéric et merci de votre retour
fnContenuRequete = [ SELECT MONTH (VENTES.dateDoc) as mois,
sum(case when VENTES.ETATCOMMANDE in (%1) AND VENTES.ModeReglement ='ESPECE' then VENTES.TOTALTTC else 0 end) as V_ESP, FROM VENTES
WHERE VENTES.EtatTransfert <> '1' %3 GROUP BY Mois_Doc ORDER BY Mois_Doc ASC ]
J'essayer avec ça mais j'ai un message "La procédure stockée n'a pas été trouvée
Merci de me corriger mon code |
| |
| |
| | | |
|
| | | | |
| | |
|