IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

calcul dans une ligne de table


Sujet :

WinDev

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 74
    Par défaut calcul dans une ligne de table
    bonjour,

    je reviens vers vous car je n'ai toujours pas trouvé la solution à mes problèmes.

    pour les personnes qui n'ont pas suivi mon parcours, je tiens à leur souligner que je suis un autodidacte qui approche les 60 ans.
    Donc, pas programmeur, pas informaticien.

    j'ai créé pour mon plaisir, un projet qui n'est rien d'autre qu'un compte bancaire.
    je me suis inspiré de l'exemple fourni (que j'ai transformé et agrémenté à ma guise), mais il ne va pas jusqu'au bout.
    je n'ai cessé de chercher dans les fichiers d'aide, autoformation, sur des forums, mais je n'ai pas trouvé mon bonheur.

    malgré l'aide que certains m'ont apportés sur ce forum, rien n'y a fait.

    voilà mon problème n° 1:

    j'ai une table fichier dans laquelle j'ai une colonne Débit et une Crédit. j'aimerais pouvoir obtenir dans une colonne Solde, le solde de chaque opération.
    Exemple:
    ligne 1 .. SOLDE de DEPART 1000 €
    ligne 2 .. DEBIT 100 € .. SOLDE 900 €
    ligne 3 .. CREDIT 100 € .. SOLDE 1000 €
    et ainsi de suite pour n'importe quelle opération.

    Problème n° 2:

    mon projet fonctionne, mais seulement en mono-compte.
    je souhaiterais en faire un multi-compte.
    Comment dois-je faire ?

    merci beaucoup de votre compréhension.

    cordialement.


    Bonne fêtes à tous et meilleurs voeux.

  2. #2
    Membre du Club
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 8
    Par défaut
    Hello

    Je vais tenté de t'aider bien que je ne vois pas trop le problème.

    ###

    [Problème #1]
    A mon avis tu devras créer physiquement une colonne dans ton fichier que tu appelleras 'solde' et que tu devrais calculer, par programmation, a chaque insertions dans la table.

    Pour ce faire je te conseil d'insérer dans un premier lieu la ligne avec un solde à zéro. Puis de recherche la solde précédente et de l'additionner au colonne de débit ou de crédit précédemment ajouter, pour ensuite insérer le résultat en lieu et place du zéro dans la colonne solde.

    ###

    [Problème #2]
    Sinon pour faire une application multi-compte, il te faut modifier légèrement ta table. Pour ce faire tu rajoute à la colonne Débit et Crédit une colonne NoCompte qui correspondra au numéro de compte. Ainsi tu pourras différencier les mouvements du compte 1 ou du compte 2, 3, 4 ...

    Tu peux en complément crée un table de la liste des comptes avec par exemple le nom de la personne qui le possède. Ainsi tu aura une nouvelle table avec les colonne NoCompte, Nom, Prenom, ... dont le NoCompte sera liée à ta table des mouvements par la même colonne NoCompte.

    ###

    [Schémas des tables]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    compte
       colonnes:
          noCompte: entier
          nom: chaine
          prenom: chaine
     
    mouvement
       colonnes:
          noMouvement: entier
          credit: réel
          débit: réel
          solde: réel
          noCompte: entier
    ###

    [Shémas des données]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    compte
       1   Jaques    Piebot
       2   Charles   Dupond
       3   Jean      Picard
     
    mouvements
       1   0    10   10   1
       2   0    20   30   1
       3   10   0   -10   2
       4   10   0   -20   2
       5   0    30   10   2
       6   0    50   50   3
    ###

    J'espère avoir été suffisamment claire, il est très difficile quant on a une certaine expérience d'expliquer les choses les plus simple et surtout de les comprendre car souvent les termes utilisé ne sont pas adéquat

  3. #3
    Membre actif
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 74
    Par défaut calcul dans colonne de table
    bonsoir, Chorley,

    merci pour ta réponse mais ce n'est pas ce que je demande.

    j'ai bien dans ma table une colonne SOLDE et j'ai essayé divers calculs du genre col_Solde=(COL_Crédit)-(COL_Débit), en essayant dans chaque ligne de colonne ou de table, mais sans résultat.
    Ce que je veux, c'est connaître la bonne méthode de calcul, celle qui me permettra d'ajouter ou d'enlever à ma ligne SOLDE la somme que j'aurai entré et faire en sorte que ce calcul se fasse de même pour toutes les lignes.

    pour le multi-compte, j'ai bien une table comptes et j'ai entré plusieurs N°.
    ce que souhaite, c'est qu'en selectionnant dans ma table comptes ou dans une liste déroulante que j'ai créée dans ma fenêtre mouvements, tel ou tel N°, ma table n'affiche que les opérations d'un même compte.
    Exemple: compte N° 1 n'affiche dans ma table mouvements, que les opérations saisies dans ma fenêtre de saisie. Puis, si je choisis le compte N° 2, ma table soit vide au départ et affiche ensuite la première opération saisie pour ce compte et ainsi de suite.

    Il me semble que ce que tu me dis, doit faire apparaître les différents comptes dans la même table.

    bon, pour récapituler, je veux que ma table n'affiche que les opérations d'un même compte.
    Est-ce que cela est possible ou faut-il une table par compte ?
    Si c'est une table par compte, comment faire pour les afficher au même endroit dans ma table mouvements ?


    cordialement

  4. #4
    Membre Expert
    Homme Profil pro
    Développeur et responsable micros/réseaux
    Inscrit en
    Octobre 2010
    Messages
    1 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur et responsable micros/réseaux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 286
    Par défaut
    Bonjour,

    ce que shorley te dit est la bonne méthode. Chaque ligne sera associée à un compte donc pour n'afficher que certaines lignes (donc en sélectionnant le compte dans ta combo), il faut faire un filtre sur ce N°.

    Donc lors de la sélection, filtre sur le n° puis un tableaffiche pour rafraichir la table.

    Pour le solde, soit tu le mets dans ta colonne solde du fichier, soit tu le calcul lors de l'ajout des lignes dans la table ( ce qui suppose que tu fais un ajout manuel). Quoi qu'il en soit, tu dois savoir quelle est la dernière ajoutée et faire un tri lors de l'ajout. En général, pour faire un ordre, on utilise un numéro de ligne ou une date complète de saisie avec heure et seconde. Lors de l'ajout, ce chiffre est augmenté de 1. On récupère le solde de la ligne précédente et on fait l'opération d'ajout/suppression sur ce solde. Si c'est avec la date, il faut trier en fonction de la date de saisie et prendre la dernière ligne.
    Ma préférence va à l'entier de numéro de ligne car c'est plus rapide pour les tris.

    à bientôt,

    Nicolas

  5. #5
    Membre chevronné
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    256
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2010
    Messages : 256
    Par défaut
    Bonjour,

    Je déconseillerais de stocker le solde dans le fichier, car, si on modifie
    une ligne avant la dernière, il faut tout recalculer et remémoriser.

    Par contre, pour le calculer sans le mémoriser, il faut utiliser une table fichier "chargée en mémoire". (dans une table à accès direct, seuls les colonnes calculées des enregistrements visualisés sont disponibles)
    La colonne Solde n'est liée à aucune rubrique

    Dans le code d'affichage d'une ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    si Table=1
      Solde=Credit-Debit // ou tout autre solde de départ (report à nouveau, etc...)
    sinon
      Solde=Solde[Table-1]+Credit-Debit
    fin
    Ce code a l'avantage d'afficher automatiquement le solde selon votre critère de tri
    (par exemple en date d'opération ou en date de valeur)

    Bon, j'espère que j'ai pas dit trop de bêtises, il est tard là...

    Patrick

  6. #6
    Membre actif
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 74
    Par défaut windev 16 : Calcul sur ligne de table
    Bonsoir SevenSoftware,

    j'ai copié ton code dans le code d'affichage d'une ligne, mais j'ai dû l'adapter en modifiant les noms.
    Voici ce que cela donne:
    1. SI TABLE_MOUVEMENT=1
    2. Solde=COL_Crédit-COL_Montant
    3. SINON
    4. Solde=COL_Solde[TABLE_MOUVEMENT-1] +COL_Crédit-COL_Montant
    5. FIN


    Il s'agit bien d'une table fichier chargée en mémoire.

    Mais cela ne fonctionne pas comme je l'espérais. Le solde n'est pas bon et en plus il ne s'affiche pas dans la colonne Solde. J'ai créé une zone de saisie nommée Solde en bas à gauche de la table.

    Je joins une photo d'écran ou l'on peut voir la colonne solde remplie, mais je l'ai fait manuellement, sauf les 2 dernières lignes qui réagissent à ton code.

    Merci

    Cordialement.
    Images attachées Images attachées  

  7. #7
    Membre actif
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 74
    Par défaut windev 16 : Calcul sur ligne de table
    Bonsoir Nicolas,

    tu me dis que pour sélectionner un compte dans ma combo, il faut faire un filtre sur ce N°.
    J'ai essayé ceci dans la zone d'une sélection de ligne de combo:
    1. COMBO_COMPTE..Filtre = NumCompte
    2. TableAffiche(TABLE_MOUVEMENT)


    NumCompte est de couleur rouge (identificateur inconnu) donc erreur.
    Ce n'est pas faute d'avoir cherché dans l'index de l'aide, puis dans le Guide d'autoformation, mais j'avoue ne pas saisir.
    Idem pour le calcul du solde. Je n'ai vraiment pas capté.

    Je suis désolé, mais je ne suis pas aussi avisé que vous tous. Hélas !!!

    Quoiqu'il en soit, je remercie toutes les personnes qui ont la patience pour m'aider.

    Cordialement

    ps: voici un aperçu de ma table en fichier joint
    Images attachées Images attachées  

  8. #8
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    1 372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 372
    Par défaut Salut kirikou84,
    Je ne sais pas trop où tu en es de tes problèmes alors je vais les traiter dans l'ordre et à ma manière (moi non plus je ne suis pas informaticien et comme toi, je suis autodidacte ;-)

    Question 1 : Calcul du solde
    Pour moi, il y a erreur sur la démarche ou alors j'ai mal compris. Je m'explique.
    Ton projet permet de gérer un compte, exact ?
    La gestion d'un compte c'est des mouvements (débits ou crédits) et un seul et unique solde, le solde du compte, non ?
    Donc, la colonne solde à coté des colonne débit et crédit n'a aucun sens. Tu ne peux pas avoir une valeur à la fois dans crédit et dans débit.
    Donc, la gestion de ton compte implique 2 fichiers de données : 1 pour les mouvements et 1 pour le compte (et même les comptes).

    Le fichier compte est composé :
    D'un identifiant automatique et sans doublon (un numérique entier créé par défaut par windev)
    Un libellé au format texte
    Un solde au format monétaire
    Tu peux ajouter d'autres champs si tu le souhaite (n° de compte, observations, date de création, date de modif...)

    Le fichier mouvements est composé :
    D'un identifiant automatique et sans doublon (même remarques que pour le fichier compte)
    Pour gérer le type de mouvement (crédit ou débit) tu peux soit créer deux champs monétaires séparés (un crédit et un débit) soit créer un champ monétaire unique et ajouter un champ permettant de préciser le type de mouvement (un champ texte ou numérique entier dans lequel en indiquera le type du mouvement au moment de la saisie)

    Maintenant, il te faut lier tes deux fichiers :
    Dans l'éditeur d'analyse et une fois que tu as créé et validé tes fichiers, tu devrait les voir apparaitre sous la forme d'une petite fenêtre pour chacun. En haut à gauche de ton écran tu clique sur l'outil permettant de créer un lien entre deux fichiers. Ensuite tu clique sur le fichier Compte puis sur le fichier Mouvements. Il te reste à paramétrer le lien :
    - Chaque compte à au moins un mouvement : non
    - Chaque compte peut avoir plusieurs mouvement : oui
    - Chaque mouvement à au moins un compte : oui
    - Chaque mouvement peut avoir plusieurs compte : non

    Voilà, les fichiers sont ok (même pour la gestion de plusieurs comptes)

    Les fenêtre maintenant :

    Dans la fenêtre qui affiche le compte, il te faut au moins :
    1 table pour afficher les mouvements
    1 champ saisie pour afficher le solde et lié au champ solde du fichier compte
    et je te conseil un bouton pour lancer le calcul du solde (tu peux aussi le rendre automatique à chaque saisie)

    Le code pour calculer le solde si tu as opté pour une colonne crédit et une colonne débit donc 2 valeur monétaire différentes dans ton fichier de données :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    //Déclaration des variables
    Credit est un monétaire = 0
    Debit est un monétaire = 0
     
    //Calcul du solde
    POUR TOUTE LIGNE DE TABLE_Mouvements
    	Crédit = Credit + COL_Credit
    	Debit = Debit + COL_Debit
    FIN
     
    //Mise à jour du champ solde
    SAI_Solde = Credit - Debit
    Ou, si tu as opté pour un champ monétaire unique dans le fichier des mouvement avec un champ type de mouvement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    //Déclaration des variables
    Solde est un monétaire = 0
     
    //Calcul du solde
    POUR TOUTE LIGNE DE TABLE_Mouvements
    	Si COL_Type = "Crédit" alors
    		Solde = Solde + COL_Montant
    	Sinon
    		Solde = Solde - Montant	
    	Fin
    FIN
     
    //Mise à jour du champ solde
    SAI_Solde = Solde

    Tu utilise l'un ou l'autre des codes avec un bouton "Calcul" soit en sortie de colonne "Crédit" et "Débit" soit à chaque modification des colonnes "Crédit" ou "Débit"

    Pour ta question concernant la gestion de plusieurs compte :
    Il te faut impérativement utiliser les fonctions permettant d'activer ou de désactiver les filtres sur fichier.

    En clair, avant ta fenêtre permettant d'afficher le détail d'un compte, il te faut une fenêtre permettant d'afficher la liste des comptes (tu utilise une table tout simplement).

    La fonction HFiltre(Fichier_Mouvements,ID_Compte,Compte.ID_Compte) te permet de d'activer le filtrage des mouvements qui correspondent au compte choisi.

    En gros, le code à placer sur un bouton permettant d'afficher le détail du compte choisi dans la liste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    //Une ligne est elle sélectionnée
    SI TableSelect(Table_Liste_Comptes) = -1 ALORS RETOUR
     
    //Lecture des données
    HLitRecherche(Fichier_Compte,ID_Compte,Table_Liste_Compte.COL_ID_Compte)
     
    Si htrouve(Compte) = vrai alors
    	HFiltre(Fichier_Mouvements,ID_Compte,Compte.ID_Compte)
    	Ouvre(FEN_Detail_Compte)
    Sinon
    	retour
    Fin
     
    //On désactive le filtre à la fin
    hdésactivefiltre(Fichier_Mouvements)
    Dans le code d'initialisation de ta fenêtre affichant le détail de ton compte, tu dois ajouter la fonction fichierversecran()

    Voilà, j'en reste là pour l'instant et je reste à disposition.

    A+ et amuse toi bien

  9. #9
    Membre actif
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 74
    Par défaut
    Bonjour à toute la communauté,

    Merci à toi LOLOLEBRICOLEUR, j'ai pu faire fonctionner la sélection pour le tri d'un compte. Par contre je n'arrive pas à reproduire cela avec une combo basée sur le fichier compte.NumCompte, que j'ai mise dans la fenêtre Mouvements.

    A l'ouverture de la fenêtre, la table est remplie de toutes les transactions, des 2 comptes.
    La combo me renvoie bien les 2 numéros de compte, mais lorsque je séléctionne un compte c'est toujours le compte 1 qui s'affiche, puis la combo ne m'affiche plus rien lorsque je veux choisir le compte 2.

    Voici le code de la combo:
    1. COMBO_COMPTE1..Filtre = TABLE_MOUVEMENT.COL_NumCompte
    2. HFiltre(Fichier_MOUVEMENT,NumCompte,Fichier_COMPTE.NumCompte)
    3. TableAffiche(TABLE_MOUVEMENT)
    4. HDésactiveFiltre(Fichier_MOUVEMENT)


    Bon, s'il ne g'agissait que de cela, ce ne serait pas très grave. Je me contenterais d'ouvrir la fenêtre TABLE_COMPTES et sélectionnerais d'ici.


    MAIS, le plus important
    , c'est que le solde n'est plus bon lorsque je sélectionne un compte.
    Ex: (le compte 1 est 000, le compte 2 est 001) compte 000, solde 1000 €, me renvoie bien cela. Si je crée un nouveau compte, 001, solde 10000 €, le solde de ce compte est 11000 €, mais le solde du compte 000, passe lui aussi à 11000 € . Puis, quand je fais des opérations dans l'un ou l'autre des comptes, le calcul du solde n'est pas bon, il prend en résultat les 2 soldes et les opérations..

    Comment faire pour que les soldes de ces comptes soient bien à 1000 € et 10000 € ? .
    Ex: Soit compte 000 solde 1000 € + 100 = 1100 € et ainsi de suite
    Ex: Soit compte 001 solde 10000 € - 100 = 9900 € et ainsi de suite


    Par contre, dans la table mouvements, le solde est bon. la table m'affiche les opérations des 2 comptes, donc les 2 soldes ainsi que les transactions pour les 2 comptes...

    Voilà, je pense être condamné à n'avoir qu'un seul compte (pour l'instant).

    Bon, pour passer à autre chose, j'ai une requête basée sur "MOIS" et en retour dans une table, la colonne mois m'affiche " 201201" pour le mois de janvier 2012. Après avoir cherché et essayé différents affichages, je ne parviens pas à avoir:
    Janvier. Existe t'il un moyen d'afficher par exemple une colonne avec "janvier" puis une autre avec "2012" ?

    J'ai également des soucis avec les graphes. Dans ma documentation papier, pratiquement rien. Dans l'aide ? de Windev, pas grand chose non plus. L'exemple Autoformation Grapheur, ne m'a pas apporté plus que ça.
    Je ne parviens pas à afficher: pour un histogramme, le nom des mois en bas et l'année dans les séries.

    Merci à toutes les bonnes volontés, nouvelles, et celles qui m'ont déjà bien aidé.

    Cordialement

  10. #10
    Membre Expert
    Homme Profil pro
    Développeur et responsable micros/réseaux
    Inscrit en
    Octobre 2010
    Messages
    1 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur et responsable micros/réseaux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 286
    Par défaut
    Citation Envoyé par kirikou84 Voir le message
    1. COMBO_COMPTE1..Filtre = TABLE_MOUVEMENT.COL_NumCompte
    2. HFiltre(Fichier_MOUVEMENT,NumCompte,Fichier_COMPTE.NumCompte)
    3. TableAffiche(TABLE_MOUVEMENT)
    4. HDésactiveFiltre(Fichier_MOUVEMENT)
    Dans ton HFiltre tu utilises une variable (Fichier_COMPTE.NumCompte) qui n'est pas celle de ta combo ou de ta table, est-ce normal ? Ta table TABLE_MOUVEMENT est-elle reliée au fichier ou bien est-ce que c'est une table alimentée par programmation ? Car si tu désactive le filtre et que ta table est une table fichier, alors les données ne seront plus filtrées ....

Discussions similaires

  1. Réponses: 8
    Dernier message: 18/01/2016, 16h21
  2. Réponses: 2
    Dernier message: 22/11/2011, 14h06
  3. [Requête/SQL]ajouter un champ calculé dans une table
    Par zougna dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 17/04/2007, 19h09
  4. taille max de nb de caractère dans une ligne de table mysql
    Par zidenne dans le forum Administration
    Réponses: 1
    Dernier message: 01/09/2006, 11h04
  5. Créer un champ calculé dans une table
    Par tigevellou dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 21/04/2006, 15h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo