PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → somme avec requète ou addition de la colonne
somme avec requète ou addition de la colonne
Débuté par G. Tenthorey, 27 déc. 2006 07:52 - 6 réponses
Posté le 27 décembre 2006 - 07:52
Bonjour à tous,

Après plusieures heures de tests je viens vous poser ma question voir si on peut trouver une solution.

Mon but c'est d'avoir au final un champ avec un montant total provenant d'un colonne d'un tableau qui à été trié.

J'ai procédé de deux manières :


=============================================

1) avec la requète sql

SELECT SUM(T_facture_detail.ar_total_prix)
FROM T_facture_detail

WHERE T_facture_detail.fact_no = {champ_no_facture}

Donc ici je fais la somme des ar_total_prix qui ont un fact_no qui est égal à champ_no_facture (c 'est le champ du numéro de facture quand j'ouvre un document )

Si je teste cette requète avec une valeur test, pas de problème j'obtiens le bon résultat une addition correcte.
Si par contre ensuite je la teste dans mon projet, le champ qui doit m'afficher le résultat de ma requète m'affiche toujours 1 c'est tout. ( voici ce que j'ai mis pour le champ )

Saisie1 = HExécuteRequête(REQ_addition_montant_total,hRequêteDéfaut)

=============================================

2) avec la fonction somme des colonnes

Oui j'obtient le bon résultat au fond du tableau
Pour reprendre le contenu du résultat il est indiqué de procéder ainsi :

saisie1 = Table_T_facture_lignes_detail.prix_total_ligne[ligneComptage]

Mais à ce moment la ce qui est affiché au fond du tableau et toujours juste, mais dans le champs saisie1 c'est faux car mon tableau est trié.
Alors le champ saisie1 affiche la somme de tous les élément y compris ceux qui ne sont pas dans le tableau. ( ce qui est incorrect )


j'espère m'être exprimé correctement, l'idéal serait pour moi d'utiliser la première proposition si c'est possible.

Merci pour votre aide
Posté le 27 décembre 2006 - 10:00
Bonjour,
Pour la version 1:
La ligne Saisie1 = HExécuteRequête(REQ_addition_montant_total,hRequêteDéfaut) ne peut pas fonctionner, car hExecuteRequête te renvoie un booleen pour t'indiquer si la requête à fontionné ou pas. Converti en entier, false = 0 et true = 1.
Tu dois parcourir ta requête, et lire le résultat pour avoir la somme en question.
Pour la version 2:
Si je comprends bien, tu ne veux pas le total de la colonne, mais le total des lignes affiché pour une colonne donnée. Sinon je ne vois pas pourquoi le résultat serait incorrect si tu récupère celui affiché en pied de tableau. Si c'est bien celà, tu peux essayer de sommer les valeurs dans le code d'affichage des lignes du tableau.

Frédéric.
Posté le 27 décembre 2006 - 10:35
Bonjour

Pourquoi n'utilises tu pas une requète de sélection classique dans laquelle tu paramétrerais un total sur une rubrique ?
Tu ferais un hexecutes requete(marequete,hreqdefaut)
montotal est un reel=marequete.total
Posté le 27 décembre 2006 - 16:16
Bonjour,
je ne répondrais que pour la méthode 1:
donc tu as un résultat de 1 car tu as affecté a ton champ de saisi le
résultat de l'exécution de ta requête (soit 1= ok ,0=erreur)

pour récupérer ton total:

dans la requête tu identifie le résultat , ca simplifie la vie pour la suite

SELECT SUM(T_facture_detail.ar_total_prix) as MonTotal
FROM T_facture_detail

dans ton code

bResExec est un booleen=faux
bResExec=Hexecuterequete(NomRequete, hRequêteDéfaut)
si bResExec alors
saisi1=NomRequete.MonTotal
HAnnuleDéclaration(NomRequete)
sinon
saisi1=0 <== valeur par defaut??
fin

