PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV 2024 → Votre avis sur sql +la  boucle POUR
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