OVH Cloud OVH Cloud

Moyennes differentes dans champ calculé

7 réponses
Avatar
JpPradier
Bonsoir à tous

j'ai une base de produit avec le stock mis à jour quotidiennement. J'ai fait une requete pour
afficher l'état de mes stocks selon la date. jusque là tout va bien. La ou ça se corse, je voudrais
rajouter la moyenne de mes stocks depuis le début. J'ai réussi à bricoler un champs, mais il
m'affiche la meme moyenne pour tous les produits :-(

Question subsidiaire : j'aimerais rajouter un champ avec le stock de la veille ou la variation par
rapport au stock de la veille.

j-p

7 réponses

Avatar
Eric
Bonsoir,

Peut-être en faisant appel à la fonction MoyDom()ou DAvg() dans ta
requête :
MoyDom("LeChp";"LaTableOuRequête";"LeCritere")

qq chose du genre:
MoyDom("Stock";"Produit";"RefProduit=" & RefProduit & " and DateMaj<=#"
& LaDate & "#")

(sans garantie ...)

A+
Eric




Bonsoir à tous

j'ai une base de produit avec le stock mis à jour quotidiennement. J'ai fait une requete pour
afficher l'état de mes stocks selon la date. jusque là tout va bien. La ou ça se corse, je voudrais
rajouter la moyenne de mes stocks depuis le début. J'ai réussi à bricoler un champs, mais il
m'affiche la meme moyenne pour tous les produits :-(

Question subsidiaire : j'aimerais rajouter un champ avec le stock de la veille ou la variation par
rapport au stock de la veille.

j-p



Avatar
JpPradier
Merci Eric pour ta réponse

Mais j'étais arrivé à un truc plus ou moins similaire. Le problème, c'est que ma requête renvoie
tous les produits pour une date donnée. Et donc c'est le RefProduit de ton exemple que je n'arrive
pas à écrire.

j-p

"Eric" a écrit dans le message de
news:%23IrLA%
Bonsoir,

Peut-être en faisant appel à la fonction MoyDom()ou DAvg() dans ta
requête :
MoyDom("LeChp";"LaTableOuRequête";"LeCritere")

qq chose du genre:
MoyDom("Stock";"Produit";"RefProduit=" & RefProduit & " and DateMaj<=#"
& LaDate & "#")

(sans garantie ...)

A+
Eric


Avatar
Eric
re,

Quelles sont les structures des tables qui entrent en jeu pour le calcul
des stocks ?

A+
Eric






Merci Eric pour ta réponse

Mais j'étais arrivé à un truc plus ou moins similaire. Le problème, c'est que ma requête renvoie
tous les produits pour une date donnée. Et donc c'est le RefProduit de ton exemple que je n'arrive
pas à écrire.

j-p

"Eric" a écrit dans le message de
news:%23IrLA%

Bonsoir,

Peut-être en faisant appel à la fonction MoyDom()ou DAvg() dans ta
requête :
MoyDom("LeChp";"LaTableOuRequête";"LeCritere")

qq chose du genre:
MoyDom("Stock";"Produit";"RefProduit=" & RefProduit & " and DateMaj<=#"
& LaDate & "#")

(sans garantie ...)

A+
Eric






Avatar
JpPradier
Bonjour Eric

Une seule table. La mise à jour se fait par ajout d'une ligne avec produit, date et stock.

j-p

"Eric" a écrit dans le message de
news:%23jC$
re,

Quelles sont les structures des tables qui entrent en jeu pour le calcul
des stocks ?

A+
Eric






Avatar
Eric
Bnjour Jp,

Il faut donc que tu combines dans le critère de MoyDom() à la fois le
nom du produit et la date de maj puisque tu n'as pas de clé primaire sur
cette table.

Soit une table tArticle composée des champs : Produit, Stock et DateMaj

la requête doit contenir les champs Produit, DateMaj et le champ calculé
Stock Moyen calculé comme suit :

Stock Moyen: CDbl(MoyDom("Stock";"tArticle";"Produit='" & [Produit] & "'
and DateMaj <=" & Format([DateMaj];"#mm/jj/aa#")))

(PS: tu peux remplacer CDbl par CSng)

De même, pour avoir dans cette requête, le stock moyen précédent
(Question subsidiaire), il te faut utiliser en critère du calcul du
stock moyen la fonction MaxDom() pour trouver la date immédiatement
précédente du genre :

Stock Moyen Précédent: CDbl(MoyDom("Stock";"tArticle";"Produit='" &
[Produit] & "' and DateMaj <=" &
Format(MaxDom("DateMaj";"tArticle";"DateMaj<" &
Format([DateMaj];"#mm/jj/aa#") & " and Produit='" & [Produit] &
"'");"#mm/jj/aa#")))

Inconvénients :
1 - Seuls apparaitront les stocks moyens des produits pour lesquels il
existe une date de maj correspondant à celle que tu as mis en critère
sur le champ DateMaj de la requête.(Inconvénient levé si TOUS les jours,
tu enregistres le stock pour CHAQUE produit)
2 - Il faudra tester aussi les erreurs que tu peux recevoir concernant
le stock moyen précédent si l'on est le 1er jour.

Attn: Si les noms de produits comportent des ' il te faudra les doubler
dans les critères des fonctions MoyDom() et MaxDom() du genre :
MoyDom(...;...;"Produit=''"... & "''"...) ou en utilisant la fonction
Replace() : MoyDom(....;"Produit='" & Replace(Produit;"'";"''") ...)

je te fais passer une petite bd avec un exemple de la requête, les
erreurs sur le stock moyen précédent ne sont pas traitées.

http://cjoint.com/?djjRKZNMr8

A+
Eric





Bonjour Eric

Une seule table. La mise à jour se fait par ajout d'une ligne avec produit, date et stock.

j-p

"Eric" a écrit dans le message de
news:%23jC$

re,

Quelles sont les structures des tables qui entrent en jeu pour le calcul
des stocks ?

A+
Eric







Avatar
JpPradier
Je te remercie beaucoup Eric. Je vais tester ça et je reviens te dire. J'ai oublié de le préciser
mais il y a bien une clé primaire dans ma table. Est-ce que ça peut simplifier les choses ?
Pour la question subsidiaire, je voulais juste le stock de la veille. Mais je pense pouvoir m'en
tirer avec ton exemple.

j-p

"Eric" a écrit dans le message de
news:%
Bnjour Jp,

Il faut donc que tu combines dans le critère de MoyDom() à la fois le
nom du produit et la date de maj puisque tu n'as pas de clé primaire sur
cette table.

Soit une table tArticle composée des champs : Produit, Stock et DateMaj

la requête doit contenir les champs Produit, DateMaj et le champ calculé
Stock Moyen calculé comme suit :

Stock Moyen: CDbl(MoyDom("Stock";"tArticle";"Produit='" & [Produit] & "'
and DateMaj <=" & Format([DateMaj];"#mm/jj/aa#")))

(PS: tu peux remplacer CDbl par CSng)

De même, pour avoir dans cette requête, le stock moyen précédent
(Question subsidiaire), il te faut utiliser en critère du calcul du
stock moyen la fonction MaxDom() pour trouver la date immédiatement
précédente du genre :

Stock Moyen Précédent: CDbl(MoyDom("Stock";"tArticle";"Produit='" &
[Produit] & "' and DateMaj <=" &
Format(MaxDom("DateMaj";"tArticle";"DateMaj<" &
Format([DateMaj];"#mm/jj/aa#") & " and Produit='" & [Produit] &
"'");"#mm/jj/aa#")))

Inconvénients :
1 - Seuls apparaitront les stocks moyens des produits pour lesquels il
existe une date de maj correspondant à celle que tu as mis en critère
sur le champ DateMaj de la requête.(Inconvénient levé si TOUS les jours,
tu enregistres le stock pour CHAQUE produit)
2 - Il faudra tester aussi les erreurs que tu peux recevoir concernant
le stock moyen précédent si l'on est le 1er jour.

Attn: Si les noms de produits comportent des ' il te faudra les doubler
dans les critères des fonctions MoyDom() et MaxDom() du genre :
MoyDom(...;...;"Produit=''"... & "''"...) ou en utilisant la fonction
Replace() : MoyDom(....;"Produit='" & Replace(Produit;"'";"''") ...)

je te fais passer une petite bd avec un exemple de la requête, les
erreurs sur le stock moyen précédent ne sont pas traitées.

http://cjoint.com/?djjRKZNMr8

A+
Eric





Bonjour Eric

Une seule table. La mise à jour se fait par ajout d'une ligne avec produit, date et stock.

j-p

"Eric" a écrit dans le message de
news:%23jC$

re,

Quelles sont les structures des tables qui entrent en jeu pour le calcul
des stocks ?

A+
Eric









Avatar
JpPradier
Re Eric

Test concluant pour la moyenne. Mais alors, qu'est-ce que ça rame !
Pentium 2Ghz et Access 2002. Ma base contient environ 1000 produits sur 65 jours et il faut de 5 à
10 minutes pour afficher la requête.

Pour la question subsidiaire, là c'est moi qui rame ;-) si j'ai bien compris, tu prend la date max
dans les dates inférieures à la date actuelle. Mais je n'arrive pas a sortir le stock associé.

j-p