Précédent   Forum des professionnels en informatique > Bases de données > Firebird > SQL
SQL Forum d'entraide sur le SQL pour Firebird
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/10/2011, 14h51   #1
Membre émérite
 
Avatar de Andry
 
Inscription : juillet 2002
Messages : 1 109
Détails du profil
Informations personnelles :
Localisation : Madagascar

Informations forums :
Inscription : juillet 2002
Messages : 1 109
Points : 949
Points : 949
Envoyer un message via MSN à Andry
Par défaut PS :: Sortir du Stock mode FIFO

Bonjour à tous.
Afin de gerer un stock en FIFO, j'ai les colonne suivantes pour historiser mes entrées en stock.
J'ai une table STOCKDETAIL avec les colonnes suivants:
STD_DEPOT, STD_ARTICLE, STD_DATE, STD_HEURE, STD_QTE
Par exemple un extrait pour l'article ID 15450
Citation:
STD_DEPOT STD_ARTICLE STD_DATE STD_HEURE STD_QTE
1 15450 12-06-2011 08:30:00 40
1 15450 15-06-2011 11:30:00 140
1 15450 23-06-2011 08:30:00 250
Or si je dois sortir x qté, je dois consommer la 1ère ligne d'abord. Supposons que je dois sortir 60 qte de l'article 15450.
Au final, je dois avoir mon stock comme ceci
STD_DEPOT STD_ARTICLE STD_DATE STD_HEURE STD_QTE
1 15450 15-06-2011 11:30:00 120
1 15450 23-06-2011 08:30:00 250
[/QUOTE]
Je cherche une procedure stocké pour realisé cette opération.

Merci
__________________
On progresse .....
Andry est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2011, 01h37   #2
Membre éclairé
 
Avatar de TryExceptEnd
 
Homme
Développeur informatique
Inscription : octobre 2006
Messages : 435
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2006
Messages : 435
Points : 347
Points : 347
Citation:
STD_DEPOT STD_ARTICLE STD_DATE STD_HEURE STD_QTE
1 15450 12-06-2011 08:30:00 40
1 15450 15-06-2011 11:30:00 140
1 15450 23-06-2011 08:30:00 250
Or si je dois sortir x qté, je dois consommer la 1ère ligne d'abord. Supposons que je dois sortir 60 qte de l'article 15450.
Et quelle est la différence concrète (physique) entres ces différentes entrées (a part la date) ?
__________________
Si vous êtes libre, choisissez le Logiciel Libre.
TryExceptEnd est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2011, 09h14   #3
Membre émérite
 
Avatar de Andry
 
Inscription : juillet 2002
Messages : 1 109
Détails du profil
Informations personnelles :
Localisation : Madagascar

Informations forums :
Inscription : juillet 2002
Messages : 1 109
Points : 949
Points : 949
Envoyer un message via MSN à Andry
Citation:
Envoyé par TryExceptEnd Voir le message
Et quelle est la différence concrète (physique) entres ces différentes entrées (a part la date) ?
Bonjour,
Il y a encore quelques colonnes que je n'ai pas mentionné, genre le P.U lors de l'entrée, qui peuvent être différent.
Néanmoins, j'ai déjà pu créer la PS, et je le posterai ici bientôt au cas ou quelqu'un en aura besoin.

Andry
__________________
On progresse .....
Andry est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2011, 14h24   #4
Rédacteur/Modérateur
 
Avatar de evarisnea
 
Homme Evaris NGOUZO
Consultant informatique
Inscription : juin 2005
Messages : 1 887
Détails du profil
Informations personnelles :
Nom : Homme Evaris NGOUZO
Localisation : Cameroun

Informations professionnelles :
Activité : Consultant informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2005
Messages : 1 887
Points : 2 799
Points : 2 799

Citation:
Envoyé par Andry Voir le message
j'ai déjà pu créer la PS, et je le posterai ici bientôt au cas ou quelqu'un en aura besoin.
content que tu aie trouvé la solution
je suis intéressé par le code de la PS
evarisnea est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2011, 15h18   #5
Membre émérite
 
Avatar de Andry
 
Inscription : juillet 2002
Messages : 1 109
Détails du profil
Informations personnelles :
Localisation : Madagascar

Informations forums :
Inscription : juillet 2002
Messages : 1 109
Points : 949
Points : 949
Envoyer un message via MSN à Andry
Citation:
Envoyé par evarisnea;
je suis intéressé par le code de la PS
Bonjour,
Pour les besoins de mon client, j'ai 2 tables et 1 vue pour gérer les Stock en FIFO :
La table STOCKMVT qui contient les historiques des mouvements au niveau du Dépôt
La table STOCKDETAIL qui conserve uniquement la quantités des articles en stock suivant la date et l'heure d'entrée.
La vue STOCK qui est juste obtenue après addition des qté et montant des articles en stock depuis STOCKDETAIL.
Ci attaché la DDL de la table STOCKDETAIL
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
 
CREATE TABLE STOCKDETAIL (
    STD_DEPOT    SMALLINT NOT NULL,
    STD_DATE     DATE DEFAULT 'TODAY' NOT NULL,
    STD_HEURE    TIME DEFAULT 'NOW' NOT NULL,
    STD_ARTICLE  INTEGER NOT NULL,
    STD_QTE      NUMERIC(15,4) NOT NULL,
    STD_PU       NUMERIC(15,4) NOT NULL,
    STD_CMT      VARCHAR(1024),
    STD_MONTANT  COMPUTED BY (STD_QTE * STD_PU)
);
/******************************************************************************/
/***                              Primary Keys                              ***/
/******************************************************************************/
ALTER TABLE STOCKDETAIL ADD CONSTRAINT PK_STOCKDETAIL PRIMARY KEY (STD_DEPOT, STD_ARTICLE, STD_DATE, STD_HEURE);
LA gestion FIFO oblige que je dois sortir d'abords les articles entrée en premier.
Ensuite
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
 
SET TERM ^ ;
 
CREATE OR ALTER procedure STOCK_SORTIR (
    PDEPOT type of COLUMN STOCKDETAIL.STD_DEPOT,
    PARTICLE type of COLUMN STOCKDETAIL.STD_ARTICLE,
    PQTE type of COLUMN STOCKDETAIL.STD_QTE)
AS
declare variable VSTD_HEURE time;
declare variable VSTD_DATE date;
declare variable QTE_LIGNE numeric(15,4);
declare variable QTE_ASORTIR numeric(15,4);
BEGIN
  QTE_ASORTIR = :PQTE;
  FOR SELECT
        STD_QTE,
        STD_DATE,
        STD_HEURE
      FROM STOCKDETAIL
      WHERE
        (STD_DEPOT = :PDEPOT) AND
        (STD_ARTICLE = :PARTICLE)
      ORDER BY
        STD_DATE ASC,
        STD_HEURE ASC
      INTO
        :QTE_LIGNE,
        :VSTD_DATE, 
        :VSTD_HEURE
  DO
  BEGIN
    /*Si la qté de la ligne stock détail est inférieur ou égale à la qté à sortir*/
    IF (:QTE_LIGNE <= :QTE_ASORTIR) then
    BEGIN
      /*On sauvegarde la qté restant*/ 
      QTE_ASORTIR =  :QTE_LIGNE - :QTE_ASORTIR;
      /*On vire la ligne correspondant*/
      DELETE FROM STOCKDETAIL
      WHERE
        (STD_DEPOT = :PDEPOT) AND
        (STD_ARTICLE = :PARTICLE) AND
        (STD_DATE = :VSTD_DATE) AND
        (STD_HEURE = :VSTD_HEURE);
    END
    ELSE
    BEGIN
      /*On met à jour la ligne*/
      UPDATE STOCKDETAIL
      SET
        STD_QTE = STD_QTE - :QTE_ASORTIR
      WHERE
        (STD_DEPOT = :PDEPOT) AND
        (STD_ARTICLE = :PARTICLE) AND
        (STD_DATE = :VSTD_DATE) AND
        (STD_HEURE = :VSTD_HEURE);
      QTE_ASORTIR = 0;
    END
    QTE_ASORTIR = Abs(:QTE_ASORTIR);
    IF (:QTE_ASORTIR = 0) THEN
      EXIT;
  END
 END^
SET TERM ; ^
Bien entendu, une verification que la qté à sortir ne dépasse pas la qté en stock est déjà effectué avant.

Andry
__________________
On progresse .....
Andry est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2011, 15h36   #6
Rédacteur/Modérateur
 
Avatar de evarisnea
 
Homme Evaris NGOUZO
Consultant informatique
Inscription : juin 2005
Messages : 1 887
Détails du profil
Informations personnelles :
Nom : Homme Evaris NGOUZO
Localisation : Cameroun

Informations professionnelles :
Activité : Consultant informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2005
Messages : 1 887
Points : 2 799
Points : 2 799


ca me servira certainement bientôt
evarisnea est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/10/2011, 19h37   #7
Membre Expert
 
Avatar de edam
 
Inscription : décembre 2003
Messages : 1 716
Détails du profil
Informations forums :
Inscription : décembre 2003
Messages : 1 716
Points : 1 783
Points : 1 783
simplement pour comprendre plus, :
1-pourquoi enregistré la date et l'heur si en supprime la ligne après?
2-pourquoi supprimer la ligne?
3-pourquoi pas utilisé la 'clé secrète' RDB$DB_KEY de Firebird
Code :
DELETE FROM STOCKDETAIL WHERE RDB$DB_KEY=:keyFB;
pour cette procédure je préfére utilisé delphi, surtout, il est présque identique pour les règlements partielle des factures
__________________
PAS DE DESTIN, C'EST CE QUE NOUS FAISONS
edam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2011, 07h30   #8
Membre émérite
 
Avatar de Andry
 
Inscription : juillet 2002
Messages : 1 109
Détails du profil
Informations personnelles :
Localisation : Madagascar

Informations forums :
Inscription : juillet 2002
Messages : 1 109
Points : 949
Points : 949
Envoyer un message via MSN à Andry
Salut Edam.
Citation:
Envoyé par edam Voir le message
simplement pour comprendre plus, :
1-pourquoi enregistré la date et l'heur si en supprime la ligne après?
2-pourquoi supprimer la ligne?
Tout simplement pour la gestion du stock en FIFO qui implique de faire une trace chronologique de chaque entrée.
Cette PS est juste pour la sortie des articles en stock.
Citation:
Envoyé par edam Voir le message
simplement pour comprendre plus, :
3-pourquoi pas utilisé la 'clé secrète' RDB$DB_KEY de Firebird
Code :
DELETE FROM STOCKDETAIL WHERE RDB$DB_KEY=:keyFB;
pour cette procédure je préféré utilisé delphi, surtout, il est presque identique pour les règlements partielle des factures
Je ne connais pas encore cette subtilité. Par contre; je suis plus adepte du traitement coté serveur que coté client. Cela m’évite de mettre à jour chaque client au lieu d'une petite script sql pour modifier la base.
Mais chacun a sa propre point de vue.

Andry
__________________
On progresse .....
Andry est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h23.


 
 
 
 
Partenaires

Hébergement Web