Aide pour créer requêtes ACCESS

Résolu
jabest Messages postés 37 Date d'inscription   Statut Membre Dernière intervention   -  
 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

jabest Messages postés 37 Date d'inscription   Statut Membre Dernière intervention   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
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
jabest Messages postés 37 Date d'inscription   Statut Membre Dernière intervention   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
Jacques > jabest Messages postés 37 Date d'inscription   Statut Membre Dernière intervention  
 
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
jabest Messages postés 37 Date d'inscription   Statut Membre Dernière intervention   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
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
jabest Messages postés 37 Date d'inscription   Statut Membre Dernière intervention   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
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jabest Messages postés 37 Date d'inscription   Statut Membre Dernière intervention   1
 
Une pure merveille !!!!! Merci Jacques.

Cdlmt
0
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
jabest Messages postés 37 Date d'inscription   Statut Membre Dernière intervention   1
 
Merci encore

Cdlmt
0
jabest Messages postés 37 Date d'inscription   Statut Membre Dernière intervention   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
Jacques > jabest Messages postés 37 Date d'inscription   Statut Membre Dernière intervention  
 
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
jabest Messages postés 37 Date d'inscription   Statut Membre Dernière intervention   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
Jacques > jabest Messages postés 37 Date d'inscription   Statut Membre Dernière intervention  
 
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
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