Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Etat de stock

5 réponses
Avatar
Marc CNS
Bonjour à tous,

J'utilise access 2003 et voici mon problème: A partir de 4 tables, je
souhaiterais avoir un état de stock. J'ai 1 table vente comptant détail, 1
table facture détail, 1 table détail entrées produits, 1 table produit. A
partir de cela, Entrées produits - Facture détail - Vente comptant détail me
donne un stock théorique.L'ennui c'est que lorsque dans une des tables il n'y
a pas de mouvement pour un des produit, la ligne de ce produit n'apparaît pas
dans ma requête. Ci dessous le code de la requête
SELECT DISTINCTROW Produits.[Réf Produit], Sum([Vente comptant -
Détail].Quantité) AS [Somme De Vente comptant - Détail_Quantité],
Sum([Facture - Détail].Quantité) AS [Somme De Facture - Détail_Quantité],
Sum([Détail Entrées Produits].Quantités) AS [Somme De Quantités]
FROM ((Produits INNER JOIN [Détail Entrées Produits] ON Produits.[Réf
Produit] = [Détail Entrées Produits].réfProduitEntrées) INNER JOIN [Facture -
Détail] ON Produits.[Réf Produit] = [Facture - Détail].[Réf produit]) INNER
JOIN [Vente comptant - Détail] ON Produits.[Réf Produit] = [Vente comptant -
Détail].[Réf produit]
GROUP BY Produits.[Réf Produit];
Peut-être est ce parce que sans opération la somme est vide et non pas 0?
Merci de m'aider et bonne journée à vous.

5 réponses

Avatar
Dragan
Bonjour Marc,
ta requête ne renvoie que les enregistrements présents dans les 4 tables. Si
tu souhaites avoir un état pour tous les produits; il faut que la requête
renvoie tous les enregistrements de la table produit et ce qu'ils soient
référencés ou non dans les 3 autres tables. Selon moi, il te faut remplacer
l'instruction INNER JOIN par un LEFT JOIN, je ne sais pas ici si tu dois
remplacer tous les instructions INNER JOIN ou juste la première; à essayer.

ex:
... FROM PRODUITS LEFT JOIN
([D E P] INNER JOIN ([F - D] INNER JOIN [V C - D] ON ) ON ) ON


"Marc CNS" a écrit :

Bonjour à tous,

J'utilise access 2003 et voici mon problème: A partir de 4 tables, je
souhaiterais avoir un état de stock. J'ai 1 table vente comptant détail, 1
table facture détail, 1 table détail entrées produits, 1 table produit. A
partir de cela, Entrées produits - Facture détail - Vente comptant détail me
donne un stock théorique.L'ennui c'est que lorsque dans une des tables il n'y
a pas de mouvement pour un des produit, la ligne de ce produit n'apparaît pas
dans ma requête. Ci dessous le code de la requête
SELECT DISTINCTROW Produits.[Réf Produit], Sum([Vente comptant -
Détail].Quantité) AS [Somme De Vente comptant - Détail_Quantité],
Sum([Facture - Détail].Quantité) AS [Somme De Facture - Détail_Quantité],
Sum([Détail Entrées Produits].Quantités) AS [Somme De Quantités]
FROM ((Produits INNER JOIN [Détail Entrées Produits] ON Produits.[Réf
Produit] = [Détail Entrées Produits].réfProduitEntrées) INNER JOIN [Facture -
Détail] ON Produits.[Réf Produit] = [Facture - Détail].[Réf produit]) INNER
JOIN [Vente comptant - Détail] ON Produits.[Réf Produit] = [Vente comptant -
Détail].[Réf produit]
GROUP BY Produits.[Réf Produit];
Peut-être est ce parce que sans opération la somme est vide et non pas 0?
Merci de m'aider et bonne journée à vous.







Avatar
Marc CNS
Un grand merci. Je te confirme qu'il faut remplacer toutes les instruction
INNER JOIN. Néanmoins, le problème persiste au niveau de l'expression qui
calcule l'état de stock. Je pense que quelque chose ne fonctionne pas au
niveau du code ci après :
AS [Somme De Quantités], [Somme De Quantités]-[Somme De Vente comptant -
Détail_Quantité]-[Somme De Facture - Détail_Quantité] AS Expr1
Voici ce que la requête est devenue:
SELECT DISTINCTROW Produits.[Réf Produit], Sum([Vente comptant -
Détail].Quantité) AS [Somme De Vente comptant - Détail_Quantité],
Sum([Facture - Détail].Quantité) AS [Somme De Facture - Détail_Quantité],
Sum([Détail Entrées Produits].Quantités) AS [Somme De Quantités], [Somme De
Quantités]-[Somme De Vente comptant - Détail_Quantité]-[Somme De Facture -
Détail_Quantité] AS Expr1
FROM ((Produits LEFT JOIN [Détail Entrées Produits] ON Produits.[Réf
Produit] = [Détail Entrées Produits].réfProduitEntrées) LEFT JOIN [Facture -
Détail] ON Produits.[Réf Produit] = [Facture - Détail].[Réf produit]) LEFT
JOIN [Vente comptant - Détail] ON Produits.[Réf Produit] = [Vente comptant -
Détail].[Réf produit]
GROUP BY Produits.[Réf Produit];

A ce stade, on pourrait sans problème exporter les données vers exel et
effectuer le calcul dans la feuille mais je pense qu'on peut sûrement faire
mieux et obtenir le stock directement dans la requête.

Encore merci à tous et à bientôt




"Dragan" a écrit :

Bonjour Marc,
ta requête ne renvoie que les enregistrements présents dans les 4 tables. Si
tu souhaites avoir un état pour tous les produits; il faut que la requête
renvoie tous les enregistrements de la table produit et ce qu'ils soient
référencés ou non dans les 3 autres tables. Selon moi, il te faut remplacer
l'instruction INNER JOIN par un LEFT JOIN, je ne sais pas ici si tu dois
remplacer tous les instructions INNER JOIN ou juste la première; à essayer.

ex:
... FROM PRODUITS LEFT JOIN
([D E P] INNER JOIN ([F - D] INNER JOIN [V C - D] ON ) ON ) ON


"Marc CNS" a écrit :

> Bonjour à tous,
>
> J'utilise access 2003 et voici mon problème: A partir de 4 tables, je
> souhaiterais avoir un état de stock. J'ai 1 table vente comptant détail, 1
> table facture détail, 1 table détail entrées produits, 1 table produit. A
> partir de cela, Entrées produits - Facture détail - Vente comptant détail me
> donne un stock théorique.L'ennui c'est que lorsque dans une des tables il n'y
> a pas de mouvement pour un des produit, la ligne de ce produit n'apparaît pas
> dans ma requête. Ci dessous le code de la requête
> SELECT DISTINCTROW Produits.[Réf Produit], Sum([Vente comptant -
> Détail].Quantité) AS [Somme De Vente comptant - Détail_Quantité],
> Sum([Facture - Détail].Quantité) AS [Somme De Facture - Détail_Quantité],
> Sum([Détail Entrées Produits].Quantités) AS [Somme De Quantités]
> FROM ((Produits INNER JOIN [Détail Entrées Produits] ON Produits.[Réf
> Produit] = [Détail Entrées Produits].réfProduitEntrées) INNER JOIN [Facture -
> Détail] ON Produits.[Réf Produit] = [Facture - Détail].[Réf produit]) INNER
> JOIN [Vente comptant - Détail] ON Produits.[Réf Produit] = [Vente comptant -
> Détail].[Réf produit]
> GROUP BY Produits.[Réf Produit];
> Peut-être est ce parce que sans opération la somme est vide et non pas 0?
> Merci de m'aider et bonne journée à vous.
>
>
>
>
>


Avatar
Gilbert
Bonjour,

As-tu essayé de renommer les champs ?
[Somme De Vente comptant - Détail_Quantité] en Somme1
[Somme De Facture - Détail_Quantité] en Somme2
etc...

Ca te donne quelque chose comme :
SELECT DISTINCTROW Produits.[Réf Produit], Sum([Vente comptant -
Détail].Quantité) AS Somme1,
Sum([Facture - Détail].Quantité) AS Somme2, Sum([Détail Entrées
Produits].Quantités) AS Somme3, [Somme3]-[Somme1]-[Somme2] AS Expr1


--
Cordialement,

Gilbert


