Modification automatique des prix dans une liste de produits

Fermé
prezi Messages postés 10 Date d'inscription vendredi 7 septembre 2007 Statut Membre Dernière intervention 19 janvier 2014 - 16 janv. 2014 à 00:33
prezi Messages postés 10 Date d'inscription vendredi 7 septembre 2007 Statut Membre Dernière intervention 19 janvier 2014 - 19 janv. 2014 à 08:25
Bonjour, J'ai une application de facturation pour laquelle on peut à la longue modifier les tarifs des produits; le problème est que lorsque je modifie les tarifs dans la liste des produits, tous les détails de la commande et bien entendu les montants des anciennes factures et des commissions se modifient également.
J'ai une Table des Clients liée à la Table Commandes par une relation un (01) à plusieurs, une table Commandes liée à une table Détails des Commandes (Relation un(01) à Plusieurs) et une Table Produits liée à la Table Détails des Commandes (Relation un (01) à plusieurs).
La Table Détails des Commandes comporte les champs (N° Commande, Code du Produit).
La table Produits comprend les champs (Code Produit, Désignation, Montant) et j'utilise une requête qui permet de faire le total pour chaque ligne de commande.
J'utilise un formulaire principal constitué des formulaires Client, Commandes et un Sous Formulaire en mode feuille de données pour saisir les Détails de la commande pour chaque Client. A partir d'une saisie assistée sur le Code du produit; le code du produit, la désignation et le montant du produit sont rapatriés dans le sous formulaire et il ne reste plus qu'à saisir le nombres d'articles pour que le Total de la ligne de détail de la commande soit calculé.
Merci d'avance pour votre contribution.
@+ Tard.



A voir également:

8 réponses

Bonjour,
En lisant un peu rapidement ta question, on voit vite que tu as presque trouvé la réponse toi-même à la question.
Tu as construits :
- Table Clients
- Table Commandes
- Table DétailsCommande
- Table Produits
avec les différentes relations entre chaque

Et bien, puisque tu es si bien parti, et que tu as constaté que lorsque tu changes tes prix à un moment, tous les prix sont changés y compris pour les factures passées, la solution qui s'impose est qu'il te reste à construire une table "Tarifs" qui te permettra de ne prendre que le dernier prix en cours pour les factures à établir, sans affecter celles déjà émises.
Bonne suite.
0
prezi Messages postés 10 Date d'inscription vendredi 7 septembre 2007 Statut Membre Dernière intervention 19 janvier 2014 1
16 janv. 2014 à 18:05
Bonsoir tessel75,
Merci beaucoup pour ta contribution, mais, peux- tu être un peu plus explicite au niveau des différents champs de la table tarifs ?
J'envisage déjà les champs Code tarif, Tarif, DateDébutTarif, DateFinTarif...
@ Bientôt.
0
Bonsoir,
Les champs d'une table Tarif à envisager seraient:
CodeTarif (Clé)
N°Ref_Produit (en relation 1 -- plusieurs avec Clé TableProduit) un même produit aura plusieurs prix selon la date
Prix
DateTarif

