Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Modélisation
Modélisation Le forum qui vous aide à résoudre vos questions relatives à la modélisation (tables et relations) de votre base de données sous Access. Pour les états et les formulaires, postez dans le forum IHM.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/03/2011, 21h49   #1
Invité de passage
 
Inscription : mars 2011
Messages : 9
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 9
Points : 2
Points : 2
Par défaut Création d'une table de période de date

Bonjour,

Je suis débutant avec Access et j'ai beau fouiller partout je ne trouve pas de réponses à mon problème.

Je travail en 2007, voici les tables utilisé:

Table Employé:
- no employé(CP)
- nom
- autre info

Table Service offert
- No employé(CP)
- No de facture
- Montant chargé au client

Table détail facture
- No facture(CP)
- Date facture
- Montant due à l'employé sur cette facture
- Autre info sur la facture...

Table période de paie
- Date début période(CP)
- Date fin période

Table somme due par employé
- No employé
- Date de fin de période de paie
- Somme due

Sur les ventes de l'entreprise, les employés recoivent une rémunération spécifique(table détail facture). Nous devons produire des rapports bi-hebdomadaire sur ces revenus détaillé ou non. Jusque là tout m'a semblé bien aller.

Par contre j'aurais aimé utilisé la table période de paie, mais je ne sais pas comment relier cette table à ma table détail facture. Le lien devrait être en fonction de l'intervale entre les date de période. Et le seul lien que j'ai réussi à faire est est-ce que la date de facture correspond à la date de fin ou début.

Donc je n'ai pas encore lier ma table des période et dans mes états je filtre manuellement selon les période de date désiré.

On m'a finalement demandé de compiler des sommes due par les employés que nous devons soustraire des sommes que nous leur devons. Et ces sommes ne sont pas due par jour mais par période de paie. Donc je dois absolument faire un lien avec les périodes.

J'espère être compréhensible. Je commence un peu à utliser VB, donc si j'ai à coder svp me guider un peu.
Merci
Bolak est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2011, 22h03   #2
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 462
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 462
Points : 7 539
Points : 7 539
Une solution simple mais qui peut-être couteuses en temps de traitement et d'espace disque est de faire un produit croisé entre tes périodes de paie et tes factures puis de ne retenir que la période qui encadre ta date de facturation.

Un tuc du comme

Code sql :
SELECT facture.*, periodePaie.* WHERE facture.[dateFacture] BETWEEN periodePaie.dateDebutPeriode AND periodePaie.dateFinPeriode;

Il serait intelligent de réduire la sélection des périodes de paie et des factures à l'année courrante pour réduire le produit croisé.

Sinon il existe peut-être une fonction qui te permettrai de déduire la période de paie de la date facturation.

Exemple : la période de paie est mensuelle (du 1 à fin de mois) donc si une facture est faite dans le mois elle appartient à cette période de paie.

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2011, 22h05   #3
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 462
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 462
Points : 7 539
Points : 7 539
Autre idée, au moment de la création de la facture, rechercher la période de paie et l'ajouter à la table des factures comme un attribut de la facture. Comme cela tu sais au moment ou tu traite ta facture à quelle période elle appartient.

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 19h03   #4
Invité de passage
 
Inscription : mars 2011
Messages : 9
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 9
Points : 2
Points : 2
Citation:
Envoyé par marot_r Voir le message
Autre idée, au moment de la création de la facture, rechercher la période de paie et l'ajouter à la table des factures comme un attribut de la facture. Comme cela tu sais au moment ou tu traite ta facture à quelle période elle appartient.

A+
J'ai essayé dans un requête de faire un formule du genre dans le générateur d'expression mais étant donné que ma table Paiepériode n'a pas de relation avec aucune autre table celà me crée des doublons... J'ai aussi ajouté un champ Période dans ma table période de paie pour me retourner la valeur.

Je fais quoi comme relation entre ces tables?

Voici la formule que j'ai fais dans le générateur d'expression:

Code :
période paie: VraiFaux([Datefacture]>=[TPériodePaie]![DatedébutPP] Et [Datefacture]<=[TPaiePériode]![DatefinPP];[TPaiePériode]![Période];"Pas de période")
Merci de ton aide
Bolak est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 19h31   #5
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 462
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 462
Points : 7 539
Points : 7 539
Tu ne peux pas mettre de relation entre tes tables. Il faut en faire une artificielle avec une sélection d'intervale dans une requête.

Je supose que tu n'as pas de recouvrement de périodes de paie. C'est à dire qu'une date appartient à une et une seule période de paie.

Personnellement voici comment je résoudrai cela en utilisant la date de début de paie comme identifiant.

Fonction à ajouter à un module de ton application.

Code :
1
2
3
4
5
public function LireDebutPeriodePaie(prmDate as date) as variant
   dim result as variant
   result=dfirst("ChampDateDebut","TablePeriodePaie",prmDate & " between [ChampDateDebut] and [ChampDateFin]))"
   LireDebutPeriodePaie=result
end function
Exemple de requête :

Code sql :
SELECT facture.*, LireDebutPeriodePaie([Fcature].[dateFacture] AS DebutPeriodePaie FROM facture;

Grace à cette requête tu vas pouvoir associé une facture et la date de début de la période.

Si tu as un identifiant de prériode tu pourrais le récupérer à la place de la date de début.

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 20h26   #6
Invité de passage
 
Inscription : mars 2011
Messages : 9
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 9
Points : 2
Points : 2
Humm... Je sens que je me perds un peu. J'ai ajouté dans un module le code et j'ai modifié les champs et tables selon ma base de donnée. Il y avait un erreur de ) à la fin de la ligne résult. Enfin en enlevant la ) en double ça a fonctionné.

