Bonjour à tous
Je vous propose une logique de programmation de deux processus opposés, en utilisant les mêmes tables et le même formulaire(FrmVentes):
L'un concernant la sortie de la marchandise du stock: diminution de stock et augmentation de la caisse.
L'autre concernant le retour de la marchandise au stock: augmentation de stock et diminution de la caisse.
On ajoute à une Table (TblVentes) une variable de type string qui joue le rôle d'une booléenne définie ainsi:
[MMC_VNT VARCHAR(1) DEFAULT 'V',]
Cette table est reliée au formulaire, qu'on va utiliser pour éditer ces deux flux opposés.
1-Tout d'abord on défini une booléenne globale dans la fiche UntMain.
2-Ensuite on dépose sur une barre d'outils, deux boutons qu'on nomme 'BtnVentes' et 'BtnRetours' qu'on implémente par:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 var vnt:boolean;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 procedure TFrmMain.BtnVentesClick(Sender: TObject); begin FrmVentes.show; FrmVentes.Color:=clhighlight ; vnt:=true ; end;3-L'ajout d'un enregistrement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 procedure TFrmMain.BtnRetoursClick(Sender: TObject); begin FrmVentes.show; FrmVentes.Color:=clsilver ; //afin de donner l'impression qu'il s'agit d'un autre formulaire. vnt:=false ; end;
4-Mouvement de la marchandise:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 procedure TMDT.TblVentesAfterInsert(DataSet: TDataSet); begin if UntMain.vnt=True then MDT.TblVentes.FieldValues['MMC_VNT']:='V' else MDT.TblVentes.FieldValues['MMC_VNT']:='R'; end;
5-Mouvement monétaire:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 procedure TMDT.TblVentesQTE_VNTChange(Sender: TField); //si la quantité de produit change. begin MDT.TblStock.IndexName:='C' ;//clé primaire de la table TblStock. MDT.TblStock.Locate('NUM_PRDK',inttostr(MDT.TblVentes.FieldValues['NUM_PRDV']),[]); MDT.TblStock.Edit; if UntMain.vnt=true then MDT.TblStock.FieldValues['QTE_PRDK']:=MDT.TblStock.FieldValues['QTE_PRDK']-MDT.TblVentes.FieldValues['QTE_VNT']; //sortie de marchandise. else MDT.TblStock.FieldValues['QTE_PRDK']:=MDT.TblStock.FieldValues['QTE_PRDK']+MDT.TblVentes.FieldValues['QTE_VNT']; //retour de marchandise. MDT.TblStock.ApplyUpdates; end;
On défini maintenant un champ calculé appelé 'Montant' dans la table 'TblVentes' et on l'intègre dans le code suivant.
et cette valeur 'Montant' sera utilisé dans les requêtes et les états.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 procedure TMDT.TblVentesCalcFields(DataSet: TDataSet); begin if MDT.TblVentes.FieldValues['MMC_VNT']='V' then MDT.TblVentes.FieldValues['Montant']:=MDT.TblVentes.FieldValues['QTE_VNT']*MDT.TblVentes.FieldValues['PUV_VNT'] else MDT.TblVentes.FieldValues['Montant']:=-MDT.TblVentes.FieldValues['QTE_VNT']*MDT.TblVentes.FieldValues['PUV_VNT'] end;
merci à tous.![]()
Partager