Un champ DateFin me parait inutile dans la mesure où un nouveau prix à une date X est forcément la date de fin du prix précédent.
Pour ce qui est de la sélection du code tarif, il suffit:
. soit d'une liste déroulante si plusieurs prix sont possible en même temps selon le client, la période (par exemple Hte-Saison, Bas-Saison) etc,
. ou bien en utillisant une fonction DLast().
Dans tous les cas, dans ta table DétailDeCommande un index replacera le prix, comme un index remplace le code-produit.
Elémentaire mon Cher W...
Si un même produit peut être distribué par plusieurs fournisseurs, il faudra un CodeFournisseur, évidemment
Bonne suite.
0
prezi Messages postés 10 Date d'inscription vendredi 7 septembre 2007 Statut Membre Dernière intervention 19 janvier 2014 1
17 janv. 2014 à 00:57
Bonjour, tessel75,
Merci une fois de plus pour ta contribution.
J'avais justement déjà envisagé la solution basée sur une liste déroulante à partir de laquelle je pourrais choisir le code du produit (dont la désignation du produit), les tarifs...
Pour ce qui est du reste, et je te cite, "ou bien en utillisant une fonction DLast().
Dans tous les cas, dans ta table DétailDeCommande un index replacera le prix, comme un index remplace le code-produit"
, peux- tu détailler davantage? Notamment pour l'utilisation de la fonction DLast() et des index qui remplacent le prix où le code- produit: ce n'est pas encore élémentaire pour moi, ce sont des "champs" encore inexplorés.
En attendant, je vais exploiter tes conseils. Merci beaucoup.
@Plus tard.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bonsoir! Reprenons!
Tu as des commandes et pour chacune un certain nbre de lignes de commandes. Chaque ligne de commande concerne une certaine quantité d'UN produit à un certain prix. Comme tu le dit toi-même un produit change de prix au cours du temps, donc un même produit est associé plusieurs prix.
Ce que je te propose est: non pas de rentrer directement le prix en question dans ta table "LigneDeCommande" mais le "CodePrix" issu de la table "Tarif".
Maintenant la question est de savoir comment tu vas sélectionner le bon prix pour chacune des lignes de commande. Alors il y a 2 possibilités: soit il n'y a qu'un seul prix correct à un moment donné, soit il y en a plusieurs (selon le client, la période des soldes, la saison haute ou basse, etc). Dans le 2ème cas, il te faut une liste déroulante dans ton formulaire "Commandes"/SousFormulaire "LignesDeCommande" pour pouvoir sélectionner le prix valide. S'il n'y a qu'un seul prix possible à un moment donné, on peut supposer que ce prix sera le dernier prix rentré dans la table "Tarifs" pour le bien en question. Donc pour accéder à ce dernier prix, tu n'as pas besoin d'une liste déroulante (puisqu'il n'y en a qu'un valide, les autres étant périmés), il te suffit alors d'une formule qui t'extrait le dernier prix entré, via le CodePrix. Et pour cela tu dois utiliser une formule du type DLast("CodePrix","TableTarif","[CodeProduit]= formulaire!Commande!SousFormulaire!LigneDeCommande!CodeProduit") où la dernière partie de l'expression est l'expression du critère de sélection des prix selon les produits.
Ci-joint une question récente qui traite exactement ton problème, la seule différence est qu'il s'agit d'une fonction DMax() et non pas DLast() mais elles marchent toutes sur le même schéma
Bonne suite
0
prezi Messages postés 10 Date d'inscription vendredi 7 septembre 2007 Statut Membre Dernière intervention 19 janvier 2014 1
18 janv. 2014 à 17:50
Bonjour tessel75!
Tu as bien cerné le problème actuel et je te cite:"...il n'y a qu'un seul prix correct à un moment donné,..." et "...S'il n'y a qu'un seul prix possible à un moment donné, on peut supposer que ce prix sera le dernier prix rentré dans la table "Tarifs"..." et "...pour accéder à ce dernier prix, tu n'as pas besoin d'une liste déroulante (puisqu'il n'y en a qu'un valide, les autres étant périmés), il te suffit alors d'une formule qui t'extrait le dernier prix entré, via le CodePrix. Et pour cela tu dois utiliser une formule du type DLast("CodePrix","TableTarif","[CodeProduit]= formulaire!Commande!SousFormulaire!LigneDeCommande!CodeProduit") où la dernière partie de l'expression est l'expression du critère de sélection des prix selon les produits."
Alors questions:
.1Quelle sera la structure du Sous- Formulaire "Ligne de commande" ou "Détails de commande" car pour saisir les détails de chaque commande, j'utilise un sous- Formulaire en mode feuille de données qui comporte les champs suivants: [Code Produit], [Désignation], [Prix], [Quantité], et [Total] et il y a une saisie assistée par une zone de liste déroulante au niveau du code produit qui permet de sélectionner la désignation et le prix; faut- il une deuxième saisie assistée par une zone de liste déroulante pour pouvoir sélectionner le CodePrix?
.2La formule dont tu fais allusion doit- elle être utilisée dans une zone de texte [CodePrix] relative au Sous- Formulaire "Détails de Commande" ou "LigneDeCommande" ?
.3La Formule DLast fait- elle le tri pour chaque dernier prix entré selon le CodeProduit? Sachant que les Tarifs de plusieurs produits peuvent changer le même jour?
Pour ce qui est du document joint, je n'arrive pas à le retrouver.
Merci pour ton "Coaching".
@+Tard.
0
Bonsoir,
Je n'ai pas de "Structure de sous-formulaire" particulière à proposer ou encore à imposer. Si tu as un sous-formulaire, ça suffit. Le problème est celui du prix. Il ne faut alors pas entrer directement le prix mais le CodeDuPrix, ce qui oblige à apprendre à utiliser les liste déroulante à plusieurs colonnes pour que le prix soit apparent alors que la donnée enregistrée est le CodeDuPrix. Je te laisse analyser les didacticiels sur le sujet. (Champs Liste Déroulante propriété ListBox.BoundColumn ou colonne liée + F1)

Pour ce qui est de DLast(), si la formule est bien entré, tu auras le dernier prix de chaque produit, peu importe sa date de saisie que ce soit aujourd'hui même ou l'année dernière, le dernier est le dernier.
Bonne suite
Le plus efficace pour progresser est d'essayer et de voir ce qui se passe, jusqu'à ce qu'on obtienne ce qu'on veut obtenir.
0
prezi Messages postés 10 Date d'inscription vendredi 7 septembre 2007 Statut Membre Dernière intervention 19 janvier 2014 1
19 janv. 2014 à 08:25
Bonjour tessel75,
Merci pour tout. Je crois que j'ai rassemblé suffisamment d'éléments pour continuer et progresser comme tu l'as si bien dit. Un dicton dit: "c'est en forgeant que l'on devient forgeron" et un autre "Qui cherche, trouve".
Il faut avouer que j'ai été très pris durant la semaine; je suis un peu plus libre maintenant pour refaire le sous- formulaire. Je vais véritablement m'y mettre pour que ces tarifs restent stables dans cette application pour que ce sujet soit résolu.
Merci beaucoup.
@+Tard.
0