Ensuite dans une nouvelle requête et ajouté le code sql que j'ai aussi adapté selon la base. Je ne connais pas le SQL, mais pourquoi quand j'exécute il me demande d'ouvrir le fichier source? Est-ce que j'aurais due ajouter ce code à ma requête du départ?

Désolé de mon ignorance...
Bolak est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 21h00   #7
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 462
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 462
Points : 7 539
Points : 7 539
Pourras-tu poster ton code et le SQL de ta requête ?

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 21h08   #8
Invité de passage
 
Inscription : mars 2011
Messages : 9
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 9
Points : 2
Points : 2
Code :
SELECT Nofolio.*, LireDebutPeriodePaie([TSoinvoucher].[Datesoin] AS DebutPeriodePaie FROM Nofolio;
Code :
1
2
3
4
5
Public Function LireDebutPeriodePaie(prmDate As Date) As Variant
   Dim result As Variant
   result = DFirst("DatedébutPP", "TPP", prmDate & "between [DatedébutPP] and [DatefinPP]")
   LireDebutPeriodePaie = result
End Function
Merci encore pour ton aide
Bolak est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/03/2011, 17h03   #9
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 462
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 462
Points : 7 539
Points : 7 539
Il y a divers problèmes avec ton SQL :

Il manque une parenthèse et il manque une référence à la table TSoinvoucher et probablement une jointure à créer.

Pour être fonctionnel il faudrait que ton SQL ressemble à cela.

Code sql :
SELECT Nofolio.*, LireDebutPeriodePaie([TSoinvoucher].[Datesoin]) AS DebutPeriodePaie FROM Nofolio, TSoinvoucher;

Note que je n'ai pas mis la jointure entre la table Nofolio et TSoinvoucher car je ne connais pas la strucure des tes tables.

Je te suggère de faire une requête qui affiche tous les éléments dont tu as besoin puis, une fois que tu es satisfait de la sélection, d'y intégrer l'appel à la fonction.

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/03/2011, 19h30   #10
Invité de passage
 
Inscription : mars 2011
Messages : 9
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 9
Points : 2
Points : 2
Je ne comprends pas la formule en Sql alors je je sais pas comment la coder...

Voici ce que j'ai fais, la table Nofolio n'exite pas. Le lien a faire est entre la table TPP (soit table des périodes) et le tabel Tsoinvoucher (soit la table des factures)

Code :
SELECT [TPP].*, LireDebutPeriodePaie([TSoinvoucher].[Datesoin]) AS DebutPeriodePaie FROM ([TPP].[DatedébutPP]), ([TPP].[DatefinPP]);
J'ai toujour le message de sélectionner la source des données.
Merci
Bolak est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 18h33   #11
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 462
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 462
Points : 7 539
Points : 7 539
Peux-tu poster le message de Access ?

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/04/2011, 13h53   #12
Invité de passage
 
Inscription : mars 2011
Messages : 9
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 9
Points : 2
Points : 2
Voir la pièce jointe.
Merci
Fichiers attachés
Type de fichier : doc Message.doc (40,0 Ko, 3 affichages)
Bolak est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/04/2011, 15h53   #13
Expert Confirmé Sénior

 
Avatar de fsmrel
 
Spécialiste en bases de données
Inscription : septembre 2006
Messages : 2 882
Détails du profil
Informations professionnelles :
Activité : Spécialiste en bases de données
Secteur : Conseil

Informations forums :
Inscription : septembre 2006
Messages : 2 882
Points : 5 116
Points : 5 116
Bonjour,


Selon la théorie des données intervallaires (temporelles en particulier), on est souvent amené à ne pas utiliser de clé étrangère pour les intervalles (périodes).


Une proposition : Pour connaître la période associée à chaque facture (ou les factures associées à chaque période), passer par une vue :

1) Table PERIODE :





2) Table FACTURE





3) Créer une requête jouant le rôle de vue, appelons-la FACTURE_PERIODE :





ou en mode QBE :





4) Au résultat, pour chaque facture on a la période associée :





5) Pour récupérer les factures de telle période, disons [2005-01-31:2005-02-10] :





Version QBE :





Au résultat :

__________________
_
Faites simple, mais pas plus simple ! (A. Einstein)
E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
=> La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

__________________

Bases de données relationnelles et normalisation : de la première à la sixième forme normale (Bonne lecture !)
fsmrel est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/04/2011, 16h32   #14
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 462
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 462
Points : 7 539
Points : 7 539
Bolak, peux-tu ouvrir les tables utilisées par ta requête directements ?

Là cele ne me semble pas relié à ton SQL mais à l'accès à tes données. Est-ce une base 100% Access ou tu as un Access en frontale et une dorsale sur Oracle ou un autre SGBD ?

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/04/2011, 19h56   #15
Invité de passage
 
Inscription : mars 2011
Messages : 9
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 9
Points : 2
Points : 2
Merci fmsrel, cela me donne run bout de chemin de ce que j'ai besoin.
Avec ce que tu m'as donné je réussi à afficher la période sur chaque facture ce qui est bien. Ensuite je dois lier les sommes qu'il nous doivent à chaque périodes sur le même état, par contre il peut y avoir plusieurs factures pour une période mais seulement une sommes due pour la période. Alors ma prochaine étape est de faire le lien entre les 2.

Lundi je suis un cours avancé, je vais poser des questions et je vous reviens par la suite.

marot_r: 100% access, oui je peux les ouvrir.

Merci à vous 2 pour votre aide!
Bolak est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h05.


 
 
 
 
Partenaires

Hébergement Web