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

Schéma Discussion :

Calcul des restes à payer de cotisation


Sujet :

Schéma

  1. #1
    Nouveau membre du Club
    Inscrit en
    Août 2006
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 46
    Points : 37
    Points
    37
    Par défaut Calcul des restes à payer de cotisation
    Bonjour a tous.
    J'ai les données concernant les membres d'une association qui se présentent comme suit:
    tblperiodes(mois,annee,idperiode)
    tblmembres(idmembre,matricule,nom,...)
    tblcotisations(#matricule,#periode,montant,date,idcotisation)

    la table période contient des informations du type:

    1 2006 10
    2 2006 11
    ...............
    12 2006 21
    1 2007 21

    Il s'agit en fait des mois et années pour lesquels des cotisations sont à faire.

    Je veux trouver pour chaque membre les mois ou il n'a pas encore cotisé. J'ai essayé le requête suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT m.nom & " " &  m.prenoms AS NOM, m.matricule,p.mois, p.annee, c.montant
    FROM tblperiodes AS p INNER JOIN (tblmembres AS m INNER JOIN tblcotisations AS c ON m.matricule = c.Matricule) ON p.idperiode = c.periode
    avec ce code, j'obtiens uniquement les mois ou le membre à cotisé. Mais lorsque je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT m.nom & " " &  m.prenoms AS NOM, m.matricule,p.mois, p.annee, c.montant
    FROM tblperiodes AS p LEFT JOIN (tblmembres AS m INNER JOIN tblcotisations AS c ON m.matricule = c.Matricule) ON p.idperiode = c.periode
    Je pensais que ca donnerais la même chose avec des nulls pour les mois ou le membre n'a pas cotisé.
    Mais ACCESS m'affiche "Expression JOIN non supportée"

    Donner moi un coup de main s'il vous plait. Merci

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    566
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2009
    Messages : 566
    Points : 1 045
    Points
    1 045
    Par défaut
    Bonjour

    tblperiodes(mois,annee, idperiode)
    tblmembres(idmembre,matricule,nom,...)
    tblcotisations(#matricule,#periode,montant,date,idcotisation)
    Je pense que chaque membre possède un matricule unique. Il serait donc bien de mettre une clé unique sur la colonne matricule. Ainsi, tu éviteras d'enregistrer deux fois le même membre. Actuellement, ta table tblmembres n'est pas normalisée.

    Si les cotisations mensuelles sont payées en une seule fois, ta table tblcotisations peut se limiter à :

    tblcotisations(#matricule,#idperiode,montant,date)

    ou si paiement en plusieurs fois créer une indexation relative

    tblcotisations(#matricule, #idperiode, idCotisation, montant,date)

    Tout ceci est à parfaire avec ta situation réelle.

    Pour la requête, je ne suis pas un spécialiste Access, mais il me semble qu'il est pointilleux avec les parenthèses. En tout cas, LEFT JOIN est bien supporter. Encore faudrait-il connaître ta version ?

    Tu peux aussi essayer avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE NOT EXISTS (SELECT * FROM tblcotisations WHERE periode)
    Tu as, sur ce site, un forum dédié à ACCESS, il serait préférable de transférer ta question sur ce forum. Tu auras certainement plus de réponse.

    Bon courage

  3. #3
    Nouveau membre du Club
    Inscrit en
    Août 2006
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 46
    Points : 37
    Points
    37
    Par défaut
    Effectivement le matricule est unique. J'ai corrigé les tables tblmembres et tblcotisations comme tu l'as suggéré.

    Mais pour le sql, j'arrive toujours pas à trouver la bonne combinaison qui me ramène les restes à payer.

    Je vais poster sur le forum ACCESS comme tu l'as conseillé

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    566
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2009
    Messages : 566
    Points : 1 045
    Points
    1 045
    Par défaut
    Bonjour,

    Après réflexion, je pense qu'il serait bien de revoir la conception de ta base.

    Pour moi, le MCD devrait se présenter avec les entités Membre, Cotisation et Encaissement

    Membre -- 0, n -- Cotiser -- (1, 1) -- Cotisation -- 0, n -- Payer -- (1, 1)-- Encaissement

    Tu remarqueras que j'utilise l'indexation relative, mais il est possible de ne pas l'utiliser

    Avec cette approche, il te sera, certainement, plus facile de faire les requêtes.

    Pour les tables, nous aurons :

    Membre (IdMembre, @ Matricule, Nom, ...)
    Cotisation (#IdMembre, Annee, Mois, Montant)
    Encaissement (#IdMembre, #Annee, #Mois, IdEncaiss, Date, MontRecu)

    Ainsi, tu pourras traiter les membres qui cotisent en plusieurs fois.

    Sauf erreur de ma part, cette approche doit d'éviter les doublons et autres contrôles comme saisir deux fois la cotisation d'un membre pour la même période

    La requête, pour vérifier les personnes qui ne se sont pas acquittées de leur cotisation, peut prendre la forme suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Nom, Matricule, Mois, Annee, Montant
    FROM Membre M
        INNER JOIN Cotisation C ON M.IdMembre = C. IdMembre
    WHERE M. MONTANT <> (SELECT SUM (MontRecu) FROM Encaissement E WHERE M.Membre = C.Membre AND C. Annee = E. Annee)
    Je ne connais pas Access, il te faudra gérer les parenthèses

    Il te sera même possible de compléter, en faisant apparaître le solde à régler pour les membres dont le paiement s'effectue en plusieurs versements

    Si tu as un souci, je ferai un modèle pour tester une base de données qui n'est pas Access, mais cela donnera une idée des erreurs

    A+

  5. #5
    Nouveau membre du Club
    Inscrit en
    Août 2006
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 46
    Points : 37
    Points
    37
    Par défaut
    Merci seabs. je vais refaire la modélisation et voir si telle que présentée la requête va marcher. Je vous tiens informer

Discussions similaires

  1. [V8] Calculer le reste du salaire des employés
    Par othman3535 dans le forum Odoo (ex-OpenERP)
    Réponses: 1
    Dernier message: 25/02/2015, 12h06
  2. Calcul des indemnités des conges payer
    Par Lili17 dans le forum Congés
    Réponses: 2
    Dernier message: 04/10/2012, 01h26
  3. Calcul des restes à payer de cotisation
    Par Lynecoln dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 11/03/2012, 22h16
  4. calcul le reste des montants
    Par kroma23 dans le forum Bases de données
    Réponses: 1
    Dernier message: 16/02/2011, 13h04
  5. Calcul des numéros de semaine d'un calendrier
    Par Invité dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 06/11/2002, 21h29

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