tu devrais avoir ton résultat
dorian
Posté le 27 décembre 2006 - 21:50
Merci à tous pour votre aide, ( je débute en windev alors j'ai beaucoup à apprendre encore ) , je reviendrai directement sur ce forum si j'ai d'autres soucis.

Avec ceci , ca marche très bien à présent


SELECT SUM(T_facture_detail.ar_total_prix) as MonTotal
FROM T_facture_detail

dans ton code

bResExec est un booleen=faux
bResExec=Hexecuterequete(NomRequete, hRequêteDéfaut)
si bResExec alors
saisi1=NomRequete.MonTotal
HAnnuleDéclaration(NomRequete)
sinon
saisi1=0 <== valeur par defaut??
fin


Par contre j'aimerai juste comprendre ce qu'on fait quand on dit

si bResExec alors
saisi1=NomRequete.MonTotal
HAnnuleDéclaration(NomRequete)

Pourquoi on annule la déclaration ? A cause que on attribue à un champ ?

merci et à la prochaine
Posté le 27 décembre 2006 - 21:52
Hello,

Encore moi, j'ai continué de tester cette procédure d'addition.

Ca marche très bien, seulement, lorsque j'ouvre une nouvelle fenetre de factures, j'ai ma table en affichage qui s'appelle Table_T_facture_lignes_detail, cette table est à présent vide.

Mais dans le champ total de cette fenêtre , j'ai par exemple 200.- ce qui correspond au montant total de la facture d'avant ( donc de la requète précédente )

On dirait que la requète n'a pas été relancé ou n'a pas été effacée de la mémoire
Par contre ce que je peux voir c'est que si j'ajoute, un élément dans ce tableau Table_T_facture_lignes_detail , hop, le montant total est à présent calculé juste. ( mais à l'ouverture le montant est faux )

Constatez ce que j'ai mis lors de l'ouverture de la fenêtre ! ( j'ai essayé de mettre lors de l'initialisation le code bResExec... etc mais non ca ne marche pas.

Une idée ?

=== initialisation de la fenêtre ===

Table_T_facture_lignes_detail = HFiltreIdentique(T_facture_detail, T_facture_detail.fact_no, champ_no_facture)
TableAffiche(Table_T_facture_lignes_detail)


=== prise de focus ===

bResExec est un booléen=Faux
bResExec=HExécuteRequête(Requete_de_test, hRequêteDéfaut)
SI bResExec ALORS
test=Requete_de_test.la_somme_ar_total_prix
HAnnuleDéclaration(Requete_de_test)
SINON
test=0
FIN
Posté le 29 décembre 2006 - 10:07
Le 27/12/2006, G. Tenthorey a supposé :
Bonjour à tous,

Après plusieures heures de tests je viens vous poser ma question voir si on
peut trouver une solution.

Mon but c'est d'avoir au final un champ avec un montant total provenant d'un
colonne d'un tableau qui à été trié.

J'ai procédé de deux manières :


=============================================

1) avec la requète sql

SELECT SUM(T_facture_detail.ar_total_prix)
FROM T_facture_detail

WHERE T_facture_detail.fact_no = {champ_no_facture}

Donc ici je fais la somme des ar_total_prix qui ont un fact_no qui est égal à
champ_no_facture (c 'est le champ du numéro de facture quand j'ouvre un
document )

Si je teste cette requète avec une valeur test, pas de problème j'obtiens le
bon résultat une addition correcte. Si par contre ensuite je la teste dans
mon projet, le champ qui doit m'afficher le résultat de ma requète m'affiche
toujours 1 c'est tout. ( voici ce que j'ai mis pour le champ )

Saisie1 = HExécuteRequête(REQ_addition_montant_total,hRequêteDéfaut)

=============================================

2) avec la fonction somme des colonnes

Oui j'obtient le bon résultat au fond du tableau
Pour reprendre le contenu du résultat il est indiqué de procéder ainsi :

saisie1 = Table_T_facture_lignes_detail.prix_total_ligne[ligneComptage]

Mais à ce moment la ce qui est affiché au fond du tableau et toujours juste,
mais dans le champs saisie1 c'est faux car mon tableau est trié. Alors le
champ saisie1 affiche la somme de tous les élément y compris ceux qui ne sont
pas dans le tableau. ( ce qui est incorrect )


j'espère m'être exprimé correctement, l'idéal serait pour moi d'utiliser la
première proposition si c'est possible.

Merci pour votre aide


Saisie1 =
HExécuteRequête(REQ_addition_montant_total,hRequêteDéfaut,MonParam) car
votre req attend un param
ou
Saisie1 =
HExécuteRequête(REQ_addition_montant_total,hRequêteDéfaut,Null) pour
annuler le param

--
Cordialement JeAn-PhI