803-étape 2
Question
Ajouter les relations entre catégories et article.
En observant la la table Articles, on voit deux clés primaires, cela veut dire que l'on ne peut pas trouver 2 tuples qui ont le même code Catégorie et le même code Article. C'est la concaténation des 2 codes qui est une clé primaire.
Question
Créer la requête Req_02_01 qui affiche les articles avec les attributs de la catégorie.
Solution
SELECT Articles.*, Catégories.Catégorie, Catégories.Description, Catégories.Illustration
FROM Catégories INNER JOIN Articles ON Catégories.[Code Catégorie] = Articles.[Code Catégorie];
Question
Ajouter un formulaire basé sur la requête Req_02_01 à l'aide de l'assistant.
Comme la requête contient deux tables, vous devrez choisir comment vous affichez les données : tester les 2 solutions (frm_02_01 et frm_02_02)
Question
Créer une requête req_02_03 qui comptabilise le nombre d'article par catégorie et qui affiche le prix moyen des articles.
Solution
SELECT Catégories.[Code Catégorie], Count(Articles.Famille) AS nb, Avg(Articles.[Prix Unitaire]) AS [Prix Moyen]
FROM Catégories INNER JOIN Articles ON Catégories.[Code Catégorie] = Articles.[Code Catégorie]
GROUP BY Catégories.[Code Catégorie];
Question
Ajoutez les relations concernées par les 5 tables
Ajouter un formulaire de saisie des factures avec un sous-formulaire pour saisir les articles à facturer. Mettre en place un contrôle Liste pour sélectionner le client.
Étapes à suivre avec indices et solutions :
Créer le formulaire nommé Facture basé sur une requête nommée rq_fact_cli qui affiche tous les attributs de la table facture et de la table client.
Créer un sous formulaire LigneFacture basé sur la requête rq_lignefact_art qui va permettre d'afficher les lignes de facture avec les articles facturés.
Créer un contrôle sous-formulaire LigneFacture dans le formulaire Facture, en définissant dans l'assistant les propriétés Champs pères et Champs Fils
Question
Créer le formulaire nommé Facture basé sur une requête nommée rq_fact_cli qui affiche tous les attributs de la table facture et de la table client.
Le premier indice donne la solution pour la requête rq_fact_cli.
Indice
On insère tous les attributs de la table principale (Factures) et on ajoute les attributs de la table Clients que l'on souhaite voir dans le formulaire : ici, j'ai inséré tous les attributs, mais ce n'est pas obligatoire

Question
Créer le sous-formulaire nommé LigneFacture basé sur une requête nommée rq_lignefact.
Relativement à ce que l'on a fait précédemment avec les formulaires-Sous-formulaires permettant d'afficher les articles/catégories, nous allons créer d'abord le formulaire LigneFacture qui sera de fait sauvegardé comme un objet indépendant du formulaire Facture, et pourra être ré-exploité par exemple pour afficher l'ensemble des lignes de facture pour des traitements comme des filtres sur les articles facturés par catégorie ou calculer des coûts sur une période, etc ....
Au préalable, il faut donc créer la requête rq_lignefact avec les attributs dont la liste peut-être visible avec l'exécution de la requête en mode feuille.
Pour l'assistant, vous pourrez choisir le mode feuille afin que les données dans le formulaire soient affichées comme le mode feuille de la requête. Ensuite, on pourra modifier le contrôle code article afin de le choisir avec un contrôle de type liste.
Le premier indice donne la solution pour la requête rq_lignefact.
Indice
On insère tous les attributs de la table principale (Factures) et on ajoute les attributs de la table Clients que l'on souhaite voir dans le formulaire : ici, j'ai inséré tous les attributs, mais ce n'est pas obligatoire

Solution

Remarque :
L'attribut N° Fact est important car c'est sur cet attribut que va se faire la liaison Formulaire-Sous Formulaire.
Question
Dans votre formulaire Facture en mode création, ajoutez un contrôle sous-formulaire
L'assistant va vous demander de choisir différentes options : nous avons déjà créé ci-dessus notre formulaire LigneFacture que nous voulons attacher au contrôle, et il faudra en conséquence choisir nous même les propriétés champs père et champs fils.
A la fin, une fois que votre assistant est terminé, votre formulaire Facture ressemblera à l'image ci-dessous
Solution

Le contrôle Sous-Formulaire est basé sur un objet source qui est le formulaire LigneFacture, et la gestion du sous-formulaire est basé sur le champ N°Fact qui est présent dans le formulaire et le sous-formulaire avec le même nom.
Cet exemple ne respectant pas les règles que j'ai l'habitude d'appliquer dans ma conception de base de données, la clé du côté 1 aurait pu être nommée id (tb_fact.id en rappelant la table ou la requête) et la clé du côté n aurait pu être nommée id_fact (tb_lignefact.idfact)
Question
Dans le formulaire Article (nommé form_02_02), on effectue la saisie de la catégorie avec 3 caractères texte et la relation entre la saisie et l'occurrence des 3 caractères dans la table Catégorie est vérifiée avant la sauvegarde de l'enregistrement.
Nous allons ajouter un contrôle liste permettant de choisir la catégorie dans la liste.
On peut directement ajouter un contrôle liste déroulante que l'on va créer avec l'assistant :
Valeurs d'une table
Choisir la table catégorie
Choisir les 2 attributs
Classer selon la catégorie
Laisser la première colonne cachée
Stocker la valeur (cad le code de la catégorie qui est cachée) dans Code Catégorie
Nommer l'étiquette Choix Catégorie
Vérifier en ajoutant un article que vous pouvez choisir la catégorie Imprimante dans la liste et observer que le code catégorie IMP à été mis à jour dès la sélection effectuée.
Solution

Le contenu est une requête SQL qui affiche 2 attributs de la table Catégorie, qui classe selon la catégorie, la colonne liée est la colonne N°1 de la requête SQL
Question
Ajouter une requête qui calcule le chiffre d'affaire par article

Regrouper par Article le champ Code Article de la requête rq_lignefact.
Faire la somme d'un alias nommé CA qui effectue le produit de Qte Fact par Prix Unitaire avec des crochets car il y a des espaces dans les noms de champ.
Calculer le montant total TTC par client, en procédant étape par étape selon les questions posées ci-dessous. Mais vous pouvez essayer par vous même. Il y a différentes possibilités de le faire.
Question
Calculer le montant total TTC pour chaque ligne de facture en se basant sur la requête rq_lignefact. Elle sera nommé rq_lignefactTTC

Solution

SELECT rq_lignefact.[N° LigneFact], rq_lignefact.[N° Fact], [Qte Fact]*[Prix Unitaire]*(1+[Taux de TVA]) AS PrixLigneTTC
FROM rq_lignefact;
Question
Ajouter une requête qui calcule le montant total de chaque facture basée sur la requête rq_lignefactTTC, elle sera nommé rq_factTTC
Question
Ajouter une requête qui calcule le chiffre d'affaire par client. Elle est basée sur la requête rq_factTTC ainsi que la table Factures, et une jointure entre les attributs N° Fact de la table Factures et la requête rq_factTTC.
Au préalable, la facture N°3 sera réaffectée au client de la facture N°1 (BAT01) de façon à avoir 3 factures pour 2 clients et ainsi vérifier manuellement que les calculs sont justes.
