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

Access Discussion :

afficher le reste à payer pour chaque commande [AC-2003]


Sujet :

Access

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2012
    Messages : 34
    Points : 15
    Points
    15
    Par défaut afficher le reste à payer pour chaque commande
    Bonjours à tous.

    Dans une base de données Access j'ais deux tables tblCommandes et tblVersements qui se présentent comme suit:

    tblCommandes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    NCommande                    Total
    1                            50 000
    2                            400 000
    3                            300 000
    4                            200 000
    5                            90 000
    tblVesements
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    NVersement                  Vesement
    1                           10 000
    2                           20 000
    3                           40 000
    4                           100 000
    5                           30 000
    6                           70 000
    7                           25 000
    8                           400 000
    9                           55 000
    10                          130 000
    Les versements se font pour payer les commandes l'une après l'autre.
    Comment faire pour afficher dans une requête le reste à payer pour chaque commende c.à.d nous devons avoir (pour notre exemple) dans la requête ce qui suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    NCommande                    Total                     Reste à payer
    1                            50 000                    0
    2                            400 000                   0
    3                            300 000                   0
    4                            200 000                   70 000
    5                            90 000                    90 000
    Faut il utiliser la somme cumulative ou ... j'attend les reponses.

  2. #2
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 420
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 420
    Points : 16 264
    Points
    16 264
    Par défaut
    Bonjour

    Ta structure n'est pas adaptée : il faudrait reprendre le numéro de commande dans les versement et établir une relation entre les tables.

    Travailler par ordre chrono n'est pas une bonne méthode.
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2012
    Messages : 34
    Points : 15
    Points
    15
    Par défaut
    Bon soir 'conseil' et merci pour votre réponse; mais les deux tables sont totalement indépendantes car chaque commande peut être payée en tranches ( Versements ).
    De ce fait dans l'exemple précédant, la commande N 1 qui vaut 50 000 est payée en trois tranches ( Versements ):

    Versement N 1 qui vaut 10 000
    Versement N 2 qui vaut 20 000
    Versement N 3 qui vaut 40 000
    qui ont un total de 70 000 ( 50 000 pour payer la commande N 1 et 20 000 sera reporter pour la commande suivante N 2 ).
    et ainsi de suite.

  4. #4
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 420
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 420
    Points : 16 264
    Points
    16 264
    Par défaut
    Bonjour

    Justement dans ce cas on fait une relation de 1 à n.
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2012
    Messages : 34
    Points : 15
    Points
    15
    Par défaut
    Bonjour 'Conseil'.

    Vous n'avez pas bien compris mon problème.
    les versements se font independemment des commandes, nous ne préciserons pas à chaque fois que nous saisissons une versement que tel versement concerne tel commande ce la est laisser à access de le déterminer. Il doit à chaque fois comparer la somme cumulative des commandes et la somme cumulative des versements et déterminer quelles sont les commandes qui ne sont pas encore payées en affichant le reste de chaqu'une.

    j’espère que c'est claire; analyser bien les deux exemple précédents.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour

    C'est clair, sauf qu'il faut bien savoir à quelle commande est lié le ou les versements.

    Or ce qui n'est pas ton cas dans ton exemple, car il n'y a pas de notions d'ordres dans une table, si tu changes l'ordre, tout est faux.

    Philippe

  7. #7
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Février 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Février 2012
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par 78chris Voir le message
    Bonjour

    Ta structure n'est pas adaptée : il faudrait reprendre le numéro de commande dans les versement et établir une relation entre les tables.

    Travailler par ordre chrono n'est pas une bonne méthode.
    Oui, je suis d'accord

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2012
    Messages : 34
    Points : 15
    Points
    15
    Par défaut
    Mon problème est que je voudrais avoir le reste de chaque commande sans savoir aux quelles versements est liée.
    je pense que nous devons passer par une fonction.

  9. #9
    Invité
    Invité(e)
    Par défaut
    Re

    Citation Envoyé par mouhamadrouabha Voir le message
    Mon problème est que je voudrais avoir le reste de chaque commande sans savoir aux quelles versements est liée.
    Comme il a été dit par tous les intervenants, ce n'est pas possible.
    Une fonction n'y changera rien.

    Tu as un problème de conception au départ, et ce n'est pas la faute d'Access, tu auras le même problème quelque soit la base de données.

    Philippe

  10. #10
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 420
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 420
    Points : 16 264
    Points
    16 264
    Par défaut
    Bonjour

    Si tu n'utilises aucun des principes de la base de données, autant faire un tableau Excel où l'aspect topographique est la norme.

    Comme le rappelle Philippe JOCHMANS, il n'y a pas d'ordre dans une table.
    La certitude de prendre les commandes et les réglements dans le même ordre n'est donc pas présente.

    Tes numéros de commande et de versement sont-ils des numéros auto et la clé primaire de chaque table ?
    Si oui on peut les utiliser, si non, il manque une date dans chaque table ou autre moyen de tracer l'ordre des enregistrements.

    Et à part par VBA, je ne vois pas de solution.
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2012
    Messages : 34
    Points : 15
    Points
    15
    Par défaut
    Oui les numéros des commandes et les numéros des versements sont des num auto et sont aussi les clés primaires des deux tables.
    Pourriez vous me dire quelles sont les modifications à faire pour avoir les résultats voulus ( avec détails ).
    J'attend des suggestions car je suis sure qu'il y a des solutions dans access.

  12. #12
    Invité
    Invité(e)
    Par défaut
    Re

    Citation Envoyé par mouhamadrouabha Voir le message
    J'attend des suggestions car je suis sure qu'il y a des solutions dans access.
    Comme il a été dit précedemment sans point commun pas de solutions.

    Exemple :

    Je prends la première commande (NumAuto = 1) dans ta première table, donc le premier versement devrait être (NumAuto = 1) dans la deuxième table, mais le deuxième versement appartient toujours à la première commande où est-ce le premier de la deuxième commande ?

    A priori tu n'as aucun moyen de savoir, non ? Si c'est le cas, pas de solution.
    Donc un problème de conception au départ.

    Philippe

  13. #13
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Bonjour à tous,

    Comme dit précédemment, le mieux est de passer de ta structure (souligné=clé primaire, #=clé étrangère) :
    Commande(NCommande, Total, Reste à payer ...) ;
    Versement(NVersement, Versement, ...).
    à cette structure :
    Commande(NCommande, Total, Reste à payer ...) ;
    Versement(NVersement, #NCommande, Versement, ...).
    Si tu ne veux (peux) pas, alors il te faudra passer par du code. Je ne connais pas VBA, mais l'algorithme devrait être le suivant :

    Montant_Reliquat=0
    Lecture Commande
    EOF => fin fonction
    Montant_Commande=Commande.Total
    Montant_Versement=Montant_Reliquat
    Boucle : lecture Versement
    EOF => fin Boucle
    Montant_Versement=Montant_Versement+Versement.Versement
    Si Montant_Versement >= Montant_Commande
    Alors Commande.Reste à payer = 0 ; update Commande ; Montant_Reliquat = Montant_Versement - Montant_Commande ; sortie Boucle
    Sinon next Boucle
    next Lecture Commande

    Pas testé du tout... mais, je pense que tu peux comprendre l'idée, Mouhamadrouabha : à toi de la peaufiner...

    Ensuite, une bonne âme codeuse pourra, peut-être, t'aider...
    Dis-nous et à bientôt,
    Richard.
    ----------------------------------------------------------------------------------------------
    En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
    et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !

  14. #14
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 420
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 420
    Points : 16 264
    Points
    16 264
    Par défaut
    Bonjour

    Citation Envoyé par mouhamadrouabha Voir le message
    J'attend des suggestions car je suis sure qu'il y a des solutions dans access.
    Adapter les noms de tables, champs...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Requête1 nommée VersTot
    SELECT Sum(Versements.montant) AS TotalVersements FROM Versements;
     
    Requête2
    SELECT cdes.N°, cdes.montant, CDbl(DSum("[montant]","cdes","N° <=" & [])) AS Cumul, IIf([Cumul]-[TotalVersements]<0,0,[Cumul]-[TotalVersements]) AS Solde_a_régler
    FROM cdes, VersTot
    ORDER BY cdes.N°;
    Edit : simplification
    Edit 2 : salut Richard, je ne t'avais pas vu
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  15. #15
    Invité
    Invité(e)
    Par défaut
    Re

    @78chris

    J'ai du mal à comprendre ton cheminement, peux-tu détailler ?

    Philippe

  16. #16
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 420
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 420
    Points : 16 264
    Points
    16 264
    Par défaut
    Bonjour

    Ta question amène une correction sur la requête 2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT cdes.N°, cdes.montant, CDbl(DSum("[montant]","cdes","N° <=" & [])) AS Cumul, IIf([Cumul]-[TotalVersements]<0,0,IIf([Cumul]-[TotalVersements]>=[Montant],[Montant],[Cumul]-[TotalVersements])) AS Solde_a_régler FROM cdes, VersTot ORDER BY cdes.N°;
    Je cumule les versements par la requête 1.

    Ensuite en prenant les commandes dans l'ordre des numéros je calcule le cumul par une fonction somdom.

    Si ce cumul est < à la somme des versements, la commande est payée, au delà on calcule l'écart cumul - total des versement.
    Cela donne le reste à régler (global) : si cet écart est supérieur au montant de la facture on prend le montant de la facture.
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  17. #17
    Invité
    Invité(e)
    Par défaut
    Re

    Oui, mais tu ne prends pas en compte cette hypothèse :

    Je prends la première commande (NumAuto = 1) dans ta première table, donc le premier versement devrait être (NumAuto = 1) dans la deuxième table, mais le deuxième versement appartient toujours à la première commande où est-ce le premier de la deuxième commande ?
    Rien ne te dis que la première commande est soldée.

    Si la première est soldée et la deuxième nom et la troisième oui ?

    Philippe

  18. #18
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 420
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 420
    Points : 16 264
    Points
    16 264
    Par défaut
    Bonjour

    Philippe : je suis d'accord avec toi mais si j'ai bien compris la façon dont travaille mouhamadrouabha, il part du principe que les versement apurent le compte commandes dans l'ordre de celles-ci, point barre.
    Et si je me réfère à son attente telle que décrite dans le 1er post, mes requêtes donnent exactement cela.

    C'est une gestion assez peu orthodoxe et surtout illégale dans notre système comptable.

    Mais cela m'a amusé de cherché une solution alors que ma première réaction était "pas logique donc pas possible "...
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  19. #19
    Invité
    Invité(e)
    Par défaut
    Re

    Si je prends l'exemple dans la première discussion, c'est loin d'être gagné.

    Philippe

  20. #20
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 420
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 420
    Points : 16 264
    Points
    16 264
    Par défaut
    Re

    Citation Envoyé par Philippe JOCHMANS Voir le message
    Re

    Si je prends l'exemple dans la première discussion, c'est loin d'être gagné.

    Philippe
    J'ai ajouté une facture.
    Images attachées Images attachées  
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 5
    Dernier message: 23/07/2010, 21h09
  2. afficher ses attributs (caractéristiques) pour chaque article
    Par loic20h28 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 04/02/2009, 16h41
  3. [MySQL] Afficher une icône pour chaque élément trouvé
    Par cdevl32 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 11/11/2007, 22h29
  4. Affiche d'un message pour afficher le résultat d'une commande
    Par celcy dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 26/01/2007, 19h59
  5. afficher dans un etat le nombre de personnes pour chaque ville
    Par puppusse79 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 08/12/2006, 15h55

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