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

Langage SQL Discussion :

Travail sur une seule Table de mouvements Stock (entrées et Sorties)


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2007
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 20
    Points : 18
    Points
    18
    Par défaut Travail sur une seule Table de mouvements Stock (entrées et Sorties)
    Bonsoir,
    Je bloque sur une requête:
    Je travaille avec une table de mouvements du Stock:
    ID_ART :Identité article
    LOT : Lot
    TMV ;Type de mouvement 0 si entrée stock et 1 si sortie stock
    QUANTITE: Quantité

    Pour un ID_ART, Il y'a toujours une QUANTITE (Qe) entrée dans le stock avec N° LOT unique (TMV = 0). On peut faire sortir ce lot en plusieurs fois. c.à.d on peut trouver plusieurs ID_ART avec ce N° de LOT et des QUANTITES différentes Qs1,Qs2,Qs3... (et TMV = 1) mais la somme de ces quantités Qs ne doit jamais dépasser la quantité entrée Qe
    C'est ce que je veux vérifier car je soupçonne que mon programme en C# développé par moi même m'a induit dans cette erreur.
    Merci d'avance.

  2. #2
    Membre expert
    Avatar de alassanediakite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Mali

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 1 599
    Points : 3 590
    Points
    3 590
    Billets dans le blog
    8
    Par défaut
    Salut
    Il faut préciser le SGBD utilisé.
    Cela faisable par check (contraint de validation) sur Qs en deux temps
    1. une fonction qui calcule le stock restant de Qe
    2. dans le check, comparer ce stock au Qs

    ... ou par trigger...
    Si c'est ACCESS, il faut passer par VBA (Version<=2007) et ou macro de données (Version>=2010)
    @+
    Le monde est trop bien programmé pour être l’œuvre du hasard…
    Mon produit pour la gestion d'école: www.logicoles.com

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 088
    Points : 38 395
    Points
    38 395
    Billets dans le blog
    9
    Par défaut
    Ou comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT SUM(SUBQ.MONT)                        
    FROM (SELECT CASE                            
                 WHEN TMV = 0 THEN QUANTITE
                 ELSE QUANTITE * -1                  
                 END AS MONT                     
          FROM STOCK) AS SUBQ                
    ;
    Ou encore une CTE qui reprend le contenu de la sous requete ci-dessus, puis une requete sur cette CTE

  4. #4
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 146
    Points : 7 388
    Points
    7 388
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Si votre SGBD supporte les procédures stockées, vous devriez faire ce traitement de création du stock initial puis décrémentation des stocks avec une procédure stockée, et non en C#.

    En effet :
    - Pour avoir des données à jour pour faire vos tests, vous devez lire plusieurs fois la table des stocks
    - Et la mettre à jour potentiellement plusieurs fois

    Niveau performances, il vaut mieux que tout soit fait dans un seul lot, côté serveur.

    Aussi, si demain votre méthode de picking doit changer, et que vous avez plusieurs programmes qui peuvent en faire, vous allez devoir faire évoluer plusieurs programmes. Avec une procédure stockée, vous n'avez besoin de faire évoluer que cet unique bout de code pour que tous les programmes en bénéficient en même temps.

    Un exemple classique :

    Aujourd'hui, vous avez deux lots, avec Qe - sum(Qs) = 4 et 10, respectivement.

    Vous voulez faire un picking de 8.

    Plusieurs solutions :
    - Votre programme recherche le lot qui a au moins 8 en dispo, et vous le décrémentez
    - Votre programme détecte que le lot le plus ancien n'a que 4, et vous affichez un message "vous devez prendre 4 unités max, avant d'en prendre dans un autre lot"
    - Votre programme pick 4 dans le lot le plus ancien, puis 4 dans le lot le plus récent.

    Si vous souhaitez faire évoluer le traitement, il faut mieux le faire dans un seul endroit.

    Maintenant, même chose, avec un picking de 12 : idem, il va falloir améliorer tout ça. Autant le faire à un seul endroit.

    Ceci n'empêche pas la validation CHECK finale : dont vous pourrez certainement refactoriser le code avec votre procédure (vue qui ramène Qe - Sum(Qs) pour chaque lot par exemple, etc.)
    On ne jouit bien que de ce qu’on partage.

Discussions similaires

  1. Merge sur une seule table
    Par dingoth dans le forum Oracle
    Réponses: 2
    Dernier message: 09/01/2007, 11h09
  2. Quellue interface pour travailler sur une grosse table ?
    Par grinder59 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 22/12/2006, 17h25
  3. plusieurs COUNT sur une seule table avec conditions différentes
    Par dingoth dans le forum Administration
    Réponses: 9
    Dernier message: 20/12/2006, 11h13
  4. [Oracle]commande MERGE sur une seule table
    Par DoRiane dans le forum Langage SQL
    Réponses: 3
    Dernier message: 04/08/2006, 18h13
  5. [SQL serveur] [debutant] requette sur une seule table
    Par glanumf dans le forum Langage SQL
    Réponses: 2
    Dernier message: 07/02/2006, 16h27

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