[AC-365] Nouvelle BDD, nouveaux problèmes - Modélisation (developpez.net)
Je me suis permis de reproduire la base à partir des copies d'écran pour y voir plus claire
J'ai alimenté préalablement les tables avec des données de test :
T_Demandeurs |
T_Imputations |
ID_Demandeur |
NOM_Demandeur |
Prenom_Demandeur |
1 |
Martin |
Jean |
2 |
Smith |
Albert |
3 |
Bailly |
Raymond |
|
ID_Imputation |
Date_Creation_Imputation |
Type_Imputation |
Nom_Imputation |
ID_Demandeur |
Quantite |
ID_Produit |
1 |
07/09/2022 |
OF |
Imputation 1 |
Martin Jean |
10 |
6987235897 | Produit 6 |
2 |
24/09/2022 |
OF |
Imputation 2 |
Bailly Raymond |
5 |
5987452368 | Produit 5 |
3 |
16/09/2022 |
AE |
Imputation 3 |
Smith Albert |
2 |
7854125983 | Produit 7 |
4 |
16/09/2022 |
AF |
Imputation 4 |
|
12 |
|
8 |
22/09/2022 |
AT |
Imputation 5 |
Martin Jean |
4 |
|
9 |
29/09/2022 |
AF |
Imputatin 6 |
|
6 |
9456224782 | Produit 9 |
|
T_Mouvements |
T_Produits |
T_TypeImputations |
ID_Mouvement |
Date_Mouvement |
ID_Imputation |
Heure_Debut |
Heure_Fin |
Heure_Totale |
1 |
08/09/2022 |
1 |
24/09/2022 10:00 |
29/09/2022 12:00 |
|
2 |
15/09/2022 |
2 |
15/09/2022 10:00 |
15/09/2022 18:00 |
|
|
ID_Produit |
Reference_Produit |
Designation_Produit |
1 |
1582569726 |
Produit 1 |
2 |
2822369872 |
Produit 2 |
3 |
3689746942 |
Produit 3 |
4 |
4859626687 |
Produit 4 |
5 |
5987452368 |
Produit 5 |
6 |
6987235897 |
Produit 6 |
7 |
7854125983 |
Produit 7 |
8 |
8961575269 |
Produit 8 |
9 |
9456224782 |
Produit 9 |
|
ID_Imputation |
Type_Imputation |
1 |
OF |
2 |
AF |
3 |
AE |
4 |
AT |
|
Quelques remarques :
- Dans la table [T_TypeImputation], la clé primaire devrait plutôt être {ID_TypeImputation} évitant ainsi tout amalgame avec [T_Imputations].{ID_Imputation}
- Sur le formulaire Gestion des imputations
- {ID_Demandeur} => Le champ peut être lié directement au nom et au prénom, on économise ainsi le champ prénom indépendant
- Pour ce faire, modifier le champ {Id_Demandeur} comme suit :
Ce qui affichera dans les requêtes et formulaires directement {Nom_Demandeur} & " " & {Prenom_Demandeur} dans le champ {ID_Demandeur} de la table [T_imputations]
- Il manque la désignation du produit dans le formulaire . Je l'ajoute dans ma base exemple en lien, sur le même principe d'ID Lié que pour {Id_Demandeur}
- Sur le formulaire [F_Mouvements], je propose ceci :
- Le champ {ID_Imputation} est à designer au niveau de la table comme suit avec le paramétrage d'une liste déroulante à 4 colonnes pour bien cerner quelle imputation on veut choisir
La requête paramétrée comme source de la liste déroulante ramène également le nom à partir de la table [T_Demandeurs]
Compte tenu du modèle, le fait de paramétrer une jointure externe sur [T_Imputation] permet de lister tous les {ID_emandeur}. Cela aura un impact plus loin sur les choix d'{ID_imputation} possible dans la gestion des mouvements.
Je développerai plus loin, mais le fait de faire cette jointure externe pourra autoriser à choisir des Imputations sans demandeur et/ou sans produit. Au contraire, le fait de faire une jointure stricte empêchera de choisir un une imputation sans demandeur.
Pour ce modèle-ci, le cas d'une imputation avec demandeur et sans produit devra être réglé autrement
Ceci permet d'afficher le choix de l'imputation dans le formulaire [T_Mouvements]
- Ensuite, comme Lighteux26 , je modélise la requête source du formulaire [T_Mouvements] de manière à ramener les informations nécessaires
Je prends le partie de designer la requête hors du formulaire , ce qui me permettra de vérifier la dynamique des données. Je n'aurai qu'à donner cette requête en source du formulaire ensuite.
En passant, je reviens sur la modélisation de ma table [T_Mouvements] pour appliquer un format Date + Heure aux champs {Heure_Debut} et {Heure_Fin} comme ceci : jj/mm/aaaa\ hh:nn. En fonction du besoin, si le créneau est toujours sur le même jours, mieux vaudrait se passer du type date et calculer numériquement à l'heure. A approfondir
Ce qui change ici, c'est que, afin de lier correctement la donnée de T_Mouvements au reste des tables, j'ajoute la table T_Mouvements et pars du champ {ID_Imputation] de cette table. C'est le fait de le renseigner qui va créer le lien et permettre de ramener dans le formulaire le reste des données dans les tables [T_Imputations], [T_Demandeurs] et [T_Produits]
Ensuite il y a des choix à faire. Et l'indication de marot_r était la bonne à mon avis :
- Si on considère qu'une imputation peut avoir des Mouvements affectés sans avoir d'{ID_Demandeur] définis, on modifiera le lien [T_Imputations] - [T_Demandeurs] en jouant sur le paramétrage de celui-ci en double cliquant sur le lien dans la requête
|
>> |
|
Le fait de choisir l'option 3 permettra de pouvoir choisir une imputation dont le demandeur n'est pas renseigné
Ce paramètre n'autorise pas pour autant de choisir une imputation dont le produit n'est pas renseigné
- Si on considère qu'une imputation peut avoir des Mouvements affectés sans avoir d'{ID_Produit} définis, on modifiera le lien [T_Imputations] - [T_Produits] de la même manière
Le fait de choisir l'option 3 permettra de pouvoir choisir une imputation dont le demandeur est renseigné
Ce paramètre n'autorise pas pour autant de choisir une imputation dont le demandeur n'est pas renseigné
En conclusion pour la gestion des mouvements, il faut :
- Gérer la jointure externe sur le champ [ID_Demandeur]d e la table [T_Imputations]
- Gérer les jointures externes [T_Imputation] - [T_Demandeur] et [T_Imputations] - [T_Produits] de manière à pourvoir permettre la sélection de n'importe quelle imputation dans la requête [S_F_Mouvements]
Maintenant, à l'affichage, on peut tester la dynamique des données de la requête [S_F_Mouvements] modélisée comme suit :
Au passage je rajoute {ID_Mouvement} que je n'avais pas inclus au début, afin de l'afficher dans le formulaire pour info
A l'affichage de la requête [S_F_Mouvements], j'obtiens ceci :
Tous les cas de figure sont possible en jouant sur les 3 Jointures citée sen conclusion plus haut. Si on veut réduire le scope d'imputation sélectionnable, il faut redéfinir les règles de gestion et utiliser les bonnes jointures au bons endroits
Suite sur le post suivant car la limite d'image est de 12 par post ^^
Partager