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

 Firebird Discussion :

Calcul des stocks au prix moyen pondéré


Sujet :

Firebird

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 945
    Points : 123
    Points
    123
    Par défaut Calcul des stocks au prix moyen pondéré
    Bonjour à tous,

    je voudrais calculer les stocks de marchandise d'une entreprise de vente de produits alimentaires mais aux Prix moyen pondéré. Jusqu'au ici je calculer les stocks au prix unitaire d'achat et à la demande du client qui veut regrouper les produit par le total de la quantité et voir la valeur total des stocks de marchandises en gros comment modifier ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     insert into STK (pro,pua,des,qto,qta,qtv)
      with c as
      ( select pro,pua,(iif (fac='00000',qte,0)) as qto,(iif (fac='00000',0,qte)) as qta,0 as qtv from ACH  where (pro is not null)and(dat between :DATD and :DATR)
      union all
      select pro,pua,0 as qto,0 as qta,qte as qtv from VEN where (pro is not null)and(dat between :DATD and :DATR) )
      select pro,pua,sum(qto) as qto,sum(qta) as qta, sum(qtv) as qtv from C group by 1,2;
    pour le calcul des stocks au Prix Moyen Pondéré

    merci

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    566
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2009
    Messages : 566
    Points : 1 045
    Points
    1 045
    Par défaut
    Bonjour,

    A mon avis pour traiter ce problème, il est nécessaire de passer par une procédure stockée.

    La difficulté du coût moyen pondéré est d'isoler les éléments qui vont entrer dans le calcul. Je m'explique, nous avons les factures suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     Facture  Quant     Total    PU
      Fac 1      15       150     10
      Fac 2       5        60     12
      Fac 3      20       160      8
    Si tu as en stock 30 produits, le coût moyen pondéré sera 20 x 8 + 5 x 12 + 5 x 10 = 270 c'est-à-dire un coût moyen de 9,00.

    Personnellement, je n'ai pas la réponse comment établir un requête pour réaliser ce calcul. Certes, je n'ai pas cherché.

    Il faudrait peut-être regarder vers la création d'une table temporaire préalablement au calcul du coût.

    Je n'ai pas le temps suffisant pour étudier, en détail, toutes les possibilités en utilisant une requête, une ou plusieurs vues ou une procédure stockée ou un panachage de l'ensemble, sans oublier le contrôle des performances.

    Mon propos ne te seras peut être pas très utile, mais j'ai tellement vu, dans mon activité, les calculs de coût moyen pondéré inexact, qu'il me semblait utile d'apporter ces précisions.

    Bon courage

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 945
    Points : 123
    Points
    123
    Par défaut
    merci pour ta réponse, mais ce qu'il faut aussi intégrer c'est les ventes.
    en effet ton exemple
    Facture Quant Total PU
    Fac 1 15 150 10
    Fac 2 5 60 12
    Fac 3 20 160 8
    traite seulement des achats, mais la déficulté c'est d'intégrer les ventes. j'ai essayer avec cette methode, mais ça prend un temps enorme.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
       for select dat,pro,quant, total,pu from ACHT into :dat,:pro,:qua,:tot,:pu do
               insert into STOCK (cas,dat,pro,qte,pua) (1,:dat,:pro,:qua,:tot,:pu);
       for select dat,pro,quant, total,pu from vente into :dat,:pro,:qua,:tot,:pu do
               insert into STOCK (cas,dat,pro,qte,pua) (2,:dat,:pro,:qua,:tot,:pu);
    aprés le reste du calcul je le fait avec programmation delphi

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2005
    Messages : 100
    Points : 118
    Points
    118
    Par défaut
    Bonjour,

    Pour moi le CUMP , c'est la moyenne des (coûts unitaires x quantités) des entrées d'un article donné par rapport à une date P.

    Moi j'utilise un champs CMP dans la structure de la table ARTICLE dont la valeur est systématiquement mise à jour à chaque nouvelle entrée (achat) de cet article,
    Pendant la sortie de l'article (vente ou sortie du magasin,...), il suffit d'utiliser ce champs (CMP).
    A+

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 945
    Points : 123
    Points
    123
    Par défaut
    Bonjour ,

    je suis désolé de contredire mais la méthode que tu propose est fausse .
    Le PMP doit être calculé en prenant en considérations les mouvements des stocks exple: Produit: OR
    1- 01/01/2014 achat 100 KG pour un PUA de 1000.00
    2- 03/01/2014 Vente 1.5 KG
    3- 04/01/2014 achat 150 KG pour un PUA de 1200.50

    le calcul du PMP doit se faire dont l'ordre chronologique.
    1- pmp=1000 pour une qte de 100 kg
    2- PMP=1000 pour une qte de 98.5 KG
    3- PMP=((98.5*1000)+(150*1200.5))/(98.5*150)

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    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 042
    Points : 40 952
    Points
    40 952
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    le CUMP est effectivement différent d'un PMP mais sinon je procède de la même manière que Camatchou (à savoir avoir une colonne PMP dans la table Article) , un Trigger pour le calcul à chaque Entrées (achats) et le tour est joué .

    Quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CREATE TRIGGER NOUVEL_ACHAT FOR ACHATS
    ACTIVE AFTER INSERT
    BEGIN
    UPDATE ARTICLE SET PMP=(QTESTOCK*PMP+NEW.QTEACHAT*NEW.PU)/(QTESTOCK+NEW.QTEACHAT) WHERE CODEARTICLE=NEW.CODEARTICLE;
    END
    ce qui donnera
    1- 01/01/2014 achat 100 KG pour un PUA de 1000.00 -> PMP=1000
    2- 03/01/2014 Vente 1.5 KG PMP inchangé
    3- 04/01/2014 achat 150 KG pour un PUA de 1200.50 -> PMP=1121.0261
    CQFD

    et pas de calculs longs
    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

  7. #7
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 945
    Points : 123
    Points
    123
    Par défaut
    Bonjour @sergio,

    Ton code est correcte seulement dans le cas ou il ya pas de changement antérieur des achats
    cad :

    dans le trigger le QTESTOCK est statique ça veut dire il change à chaque ajout d'un achat mais pas à la modification ou à la suppression.
    prenant un exple:
    01/01/2014 achat 1500 kg pour un pua 1200.00
    02/01/2014 vente 100 kg
    03/01/2014 achat 1200 kg pour un pua 1300.00
    04/01/2014 vente 12.5 kg
    05/01/2014 facture avoir 1000 kg ????la le problème

    moi je recalcule le PMP depuis le début, mais le problème c'est le temps que ça prend.

  8. #8
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    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 042
    Points : 40 952
    Points
    40 952
    Billets dans le blog
    62
    Par défaut
    Ton code est correcte seulement dans le cas ou il ya pas de changement antérieur des achats
    dans le trigger le QTESTOCK est statique ça veut dire il change à chaque ajout d'un achat mais pas à la modification ou à la suppression.
    Absolument pas, je n'ai donné que le trigger sur les Achats il y a bien sur un trigger sur les Ventes et le trigger sur les ACHATS n'est pas Complet

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TRIGGER NOUVEL_VENTE FOR VENTES
    ACTIVE AFTER INSERT
    BEGIN
    UPDATE ARTICLE SET QTESTOCK=QTESTOCK-NEW.QTEVENTE WHERE CODEARTICLE=NEW.CODEARTICLE;
    END

    pour ton information : cette technique dans ma BDD fonctionne depuis 1998
    Conclusion : on n'apprend pas a un vieux singe à faire la grimace
    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

  9. #9
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 945
    Points : 123
    Points
    123
    Par défaut
    je crois que tu m'a pas bien compris.

    Si on prend les triggers que tu utilise dans les achats ou les ventes
    exple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CREATE TRIGGER NOUVEL_VENTE FOR VENTES
    ACTIVE AFTER INSERT
    BEGIN
    UPDATE ARTICLE SET QTESTOCK=QTESTOCK-NEW.QTEVENTE WHERE CODEARTICLE=NEW.CODEARTICLE;
    END
    si on lit bien "Active after insert' qui veut dire mettre à jour le champs QTESTOCK à chaque ajout d'un achat. Mais le problème qui se pose si il y a modification d'un achat ou facture d'avoir(retour de marchandise vers fournisseurs) par exple.

  10. #10
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    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 042
    Points : 40 952
    Points
    40 952
    Billets dans le blog
    62
    Par défaut
    a) rien n’empêche de faire un trigger pour un UPDATE
    b) en général dans le cas d'un Avoir , le PMP ne change pas
    c) tout dépend de comment on gère les "modifications"
    i.e un avoir n'est peut être vu comme un achat d'une quantité négative

    [Edit] il faudra également penser à gérer des quantités négatives
    (Quantité Stock négative => Quantité Stock=0 pour les calculs)
    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

  11. #11
    Candidat au Club
    Homme Profil pro
    Développeur Full Stack
    Inscrit en
    Avril 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur Full Stack

    Informations forums :
    Inscription : Avril 2012
    Messages : 1
    Points : 4
    Points
    4
    Par défaut CMUP
    Bonjour tout le monde,

    Je suis nouveau dans ce forum, j'aimerai bien apporter mon aide au sujet de cette discussion,

    En fait, je pense que le meilleure moyen de calculer le prix moyen pondéré est d'utiliser une procédure stockée, le calcul sera performant car la requête

    est exécutée coté serveur, je déconseille vivement l'utilisation des triggers (Ils sont pénalisant en terme de performances), de plus la solution proposée fonctionne si l'utilisateur insére des entrées par ordre chronologique, si une piéce d'entrée est insérée déja et que l'utilisateur modifie le prix d'achat, le trigger ne sera pas executé, donc un prix moyen pondéré érroné.
    Une autre chose il faut tenir compte de la date des pièces pour calculer le CMUP c'est important.
    Je vous conseil vivement ce lien qui explique les trois méthodes de valorisation des stocks en utilisant ms access, personnellement je me suis inspiré pour faire
    une procédure stockée sous sql server qui calcul le prix moyen pondéré par article, numéro de lot, dépot et établissement.
    https://claudeleloup.developpez.com/...-de-stock/#LII
    https://denishulo.developpez.com/tut...ess/stockeval/

    Voila, j'espere qu'ils vous seront d'une grande utilité

Discussions similaires

  1. Calcul de prix d'achat moyen pondéré d'un produit
    Par FOCUS77 dans le forum Contribuez
    Réponses: 11
    Dernier message: 23/07/2018, 16h23
  2. [X3-V6] historique PMP ARTICLE (prix moyen pondéré)
    Par medjen dans le forum SAGE
    Réponses: 2
    Dernier message: 18/08/2016, 11h23
  3. [V6][V7] Requêtes derrière les Fonctions de calcul des Stocks
    Par LSDev_Noumea dans le forum Odoo (ex-OpenERP)
    Réponses: 1
    Dernier message: 30/07/2014, 23h20
  4. Réponses: 1
    Dernier message: 15/07/2013, 21h35
  5. Gestion de stock - Prix Moyen Pondéré
    Par hugo69 dans le forum Access
    Réponses: 33
    Dernier message: 28/10/2005, 17h03

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