IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Firebird Discussion :

PS :: Sortir du Stock mode FIFO


Sujet :

SQL Firebird

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    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
    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

  2. #2
    Membre très actif Avatar de TryExceptEnd
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    501
    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 : 501
    Par défaut
    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) ?

  3. #3
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Par défaut
    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

  4. #4
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Par défaut

    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

  5. #5
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  6. #6
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Par défaut


    ca me servira certainement bientôt

Discussions similaires

  1. [X3 V140] Impossible de sortir du stock
    Par asiane dans le forum SAGE
    Réponses: 5
    Dernier message: 09/04/2013, 18h09
  2. Stock méthode FIFO
    Par Invité dans le forum Modélisation
    Réponses: 22
    Dernier message: 20/06/2008, 12h01
  3. sortir du mode archivelog
    Par big1 dans le forum Oracle
    Réponses: 5
    Dernier message: 26/10/2006, 15h17
  4. [debutant]sortir du mode console
    Par gusgus dans le forum Débuter
    Réponses: 4
    Dernier message: 09/03/2006, 17h55
  5. Debuger une procédure stockée en mode pas à pas
    Par Oluha dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 22/12/2004, 10h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo