Manipulation des processus opposés
Bonjour à tous :P
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:
1 2 3 4 5 6
| procedure TFrmMain.BtnVentesClick(Sender: TObject);
begin
FrmVentes.show;
FrmVentes.Color:=clhighlight ;
vnt:=true ;
end; |
Code:
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; |
3-L'ajout d'un enregistrement.
Code:
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; |
4-Mouvement de la marchandise:
Code:
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; |
5-Mouvement monétaire:
On défini maintenant un champ calculé appelé 'Montant' dans la table 'TblVentes' et on l'intègre dans le code suivant.
Code:
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; |
et cette valeur 'Montant' sera utilisé dans les requêtes et les états.
merci à tous. 8-)