unit Unit3;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, DB, dbf, memds, Forms, Controls, Graphics, Dialogs,
StdCtrls, ComCtrls, DBGrids, Grids, DBCtrls, Spin, ExtCtrls, Buttons,
RTTIGrids, SpinEx;
type
{ TForm3 }
TForm3 = class(TForm)
Bevel1: TBevel;
Bevel2: TBevel;
Bevel3: TBevel;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
Button7: TButton;
Button8: TButton;
Button9: TButton;
ControlBar1: TControlBar;
DataSource1: TDataSource;
DataSource2: TDataSource;
DataSource3: TDataSource;
DataSource4: TDataSource;
DataSource5: TDataSource;
DataSource6: TDataSource;
DataSource7: TDataSource;
DBEdit1: TDBEdit;
DBEdit2: TDBEdit;
Dbf1: TDbf;
Dbf2: TDbf;
Dbf3: TDbf;
Dbf4: TDbf;
Dbf5: TDbf;
Dbf6: TDbf;
DBGrid2: TDBGrid;
DBGrid3: TDBGrid;
DBLookupComboBox1: TDBLookupComboBox;
DBLookupComboBox2: TDBLookupComboBox;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
CodeMouvement: TEdit;
Edit4: TEdit;
FloatSpinEditEx1: TFloatSpinEditEx;
FloatSpinEditEx2: TFloatSpinEditEx;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
MemDataset1: TMemDataset;
Tdebit: TEdit;
Tcredit: TEdit;
Tdbfcompte: TDbf;
DBGrid1: TDBGrid;
Label1: TLabel;
StatusBar1: TStatusBar;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure Button8Click(Sender: TObject);
procedure Button9Click(Sender: TObject);
procedure DataSource1DataChange(Sender: TObject; Field: TField);
procedure DBComboBox2Change(Sender: TObject);
procedure Dbf1BeforeOpen(DataSet: TDataSet);
procedure DBGrid1ColExit(Sender: TObject);
procedure DBGrid1DblClick(Sender: TObject);
procedure DBGrid2Enter(Sender: TObject);
procedure DBGrid3DblClick(Sender: TObject);
procedure DBLookupComboBox1Change(Sender: TObject);
procedure Edit2Change(Sender: TObject);
procedure Edit2Exit(Sender: TObject);
procedure FloatSpinEditEx1Exit(Sender: TObject);
procedure FloatSpinEditEx2Change(Sender: TObject);
procedure FloatSpinEditEx2Exit(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure calcullignes;
private
public
end;
var
Form3: TForm3;
implementation
uses Unit5 , Dbf_Common,dbf_dbffile,dbf_parser,dbf_prsdef,dbf_cursor,dbf_fields,dbf_pgfile,dbf_idxfile;
{$R *.lfm}
{ TForm3 }
procedure TForm3.FormShow(Sender: TObject);
begin
////////
Form3.Top:= 100;
Form3.Left:= 100;
StatusBar1.SimpleText:= StatusBar1.Caption +' Calcul ' ;
Dbf1.Refresh;
DBGrid1.Refresh;
calcullignes;
end;
procedure TForm3.DBGrid1ColExit(Sender: TObject);
var Xcompte : string;
var Xlabel : string;
begin
if (DBGrid1.SelectedField.FieldName = 'DEBIT') OR (DBGrid1.SelectedField.FieldName = 'CREDIT') then
begin
StatusBar1.SimpleText:= StatusBar1.Caption +' Calcul ' ;
calcullignes;
end;
if DBGrid1.SelectedField.FieldName = 'COMPTE' then
begin
StatusBar1.SimpleText:= 'Recherche : ';
if (DBGrid1.Columns[0].Field.IsNull) then
begin
end else begin
if (DBGrid1.Columns[0].Field.Value <> '') OR (DBGrid1.Columns[0].Field.Value <> 'Nil') then
begin
Xcompte := DBGrid1.Columns[0].Field.Value;
end else begin
Xcompte := '';
end;
end;
//////////recherche dans la table compte , si le compte saisie existe
if (Xcompte <> '') then
begin
Tdbfcompte.IndexName := 'compte'; ////table des comptes sur index compte
if Tdbfcompte.Locate('compte', Xcompte, [loPartialKey, loCaseInsensitive]) then
begin
////////////liste les champs de la table sur l enregistrement
Button1.Enabled:= True ;
StatusBar1.SimpleText:= StatusBar1.Caption +' Trouve Ok ' ;
Dbf1.Edit;
Dbf1.FieldByName('compte').AsString := Tdbfcompte.FieldByName('compte').AsString;
Dbf1.FieldByName('label').AsString := Tdbfcompte.FieldByName('label').AsString;
Dbf1.Post;
Xlabel := Tdbfcompte.FieldByName('label').AsString;
StatusBar1.SimpleText:= StatusBar1.Caption +' Ajouté ' + Xcompte + ' ' + Xlabel;
end else begin
Button1.Enabled:= False ;
StatusBar1.SimpleText := 'Non Trouvé : ' + Xcompte;
DBGrid1.SetFocus;
DBGrid1.SelectedColumn.FieldName := 'compte';
/////////Tdbfcompte. ['compte']. SetFocus;
end;
end;
end else begin
StatusBar1.SimpleText := 'Error Vide : ';
end;
end;
procedure TForm3.DBGrid1DblClick(Sender: TObject);
begin
DBGrid1.Refresh;
end;
procedure TForm3.DBGrid2Enter(Sender: TObject);
Var Rcherche:String;
Var Rliasse:String;
begin
///// le dbgrill des compte recois le focus on affiche la liasse auquel est attaché le compte
if Tdbfcompte.FieldByName('compte').AsString <> '' then
begin
Rcherche := Tdbfcompte.FieldByName('compte').AsString;
Tdbfcompte.IndexName := 'compte';
if Tdbfcompte.SearchKeyPChar(PAnsiChar(AnsiString(Rcherche)), stGreaterEqual) then
begin
Rliasse := Tdbfcompte.FieldByName('liasse').AsString;
/////pointeur sur le liasse correspondante
Dbf6.IndexName := 'liasse';
if Dbf6.SearchKeyPChar(PAnsiChar(AnsiString(Rliasse)), stGreaterEqual) then
begin
Dbf6.Refresh;
end;
end;
end;
end;
procedure TForm3.DBGrid3DblClick(Sender: TObject);
Var FFF : String;
begin
////////////double clic sur liasse , on affiche les comptes associés
if (DBEdit2.Text <> '') OR (DBEdit2.Text <> 'Nil') then
begin
//////////////appliquer filtre sur les comptes
FFF := DBEdit2.Text;
/////Tdbfcompte.IndexName:= 'liasse';
Tdbfcompte.Filter := 'liasse='+ QuotedStr(FFF);
Tdbfcompte.Filtered := true;
end;
// Tdbfcompte
end;
procedure TForm3.DBLookupComboBox1Change(Sender: TObject);
begin
Edit4.Text:= DBLookupComboBox1.Text;
if Dbf1.RecordCount = 0 then
begin
Edit4.Color:=clblue;
end else begin
Edit4.Color:=clGreen;
end;
end;
procedure TForm3.Edit2Change(Sender: TObject);
Var Rrrrr : String;
begin
////////////////champ de saissie compte , il change on change la liste des comptes
Rrrrr := Edit2.Text;
Tdbfcompte.IndexName:= 'compte';
if Tdbfcompte.Locate('compte', Rrrrr, [loPartialKey, loCaseInsensitive]) then
begin
Tdbfcompte.Refresh;
Edit3.Text := Tdbfcompte.FieldByName('label').AsString;
end;
end;
procedure TForm3.Edit2Exit(Sender: TObject);
begin
Edit3.SetFocus;
end;
procedure TForm3.FloatSpinEditEx1Exit(Sender: TObject);
begin
Button8.SetFocus;
end;
procedure TForm3.FloatSpinEditEx2Change(Sender: TObject);
begin
end;
procedure TForm3.FloatSpinEditEx2Exit(Sender: TObject);
begin
FloatSpinEditEx1.SetFocus;
end;
procedure TForm3.FormActivate(Sender: TObject);
begin
Dbf1.Refresh;
DBGrid1.Refresh;
DBGrid1.SetFocus;
DBGrid1.Update;
calcullignes;
end;
procedure TForm3.FormCreate(Sender: TObject);
begin
////// les chemins pour les tables
/// CodeMouvement.Color:=;
Dbf1.First;
if Dbf1.RecordCount = 0 then
begin
Edit4.Color:=clblue;
end else begin
if Edit4.Text <> '' then
begin
Edit4.Color:=clGreen;
end else begin
Edit4.Color:=clblue;
end;
end;
end;
procedure TForm3.Button1Click(Sender: TObject);
Var NumeroMouvement : String;
Var XXcompte : String ;
begin
/////////////validation des écritures
/////////////verifier le DBComboBox1
if DBLookupComboBox2.Text = '' then
begin
messagedlg('Le journal est VIDE , impossible de confirmer les écritures dans les lignes.',mtinformation,[mbok],0);
abort;
end;
if Edit4.Text = '' then ////////////// verifier la periode
begin
Edit4.Color:= clRed;
messagedlg('La periode est vide , selectionnez une periode dans la liste ou créez des periodes impossible de confirmer les écritures dans les lignes .',mtinformation,[mbok],0);
abort;
end;
if DBLookupComboBox1.Text <> '' then
begin
/////////////on verifie que le code du mouvement existe ou pas
if CodeMouvement.Text = '' then
begin
/////////Determine le code mouvement
Dbf4.Active:= True;
Dbf4.IndexName:= 'Mouvement';
Dbf4.Last;
NumeroMouvement := Dbf4.FieldByName('Mouvement').AsString;
end else begin
////////LE code Mouvement existe , on le copy
NumeroMouvement := CodeMouvement.Text;
end;
Tdbfcompte.IndexName := 'compte';
////////boucle sur la table de saisie
dbf2.First;
while not dbf2.EOF do
begin
XXcompte := Dbf2.FieldByName('Mouvement').AsString;
if Tdbfcompte.SearchKeyPChar(PAnsiChar(AnsiString(XXcompte)), stGreaterEqual) then //////////verification que le compte existe
begin
///////// ajout dans les lignes apres que tout les comptes sont ok
end else begin
messagedlg('Lors de la verification le compte '+ XXcompte +' n est pas trouvé .',mtinformation,[mbok],0);
abort;
end;
end;
/////// ajout dans la table lignes
dbf2.First;
while not dbf2.EOF do
begin
Dbf4.Append;
Dbf4.FieldByName('compte').AsString := Dbf2.FieldByName('compte').AsString;
Dbf4.FieldByName('label').AsString := Dbf2.FieldByName('label').AsString;
Dbf4.FieldByName('debit').AsString := Dbf2.FieldByName('debit').AsString;
Dbf4.FieldByName('credit').AsString := Dbf2.FieldByName('credit').AsString;
Dbf4.FieldByName('Mouvement').AsString := NumeroMouvement;
Dbf4.FieldByName('journal').AsString := NumeroMouvement;
Dbf4.FieldByName('periode').AsString := Edit4.Text;
Dbf4.FieldByName('createur').AsString := 'x';
Dbf4.FieldByName('dossier').AsString := 'x';
Dbf4.Post;
end;
////////affiche la form des lignes
if Form5.Visible = false then Form5.Visible := true else Form5.BringToFront ;
end else begin
messagedlg('Le journal est VIDE , impossible de continuer .',mtinformation,[mbok],0);
end;
end;
procedure TForm3.Button2Click(Sender: TObject);
var Xcompte : string;
begin
//////////////////cherche un compte
Xcompte := Edit1.Text;
Tdbfcompte.IndexName:= 'compte';
if Tdbfcompte.Locate('compte', Xcompte, [loPartialKey, loCaseInsensitive]) then
begin
DBGrid2.SetFocus;
end;
end;
procedure TForm3.Button3Click(Sender: TObject);
begin
/////////////ajouter dans ligne de saisie le compte en cours remplacement
if DBEdit1.text <>'' then
begin
DBEdit1.Color := clGreen;
DBGrid1.Columns[0].Field.Value := Tdbfcompte.FieldByName('compte').AsString;
if DBGrid1.Columns[1].Field.Value = '' Then
begin
DBGrid1.Columns[1].Field.Value := Tdbfcompte.FieldByName('label').AsString;
end;
end else begin
DBEdit1.Color := clRed ;
messagedlg('Compte NON Trouvé Ou Vide .',mtinformation,[mbok],0);
StatusBar1.SimpleText:= 'Ce compte n existe pas ';
end;
end;
procedure TForm3.Button4Click(Sender: TObject);
begin
//////////////////ajouter en fin de table
if DBEdit1.text <>'' then
begin
DBEdit1.Color := clGreen;
Dbf1.Append;
////Dbf1.Edit;
Dbf1.FieldByName('compte').AsString := Tdbfcompte.FieldByName('compte').AsString;
Dbf1.FieldByName('label').AsString := Tdbfcompte.FieldByName('label').AsString;
Dbf1.Post;
end else begin
DBEdit1.Color := clRed ;
messagedlg('Compte NON Trouvé Ou Vide .',mtinformation,[mbok],0);
StatusBar1.SimpleText:= 'Ce compte n existe pas ';
end;
end;
procedure TForm3.Button5Click(Sender: TObject);
begin
////////////mettre le compte dans le champ de saisie individuel
try
Edit2.Text := Tdbfcompte.FieldByName('compte').AsString;
Edit3.Text := Tdbfcompte.FieldByName('label').AsString;
Edit3.SetFocus;
finally
end;
end;
procedure TForm3.Button6Click(Sender: TObject);
begin
/////////////////enlever les filtres des comptes
/////Tdbfcompte.cancelrange;
Tdbfcompte.Filtered := False;
Tdbfcompte.IndexName:= 'compte';
Tdbfcompte.First;
Tdbfcompte.Refresh;
end;
procedure TForm3.Button7Click(Sender: TObject);
Var buttonSelected : Integer;
begin
///////////lignes de saisie à Zero
buttonSelected := MessageDlg('Supprimer les lignes de saisies ? ',mtCustom,
[mbYes,mbCancel], 0);
if buttonSelected = mrYes then
begin
Dbf1.Exclusive:= True;
Dbf1.Zap;
Dbf1.Exclusive:= False;
Dbf1.Refresh;
DBGrid1.Refresh;
calcullignes;
Tcredit.Text:='0';
Tdebit.Text:= '0';
Label2.Caption:= '';
Label2.Visible:= False;
Label7.Visible:= False;
////messagedlg('Resultat Supprime ok .',mtinformation,[mbok],0);
end;
//////////
end;
procedure TForm3.Button8Click(Sender: TObject);
begin
////////////ajouter une ligne
Edit2.SetFocus;
calcullignes;
end;
procedure TForm3.Button9Click(Sender: TObject);
begin
try
dbf1.Delete;
calcullignes;
finally
end;
end;
procedure TForm3.DataSource1DataChange(Sender: TObject; Field: TField);
begin
//////////Dbf1.Refresh;
end;
procedure TForm3.DBComboBox2Change(Sender: TObject);
begin
end;
procedure TForm3.Dbf1BeforeOpen(DataSet: TDataSet);
begin
end;
procedure TForm3.calcullignes;
Var TotalDebit : Extended;
Var TotalCredit : Extended;
Var SoldeDebit : Extended;
Var SoldeCredit : Extended;
Var NnnnLignes : Integer;
begin
////////////calculer les montant debit et credit
NnnnLignes :=0;
Dbf2.DisableControls;
Dbf2.First;
TotalDebit := 0;
TotalCredit :=0;
while not dbf2.EOF do
begin
NnnnLignes := NnnnLignes+1;
TotalDebit := TotalDebit + Dbf2.FieldByName('debit').AsFloat;
TotalCredit := TotalCredit + Dbf2.FieldByName('credit').AsFloat;
dbf2.Next;
end;
Dbf2.EnableControls;
Tcredit.Text:= FloatToStr(TotalCredit);
Tdebit.Text:= FloatToStr(TotalDebit);
if (TotalCredit = TotalDebit) AND ( (TotalDebit > 0) AND (TotalCredit > 0) ) then
begin
Tcredit.Color:=clLime;
Tdebit.Color:=clLime;
Label2.Caption := 'Validation Ok';
end else begin
Tcredit.Color:=clRed;
Tdebit.Color:=clRed;
Label2.Caption := 'Validation ImPossible';
if TotalCredit > TotalDebit then
begin
SoldeDebit := TotalCredit - TotalDebit;
Label2.Caption := 'Solde Au Debit: ' + FloatToStr(SoldeDebit);
end else begin
SoldeCredit := TotalDebit - TotalCredit;
Label2.Caption := 'Solde Au Credit: ' + FloatToStr(SoldeCredit);
end;
end;
Dbf2.Refresh;
Dbf1.Refresh;
DBGrid1.Refresh;
if (NnnnLignes>0) then
begin
Label7.Visible:= True;
Label7.Caption:= 'Nombre de Ligne : ' + IntToStr(NnnnLignes);
end;
end;
end.