Bonjour à tous.
Cet essai montre comment calculer le PAMP: (Prix d'achat moyen pondéré) d'un produit acheté
plusieurs fois à des prix différents, dans le champ PRODUITS.PUHT_PRDK.
Une fois un enregistrement est ajouté modifié ou supprimé dans la table DACHATS, ses valeurs seront transmises automatiquement dans
la table PRODUITS.
TABLE PRODUITS
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 (REF_PRDK INTEGER NOT NULL, // réference produit. PUHT_PRDK NUMERIC(10,2) , // prix d'achat PUV_PRDK NUMERIC(10,2) , // prix de vente EXP_PRDK DATE , // date d'expiration d'un produit. QTE_PRDK NUMERIC(10,2), // quantité en stock. PRIMARY KEY(REF_PRDK));
TABLE DACHATS
1. déclaration de qi // qi:quantité initiale d'un produit dans la table DACHATS qu'on veut modifier.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 (NUM_ACH_DA INTEGER , REF_PRD_DA INTEGER , PUHT_DA NUMERIC(10,2) , PUV_DA NUMERIC(10,2), EXP_DA DATE , QTE_DA NUMERIC(10,2) , PRIMARY KEY(NUM_ACH_DA,REF_PRD_DA));
2.Initialisation de qi
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 var MDT: TMDT; qi:variant;
3. Insertion/MAJ d'un produit
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 procedure TF_Achats.FormShow(Sender: TObject); begin umdt.qi:=0 end; procedure TMDT.T_DachatsBeforeEdit(DataSet: TDataSet); begin qi:=T_DAchats.FieldValues['Qte_da']; // cet événement n'aura lieu que si T_DAchats.FieldValues['Qte_da']<>Null. end;
4. Suppression d'un produit
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 procedure TMDT.T_DachatsAfterPost(DataSet: TDataSet); var ref,Num,Den:Variant; begin ref:=inttoStr(T_DAchats.FieldValues['Ref_prd_da']); if T_PRODUITS.Locate('REF_PRDK',ref,[]) then // si le produit existe déjà. begin T_PRODUITS.Edit; Num:=(T_DAchats.FieldValues['Puht_da']*(T_DAchats.FieldValues['Qte_da']-qi)+T_PRODUITS.FieldValues['Puht_prdk']*T_PRODUITS.FieldValues['QTE_PRDK']); Den:=(T_PRODUITS.FieldValues['QTE_PRDK']+T_DAchats.FieldValues['Qte_da']-qi); T_PRODUITS.FieldValues['Puht_prdk']:=Num/Den; //PAMP=Num/Den. end else begin T_PRODUITS.Insert; T_PRODUITS.FieldValues['ref_prdk']:=T_DAchats.FieldValues['Ref_prd_da']; T_PRODUITS.FieldValues['Puht_prdk']:=T_DAchats.FieldValues['Puht_da']; end; T_PRODUITS.FieldValues['exp_prdk']:=T_DAchats.FieldValues['Exp_da']; T_PRODUITS.FieldValues['Puv_prdk']:=T_DAchats.FieldValues['Puv_da']; T_PRODUITS.FieldValues['QTE_PRDK']:=T_PRODUITS.FieldValues['QTE_PRDK']+T_DAchats.FieldValues['Qte_da']-qi; qi:=0; T_Dachats.ApplyUpdates(-1); T_PRODUITS.ApplyUpdates(-1); Accueil.LOTUSTransaction.CommitRetaining; end;
merci beaucoup
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 procedure TMDT.T_DachatsBeforeDelete(DataSet: TDataSet); var Num,Den,ref:Variant; begin ref:=inttoStr(T_DAchats.FieldValues['Ref_prd_da']); T_PRODUITS.Locate('REF_PRDK',ref,[]); T_PRODUITS.Edit; Num:=(T_PRODUITS.FieldValues['Puht_prdk']*T_PRODUITS.FieldValues['QTE_PRDK']-T_DAchats.FieldValues['Puht_da']*T_DAchats.FieldValues['Qte_da']); Den:=(T_PRODUITS.FieldValues['QTE_PRDK']-T_DAchats.FieldValues['Qte_da']); T_PRODUITS.FieldValues['Puht_prdk']:=Num/Den; T_PRODUITS.FieldValues['QTE_PRDK']:=Den; end; procedure TMDT.T_DachatsAfterDelete(DataSet: TDataSet); begin T_DAchats.ApplyUpdates(-1) ; T_PRODUITS.ApplyUpdates(-1); Accueil.LOTUSTransaction.CommitRetaining; end;
Partager