|
Votre avis sur sql +la boucle POUR |
Started by simon, Sep., 21 2017 5:44 PM - 4 replies |
| |
| | | |
|
| |
Posted on September, 21 2017 - 5:44 PM |
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 |
| |
| |
| | | |
|
| | |
| |
Posted on September, 22 2017 - 11:40 AM |
Bonjour
Merci de me donner une piste |
| |
| |
| | | |
|
| | |
| |
Posted on September, 22 2017 - 11:51 AM |
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 |
| |
| |
| | | |
|
| | |
| |
Posted on September, 22 2017 - 9:25 PM |
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 |
| |
| |
| | | |
|
| | |
| |
Posted on September, 25 2017 - 8:18 AM |
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 |
| |
| |
| | | |
|
| | | | |
| | |
|