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
3
4
5
6
procedure TFrmMain.BtnVentesClick(Sender: TObject);
begin
    FrmVentes.show;
    FrmVentes.Color:=clhighlight ;
    vnt:=true ;
end;
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;
3-L'ajout d'un enregistrement.
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;
4-Mouvement de la marchandise:
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;
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 : 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;
et cette valeur 'Montant' sera utilisé dans les requêtes et les états.

merci à tous.