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

Bases de données Delphi Discussion :

Comment calculer une valeur d'après plusieurs champs


Sujet :

Bases de données Delphi

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1
    Points : 0
    Points
    0
    Par défaut Comment calculer une valeur d'après plusieurs champs
    Bonjour,

    Je suis sous Paradox et Delphi 7. Je dois calculer le stock réel, disposant de :
    1. stock initial dans la table Article
    2. quantité vendue dans la table ligne facture vente
    3. quantité achetée dans la table ligne facture achat


    Merci pour vos pistes.

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2014
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    ouvre les tables puis tu te positionne sur l'article en question en utilisant findkey sur les trois table.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    article.active := true;
    if Article.findkey() then
      Stock_initial := article.quantité
    else
      Stock_initial :=0; // dans le cas ou cette article n'existe pas (par mesure de sécurité)
    même chose pour les autre table puis tu fait

    quantité achetée + Stock_initial - quantité vendue // quantité restante

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 031
    Points : 40 929
    Points
    40 929
    Billets dans le blog
    62
    Par défaut
    @aminefr1910 je ta réponse car incomplète , il semble évident que pour les quantités vendues ou achetées il n'y aura certainement pas qu'un seule ligne .
    une recherche par table ne suffit donc pas .
    il faut utiliser des querys pour récupérer les valeurs Total Quantité Achetées et Total Quantité Vendues
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     SELECT SUM(QUANTITE) AS ACHETES FROM LIGNEFACTUREVENTE WHERE CODE_ARTICLE=:CODE 
    et
     SELECT SUM(QUANTITE) AS VENDUES FROM LIGNEFACTUREACHAT WHERE CODE_ARTICLE=:CODE
    Paradox est hélas bien limité comme SGBD (il lui manque le R de relationnel ) , ce qui pourrait se faire en un seul SQL avec d'autre SGBDR se fera beaucoup plus difficilement de la même manière avec Paradox
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 031
    Points : 40 929
    Points
    40 929
    Billets dans le blog
    62
    Par défaut une solution élégante
    Soit les tables
    ARTICLE - CODE ALPHA,QI INTEGER;
    ACHATS - CODE ALPHA,QA INTEGER; 0 à n Achats pour un Article
    VENTES - CODE ALPHA,QV INTEGER; 0 à n Ventes pour un Article
    Citation Envoyé par Données
    ARTICLE
    '1',10
    '2',5
    '3',2
    ACHATS
    '1',20
    '1',4
    '2',1
    VENTES
    '1',2
    '1',4
    '1',5
    '1',1

    Voici avec une Query le moyen d'obtenir les différentes Quantités pour le calcul du stock
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT CODE,QI, (SELECT SUM(QA) FROM ACHATS WHERE CODE='1') AS SUMACHATS,
    (SELECT SUM(QV)FROM VENTES WHERE CODE='1') AS SUMVENTES
    FROM ARTICLE 
    WHERE CODE='1'
    on obtient :
    CODE - QI - SUMACHATS - SUMVENTES
    '1' - 10 - 24,00 - 12,00

    une autre approche est d'utiliser une sorte de vue Paradox, c'est à dire utiliser un Texte SQL qui se trouvera dans le même endroit que les tables et sera utilisée comme une table intermédiaire (fonctionnalité peu connue)
    Citation Envoyé par Fichier MOUVS.SQL
    SELECT CODE,SUM(QA) AS N FROM ACHATS GROUP BY CODE
    UNION
    SELECT CODE,SUM(QV*-1) AS N FROM VENTES GROUP BY CODE
    la query devient alors
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT A.CODE,A.QI,SUM(M.N) AS MVTS FROM ARTICLE A LEFT JOIN MOUVS.SQL M ON A.CODE=M.CODE
    GROUP BY A.CODE,A.QI
    Ce qui permet d'obtenir tous les articles
    CODE - QI - MVTS
    '1' - 10 - 12,00
    '2' - 5 - 1,00
    '3' - 2 -

    malheureusement Paradox ne connaissant pas des clauses comme COALESCE il n'est pas possible de faire le calcul du Stock directement , sauf à utiliser la manière suivante
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    -- Pas de mouvement
    SELECT A.CODE,A.QI  AS STOCK FROM ARTICLE A LEFT JOIN MOUVS.SQL M ON A.CODE=M.CODE
    WHERE M.N IS NULL
    UNION
    -- à minima un mouvement
    SELECT A.CODE,A.QI+SUM(M.N) FROM ARTICLE A LEFT JOIN MOUVS.SQL M ON A.CODE=M.CODE
    WHERE M.N IS NOT NULL
    GROUP BY A.CODE,A.QI

    CODE - STOCK
    '1' - 22
    '2' - 6
    '3' - 2

    J’espère que cela convaincra les lecteurs qu'utiliser le SQL peut s’avérer intéressant
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

Discussions similaires

  1. [2000] Comment calculer une valeur dans SSRS ?
    Par djimmy17 dans le forum SSRS
    Réponses: 1
    Dernier message: 14/07/2011, 08h52
  2. comment insérer une valeur provenant d'un champs texte dans une requête SQL
    Par carlostropico dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 02/12/2009, 14h38
  3. Comment créer une sous requête sur plusieurs champs?
    Par Anonymouse dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 10/06/2008, 09h13
  4. Réponses: 2
    Dernier message: 12/02/2008, 14h24
  5. Réponses: 7
    Dernier message: 10/05/2006, 11h15

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