Calcul automatique du Solde
Le
Réal Phil
Bonjour,
Le contexte:
Une table fichier avec colonnes reliées dont une qui contient un
Montant.
Une dernière colonne calculée non reliée (bien sûr) contenant le So=
lde
cumulé.
En théorie, le calcul suivant placé dans l'affichage d'une ligne
devrait fonctionner pour calculer et afficher le Solde cumulatif dans
la colonne Solde;
Nouv_Solde+=Montant[MoiMême..Valeur]
Solde[MoiMême..Valeur]=Nouv_Solde
Les problèmes
1. Le Solde ne se calcule pas correctement.
2. Comme le calcul est situé dans l'affichage d'une ligne, quand on
remonte dans la table, le Solde continue de se calculer indéfiniment.
C'est normal mais pas souhaitable.
3. Si on corrige un Montant au millieu de la table, évidemment le
Solde ne se recalcule pas avec cette méthode, mais j'aimerais
idéalement qu'il le fasse.
De toute évidence, cette méthode ne fonctionne pas bien.
Je sais que je peux utiliser une colonne Solde reliée avec la table et
ensuite tout calculer depuis la table et faire un AfficheTable() à
chaque fois qu'un Montant change dans la Table. Mais encore là il
subsiste certains problèmes comme celui des chiffres qui sont
localisés dans le bandeau de sélection ne se mettent pas à jour.
Est-ce qu'on doit coder tous ces petits détails (qui n'en finissent
plus) à la main ou s'il existe un truc automatique et simple pour
faire le travail et que je ne connais pas encore ?
Merci à l'avance
Le contexte:
Une table fichier avec colonnes reliées dont une qui contient un
Montant.
Une dernière colonne calculée non reliée (bien sûr) contenant le So=
lde
cumulé.
En théorie, le calcul suivant placé dans l'affichage d'une ligne
devrait fonctionner pour calculer et afficher le Solde cumulatif dans
la colonne Solde;
Nouv_Solde+=Montant[MoiMême..Valeur]
Solde[MoiMême..Valeur]=Nouv_Solde
Les problèmes
1. Le Solde ne se calcule pas correctement.
2. Comme le calcul est situé dans l'affichage d'une ligne, quand on
remonte dans la table, le Solde continue de se calculer indéfiniment.
C'est normal mais pas souhaitable.
3. Si on corrige un Montant au millieu de la table, évidemment le
Solde ne se recalcule pas avec cette méthode, mais j'aimerais
idéalement qu'il le fasse.
De toute évidence, cette méthode ne fonctionne pas bien.
Je sais que je peux utiliser une colonne Solde reliée avec la table et
ensuite tout calculer depuis la table et faire un AfficheTable() à
chaque fois qu'un Montant change dans la Table. Mais encore là il
subsiste certains problèmes comme celui des chiffres qui sont
localisés dans le bandeau de sélection ne se mettent pas à jour.
Est-ce qu'on doit coder tous ces petits détails (qui n'en finissent
plus) à la main ou s'il existe un truc automatique et simple pour
faire le travail et que je ne connais pas encore ?
Merci à l'avance

Poser une question


salut.
normalement, c'est solde[n-1]+montant[n] sauf pour 1
ca devrai marcher mieux ;)
J'ai testé mais comme j'obtenais des resultats bizarres, j'ai placé
Trace(IndiceEnCours) sous l'affichage d'une ligne et au lieu d'avoir
une sequence continue normale de 1 a 242, voici ce que j'obtiens;
1,2,3,4,5,6,7,8,1,1,2 a 241 est ok puis
9,10,11,12,13,14,15,16,17,18,19,20,21,22, 241,240,239 a 222 de
reculons suivi de 242 et 242 deux fois.
Je ne comprend pas cette bizarrerie. Il y a de quoi y perdre son
latin.
J'ai ensuite Synchronise le projet et l'analyse mais cela ne change
rien.
TableOccurrence(MoiMeme) donne le bon resultat de 242
Un compteur de ligne indépendant donne des chiffres sequentiels de 1 a
286 (a cause des lignes qui se repetent)
Quelqu'un a une idée de ce qui se passe ?
J'ai testé mais comme j'obtenais des resultats bizarres, j'ai placé
Trace(IndiceEnCours) sous l'affichage d'une ligne et au lieu d'avoir
une sequence continue normale de 1 a 242, voici ce que j'obtiens;
1,2,3,4,5,6,7,8,1,1,2 a 241 est ok puis
9,10,11,12,13,14,15,16,17,18,19,20,21,22, 241,240,239 a 222 de
reculons suivi de 242 et 242 deux fois.
Je ne comprend pas cette bizarrerie. Il y a de quoi y perdre son
latin.
J'ai ensuite Synchronise le projet et l'analyse mais cela ne change
rien.
TableOccurrence(MoiMeme) donne le bon resultat de 242
Un compteur de ligne indépendant donne des chiffres sequentiels de 1 a
286 (a cause des lignes qui se repetent)
Quelqu'un a une idée de ce qui se passe ?
Bonsoir,
Je ne me rappelle plus du processus précis, mais je me souviens avoir
abandonné cela à l'époque (5.5 ou 8, sais plus). IndiceEncours() c'est, je
crois, la ligne qui a le bandeau. Si tu scrolle et que tu remontes, selon
que ce soit avec les flèches ou PgDown ou molette, le bandeau ne se déplace
pas pareil, etc...
Tout ça pour dire que j'ai fini par faire une lecture complète pour mettre
dans une table MEMOIRE, y compris le solde. Ensuite, c'est cette table
mémoire qui est visualisée, avec donc le solde déjà "figé".
En sortie de la colonne ou on peut changer le montant, je relance la
procédure qui recalcule TOUT.
Je sais que ce n'est pas tout à fait la réponse attendue, mais au cas ou...
Victor
Salut Victor,
Merci pour ta réponse. Dans un sens, ca me rassure de savoir que je ne
suis pas le seul à avoir des problèmes avec ca.
J'ai bien l'impression que c'est un serieux bug dans Windev.
IndiceEnCours sous Affichage d'une ligne devrait toujours donner un
entier sequentiel puisqu'il est sense indiquer le no de chaque ligne a
mesure qu'il les lit dans la table. Cette table est en WD11 et le
problème est toujours la.
Dans ce cas-ci, je ne peux pas utiliser une table memoire. Donc, a
moins que quelqu'un m'envoie une solution, je n'ai pas le choix que de
trouver une autre facon de faire.
Merci a toi.
242, c'est ta ligne de total ( normal)
quand il reaffiche le tableau, il le charge ( indice 1 à 242), puis il
ré-affiche le début ( 9 à 22) puis comme tu doit certainement demander
la fin de table ( indice) il fait à reculons depuis la fin et le bas (
242 à 222).
dans le code d'affichage d'une ligne, tu mets:
local i est un entier=ta_table // recupere l'indice en cours.
si i>1 et i<tableoccurrence(ta_table) alors // cas particulier du
premier solde et de la ligne de total
ta_table.solde[i]=ta_table.solde[i-1]+ta_table_montant[i]
fin
ca devrait fonctionner....