OVH Cloud OVH Cloud

Requete complexe

18 réponses
Avatar
René
Quelqu'un pourrait -il m'aider =E0 formuler une requete ?=20
assez complexe pour mon niveau.
J'ai des commandes de pizza pour mes clients, et lorsque=20
le client commande une pizza identique parmi celles d=E9j=E0=20
en commande, celle ci beneficie de 50 pour cent de remise.
Les champs de ma table "Detail_commande" sont les=20
suivants :
Commande_Id, Plat_Id, Plat_Quantite, Plat_Prix
merci de votre aide
Une pizza est offerte pour ce ou celle qui m'aide =E0=20
trouver une solution.

8 réponses

1 2
Avatar
René
Le client paye 1/2 tarif sur la meme pizza identique
(IdPizz identique), ta suggestion est tres bonne et
fonctionne dans ce cas là. Mais si je fais une erreur en
enregistrant une Idpizz identique erronée, je supprime la
1ere, et je fais payer le client que la 2eme (qui est au
1/2 tarif), là, le probleme se corse.
-----Message d'origine-----
Suggestion :

Pour faire simple, faites une requête basée sur les
tables

commandes et détail commandes en reprenant l'index client
et l'index (ou le code) de la pizza pour obtenir quelque
chose comme :
IdCli IdPizz
1 4
2 6
1 5
1 4
etc
Ainsi, en recherchant dans cette requête le nombre de
pizza IdPizz = [Pizza en commande] et où IdCli =
Formulaire.IdClientEnCours, avec un DCount habituel, vous
obtiendrez 0 si le client n'a jamais commandé telle pizz'
ou un nombre quelconque qui, s'il est impair devra
déclencher la remise (si j'ai bien compris votre tarif
promo) et s'il est pair fera payer votre client plein
tarif (ce qui n'est pas si grave puisqu'il pourra
bénéficier plus tard de la remise et que vos pizzas sont
certainement très bonnes :-)

Bon apétit à tous

.



Avatar
Arnaud [lwa]
re,

Il faudrait donc aller chercher le prix "normal" dans une table de tarifs
afin de renseigner le prix de vente calculé dans le champ plat_prix

Pour ce faire, la formule ressemblera à celle que je t'ai proposée,

sauf que :
- plat_tarif sera le résultat d'un dlookup("plat_tarif","tblTarifs","plat_id = '" & me.plat_id &
"'")
- plat_quantité pourra être le résultat d'un dcount("*","Detail_commande","Commande_id" = " &
me.commande_id)

il faudra de plus peut-être affecter un rang au plat_id par commande afin
que la remise de 50% ne soit répercutée que sur les plat_id de rang pair

voilà pour de nouveaux axes de prospections, espérant ne pas t'avoir trop laissé sur ta faim !!!

--
Arnaud
--------------------------------------------------
Conseils d'utilisation : http://users.skynet.be/mpfa/
Site Perso : http://memoaccess.free.fr
/Réponses souhaitées sur ce forum, merci/
--------------------------------------------------


| Arnaud, Comment faudrait-il avoir comme look pour ma table
| de commande ? merci.
|| Dans sa missive, René
||| Commande_Id Plat_Id Plat_Quantite Plat_Prix
||| 100 P4F 1 8.60 ? (Piz aux 4 From)
||| 100 PM 1 8.60 ? (Piz aux Mozza)
||| 100 P4F 1 4.30 ? remise 50%
||| 100 PM 1 4.30 ? remise 50%
||| 101 P4F 1 8.60 ? (pas de reduction
||| 102 P4F 1 8.60 ? (pas de
Avatar
Daniel Carollo
Bonsoir Rene!

Moi je vois la chose de cette facon: le formulaire qui permet de prendre en
compte les commandes a une liste deroulante dans la section details de la
commande. Cette liste deroulante est alimentee par une requete de la forme:

SELECT P.Plat_Id, IIF(IsNull C.Plat_Id, P.Plat_Prix, P.Plat_Prix/2) AS
Plat_Prix
FROM tblProduits P LEFT JOIN tblCommandes C
ON tblProduits.Plat_Id = tblCommandes.Plat_Id AND tblCommandes Forms!MonFormulaireDeCommandes.Commande_Id
ORDER BY MonChampPourLOrdre

Il suffit alors d'avoir, sur l'evenement AfterUpdate, un bout de code qui
met a jour la valeur du champ Prix dans le detail de la commande, du genre:

Sub ListeDeroulante_AfterUpdate()

Me.MonControleDePrix.Value = Me.ListeDeroulante.Column(1)

End Sub

Bonne continuation...

--
Daniel :-)

Computing Technologies International - www.computing-tech.com - We
provide solutions...


"René" wrote in message
news:38cf01c47245$43f5f940$
C'est exact à une condition près, c'est que le Plat_Id
soit identique pour appliquer la remise de 50 pour cent
SOIT :
Commande_Id Plat_Id Plat_Quantite Plat_Prix
100 P4F 1 8.60 ? (Piz aux 4 From)
100 PM 1 8.60 ? (Piz aux Mozza)
100 P4F 1 4.30 ? remise 50%
100 PM 1 4.30 ? remise 50%
101 P4F 1 8.60 ? (pas de reduction
102 P4F 1 8.60 ? (pas de reduction
-----Message d'origine-----
Bonjour René,

Si j'ai bien compris les calculs, en mettant qu'un
plat_prix soit égal à 10.00 euros,

on devrait avoir les prix suivants en fonction des
quantités commandées :

qté prix_u prix à payer
1 10.00 10.00
2 10.00 15.00
3 10.00 25.00
4 10.00 30.00
5 10.00 40.00
6 10.00 45.00
7 10.00 55.00
8 10.00 60.00
9 10.00 70.00
10 10.00 75.00

Est-ce correct ?

Si oui, alors la formule sera tout simplement :
Sous_Total : ([Plat_Quantite]-Ent([plat_quantite]/2)/2)*
[plat_prix]


--
Arnaud
--------------------------------------------------
Conseils d'utilisation : http://users.skynet.be/mpfa/
Site Perso : http://memoaccess.free.fr
/Réponses souhaitées sur ce forum, merci/
--------------------------------------------------

Dans sa missive, René
| Quelqu'un pourrait -il m'aider à formuler une requete ?
| assez complexe pour mon niveau.
| J'ai des commandes de pizza pour mes clients, et lorsque
| le client commande une pizza identique parmi celles déjà
| en commande, celle ci beneficie de 50 pour cent de
remise.

| Les champs de ma table "Detail_commande" sont les
| suivants :
| Commande_Id, Plat_Id, Plat_Quantite, Plat_Prix
| merci de votre aide
| Une pizza est offerte pour ce ou celle qui m'aide à
| trouver une solution.


.



Avatar
Guillaume
Ta solution est tres valable, mais le probleme se corse
lorsque le garçon supprime la 1ere pizza (au tarif plein)
soi-disant il s'est trompé, alors dans le detail de la
commande, la 2eme pizza , elle remplace la 1ere mais celle-
ci est à moitié prix . Alors là, bonjour les bénéfices.


-----Message d'origine-----
Bonsoir Rene!

Moi je vois la chose de cette facon: le formulaire qui
permet de prendre en

compte les commandes a une liste deroulante dans la
section details de la

commande. Cette liste deroulante est alimentee par une
requete de la forme:


SELECT P.Plat_Id, IIF(IsNull C.Plat_Id, P.Plat_Prix,
P.Plat_Prix/2) AS

Plat_Prix
FROM tblProduits P LEFT JOIN tblCommandes C
ON tblProduits.Plat_Id = tblCommandes.Plat_Id AND
tblCommandes =

Forms!MonFormulaireDeCommandes.Commande_Id
ORDER BY MonChampPourLOrdre

Il suffit alors d'avoir, sur l'evenement AfterUpdate, un
bout de code qui

met a jour la valeur du champ Prix dans le detail de la
commande, du genre:


Sub ListeDeroulante_AfterUpdate()

Me.MonControleDePrix.Value = Me.ListeDeroulante.Column
(1)


End Sub

Bonne continuation...

--
Daniel :-)

Computing Technologies International - www.computing-
tech.com - We

provide solutions...


"René" wrote in
message

news:38cf01c47245$43f5f940$
C'est exact à une condition près, c'est que le Plat_Id
soit identique pour appliquer la remise de 50 pour cent
SOIT :
Commande_Id Plat_Id Plat_Quantite Plat_Prix
100 P4F 1 8.60 ? (Piz aux 4 From)
100 PM 1 8.60 ? (Piz aux Mozza)
100 P4F 1 4.30 ? remise 50%
100 PM 1 4.30 ? remise 50%
101 P4F 1 8.60 ? (pas de
reduction

102 P4F 1 8.60 ? (pas de
reduction

-----Message d'origine-----
Bonjour René,

Si j'ai bien compris les calculs, en mettant qu'un
plat_prix soit égal à 10.00 euros,

on devrait avoir les prix suivants en fonction des
quantités commandées :

qté prix_u prix à payer
1 10.00 10.00
2 10.00 15.00
3 10.00 25.00
4 10.00 30.00
5 10.00 40.00
6 10.00 45.00
7 10.00 55.00
8 10.00 60.00
9 10.00 70.00
10 10.00 75.00

Est-ce correct ?

Si oui, alors la formule sera tout simplement :
Sous_Total : ([Plat_Quantite]-Ent([plat_quantite]/2)/2)*
[plat_prix]


--
Arnaud
--------------------------------------------------
Conseils d'utilisation : http://users.skynet.be/mpfa/
Site Perso : http://memoaccess.free.fr
/Réponses souhaitées sur ce forum, merci/
--------------------------------------------------

Dans sa missive, René
| Quelqu'un pourrait -il m'aider à formuler une requete ?
| assez complexe pour mon niveau.
| J'ai des commandes de pizza pour mes clients, et
lorsque


| le client commande une pizza identique parmi celles
déjà


| en commande, celle ci beneficie de 50 pour cent de
remise.

| Les champs de ma table "Detail_commande" sont les
| suivants :
| Commande_Id, Plat_Id, Plat_Quantite, Plat_Prix
| merci de votre aide
| Une pizza est offerte pour ce ou celle qui m'aide à
| trouver une solution.


.




.




Avatar
Guillaume
Ta solution est tres valable, mais le probleme se corse
lorsque le garçon supprime la 1ere pizza (au tarif plein)
soi-disant il s'est trompé, alors dans le detail de la
commande, la 2eme pizza , elle remplace la 1ere mais celle-
ci est à moitié prix . Alors là, bonjour les bénéfices.



-----Message d'origine-----
re,

Il faudrait donc aller chercher le prix "normal" dans une
table de tarifs

afin de renseigner le prix de vente calculé dans le champ
plat_prix


Pour ce faire, la formule ressemblera à celle que je t'ai
proposée,


sauf que :
- plat_tarif sera le résultat d'un dlookup
("plat_tarif","tblTarifs","plat_id = '" & me.plat_id &

"'")
- plat_quantité pourra être le résultat d'un dcount
("*","Detail_commande","Commande_id" = " &

me.commande_id)

il faudra de plus peut-être affecter un rang au plat_id
par commande afin

que la remise de 50% ne soit répercutée que sur les
plat_id de rang pair


voilà pour de nouveaux axes de prospections, espérant ne
pas t'avoir trop laissé sur ta faim !!!


--
Arnaud
--------------------------------------------------
Conseils d'utilisation : http://users.skynet.be/mpfa/
Site Perso : http://memoaccess.free.fr
/Réponses souhaitées sur ce forum, merci/
--------------------------------------------------


ans sa missive, René
| Arnaud, Comment faudrait-il avoir comme look pour ma
table

| de commande ? merci.
|| Dans sa missive, René
||| Commande_Id Plat_Id Plat_Quantite Plat_Prix
||| 100 P4F 1 8.60 ? (Piz aux 4
From)

||| 100 PM 1 8.60 ? (Piz aux
Mozza)

||| 100 P4F 1 4.30 ? remise 50%
||| 100 PM 1 4.30 ? remise 50%
||| 101 P4F 1 8.60 ? (pas de
reduction

||| 102 P4F 1 8.60 ? (pas de


.



Avatar
Arnaud [lwa]
Bonjour,

| Ta solution est tres valable, mais le probleme se corse
| lorsque le garçon supprime la 1ere pizza (au tarif plein)
| soi-disant il s'est trompé, alors dans le detail de la
| commande, la 2eme pizza , elle remplace la 1ere mais celle-
| ci est à moitié prix . Alors là, bonjour les bénéfices.
|

Dans ce cas, il ne faut pas automatiser le calcul, mais déclencher l'édition de la "facture"
sur événement sur clic d'un bouton "Total".

Comme ça, d'abord, le monsieur il prend la commande, il ajoute et supprime à volonté des plats,
puis lorsque le client il a dit "ce sera tout merci", le monsieur il clique et hop, aboule les
sous.

Voilà ce sera tout, merci ;-))

--
Arnaud
--------------------------------------------------
Conseils d'utilisation : http://users.skynet.be/mpfa/
Site Perso : http://memoaccess.free.fr
/Réponses souhaitées sur ce forum, merci/
--------------------------------------------------
Avatar
Eric
Bonsoir Arnaud,

Comme ça, d'abord, le monsieur il prend la commande, il ajoute et
supprime à volonté des plats, puis lorsque le client il a dit "ce sera
tout merci", le monsieur il clique et hop, aboule les sous.

Voilà ce sera tout, merci ;-))



Hey !!!!,
mes piSSSas, je les prends quand ?

;-)))

A+
Eric

Avatar
Daniel Carollo
Bonjour Guillaume!

L'enonce du probleme ne faisait pas etat d'une possibilite d'effacement de
la "premiere" pizza ;-)

Quoi qu'il en soit, ce probleme peut etre facilement resolu en mettant un
bout de code qui remet le prix de la pizza restante au prix normal.
Le plus simple serait de recalculer tous les prix, de facon a ne pas toucher
le prix de la troisieme si on supprime la quatrieme (je presume que les
troisiemes et quatriemes pizzas du meme type beneficient aussi de la
reduction).
Ce recalcul se ferait en utilisant une requete de mise a jour sur la table
des commandes, du genre:

UPDATE tblCommandes
SET Plat_Prix = IIF((DCount(tblCommandes.PlatID, "tblCommandes.CommandeID " & [tblCommandes.CommandeID]) > 1) AND
(DMin(tblCommande.ChampUnique, "tblCommandes.CommandeID = " &
[tblCommandes.CommandeID] <> tblCommande.ChampUnique) , P.Plat_Prix/2,
P.Plat_Prix)
WHERE tblCommande.CommandeID = Forms!MonFormulaireDeCommandes.Commande_Id

Le "ChampUnique" est un champ (le plus simple est de mettre un compteur
Autonumber) qui permet de distinguer deux pizzas identiques dans une
commande, et donc d'en considerer une comme etant "la premiere" (On eut pu
utiliser un DMax, le resultat aurait ete le meme, mais surtout pas un DFirst
ou DLast, qui ne fonctionnent pas de la facon que l'on pourrait croire sur
Access).

J'utilise les fonctions de domaine avec parcimonie dans les requetes,
celles-ci provoquant un rallentissement considerable. Je presume, une
presomption de plus, que les commandes ne porteront que sur quelques pizzas
(une douzaine au plus), ce qui va rendre la lenteur de la requete
acceptable. Je n'utiliserais pas la technique ci-dessus pour une requete
pouvant affecter des milliers d'enregistrements.

Une facon plus elegante de resoudre ce probleme eut ete tout simplement de
mettre une colonne quantite dans la table des details de commande. Par
defaut cette colonne aurait ete a 1, et tout changement de cette quantite
aurait donne lieu a un calcul du genre:

PrixDesPizzas = IIF(Qty > 1, Plat_Prix + (Plat_Prix * (Qty -1))/2, Plat_Prix
* Qty)
Si on est sur que la quantite ne peut jamais etre 0, on peut meme
simplifier:
PrixDesPizzas = Plat_Prix * ((1 + (Qty - 1))/2)

Voila, bonne continuation.

--
Daniel :-)

Computing Technologies International - www.computing-tech.com - We
provide solutions...

"Guillaume" wrote in message
news:3ec901c472f7$ae0aabc0$
Ta solution est tres valable, mais le probleme se corse
lorsque le garçon supprime la 1ere pizza (au tarif plein)
soi-disant il s'est trompé, alors dans le detail de la
commande, la 2eme pizza , elle remplace la 1ere mais celle-
ci est à moitié prix . Alors là, bonjour les bénéfices.
1 2