"Marc CNS" a écrit dans le message de
news:
Un grand merci. Je te confirme qu'il faut remplacer toutes les instruction
INNER JOIN. Néanmoins, le problème persiste au niveau de l'expression qui
calcule l'état de stock. Je pense que quelque chose ne fonctionne pas au
niveau du code ci après :
AS [Somme De Quantités], [Somme De Quantités]-[Somme De Vente comptant -
Détail_Quantité]-[Somme De Facture - Détail_Quantité] AS Expr1
Voici ce que la requête est devenue:
SELECT DISTINCTROW Produits.[Réf Produit], Sum([Vente comptant -
Détail].Quantité) AS [Somme De Vente comptant - Détail_Quantité],
Sum([Facture - Détail].Quantité) AS [Somme De Facture - Détail_Quantité],
Sum([Détail Entrées Produits].Quantités) AS [Somme De Quantités], [Somme


De
Quantités]-[Somme De Vente comptant - Détail_Quantité]-[Somme De Facture -
Détail_Quantité] AS Expr1
FROM ((Produits LEFT JOIN [Détail Entrées Produits] ON Produits.[Réf
Produit] = [Détail Entrées Produits].réfProduitEntrées) LEFT JOIN


[Facture -
Détail] ON Produits.[Réf Produit] = [Facture - Détail].[Réf produit]) LEFT
JOIN [Vente comptant - Détail] ON Produits.[Réf Produit] = [Vente


comptant -
Détail].[Réf produit]
GROUP BY Produits.[Réf Produit];

A ce stade, on pourrait sans problème exporter les données vers exel et
effectuer le calcul dans la feuille mais je pense qu'on peut sûrement


faire
mieux et obtenir le stock directement dans la requête.

Encore merci à tous et à bientôt




"Dragan" a écrit :

> Bonjour Marc,
> ta requête ne renvoie que les enregistrements présents dans les 4


tables. Si
> tu souhaites avoir un état pour tous les produits; il faut que la


requête
> renvoie tous les enregistrements de la table produit et ce qu'ils soient
> référencés ou non dans les 3 autres tables. Selon moi, il te faut


remplacer
> l'instruction INNER JOIN par un LEFT JOIN, je ne sais pas ici si tu dois
> remplacer tous les instructions INNER JOIN ou juste la première; à


essayer.
>
> ex:
> ... FROM PRODUITS LEFT JOIN
> ([D E P] INNER JOIN ([F - D] INNER JOIN [V C - D] ON ) ON ) ON
>
>
> "Marc CNS" a écrit :
>
> > Bonjour à tous,
> >
> > J'utilise access 2003 et voici mon problème: A partir de 4 tables, je
> > souhaiterais avoir un état de stock. J'ai 1 table vente comptant


détail, 1
> > table facture détail, 1 table détail entrées produits, 1 table


produit. A
> > partir de cela, Entrées produits - Facture détail - Vente comptant


détail me
> > donne un stock théorique.L'ennui c'est que lorsque dans une des tables


il n'y
> > a pas de mouvement pour un des produit, la ligne de ce produit


n'apparaît pas
> > dans ma requête. Ci dessous le code de la requête
> > SELECT DISTINCTROW Produits.[Réf Produit], Sum([Vente comptant -
> > Détail].Quantité) AS [Somme De Vente comptant - Détail_Quantité],
> > Sum([Facture - Détail].Quantité) AS [Somme De Facture -


Détail_Quantité],
> > Sum([Détail Entrées Produits].Quantités) AS [Somme De Quantités]
> > FROM ((Produits INNER JOIN [Détail Entrées Produits] ON Produits.[Réf
> > Produit] = [Détail Entrées Produits].réfProduitEntrées) INNER JOIN


[Facture -
> > Détail] ON Produits.[Réf Produit] = [Facture - Détail].[Réf produit])


INNER
> > JOIN [Vente comptant - Détail] ON Produits.[Réf Produit] = [Vente


comptant -
> > Détail].[Réf produit]
> > GROUP BY Produits.[Réf Produit];
> > Peut-être est ce parce que sans opération la somme est vide et non pas


0?
> > Merci de m'aider et bonne journée à vous.
> >
> >
> >
> >
> >


Avatar
Dragan
En fait, tu devrais avoir des sommes nulles
Essaie en remplaçant les champs Sum() par Nz(Sum(),0) pour retourner 0
lorsqu'il n'y a pas de valeur retournée.

"Marc CNS" a écrit :

Un grand merci. Je te confirme qu'il faut remplacer toutes les instruction
INNER JOIN. Néanmoins, le problème persiste au niveau de l'expression qui
calcule l'état de stock. Je pense que quelque chose ne fonctionne pas au
niveau du code ci après :
AS [Somme De Quantités], [Somme De Quantités]-[Somme De Vente comptant -
Détail_Quantité]-[Somme De Facture - Détail_Quantité] AS Expr1
Voici ce que la requête est devenue:
SELECT DISTINCTROW Produits.[Réf Produit], Sum([Vente comptant -
Détail].Quantité) AS [Somme De Vente comptant - Détail_Quantité],
Sum([Facture - Détail].Quantité) AS [Somme De Facture - Détail_Quantité],
Sum([Détail Entrées Produits].Quantités) AS [Somme De Quantités], [Somme De
Quantités]-[Somme De Vente comptant - Détail_Quantité]-[Somme De Facture -
Détail_Quantité] AS Expr1
FROM ((Produits LEFT JOIN [Détail Entrées Produits] ON Produits.[Réf
Produit] = [Détail Entrées Produits].réfProduitEntrées) LEFT JOIN [Facture -
Détail] ON Produits.[Réf Produit] = [Facture - Détail].[Réf produit]) LEFT
JOIN [Vente comptant - Détail] ON Produits.[Réf Produit] = [Vente comptant -
Détail].[Réf produit]
GROUP BY Produits.[Réf Produit];

A ce stade, on pourrait sans problème exporter les données vers exel et
effectuer le calcul dans la feuille mais je pense qu'on peut sûrement faire
mieux et obtenir le stock directement dans la requête.

Encore merci à tous et à bientôt




"Dragan" a écrit :

> Bonjour Marc,
> ta requête ne renvoie que les enregistrements présents dans les 4 tables. Si
> tu souhaites avoir un état pour tous les produits; il faut que la requête
> renvoie tous les enregistrements de la table produit et ce qu'ils soient
> référencés ou non dans les 3 autres tables. Selon moi, il te faut remplacer
> l'instruction INNER JOIN par un LEFT JOIN, je ne sais pas ici si tu dois
> remplacer tous les instructions INNER JOIN ou juste la première; à essayer.
>
> ex:
> ... FROM PRODUITS LEFT JOIN
> ([D E P] INNER JOIN ([F - D] INNER JOIN [V C - D] ON ) ON ) ON
>
>
> "Marc CNS" a écrit :
>
> > Bonjour à tous,
> >
> > J'utilise access 2003 et voici mon problème: A partir de 4 tables, je
> > souhaiterais avoir un état de stock. J'ai 1 table vente comptant détail, 1
> > table facture détail, 1 table détail entrées produits, 1 table produit. A
> > partir de cela, Entrées produits - Facture détail - Vente comptant détail me
> > donne un stock théorique.L'ennui c'est que lorsque dans une des tables il n'y
> > a pas de mouvement pour un des produit, la ligne de ce produit n'apparaît pas
> > dans ma requête. Ci dessous le code de la requête
> > SELECT DISTINCTROW Produits.[Réf Produit], Sum([Vente comptant -
> > Détail].Quantité) AS [Somme De Vente comptant - Détail_Quantité],
> > Sum([Facture - Détail].Quantité) AS [Somme De Facture - Détail_Quantité],
> > Sum([Détail Entrées Produits].Quantités) AS [Somme De Quantités]
> > FROM ((Produits INNER JOIN [Détail Entrées Produits] ON Produits.[Réf
> > Produit] = [Détail Entrées Produits].réfProduitEntrées) INNER JOIN [Facture -
> > Détail] ON Produits.[Réf Produit] = [Facture - Détail].[Réf produit]) INNER
> > JOIN [Vente comptant - Détail] ON Produits.[Réf Produit] = [Vente comptant -
> > Détail].[Réf produit]
> > GROUP BY Produits.[Réf Produit];
> > Peut-être est ce parce que sans opération la somme est vide et non pas 0?
> > Merci de m'aider et bonne journée à vous.
> >
> >
> >
> >
> >


Avatar
Marc CNS
Ton idée est bonne j'obtiens les résultats attendus.
Merci pour l'aide et le temps passé.





"Dragan" a écrit :

En fait, tu devrais avoir des sommes nulles
Essaie en remplaçant les champs Sum() par Nz(Sum(),0) pour retourner 0
lorsqu'il n'y a pas de valeur retournée.

"Marc CNS" a écrit :

> Un grand merci. Je te confirme qu'il faut remplacer toutes les instruction
> INNER JOIN. Néanmoins, le problème persiste au niveau de l'expression qui
> calcule l'état de stock. Je pense que quelque chose ne fonctionne pas au
> niveau du code ci après :
> AS [Somme De Quantités], [Somme De Quantités]-[Somme De Vente comptant -
> Détail_Quantité]-[Somme De Facture - Détail_Quantité] AS Expr1
> Voici ce que la requête est devenue:
> SELECT DISTINCTROW Produits.[Réf Produit], Sum([Vente comptant -
> Détail].Quantité) AS [Somme De Vente comptant - Détail_Quantité],
> Sum([Facture - Détail].Quantité) AS [Somme De Facture - Détail_Quantité],
> Sum([Détail Entrées Produits].Quantités) AS [Somme De Quantités], [Somme De
> Quantités]-[Somme De Vente comptant - Détail_Quantité]-[Somme De Facture -
> Détail_Quantité] AS Expr1
> FROM ((Produits LEFT JOIN [Détail Entrées Produits] ON Produits.[Réf
> Produit] = [Détail Entrées Produits].réfProduitEntrées) LEFT JOIN [Facture -
> Détail] ON Produits.[Réf Produit] = [Facture - Détail].[Réf produit]) LEFT
> JOIN [Vente comptant - Détail] ON Produits.[Réf Produit] = [Vente comptant -
> Détail].[Réf produit]
> GROUP BY Produits.[Réf Produit];
>
> A ce stade, on pourrait sans problème exporter les données vers exel et
> effectuer le calcul dans la feuille mais je pense qu'on peut sûrement faire
> mieux et obtenir le stock directement dans la requête.
>
> Encore merci à tous et à bientôt
>
>
>
>
> "Dragan" a écrit :
>
> > Bonjour Marc,
> > ta requête ne renvoie que les enregistrements présents dans les 4 tables. Si
> > tu souhaites avoir un état pour tous les produits; il faut que la requête
> > renvoie tous les enregistrements de la table produit et ce qu'ils soient
> > référencés ou non dans les 3 autres tables. Selon moi, il te faut remplacer
> > l'instruction INNER JOIN par un LEFT JOIN, je ne sais pas ici si tu dois
> > remplacer tous les instructions INNER JOIN ou juste la première; à essayer.
> >
> > ex:
> > ... FROM PRODUITS LEFT JOIN
> > ([D E P] INNER JOIN ([F - D] INNER JOIN [V C - D] ON ) ON ) ON
> >
> >
> > "Marc CNS" a écrit :
> >
> > > Bonjour à tous,
> > >
> > > J'utilise access 2003 et voici mon problème: A partir de 4 tables, je
> > > souhaiterais avoir un état de stock. J'ai 1 table vente comptant détail, 1
> > > table facture détail, 1 table détail entrées produits, 1 table produit. A
> > > partir de cela, Entrées produits - Facture détail - Vente comptant détail me
> > > donne un stock théorique.L'ennui c'est que lorsque dans une des tables il n'y
> > > a pas de mouvement pour un des produit, la ligne de ce produit n'apparaît pas
> > > dans ma requête. Ci dessous le code de la requête
> > > SELECT DISTINCTROW Produits.[Réf Produit], Sum([Vente comptant -
> > > Détail].Quantité) AS [Somme De Vente comptant - Détail_Quantité],
> > > Sum([Facture - Détail].Quantité) AS [Somme De Facture - Détail_Quantité],
> > > Sum([Détail Entrées Produits].Quantités) AS [Somme De Quantités]
> > > FROM ((Produits INNER JOIN [Détail Entrées Produits] ON Produits.[Réf
> > > Produit] = [Détail Entrées Produits].réfProduitEntrées) INNER JOIN [Facture -
> > > Détail] ON Produits.[Réf Produit] = [Facture - Détail].[Réf produit]) INNER
> > > JOIN [Vente comptant - Détail] ON Produits.[Réf Produit] = [Vente comptant -
> > > Détail].[Réf produit]
> > > GROUP BY Produits.[Réf Produit];
> > > Peut-être est ce parce que sans opération la somme est vide et non pas 0?
> > > Merci de m'aider et bonne journée à vous.
> > >
> > >
> > >
> > >
> > >