unit URech;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, UKunden1, UKunden2, UArtikel1, UArtikel2, StdCtrls, UAbgabe, ComCtrls,
Grids,
DB, IBCustomDataSet, IBDatabase, frxClass, frxDBSet, UQuittung;
type
TFRech = class(TForm)
Kunde: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
LKdNr: TLabel;
LAnr: TLabel;
LName: TLabel;
LTel: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
LOrt: TLabel;
LStr: TLabel;
LDat: TLabel;
Button1: TButton;
GroupBox1: TGroupBox;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
LGHA: TLabel;
LGHQ: TLabel;
BSuch: TButton;
EMeng: TEdit;
Label7: TLabel;
StringGrid1: TStringGrid;
GroupBox2: TGroupBox;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
Label14: TLabel;
Label15: TLabel;
Label16: TLabel;
Label17: TLabel;
LRestA: TLabel;
LRestQ: TLabel;
LSum: TLabel;
LSumS: TLabel;
LSumA: TLabel;
LSumQ: TLabel;
Button2: TButton;
Button3: TButton;
DS_Posten: TIBDataSet;
IBDatabase1: TIBDatabase;
IBTransaction1: TIBTransaction;
procedure Button1Click(Sender: TObject);
procedure ArtTabelle_show;
procedure BSuchClick(Sender: TObject);
procedure EMengExit(Sender: TObject);
procedure StringGrid1Click(Sender: TObject);
procedure Gesamt;
procedure clear;
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
type
TArtikel=record
Artikelnummer,
Bezeichnung,
Tauschware_str,
Einheit:String;
Menge,
Tauschware,
Tauschmenge,
Tauschmenge_ges:integer;
EzPreis,
GesPreis,
Steuer:Currency;
end;
type
TArtikeltabelle=Array of TArtikel;
var
FRech: TFRech;
GHA, GHQ, RestGHA, RestGHQ, GesGHA, GesGHQ:Integer;
ArtT:TArtikelTabelle;
len:integer;
Sum,SumS:Currency;
function NextFreePostenID:integer;
implementation
{$R *.dfm}
procedure TFRech.ArtTabelle_show;
var i:integer;
begin
if length(ArtT)>0 then
begin
for i := 0 to Stringgrid1.RowCount - 1 do
Stringgrid1.Rows[i].Clear;
Stringgrid1.RowCount:=2;
Stringgrid1.Cells[0,0]:='Artikelnummer';
Stringgrid1.Cells[1,0]:='Bezeichnung';
Stringgrid1.Cells[2,0]:='Menge';
Stringgrid1.Cells[3,0]:='Einheit';
Stringgrid1.Cells[4,0]:='Einzelpreis';
Stringgrid1.Cells[5,0]:='Steuer';
Stringgrid1.Cells[6,0]:='Gesamtpreis';
Stringgrid1.Cells[7,0]:='Tauschware';
Stringgrid1.ColWidths[0]:=90;
Stringgrid1.ColWidths[1]:=150;
Stringgrid1.ColWidths[2]:=50;
Stringgrid1.ColWidths[3]:=70;
Stringgrid1.ColWidths[4]:=70;
Stringgrid1.ColWidths[5]:=70;
Stringgrid1.ColWidths[6]:=70;
Stringgrid1.ColWidths[7]:=90;
Stringgrid1.RowCount:=length(ArtT)+1;
for i := 0 to length(ArtT)-1 do
begin
Stringgrid1.Cells[0,i+1]:=ArtT[i].Artikelnummer;
Stringgrid1.Cells[1,i+1]:=(ArtT[i].Bezeichnung);
Stringgrid1.Cells[2,i+1]:=(inttostr(ArtT[i].Menge));
Stringgrid1.Cells[3,i+1]:=(ArtT[i].Einheit);
Stringgrid1.Cells[4,i+1]:=(FloatToStrF(ArtT[i].EzPreis,ffFixed,10,2));
Stringgrid1.Cells[5,i+1]:=(FloatToStrF(ArtT[i].Steuer,ffFixed,10,2));
Stringgrid1.Cells[6,i+1]:=(FloatToStrF(ArtT[i].GesPreis,ffFixed,10,2));
Stringgrid1.Cells[7,i+1]:=(ArtT[i].Tauschware_str);
end;
EMeng.Clear;
end;
end;
function NextFreePostenID:integer;
begin
with FRech do
begin
DS_Posten.SelectSQL.Text:='SELECT * From POSTEN Order By ID';
DS_Posten.Open;
DS_Posten.Last;
result:=DS_Posten.FindField('ID').AsInteger+1;
end;
end;
procedure TFRech.BSuchClick(Sender: TObject);
var i : integer;
begin
if FArtikel.ShowModal=mrok then
begin
len:=length(ArtT);
EMeng.SetFocus;
EMeng.Text:='1';
EMeng.SelectAll;
SetLength(ArtT,len+1);
ArtT[len].Artikelnummer:=resArt.Artikelnummer;
ArtT[len].Bezeichnung:=resArt.Bezeichnung;
ArtT[len].Einheit:=resArt.Einheit;
ArtT[len].Tauschware:=resArt.Tauschware;
ArtT[len].Tauschmenge:=-resArt.Tauschmenge;
ArtT[len].EzPreis:=resArt.VKPreisBrutto;
ArtT[len].Steuer:=resArt.VKPreisBrutto - resArt.VKPreisNetto;
end;
end;
procedure TFRech.Button1Click(Sender: TObject);
begin
if FKundenverwaltung.showmodal=mrok then
begin
LKdNr.Caption:=resKd.KdNr;
LAnr.Caption:=Anreden[resKd.Anrede];
LName.Caption:=resKd.Name1;
LTel.Caption:=resKd.Tel;
LStr.Caption:=resKd.Strasse;
LOrt.Caption:=resKd.PLZ+' '+resKd.Ort;
LDat.Caption:=DateToStr(date);
GHA:=GHLadenApfL(resKd.KdNr);
GHQ:=GHLadenQuittL(resKd.KdNr);
LGHA.Caption:=FloatToStr(GHLadenApfKG(resKd.KdNr)) +' kg/ ' + IntToStr(GHA)+ ' Liter';
LGHQ.Caption:=FloatToStr(GHLadenQuittKG(resKd.KdNr)) +' kg/ ' + IntToStr(GHQ)+ ' Liter';
end;
end;
procedure TFRech.Button2Click(Sender: TObject); // Der OK-Button
var s:string;
i,k :Integer;
begin
if (LKdNr.Caption<>'') and (GesGHA>=-GHA) and (GesGHQ>=-GHQ) then
begin
IBTransaction1.StartTransaction;
s:=NextFreeVorgNr;
with FAbgabe do
begin
DS_Vorgang.Open;
DS_Vorgang.Insert;
DS_Vorgang.FieldByName('Vorgangsnummer').AsString:=s;
DS_Vorgang.FieldByName('Datum').AsDateTime:=Date;
DS_Vorgang.FieldByName('Art').asinteger:=2;
DS_Vorgang.FieldByName('Kunde').AsString:=FRech.LKdNr.Caption;
DS_Vorgang.FieldByName('Posten').AsString:='';
DS_Vorgang.FieldByName('TauschApfelKg').AsFloat:=0;
DS_Vorgang.FieldByName('TauschApfelL').AsInteger:=GesGHA;
DS_Vorgang.FieldByName('AufkaufA').AsFloat:=0;
DS_Vorgang.FieldByName('TauschQuitteKg').AsFloat:=0;
DS_Vorgang.FieldByName('TauschQuitteL').AsInteger:=GesGHQ;
DS_Vorgang.FieldByName('AufkaufQ').AsFloat:=0;
DS_Vorgang.FieldByName('BetragNetto').AsFloat:=Sum;
DS_Vorgang.FieldByName('BetragBrutto').AsFloat:=Sum-SumS;
DS_Vorgang.Post;
end;
k:=NextFreePostenID;
DS_Posten.Open;
for i := 0 to length(ArtT) - 1 do
begin
DS_Posten.Insert;
DS_Posten.FieldValues['ID']:=k+i;
DS_Posten.FieldValues['Vorgangsnummer']:=s;
DS_Posten.FieldValues['Artikelnummer']:=ArtT[i].Artikelnummer;
DS_Posten.FieldValues['Menge']:=ArtT[i].Menge;
DS_Posten.FieldValues['BetragNetto']:=ArtT[i].GesPreis;
DS_Posten.FieldValues['BetragBrutto']:=ArtT[i].GesPreis-ArtT[i].Steuer;
DS_Posten.Post;
end;
IBTransaction1.Commit;
modalresult:=mrOk;
clear;
hide;
showrep(s);
end;
end;
procedure TFRech.Button3Click(Sender: TObject);
begin
clear;
hide;
end;
procedure TFRech.clear;
var i:integer;
begin
LKdNr.Caption:='';
LAnr.Caption:='';
LName.Caption:='';
LTel.Caption:='';
LStr.Caption:='';
LOrt.Caption:='';
LDat.Caption:='';
GHA:=0;
GHQ:=0;
LGHA.Caption:='';
LGHQ.Caption:='';
for i := 0 to length(ArtT) - 1 do
begin
ArtT[i].Artikelnummer:='';
ArtT[i].Bezeichnung:='';
ArtT[i].Tauschware_str:='';
ArtT[i].Einheit:='';
ArtT[i].Menge:=0;
ArtT[i].Tauschware:=0;
ArtT[i].Tauschmenge_ges:=0;
ArtT[i].EzPreis:=0;
ArtT[i].GesPreis:=0;
ArtT[i].Steuer:=0;
end;
SetLength(ArtT,0);
LRestA.Caption:='';
LRestQ.Caption:='';
LSum.Caption:='';
LSumS.Caption:='';
LSumA.Caption:='';
LSumQ.Caption:='';
EMeng.Clear;
for i := 0 to Stringgrid1.RowCount - 1 do
Stringgrid1.Rows[i].Clear;
Stringgrid1.RowCount:=2;
ResKd:=K2;
ResArt:=A2;
end;
procedure TFRech.EMengExit(Sender: TObject);
begin
if resArt.Artikelnummer<>'' then
begin
ArtT[len].Menge:=StrToIntDef(EMeng.Text,0);
ArtT[len].Tauschmenge_ges:=StrToIntDef(EMeng.Text,0)*ArtT[len].Tauschmenge;
ArtT[len].GesPreis:=StrToIntDef(EMeng.Text,0)*ArtT[len].EzPreis;
ArtT[len].Tauschware_str:=Tauschwaren[ArtT[len].Tauschware]+' ('+InttoStr(StrToIntDef(EMeng.Text,0)*ArtT[len].Tauschmenge)+' Liter)';
end
else
begin
//ArtT[Stringgrid1.Row-1].Menge:=StrToIntDef(EMeng.Text,0);
//ArtT[Stringgrid1.Row-1].Tauschmenge_ges:=StrToIntDef(EMeng.Text,0)*ArtT[len].Tauschmenge;
//ArtT[Stringgrid1.Row-1].GesPreis:=StrToIntDef(EMeng.Text,0)*ArtT[len].EzPreis;
//ArtT[Stringgrid1.Row-1].Tauschware_str:=Tauschwaren[ArtT[len].Tauschware]+' ('+InttoStr(StrToIntDef(EMeng.Text,0)*ArtT[len].Tauschmenge)+' Liter)';
end;
ArtTabelle_show;
resArt:=A2;
gesamt;
end;
procedure TFRech.Gesamt;
var i:integer;
begin
RestGHA:=0;
RestGHQ:=0;
GesGHA:=0;
GesGHQ:=0;
Sum:=0;
SumS:=0;
for i := 0 to length(ArtT) - 1 do
begin
if ArtT[i].Tauschware=1 then GesGHA:=GesGHA+ArtT[i].Tauschmenge_ges;
if ArtT[i].Tauschware=2 then GesGHQ:=GesGHQ+ArtT[i].Tauschmenge_ges;
Sum:=Sum+ArtT[i].GesPreis;
SumS:=SumS+ArtT[i].Steuer;
end;
RestGHA:=GHA+GesGHA;
RestGHQ:=GHQ+GesGHQ;
LRestA.Caption:=inttostr(RestGHA)+' Liter';
LRestQ.Caption:=inttostr(RestGHQ)+' Liter';
LSum.Caption:=floattostrf(Sum,ffFixed,10,2);
LSumS.Caption:=floattostrf(SumS,ffFixed,10,2);
LSumA.Caption:=inttoStr(GesGHA)+' Liter';
LSumQ.Caption:=inttoStr(GesGHQ)+' Liter';
end;
procedure TFRech.StringGrid1Click(Sender: TObject);
begin
if Stringgrid1.Row>0 then
EMeng.Text:=inttostr(ArtT[Stringgrid1.Row-1].Menge);
end;
end.