[SQL] Requete gestion stock ???

Requete gestion stock ??? [SQL] - SQL/NoSQL - Programmation

Marsh Posté le 06-02-2013 à 18:52:20    

Salut à tous,
 
j'ai une question à propos d'une requête pour gérer les stock de pièce de mon taff. C'est un log que je dev en ce moment (VB2010).
 
Voila le topo :  
 
j'ai 4 tables =
-> t_mouvements
-> t_numPièces
-> t_comptes
-> t_produits
 
je taff dans les PDA, mais on va prendre le monde automobile pour que ce soit plus simple :D
Chaque numéro de pièce (0001 par exemple) est rattaché à un compte (on a un stock pour chaque GROS client=1 compte), chaque numéro de pièce est aussi rattaché à un produit (une "206" de peugeot par exemple).
J'enregistre donc un mouvement à chaque modification du stock, qui comprend : ref du mouvement + nuémro de pièce + E/S (entrée ou sortie) + compte + Qté + garantie + (d'autre truc mais pas obligatoire).

Code :
  1. ch_id  ch_refMouv  ch_idNumPiece  ch_idCompte  ch_quantite  ch_date  ch_garantie  ch_type  ch_raison
  2. 10  INVENT_F2013  6  1  12  01/02/2012  1  Entrée  Inventaire


 
On peut donc dire qu'un numéro de pièce peut avoir une "Entrée" avec "10" en quantité, et plusieurs "Sortie" avec "1" en quantité (par exemple)
 
Ma question est donc : comment faire pour additionner et soustraire les quantités par numéro de pièce, avec "Entrée" pour un ajout, et "Sortie" pour une pièce qui sort du stock.
 
Toute les pièces doivent être afficher dans un tableau (DataGridView), et avec leur quantité... J'avais pensé à faire 2 requetes, une pour les "Entrée" et une pour les "Sortie", mais ca risque d'être galère pour afficher le tout dans le DataGrid......
 
 
Un peu d'aide serait donc la bienvenue ^^

Reply

Marsh Posté le 06-02-2013 à 18:52:20   

Reply

Marsh Posté le 06-02-2013 à 22:01:44    

Je propose:

SELECT m.ch_idNumPiece, SUM(m.ch_quantite)
FROM (
  SELECT in.ch_idNumPiece, in.ch_quantite
  FROM t_mouvements in
  WHERE in.ch_type = 'Entrée'
  UNION ALL
  SELECT out.ch_idNumPiece, -out.ch_quantite
  FROM t_mouvements out
  WHERE out.ch_type = 'Sortie') m;


Ca te file le delta pour chaque numero de piece une fois tous les mouvement pris en compte.
Attention: piece sans mouvement = n'apparaitra pas dans le resultat (simple a prendre en compte mais peut provoquer des bugs si on ne fait pas attention, et encore faut-il s'en apercevoir).


Message édité par lasnoufle le 06-02-2013 à 22:02:27

---------------
C'était vraiment très intéressant.
Reply

Marsh Posté le 07-02-2013 à 08:21:27    

Je ferai plutot ca comme ca pour eviter 2 queries:

Code :
  1. SELECT ch_idNumPiece,
  2.  ch_idCompte,
  3.  SUM(CASE WHEN ch_type = 'Entrée' THEN ch_quantite
  4.           WHEN ch_type = 'Sortie' THEN ch_quantite * (-1)
  5.           ELSE 0 END) ch_quantite
  6. FROM t_mouvements
  7. GROUP BY ch_idNumPiece, ch_idCompte


Message édité par Oliiii le 07-02-2013 à 08:23:43
Reply

Marsh Posté le 07-02-2013 à 08:49:03    

Haaaaaa des réponses :D je vais tester cela ce soir, je vous tiens au courant :)

Reply

Marsh Posté le 07-02-2013 à 21:51:12    

Bon merci à vous deux, j'ai pris la solution de Oliiii et j'ai pondu cela :

Code :
  1. SELECT A.ch_id, A.ch_idNumPiece, A.ch_idCompte, A.ch_type, MAX(A.ch_date), B.ch_numero, B.ch_description, C.ch_nomCompte, D.ch_nomProduit,
  2. SUM(
  3. CASE WHEN A.ch_type = 'Entrée'
  4. THEN A.ch_quantite
  5. WHEN A.ch_type = 'Sortie'
  6. THEN A.ch_quantite * ( -1 )
  7. ELSE 0
  8. END ) qte
  9. FROM t_mouvements AS A, t_numpiece AS B, t_comptes AS C, t_produits AS D
  10. WHERE A.ch_idNumPiece=B.ch_id AND A.ch_idCompte=C.ch_id AND B.ch_idProduit=D.ch_id
  11. GROUP BY A.ch_idNumPiece, A.ch_idCompte
  12. ORDER BY STR_TO_DATE(A.ch_date,'%d/%m/%Y')


 
Et ca a à l'air de fonctionner :)


Message édité par bneben le 07-02-2013 à 21:51:32
Reply

Marsh Posté le 03-03-2013 à 22:45:31    

Re-salut à tous,
j'ai de nouveau besoin d'un peu de votre aide (et temps) pour m'aider à résoudre mon nouveau problème. J'ai donc continué mon logiciel, surtout la partie gestion des pièces/mouvements... Bref tous fonctionne bien :)
 
Maintenant je me lance dans les stats, et c'est là que ca se complique.
J'ai entre autre besoin de ceci :  
Afficher sous forme de graph (ca c'est OK) la valorisation du stock par produits (206 dans mon exemple du 1er post, donc valoriser le stock d'embrayage + jante + volant etc). J'ai bien tenté 2-3 truc mais ca donne pas les résultats escomptés...
 
En résultat : je n'ai besoin que de l'ID du produit, et du stock en euros des pièces de ce produit ...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed