IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Access Discussion :

gestion de stocks, access 2003


Sujet :

Access

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 35
    Points : 11
    Points
    11
    Par défaut gestion de stocks, access 2003
    j'ai 3 tables: boisson avec le stock initial, achat boisson et la quantité consommée et conso boisson avec la quantité consommée.
    Je souhaite connaitre la quantité en stock à un moment donné (champdate dans les tables achat t conso).
    J'ai pour cela créer une requête calculant le stock à une date donnée par l'utilisateur, à partir de 2 autres requetes calculant le cumul des entrées et sorties à cette date.
    Le problème est que si je rentre une date antérieure à la 1ère date d'entrée ou à la 1ère date de sortie je n'ai aucun résultat qui s'affiche.
    Ou puis-je configurer qu'à défau d'entrée ou sorties la valeur à prendre est 0?
    Merci d'avance

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27
    Points : 19
    Points
    19
    Par défaut
    A priori ce que tu mets en oeuvre me paraît compliqué pour obtenir le résultat que tu désires.
    J'ai fait un test et ça m'a pris 3 minutes de concevoir
    - deux tables et non trois
    - un fromulaire
    - une requête

    Grâce à ça j'obtiens la quantité de tel ou tel brevage à un moment donné.

    J'ai créé une table appelée T_BOISSONS qui contient : BOIS_PK et BOIS_NOM. J'ai ensuite rentré 3 types de boisson : bière, coca, eau

    Ensuite j'ai créé une table T_MOUVEMENTS qui contient MOUV_PK, MOUV_QTE, MOUV_DATE et MOUV_BOIS_PK (qui se réfère à l'autre table via la clef primaire).

    Dans cette table Mouvements je rentre à une date x (ici 01/01/2005) mon stock initial. Ensuite je passe différentes entrées et sorties des brevages à différentes dates.

    Une fois que j'ai kkes records je fais ma requête où j'inclus les deux tables.

    Je prends les champs T_BOISSONS, T_QTE et T_DATE. Je mets ma requête en mode "sommation", j'introduit comme critère <#30/06/2005# dans la date, en regard de "opérations" je mets "somme" au niveau des quantités et "où" au niveau de la date.

    Et j'obtiens, le stock de chaque brevage au 30/06/2005.

    Pour ce qui est de faire apparaître zéro en regard des boissons où il n'y a rien, pourquoi ne pas initialiser une quantité zéro à une date fort éloignée dans le passé. Par exemple le 01/01/1900, rentrer zéro pour chaque brevage.

    Je viens de tester et si je rentre 31/12/2004 dans ma requête j'obtiens
    bière : 0
    coca : 0
    eau : 0

    et non pas une requête "vide"

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 35
    Points : 11
    Points
    11
    Par défaut j'y avais pensé....
    le truc c'est que ma tble achat boisson contient également le nom de mon fournisseur, le prix d'achat.... champs inutiles pour mes consommations puisque je n'ai qu'un seul client!
    Il me faudrait alors modifier ma table?

    Dans ma requete principale j'ai cela:
    SELECT Boissons.N°bois, Boissons.Mqbois, [SIBois]+[SommeDeQtébois]-[SommeDeQtéconso] AS stock
    FROM (Boissons INNER JOIN [entrées boisson] ON Boissons.N°bois = [entrées boisson].N°bois) INNER JOIN [sorties boisson] ON Boissons.N°bois = [sorties boisson].N°Bois
    GROUP BY Boissons.N°bois, Boissons.Mqbois, [SIBois]+[SommeDeQtébois]-[SommeDeQtéconso];

    Pour ma boisson 1 (test), j'ai un stock initial de 2.
    Je fais un achat le 10/01/2006 de 5
    J'en vends 1 le 01/01/2006 et 2 le 01/02/2006.

    Si je rentre une date >= 10/01/2006 j'ai bien mon stock.
    Mais si je rentre une date antérieure, il ne m'affiche rien car la somme des achats n'a pas de valeur (je voudrais que cela soit 0 par défaut).

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27
    Points : 19
    Points
    19
    Par défaut
    Essaie de rentrer un achat fictif de zéro à une date éloignée dans le passé. Parce que pour access "vide" ou zéro c'est pas la même chose. S'il trouve zéro, il indiquera zéro dans ta requête et non pas une requête vide. Et c'est ce que tu veux si j'ai bien compris : qu'il affiche le nom de la boisson même si c'est zéro.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27
    Points : 19
    Points
    19
    Par défaut
    Pour ce qui est de modifier ou non ta table.. à toi de voir, ça dépend de ce que tu as besoin comme outputs.

    Si j'avais du concevoir une db telle que tu la décrit j'aurais fait :
    - une table des "tiers" (clients et fournisseurs) avec toutes les infos les concernants.
    - une table des boissons avec leur prix
    - une table des mouvements qui met en relation les tiers et les boissons via leur clefs primaires.

    Ca permet de savoir par exemple chez les tiers chez qui on a acheté quoi et au niveau des boissons on peut savoir chez qui a été acheté tel ou tel lot.

  6. #6
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 35
    Points : 11
    Points
    11
    Par défaut OK
    je vais créer des achats et conso fictives de 0...
    Je m'occupe de faire de la gestion pour un restaurant donc les clients ne m'intéressent pas (à mon niveau). Quand aux fournisseurs je peux effectuer les statistiquesdont tu parles en l'état actuel des choses.

    Une idée que j'avais: dans ma requete principale ne puis-je pas mettre la condition si la somme achats (idem pour conso) n'est pas définie (Est Null?) alors j'ajoute/ j'enleve 0 à mon stock initial?
    J'ai essayé comme cela:
    SELECT Boissons.N°bois, Boissons.Mqbois, [SIBois]+IIf([SommeDeQtébois] Is Null,0,[SommeDeQtébois])-IIf([SommeDeQtéconso] Is Null,0,[SommeDeQtéconso]) AS stock
    FROM (Boissons INNER JOIN [entrées boisson] ON Boissons.N°bois = [entrées boisson].N°bois) INNER JOIN [sorties boisson] ON Boissons.N°bois = [sorties boisson].N°Bois
    GROUP BY Boissons.N°bois, Boissons.Mqbois, [SIBois]+IIf([SommeDeQtébois] Is Null,0,[SommeDeQtébois])-IIf([SommeDeQtéconso] Is Null,0,[SommeDeQtéconso]);

    mais je n'ai obtenu aucun changement.
    Mon programme ne doit pas etre correct...

  7. #7
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 35
    Points : 11
    Points
    11
    Par défaut j'ai trouvé quelque chose....
    Conversion de valeurs Null en zéro

    Lorsque vous possédez des champs qui contiennent des valeurs Null, vous pouvez créer une expression (expression : toute combinaison d'opérateurs mathématiques ou logiques, de constantes, de fonctions, de noms de champs, de contrôles et de propriétés qui s'évalue pour donner une seule valeur. Les expressions peuvent réaliser des calculs, manipuler des caractères ou tester des données.) qui convertit les valeurs Null en zéros. Vous pouvez le faire si vous voulez que les enregistrements qui contiennent des valeurs Null soient inclus dans un calcul de regroupement (fonction de regroupement : fonction, telle que SOMME, NB, MOYENNE ou VAR, utilisée pour calculer des totaux.) , ou si vous voulez éviter qu'une expression n'aboutisse à une valeur Null lorsqu'un champ auquel on fait référence dans l'expression contient des valeurs Null. Utilisez la fonction Nz, par exemple, afin de convertir des valeurs Null en zéros :

    Nz([Subtotal],0+Nz([Freight],0)


    Mais comment j'applique ça à mon cas?

  8. #8
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 35
    Points : 11
    Points
    11
    Par défaut fonction Nz
    Quelqu'un peut m'aider à mettre en place cette fonction?

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 710
    Points : 847
    Points
    847
    Par défaut
    Salut,

    (Pour info, j'ai par MP récupérer la base de Mamoure31)

    Il te faut utiliser des jointures "LEFT JOIN" et pas "JOIN", ainsi même sans mouvement sur la boisson la ligne apparaitra (avec Null comme quantité). Tu peux donc faire une requete qui ne fera que mettre en forme tous les mouvement et ensuite faire une requete regroupement qui utilise la fonction Nz().

    Par exemple en partant de ta base j'ai ajouté une requete "Liste des mouvements" avec le sql suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT Boissons.N°bois, Boissons.Mqbois, Boissons.SIBois, [entrées boisson].SommeDeQtébois, [sorties boisson].SommeDeQtéconso
    FROM (Boissons LEFT JOIN [entrées boisson] ON Boissons.N°bois = [entrées boisson].N°bois) LEFT JOIN [sorties boisson] ON Boissons.N°bois = [sorties boisson].N°Bois;
    Ensuite la requete "Gestion du stock" est modifiée comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT [Liste des mouvements].N°bois, Boissons.Nombois, [Liste des mouvements].Mqbois, nz([Liste des mouvements].[SIBois])+nz([SommeDeQtébois])-nz([SommeDeQtéconso]) AS stock
    FROM [Liste des mouvements] INNER JOIN Boissons ON [Liste des mouvements].N°bois = Boissons.N°bois
    GROUP BY [Liste des mouvements].N°bois, Boissons.Nombois, [Liste des mouvements].Mqbois, nz([Liste des mouvements].[SIBois])+nz([SommeDeQtébois])-nz([SommeDeQtéconso])
    ORDER BY [Liste des mouvements].N°bois;
    En espérant t'avoir été utile.

    A+

  10. #10
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 35
    Points : 11
    Points
    11
    Par défaut merci
    c'est génial.... merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2000] Gestion de stock Access
    Par Akhesa13 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 15/01/2010, 23h05
  2. requête de gestion de stock access 2007
    Par cameleon1881 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 11/01/2010, 08h48
  3. Gestion de stock ACCESS
    Par sirocco auto dans le forum Modélisation
    Réponses: 6
    Dernier message: 07/06/2007, 08h38
  4. Recherche base access pour gestion de stock avec picking
    Par Cedric1979 dans le forum Access
    Réponses: 3
    Dernier message: 15/02/2006, 14h37
  5. Access gestion du stock
    Par ibaia64 dans le forum Access
    Réponses: 13
    Dernier message: 24/01/2006, 12h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo