APPLICATION DE GESTION

Rechercher
Boutique en ligne, solution e-commerce, script PHP et PERL : RAYNETTE

APPLICATION DE GESTION

Par sacko  -  14 reponses  -  Le 27/12/2016 13:18  -  Editer  - 

BONJOUR,
svp je fais une application de gestion de stock actuellement et j'ai deja creer le tables articles,entree,sortie. J'aimerais apres l'ajout d'une entree depuis le formulaire,la quantité de l'entrée s'ajoute à celui de la colonne stock de la table article. Merci

 

Réponses apportées à cette discussion

Par Cyrano  -  Le 27/12/2016 15:33  -  Haut de page  - 

Salut,
quelle est la question exactement ?

 
Par sacko  -  Le 27/12/2016 17:25  -  Haut de page  - 

Salut,
j'ai un formulaire qui me permet d'inserer les entrées et j'aimerais que apres l'insertion d'une entrée que la quantité de cette entrée s'ajoute à celle du stock qui se trouve dans la table articles. pour me permettre d'avoir une idée du stock de mes articles. Mais je sais pas quel code me permetra de le faire.Merci

 
Par Cyrano  -  Le 27/12/2016 17:36  -  Haut de page  - 

Il y a deux possibilités :

  1. une requête de mise à jour de la table;
  2. une procédure stockée liée à un trigger AFTER INSERT ou AFTER UPDATE lors de l'insertion ou de la mise à jour des articles.

Pour la première option, c'est la même chose que d'ajouter des données dans la première table : il faut commencer par récupérer a valeur à modifier, y ajouter ou retrancher la quantité ajouté ou retirée et mettre à jour la table.

La seconde fait directement appel à du SQL un peu plus avancé. Il faudrait créer deux triggers, un AFTER INSERT et un autre AFTER UPDATE, les deux déclenchant une procédure stockée qui va calculer le nombre total d'articles et ensuite mettre à jour l'autre table.

Ceci étant, c'est généralement une mauvaise idée de stocker des valeurs calculées dans une base de données, il est préférable de collecter les informations en les calculant a chaque fois que c'est nécessaire, en s'appuyant sur l'agrégat SUM() avec un GROUP BY sur le type d'article.

 
Par sacko  -  Le 27/12/2016 17:56  -  Haut de page  - 

Ok donc vous me conseiller l'agrégat SUM() avec un GROUP BY sur l'article?

 
Par Cyrano  -  Le 27/12/2016 18:29  -  Haut de page  - 

C'est ça.

En fait, je suppose qu'à chaque nouvel article, vous ajoutez une ligne dans la table, et lorsque vous en vendez un, vous retirez la ligne de la table, non ? Donc pour avoir le nombre total d'articles, il suffit de faire un SUM() sur cet article pour connaitre le nombre qui est encore enregistré.

Mais bien entendu, ça peut dépendre d'un certain nombre de critères et cette solution n,est pas nécessairement la bonne. Je ne dispose pas de toutes les informations.
Par exemple, si chaque article individuel a un numéro de série unique, c'est la bonne solution. Mais si on a juste un numéro d'article qui peut exister en un nombre indéterminé d'exemplaire, il convient d'enregistrer les entrées et les sorties. Typiquement, on enregistrera ces mouvements avec un nombre et une date.

Par exemple, le 12, je rentre 5 nouveaux articles. le 15, j'en vends 3, et puis le 17 j'en vends encore 1. À ce stade, j'aurais trois lignes de données dans la table des mouvements : une avec la date du 12 et un nombre de +5, une autre avec la date du 15 et un mouvement de -3 et enfin une avec la date du 17 et un nombre de -1. Résultat, si je veux l'inventaire, je ferai un SUM sur le nombre. La table des mouvements comportera donc à priori de base 4 colonnes : une colonne mov_id, clé primaire de la table, un art_id, clé étrangère correspondant à l'article pour lequel on enregistre une rentrée ou une sortie, une mov_nombre (INT) et une mov_date (DATETIME).

Mais en fin de course, je n'enregistre aucun total nulle part, je fais le calcul lorsque j'en ai besoin dans la table mouvement avec un GROUP BY sur la colonne art_id.

 
Par sacko  -  Le 06/01/2017 12:18  -  Haut de page  - 

Bonjour Cyrano excuse pour le temps mis j'etais dans un zone sans connection internet raison pourquoi j'etais pas en ligne! j'ai fais le SUM sur l'article et sa me donne effectivement le nombre total d'article.Merci bien
Mais je coince au niveau de l'ajout ou le retrait de quantité des entrées ou des sorties sur le stock!

 
Par Cyrano  -  Le 06/01/2017 14:14  -  Haut de page  - 

Il faudrait que je sache quelle est la structure de données : comment sont agencées les tables avec leurs description et avec quelles colonnes elles sont construites ? Ça me facilitera la vie pour donner une réponse plus appropriée.

 
Par sacko  -  Le 06/01/2017 15:11  -  Haut de page  - 

J'ai les tables articles (articleid,nom,quantite,stock,date);
entree(numentree,libelle,quantite,societe,date,articleid);
sortie(numsortie,libelle,quantite,service,date,articleid)
j'ai des formulaires qui permettent d'inseré les entrées dans la table entrée et les sorties dans la table sortie. Je souhaite que dès que j'insere une entrée que la quantité de cette entrée puisse aditionner la quantité du stock et pour la sortie que sa puisse soustraire. Je sais pas si je me fais comprendre!

 
Par Cyrano  -  Le 06/01/2017 15:41  -  Haut de page  - 

Ok... pas top comme structure, surtout avoir une table pour les entrées et une seconde pour les sorties, au lieu d'une seule table de mouvements.
Par ailleurs, une colonne quantité dans la table articles n'a pas sa place du tout.

On pourrait revoir le tout autrement et surtout plus simplement. On va en profiter pour introduire une convention pour nommer les tables et les colonnes, ça va simplifier par la suite pour le codage.

+----------------+          +------------------+
| t_articles_art |          | t_mouvements_mov |
+-----------+----+          +-------------+----+
| art_id    | PK |          | mov_id      | PK |
| art_nom   |    |---------<| art_id      | FK |
| art_stock |    |          | mov_libelle |    |
| art_date  |    |          | mov_sens    |    |
+-----------+----+          | mov_nombre  |    |
                            | mov_date    |    |
                            +-------------+----+

Convention de nommage

Les tables sont préfixées par un « t_ » et comportent un suffixe de trois lettres reprenant plus ou moins le nom de la table lui-même (ex. : art pour article)
Le suffixe de la table sera utilisé comme préfixe pour toutes les colonnes sauf pour les clés étrangères. Ici, on voit par exemple dans la table t_mouvement_mov une colonne art_id correspondant à la colonne de la table article qui y est en clé primaire : ça facilite beaucoup la relecture des requête et on s'y retrouve simplement.

La structure

Deux tables et non trois, une pour les articles, mais pas de quantité. J'ai gardé la date pour, à la rigueur, enregistrer la date d'ajout de tout nouvel article. Mais la colonne quantité a sauté. J'ignore à quoi correspond la colonne stock, je l'ai laissé, mais à priori, je serais tenté de la faire sauter aussi. Je n'ai pas ajouté, mais ça pourrait être utile, une colonne art_reference qui pourrait stocker un numéro de référence correspondant à un code barre ou encore une référence interne, à voir selon les besoins.

Utilisation

Là, c'est simple : pour tout nouvel article, on ajoute une ligne dans la table t_article_art et ensuite on ajoute les mouvements dans l'autre table. La première ligne sera à priori une entrée. La colonne mov_sens devrait être de type ENUM('entree','sortie') avec une valeur par défaut à 'entree' par exemple. Dans cette table t_mouvement_mov, on enregistre tout mouvement, l'identifiant de l'article, le libellé (? je ne sais pas trop à quoi ça peut servir, j'ai laissé la colonne), le sens, le nombre et la date du mouvement.

Il devient alors très facile de gérer les stocks et tout aussi simple d'avoir des statistiques sur une période donnée.

Est-ce que ça ne semble pas plus clair de cette façon ?

 
Par sacko  -  Le 06/01/2017 16:10  -  Haut de page  - 

Oui vraiment claire! Merci!

 
Par sacko  -  Le 06/01/2017 16:30  -  Haut de page  - 

donc mes entrées et sorties seront stocké dans la table mouvement?

 
Par Cyrano  -  Le 06/01/2017 17:25  -  Haut de page  - 

C'est exactement ça.

La table t_articles_art stocke les références produits, la table t_mouvement_mov stocke les entrées et les sorties.

On enregistre chaque mouvement et la donnée n'est en théorie jamais modifiée sauf s'il y a eu une erreur de saisie par exemple. Donc pour un article donné, on aura d'abord une première entrée, puis des lignes d'entrées et des lignes de sorties. Le calcul sera alors très simple pour avoir l'inventaire, on additionnera le total des entrées et on y soustraira le total des sorties. Avec les dates, on pourra ainsi avoir des statistiques de ventes sur une période donnée.

 
Par sacko  -  Le 11/01/2017 11:54  -  Haut de page  - 

Ok compris j'adapte ma structure à la tienne!

 
Par sacko  -  Le 16/01/2017 11:36  -  Haut de page  - 

Bonjour sava j'esper, j'ai choisi le type "varchar" pour art_id et "int" pour mov_id . est ce que c'est bon?

 

Ajouter une réponse à la discussion

Seuls les membres connectés sont autorisés à poster dans les forums !