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 :

mise à jour stock


Sujet :

Bases de données Delphi

  1. #1
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut mise à jour stock
    rebonjour:
    j'ai : (sous access)
    table 1 mouvement (nmouv,type mouvemnt.....)
    table 2 (nlin,medicament, quantité....)
    Table.: (nstock,médicament, seuil alerte....)
    j'arrive pas trouver une solution au ce qui suit : mettre à jour le stock de médicament quant l'utilisateur clique sur le bouton 'enregistrement' des médicament pris par le malade (mouvement sortie).
    l'opération doit vérifier la quantité présente dans le stock ensuite valider la sortie sinon "msgdlg 'Quantité insufisante...'". merci

  2. #2
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    toujours sous d7 et access , j'ai essayé un tuto du forum mais ca na pa marché.
    je croi que je doit utilisé une variable qui stock la quantité saisie et une autre qui stock le libellé du médicament et les utilisé dans une requête:
    1 req: sélection du médicament on utilisant var médicament , ensuite comparé la valeur stocké dans la table stock avec la valeur de la variable.

  3. #3
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Citation Envoyé par redoran Voir le message
    toujours sous d7 et access , j'ai essayé un tuto du forum mais ca na pa marché.
    je croi que je doit utilisé une variable qui stock la quantité saisie et une autre qui stock le libellé du médicament et les utilisé dans une requête:
    1 req: sélection du médicament on utilisant var médicament , ensuite comparé la valeur stocké dans la table stock avec la valeur de la variable.
    fais un essai avec ta solution et si ça coince balance le code
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  4. #4
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 897
    Points : 1 561
    Points
    1 561
    Par défaut
    Une solution que j'utilise :

    Table article (codeArticle, désignation, ....)
    clé = codeArticle,

    Table mouvement(docnumero, docligne, codeArticle, n°Lot, Qté_inventaire, Qté_entrée, Qté_sortie, inventaireValidé, date, .....)
    clés = docnumero, docligne

    inventaireValidé est un boolean qui lors d'un nouvel inventaire à date du met la valeur inventaireValidé à 1 par défaut la valeur vaut zéro.
    A chaque ligne de cette table, seule une des trois Qté est non nulle.


    Table documents(docnumero, doc_piece, doc_type, doc_stype, doc_date, codeclient,......)
    clé = docnumero

    ----------
    Une relation maître-détails entre la table document et la table mouvement.
    Lors de l'ajout d'une ligne dans le document, tu vérifies la quantité disponible pour l'article en cours d'instruction.
    En filtrant la table des mouvements pour l'article en cours 'inventaireValidé = 0', la requête suivante te donnera la quantité disponible en stock;

    Select SUM(Qté_inventaire) + SUM(Qté_entrée) - SUM(Qté_sortie)
    where codeArticle = :code
    and inventaireValidé = 0

    En comparant la valeur obtenue par la requête et la quantité que tu dois utiliser, tu pourras décider ou non de valider la nouvelle ligne dans la table des mouvement pour le document en cours.

    Tu peux donc prévoir de réaliser trois types de documents.
    1. Un document d'inventaire avec validation du nouvel inventaire
    2. Un document pour les entrées
    3. Un document pour les sorties
    Pensez à utiliser les tags dans le titre.
    Avant de poser une question reportez-vous à la FAQ Delphi
    Respectez les règles du forum.

  5. #5
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    salut, je vais testé ma solution et je prend en considération votre solution pascal , je crois en fusionnant les deux je trouverai un bon résultat.
    sachant que la règle de gestion du stock "FIFO" et on se basant à 100% sur la date de péremption du médicament.
    Mr just soft la ou je suis dans mon boulo j'ai pas de d7 mais je vous transmettrai mon résultat. merci

  6. #6
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    salut, voila j'ai essayé mais j'ai pas trouver de solutions pour la mise à jour du stock:

    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
    procedure Tftrt.Edit2Change(Sender: TObject);
    var m1:integer; // pour calcul du total du stock du médicament A existant dans la requete
    begin
    m1:=0;
    if edit2.Text<>'' then
      begin   //  requête pour afficher le médicament A et sa quantitée 
      dm1.qqtmed.Active:=false;
      dm1.qqtmed.Parameters.ParamByName('med').Value:=emedic.Text;
      dm1.qqtmed.Active:=true ;
      end
      else
      begin
      dm1.qqtmed.active:=false;
      exit;
      end;
      
    if (dm1.qqtmed.RecordCount>0) then  // calcul du total (m1)de la quantité du médicament
        begin
          dm1.qqtmed.First;
          while not(dm1.qqtmed.Eof)do
                begin
                m1:=m1+ dm1.qqtmedqt.Value;
                dm1.qqtmed.Next;
                end;
                sumqt.Caption:=intToStr(m1); // afficher la sum quantité dans le label
                panel5.Visible:=true;
        end;
    
    if ((m1 < strtoint(edit2.Text)) and(edit2.Text<>''))  //  vérification de la quantité saisie dans le edit et la sum des quantités du médicament A 
       then
       begin
        Beep();
        MessageDlg('quantité en stock insuffisante ',mtinformation,[mbOK],0);
        edit2.SetFocus;
        sumqt.Caption:='';
        exit;
       end;
    jusqu'à la j'ai pas de problèmes.

    sachant par exemple que le médicament se trouve dans la table stock comme suit :
    N° Médicament Qt Date peremption Seuil alerte
    01 A 100 01/02/2012 20
    02 A 200 02/05/2014 20
    03 A 200 09/07/2015 20

    le médicament son trié selon la date de péremption, donc l'utilisateur par exemple doit faire sortir une quantité de 180 Unité , mais pour cela il fait sortir 100 unité du ( med A : Date péremption 01/02/2012) et 80 unité du (Med A date peremption 02/05/2014) pour atteindre les 180 unité et ainsi de suite alor toute la nuit c'était

  7. #7
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    salut, toujours mon souci de mise à jour de stock; j'ai travail actuellement sur une idée qui est la suivante:
    si le médicament "A" existe une seul fois dans la table stock c'est bon y'as pas de problème solution ( localisation avec table stock.edit et c'est bon pour la mise à jour).
    maintenant si le produit "A" existe 3 fois dans la table stock avec des quantité différente et des dates de péremption différente (voir exemple du message précédant) : solution que j'envisage est la suivante
    faire une boucle avec i: integer et RecN° pour savoir le nombre de fois de présence du produit "A"
    ensuite comparé la quantité sortie avec la quantité du stock du produit "A" date de péremption la plus proche :
    si la quantité est égale à celle du stock je passe par un cancel.
    a partir de ce point la je bloque dans le cas ou la quantité est supérieure a celle du stock "A" avec date péremption la plus proche , normalement je doit faire la soustraction de la premier enregistrement de la table stock et du deuxième enregistrement de la même table est ainsi de suite.... j'arrive pas a constitué cette boucle.

  8. #8
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    je crois que je vais tenté d'autres méthodes en s'inspirant des autres logiciels qui traites le sujet merci à tous

  9. #9
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 45
    Points : 41
    Points
    41
    Par défaut Salem
    Tu peut utiliser tt simplement la fonction :
    COALESCE((select sum(COALESCE(I.QTE,0)*COALESCE(I.COEFF,0)))
    le I représente les items (les lignes) de la commande médicament

  10. #10
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    COALESCE est dédie pour faire la somme et je croie que sgbd access ne la support pas ( à vérifier...) .mon problème est cité dans l'exemple cité dans le message précédant (produit médicament A).
    exp : l'utilisateur saisie ( 400 unités du produit A)
    dans le table stock le produit A est enregistrés en 04 fois:
    N 1 Prod: A date péremption: 12/02/2012 Qt : 120 Unités.
    N 2 Prod: A date péremption: 06/12/2014 Qt : 80 Unités.
    N 3 Prod A date péremption: 17/08/2015 Qt : 400 Unités.
    règle de gestion : la soustraction se fait sur le produit qui a la date de péremption la plus proche ainsi de suite.
    dans notre cas j'ai 400 unités a faire sortir du stock , réellement je doit faire sortir:
    les 120 uintés de la 1 lignes.
    + 80 unités de la 2 lignes.
    et les 200 qui reste de la 3 lignes.
    comment faire ca par programmation ? ou par sql....
    mon idée est d'utilisé recNo est une boucle avec des condition...

  11. #11
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    salut just soft j'aimerai bien votre avis sur le problème... merci et excuse pour le dérangement

  12. #12
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Citation Envoyé par redoran Voir le message
    salut just soft j'aimerai bien votre avis sur le problème... merci et excuse pour le dérangement
    salut
    ok, je vais regarder ça de près et tu auras une réponse d'ici dimanche
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  13. #13
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    salut ; merci just pour votre disponibilité . voila pour mon problème de mise à jour j'ai procédé comme suit:
    prenant l'exemple cité dans le précédant message:
    1) affichage de la table avec filtre pour le médicament choisie "A"
    2) dans edit.text , l'utilisateur saisie la quantité voulue:
    2-1) si // si la qtté saisie est supérieure au global du produit A
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if( (dm1.tstock.recordcount>0) AND 
                           strtoint(edit1.text) >  strtoint(globalmed.text))
         then
            begin
            beep();
           showmessage"stock insuffisant...."
            exit
            end;
    2-2) si // si la qtté saisie est inférieur à la qtté de A dont la date de péremption est la plus proche celui de la 1 lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    if( (dm1.tstock.recordcount> 0) AND 
                           strtoint(edit1.text) < strtoint(qtstock.text)) 
         then
            begin
            result:=abs(strtoint(edit1.text)- strtoint(qtstock.text));
            edit1.text:=inttostr(result);
            dm1.tstock.edit;
            dm1.tstockQt.value:=strtoint(edit1.text)
           dm1.tstock.post;
            ..............................
           exit;
            end;
    2-3)si// si la qtté saisie est égale à la qtté de A dont la date de péremption est la plus proche 1 lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     if( (dm1.tstock.recordcount> 0) AND 
                           strtoint(edit1.text) = strtoint(qtstock.text)) 
          then
            begin
            dm1.tstock.delete;
            edit1.text:='0';
             end;



    2-4) si // si la quantité saisie est supérieure à la qtté de la 1ligne
    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
    if( (dm1.tstock.recordcount> 0) AND 
                           strtoint(edit1.text) > strtoint(qtstock.text)) 
               then
                  begin
                    result:=strtoint(edit1.text)- strtoint(qtstock.text);
                     dm1.tstock.delete;
                       edit1.text:=inttostr(result);
                           if result > strtoint(qtstock.text) 
                               then
                                   begin
                                     result:=strtoint(edit1.text)- strtoint(qtstock.text);
                                    dm1.tstock.delete;
                                     edit1.text:=inttostr(result);
                                      end;
     
                            if strtoint(edit1.text) = strtoint(qtstock.text) 
                               then
                                   begin
                                    dm1.tstock.delete;
                                    edit1.text:='0';
                                      end; 
     
                             if strtoint(edit1.text) < strtoint(qtstock.text)) 
                                  then
                                       begin
                                      dm1.tstock.edit;
                                       dm1.tstockQt.value:=strtoint(edit1.text)
                                       dm1.tstock.post;
                                         ..............................
                                       edit1.text:='0';
                                           exit;
                                          end;
    j'ai passé par case of mais j'ai pas su la terminé ou plutôt la formulé, pour l'instant ca marche , il me reste quelque rectificatif à faire mais je crois que le compilateur va souffrir avec cet enchainement en attendant une meilleur solution.
    je me demande si on peut faire ça avec une requête. toute amélioration ou une solution plus simple ce sera la bien venu.

  14. #14
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 45
    Points : 41
    Points
    41
    Par défaut
    Je crois que t'est pas loin de la solution:

    Pour le 03ime cas l'algorithme est comme suit :
    1. vérifier SI la qte(saisie) > Qte (1iere ligine) a) -----> soustraire ta qte et modifier la table Tstock, b) -----> aller a la deuxime ligne (soustraction et modification ... etc)

    donc la solution est une procédure récursive.

    Plus d'informations ... tu sait comment faire @+

  15. #15
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    j'ai jamais travailler avec les procédures récursives , je vait lire ce tuto http://recursivite.developpez.com/?page=page_1 et je verrai ce que ça donne. amis je crois que je suis pas loin de la solution... sauf d'organiser mon code sous la forme de procédure récursive. merçi sahbi

  16. #16
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut procedure recursive
    slt, toujours avec mon problème de mise à jour de stock, j'ai essayé de faire fonctionné la procédure récursive sur la base de documentation citée dans le message précédant mais apparemment je suis perdu dans le raisonnement
    je vais testé mes solution et je publiera dans le forum le résultat ou la solution pour ceux qui peut être vont rencontré ce problème merci à tous le monde du forum

  17. #17
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    Je verrais quelque chose comme ça (non testé, c'est plus pour l'idée)
    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
     
    procedure MiseAJourStock
    var
      Result:Integer;
    begin
    if( (dm1.tstock.recordcount> 0) then begin
      case CompareValue(strtoint(edit1.text),  strtoint(qtstock.text)) of
    // Quantité demandée inférieure à celle disponible
      LessThanValue: begin
        Result := 0;
        dm1.tstock.edit;
        dm1.tstockQt.value:= strtoint(qtstock.text)-strtoint(edit1.text);
        dm1.tstock.post;
      end;
      EqualsValue: begin
    // Quantité demandée égale à celle disponible
        dm1.tstock.delete;
        Result := 0;
      end;
      GreaterThanValue:
    // Quantité demandée supérieure à celle disponible
        Result := strtoint(edit1.text)- strtoint(qtstock.text);
    // Suppresion d'enregistrement (et passage au suivant automatiquement)
        dm1.tstock.delete;
    // Appel de la procédure sur l'enregistrement courant
        MiseAJourStock;
      end;
      Edit1.text := IntToStr(Result);
    end;
    Conditions à respecter:
    - Le clientDataSet (ou la table) doit être par date d'inventaire et ne contenir qu'un seul type de médicament.
    - L'enregistrement doit être positionné sur le premier médicament de l'inventaire.
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

  18. #18
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut case
    merci linkin je vais testé votre code demain je vous donnerez des résultats la ou je suis j'ai pas delphi merçi pour cette lumière. jaurai bien voulu si votre code contiens des explication ou des commentaires

  19. #19
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    J'ai à peu près repris l'algorithme que vous aviez mis.

    J'ai identifié 4 cas:
    - Pas de médicament disponible: sortie
    - Quantité demandée<Quantité disponible: retrait de la quantité demandé à la - quantité disponible, relicat:0, Sortie
    - Quantité demandée=Quantité disponible: suppression de l'enregistrement courant (dispo=demandé=0), relicat:0, Sortie
    - Quantité demandée>Quantité disponible: relicatdemandé-disponible),suppression de l'enregistrement courant Sortie

    Pour une fonction récursive, il faut une condition de sortie (ici quand la quantité demandée est inférieure ou égale à la quantité disponible du médicament de l'enregistrement actif).

    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
     
    procedure MiseAJourStock(var QuantiteDemandee: Integer)
    var
      Result:Integer;
    QuantiteDisponible:Integer;
    begin
    QuantiteDisponible := dm1.tstockQt.value;
    if( (dm1.tstock.recordcount> 0) then begin
      case CompareValue(QuantiteDemandee,  QuantiteDisponible) of
    // Quantité demandée inférieure à celle disponible
      LessThanValue: begin
        Result := 0;
        dm1.tstock.edit;
        dm1.tstockQt.value:= QuantiteDisponible-QuantiteDemandee;
        dm1.tstock.post;
        Edit1.text := IntToStr(Result);
      end;
      EqualsValue: begin
    // Quantité demandée égale à celle disponible
        dm1.tstock.delete;
        Result := 0;
        Edit1.text := IntToStr(Result);
      end;
      GreaterThanValue:
    // Quantité demandée supérieure à celle disponible
        Result := QuantiteDemandee-QuantiteDisponible;
    // Suppresion d'enregistrement (et passage au suivant automatiquement)
        dm1.tstock.delete;
    // Appel de la procédure sur l'enregistrement courant
        Edit1.text := IntToStr(Result);
        MiseAJourStock(Result);
      end;
    end;
    PS: Cet algo n'est pas optimal. (L'affichage de la quantité restante devrait être faite ailleurs, entre autre)
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

  20. #20
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut mise a jour stock
    j'ai bien compris maintenant c'est clair merçi linkin pour votre disponibilité

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [AC-2007] Problème mise à jour stock
    Par Bestia_negra dans le forum Access
    Réponses: 3
    Dernier message: 24/04/2015, 09h47
  2. [V7] Mise à jour STOCK SUR ENTREPOT
    Par 7ammouda dans le forum Odoo (ex-OpenERP)
    Réponses: 6
    Dernier message: 25/03/2015, 16h56
  3. Procedure Stocké et mise à jour de ligne
    Par Andry dans le forum SQL
    Réponses: 2
    Dernier message: 26/11/2004, 10h22
  4. Procedure stockée de mise à jour
    Par Cambon dans le forum SQL
    Réponses: 4
    Dernier message: 26/01/2004, 20h35

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