Aide pour créer requêtes ACCESS

Résolu
jabest Messages postés 37 Statut Membre -  
 Annesophie -
Bonjour à tous ,

J'ai créé une BD Access avec 2 tables :

TABLE1 : ENTREE
N° DATE REF-E PRODUIT QTE-E
TABLE2 : SORTIE
N° DATE REF-S PRODUIT QTE-S

Ces 2 table sont liées par une relation 1 ENTREE....+sieurs SORTIE

Je souhaiterais par une requête obtenir pour chaque produits les soldes de stock à la date du jour :

DATE PRODUIT STOCK
ce jour A = somme des QTE-E- somme des QTE-S
B
C

et par une autre requête obtenir la récap des derniers mouvements entrées ou sortie pour chaque produits :
DATE PRODUIT REF-E REF-S QTE
y A x 10
s B e 5
s C h 20

Merci d'avance pour votre aide pour info je suis pas à mes aises en SQL, VBA et manipulation demacros.

7 réponses

  1. jabest Messages postés 37 Statut Membre 1
     
    Bonjour Jacques,

    Vous êtes proche de la solution , seulement vous sommez les QTE_E ce qui fausse le calcul du STOCKR , en réalité il faudrait faire QTE_E-somme(QTE_S) j'ai tripatouillé l'expression sum de votre requête dans tous les sens mais à chaque fois il me renvoit une erreur d'agrégat ?? je suis suspendu à votre solution.

    Trés cdlmt
    1
    1. Jacques
       
      Bonsoir jabest,
      Pour mémoire Agrégat, appelé aussi regroupement permet de masquer les informations redondantes :
      Ex. Avant regroupement : Produit Qté
      Bière 1
      Bière 2

      Après Regroupement : Produit Qté
      Bière 3
      _____________
      Autre chose à noter : Date_DE -> Date de la dernière Entrée
      Date_DS -> Date de la dernière Sortie
      ___________
      Voici la dernière mouture
      SELECT ENTREE.N°, ENTREE.PRODUIT, ENTREE.QTE_E, SORTIE.QTE_S, ([entree].[QTE_E]-Sum([sortie].[QTE_S])) AS STOCKR, Last(SORTIE.Date_sortie) AS Date_DS, Last(ENTREE.Date_entree) AS Date_DE
      FROM ENTREE INNER JOIN SORTIE ON ENTREE.N° = SORTIE.N°
      GROUP BY ENTREE.N°, ENTREE.PRODUIT, ENTREE.QTE_E, SORTIE.QTE_S
      ORDER BY ENTREE.PRODUIT;


      A+
      La science ne fait que trouver ce qui existe depuis toujours.
      Hubert REEVES.
      0
      1. jabest Messages postés 37 Statut Membre 1 > Jacques
         
        Bonsoir Jacques
        à force de triturer dans tes code ci-dessous ce qui me donne le résultat escompter, j'ai simplement remplacer un sum (QTE_E) par un min.

        SELECT ENTREE.N°, Sum(ENTREE.QTE_E) AS SommeDeQTE_E, Sum(SORTIE.QTE_S) AS SommeDeQTE_S, (min(ENTREE.QTE_E)-sum(SORTIE.QTE_S)) AS STOCKR, ENTREE.DATE_E
        FROM ENTREE INNER JOIN SORTIE ON ENTREE.N°=SORTIE.N°
        GROUP BY ENTREE.N°, ENTREE.DATE_E
        ORDER BY ENTREE.N°;

        Merci pour toute votre patience et votre disponibilité

        A+
        0
      2. Jacques > jabest Messages postés 37 Statut Membre
         
        Bonsoir jabest,

        Vous commencez à rentrer dans le match, comme disent les footeux. C'est en forgeant, etc...

        Pour conclure voici un site de référence parmi d'autres : https://access.developpez.com/


        Je suis satisfait d'avoir pu contribuer utilement à votre projet
        Au plaisir

        La science ne fait que trouver ce qi existe depuis toujours.
        Hubert REEVES
        0
      3. jabest Messages postés 37 Statut Membre 1 > Jacques
         
        Bonjour Jacques ,

        Je ne sais plus trop comment vous remercier .
        Votre site de référence m'a permis encore d'améliorer ma requête en effet en remplaçant :

        FROM ENTREE INNER JOIN SORTIE ON ENTREE.N°=SORTIE.N°

        Par :

        FROM ENTREE LEFT JOIN SORTIE ON ENTREE.N°=SORTIE.N°

        La requête affiche également les entrées pour lesquels il n'exite pas encore de sortie.

        C'est totale satisfaction pour moi.

        Merci encore et à bientôt sur le forum ccm.
        0
  2. Jacques
     
    Bonjour,

    Voici de quoi faire avancer, je crois, le schmilblick en SQL :

    Il me semble que cela correspond à votre besoin (en l'adaptant à votre contexte). Attention, j'ai relu soigneusement, mais .....

    SELECT ENTREES.[Code produit], ENTREES.[Nom du Matériel], SORTIES.[Nb sorties] , ENTREES.[Nb entrees] , [entrees].[nb entrees]-[sorties].[nb sorties] AS situation, ENTREES.DateTransaction
    FROM ENTREES INNER JOIN SORTIES ON ENTREES.[code produit] = SORTIES.[code produit]
    GROUP BY ENTREES.[code produit], ENTREES.[Nom du produit], SORTIES.[nb sorties], ENTREES.[nb entrees], [entrees].[nb entrees]-[sorties].[nb sorties], ENTREES.DateTransaction
    HAVING (((ENTREES.DateTransaction)=Date()));

    Cordialement
    La science ne fait que trouver ce qui existe depuis toujours.
    Hubert REEVES.
    0
  3. jabest Messages postés 37 Statut Membre 1
     
    Merci Jacques , pouvez-vous apporter plus d'explication à un pur néophyte je suis perdu dans voitre procédure.
    Je reprends ci dessous mes tables en espérant être plus clair :

    - ENTREE (N°,DATE,REF-E,PRODUIT,QTE-E)

    - SORTIE (N°,DATE,REF-S,PRODUIT,QTE-S)

    Mon but c'est d'avoir une requête qui me donne pour chaque PRODUIT le STOCK=QTE-E - QTE-S
    0
  4. Jacques
     
    Bonjour,
    A propos : Dans les noms le '-' est proscrit. Utiliser '_'.
    Nota : voilà la requête à copier dans : Requête/nouveau/mode création/(fermer ajouter table)/ activer affichage/SQL mode SQL

    SELECT ENTREE.N°, ENTREE.PRODUIT, ENTREE.QTE_E, SORTIE.QTE_S, [entree].[QTE_E]-[sortie].[QTE_S] AS STOCK, ENTREE.Date
    FROM ENTREE INNER JOIN SORTIE ON ENTREE.N° = SORTIE.N°
    GROUP BY ENTREE.N°, ENTREE.PRODUIT, ENTREE.QTE_E, SORTIE.QTE_S, [entree].[QTE_E]-[sortie].[QTE_S], ENTREE.Date
    HAVING (((ENTREE.Date)=Date()));

    Attention : Seuls les enregistrements dont la date est 04/11/2006 seront listés
    Cordialement
    La science ne fait que trouver ce qui existe depuis toujours.
    Hubert REEVES.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. jabest Messages postés 37 Statut Membre 1
     
    Une pure merveille !!!!! Merci Jacques.

    Cdlmt
    0
  7. Jacques
     
    Bonjour,
    Un dernier conseil : dans la table Entree, renommer le champ 'Date' en 'Date_Entree' car l'ambiguïté avec la "Date" système peut faire planter les requêtes. En fait Date est un mot dit 'réservé". Donc à proscrire systématiquement.

    Pour conclure, voici une requête qui vous sera sans doute utile. Elle permet de lister les transactions d'une semaine en saisissant son N°. Nota : l'année (2006) est en dur dans la syntaxe. Il fauda peut-être l'adapter, au cas par cas, à votre besoin.

    SELECT ENTREE.N°, ENTREE.PRODUIT, ENTREE.QTE_E, SORTIE.QTE_S, [entree].[QTE_E]-[sortie].[QTE_S] AS STOCK, DatePart("ww",[Date_entree]) AS Date_controle, ENTREE.Date_entree
    FROM ENTREE INNER JOIN SORTIE ON ENTREE.N° = SORTIE.N°
    GROUP BY ENTREE.N°, ENTREE.PRODUIT, ENTREE.QTE_E, SORTIE.QTE_S, [entree].[QTE_E]-[sortie].[QTE_S], DatePart("ww",[Date_entree]), ENTREE.Date_entree
    HAVING (((DatePart("ww",[Date_entree])) Like [ Semaine ?]) AND ((DatePart("yyyy",[Date_entree]))=2006))
    ORDER BY DatePart("ww",[Date_entree]);

    Bienvenue dans le monde SQL
    Cordialement
    La science ne fait que trouver ce qui existe depuis toujours.
    Hubert REEVES.
    0
    1. jabest Messages postés 37 Statut Membre 1
       
      Merci encore

      Cdlmt
      0
    2. jabest Messages postés 37 Statut Membre 1
       
      Bonjour à tous ,

      Jacques j'ai 2 soucis avec votre 1 ere requête:
      - je souhaiterais que les STOCK = 0 ne soient pas listés
      - et pouvoir lister les stocks des produits n'ayant pas été affectés par une sortie

      Merci d'avance pour votre précieuse aide.
      0
    3. Jacques > jabest Messages postés 37 Statut Membre
       
      Bonjour,

      Dans le premier cas il faut ajouter une paire de parenthèses. A l'intérieur de cette parenthèse insérer "<>0". Les stock différents de zéro sont strictement affichés.

      Exemple :
      SELECT ENTREE.N°, ENTREE.PRODUIT, ENTREE.QTE_E, SORTIE.QTE_S, [entree].[QTE_E]-[sortie].[QTE_S] AS STOCK, DatePart("ww",[Date_entree]) AS Date_controle, ENTREE.Date_entree
      FROM ENTREE INNER JOIN SORTIE ON ENTREE.N° = SORTIE.N°
      GROUP BY ENTREE.N°, ENTREE.PRODUIT, ENTREE.QTE_E, SORTIE.QTE_S, [entree].[QTE_E]-[sortie].[QTE_S], DatePart("ww",[Date_entree]), ENTREE.Date_entree
      HAVING ((([entree].[QTE_E]-[sortie].[QTE_S])<>0) AND ((ENTREE.Date_entree)=Date()))
      ORDER BY DatePart("ww",[Date_entree]);

      Deuxième cas : Liste des produits "non sortis". Autrement dit : ceux dont la dernière date de sortie est antérieure à la date en cours et dont le champ sortie est à zéro.

      SELECT ENTREE.N°, ENTREE.PRODUIT, ENTREE.QTE_E, SORTIE.QTE_S, [entree].[QTE_E]-[sortie].[QTE_S] AS STOCK, SORTIE.Date_sortie, ENTREE.Date_entree
      FROM ENTREE INNER JOIN SORTIE ON ENTREE.N° = SORTIE.N°
      GROUP BY ENTREE.N°, ENTREE.PRODUIT, ENTREE.QTE_E, SORTIE.QTE_S, [entree].[QTE_E]-[sortie].[QTE_S], SORTIE.Date_sortie, ENTREE.Date_entree
      HAVING (((SORTIE.QTE_S)=0) AND ((SORTIE.Date_sortie)<[entree].[Date_entree]))
      ORDER BY ENTREE.PRODUIT;
      Bon courage
      La science ne fait que trouver ce qui existe depuis toujours.
      Hubert REEVES.
      0
    4. jabest Messages postés 37 Statut Membre 1 > Jacques
       
      Grand merci Jacques, une toute dernière chose et j'arréte de vous ennuyer, j'ai des sorties de stock partielle avez vous une solution pour que la valeur du STOCKR décrémente en fonction des QTE_S

      A vous lire.
      0
    5. Jacques > jabest Messages postés 37 Statut Membre
       
      Bonne soirée,

      Dans un premier temps je vous propose une mine d'astuces. Il s'agit des BDD modèles fournies avec ACCESS 2000.
      L'un des modèles s'intitule 'Gestion des stocks'. A l'évidence vous y trouverez des éléments utiles à votre projet ....

      Pour atteindre ces modèles, procéder comme suit :

      Fichier/Nouvelle base de données/onglet : Base de données/Gestion des stocks, etc .... (suivre les indications fournies)

      Bonne découverte et contactez moi si nécessaire
      La science ne fait que trouver ce qui existe depuis toujours.
      Hubert REEVES.
      0
  8. Annesophie
     
    Bonjour
    J ai une Base Access de 50 000 enregistrement
    j avais commencer a utiliser Access pour faire des rapports
    mais je suis coincee a plusieurs deux niveaux :
    -Comment intervenir sur la casse?
    -Comment ne pas faire apparaitre des champs vident?

    Merci pour votre aide !
    0