📄 c_yskzd.pas
字号:
{立方酒店管理系统 v1.0
Copyright by CubicSoft
program by ls.
Date:20020301-20020601
20020627 加入注释
}
unit C_Yskzd;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, C_StdJd, DosMove, StdCtrls, Buttons, ExtCtrls, C_Define, Mask,
DB, DBTables, Grids, DBGrids, ComCtrls;
type
TYskzdForm = class(TStdJdForm)
Label1: TLabel;
Label2: TLabel;
edtJzrq: TMaskEdit;
Label3: TLabel;
edtJzsj: TMaskEdit;
radJzlb: TRadioGroup;
qryYsk: TQuery;
tblYskjzls: TTable;
dsYskjzls: TDataSource;
DBGrid1: TDBGrid;
tblYskjzlsD_XFXM: TStringField;
Label4: TLabel;
lblXfje: TLabel;
Label5: TLabel;
lblJsje: TLabel;
Label6: TLabel;
lblYjje: TLabel;
Label7: TLabel;
lblQzje: TLabel;
Label9: TLabel;
lblYjkc: TLabel;
Label11: TLabel;
lblYhje: TLabel;
Label8: TLabel;
edtSjje: TEdit;
tblYskjzlsD_JSJE: TCurrencyField;
tblYskjzlsD_YE: TCurrencyField;
dtpB: TDateTimePicker;
dtpE: TDateTimePicker;
btnSele: TBitBtn;
Label12: TLabel;
tblKrjz: TTable;
tblYsk: TTable;
tblYskjz: TTable;
tblKrzd: TTable;
btnPrint: TBitBtn;
Label13: TLabel;
CheckBox1: TCheckBox;
radJzfs: TRadioGroup;
cmbJz: TComboBox;
tblYskjzlsD_KHBH: TStringField;
tblYskjzlsD_ZDBH: TStringField;
tblYskjzlsD_HH: TIntegerField;
tblYskjzlsD_XMBH: TStringField;
tblYskjzlsD_XFJE: TFloatField;
tblYskjzlsD_YJJE: TFloatField;
tblYskjzlsD_YHJE: TFloatField;
tblYskjzlsD_JZJE: TFloatField;
tblYskjzlsD_XFRQ: TDateTimeField;
tblYskjzlsD_XFSJ: TDateTimeField;
tblYskjzlsD_JZBZ: TStringField;
edtKhmc: TEdit;
btnKhbh: TSpeedButton;
Label10: TLabel;
procedure radJzfsClick(Sender: TObject);
procedure edtJzrqExit(Sender: TObject);
procedure edtJzsjExit(Sender: TObject);
procedure btnOKClick(Sender: TObject);
procedure radJzlbClick(Sender: TObject);
procedure tblYskjzlsCalcFields(DataSet: TDataSet);
procedure DBGrid1DblClick(Sender: TObject);
procedure tblYskjzlsBeforeEdit(DataSet: TDataSet);
procedure tblYskjzlsBeforeInsert(DataSet: TDataSet);
procedure tblYskjzlsBeforeDelete(DataSet: TDataSet);
procedure tblYskjzlsAfterPost(DataSet: TDataSet);
procedure tblYskjzlsD_YHJEValidate(Sender: TField);
procedure tblYskjzlsD_JZJEValidate(Sender: TField);
procedure CheckBox1Click(Sender: TObject);
procedure btnSeleClick(Sender: TObject);
procedure edtSjjeExit(Sender: TObject);
procedure btnPrintClick(Sender: TObject);
procedure btnKhbhClick(Sender: TObject);
procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
procedure DBGrid1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
{ Private declarations }
FBmbh: string;
IsEdit: Boolean;
FJzbh: string;
FKhbh: string;
FJzlb: Integer;
FJzrq: TDateTime;
FJzsj: TDateTime;
FJzfs: string;
FXykbh: string;
FJsje: Currency;
FYhje: Currency;
FYjkc: Currency;
FBfjz: Currency;
FSjje: Currency;
FQzje: Currency;
FXfje: Currency;
FYjje: Currency;
FXfje1: Currency;
FYjje1: Currency;
FYhje1: Currency;
function IsValid: Boolean;
procedure ShowJzxx;
procedure ShowJsxx;
procedure ShowZd;
procedure ShowBfjz;
procedure ShowQbjz;
function SumXfje: Currency;
function SumYjje: Currency;
procedure SumYhje;
procedure SelectAll(AItem: string);
procedure SelectDate(ABDate,AEDate: TDateTime);
procedure UpdateKrjz;
procedure UpdateYskmx;
procedure UpdateYskzz;
procedure UpdateYskjz;
procedure UpdateEwf;
procedure AddKrzd(const AZdbh: string;AHh: Integer;AEwf: Currency);
procedure AddKrjz(AHh: Integer;AXmbh: string;AXfje,AYjje,AYhje: Currency);
procedure AddYskjz(AHh: Integer;AXmbh,ABz: string;AXfje,AYjje,AYhje: Currency);
public
{ Public declarations }
end;
var
YskzdForm: TYskzdForm;
procedure Yskzd;
implementation
uses C_HotelData, C_Sysprint, C_CardXf, C_Wait, C_KhdaSel;
{$R *.dfm}
//应收款结帐
procedure Yskzd;
begin
YskzdForm := TYskzdForm.Create(Application);
try
with YskzdForm do
begin
IsEdit := False;
//获取部门编号
FBmbh := HotelData.FindBh('YGDA','D_BMBH','D_YGBH',CZY.CzyBh);
dtpB.Date := Date;
dtpE.Date := Date;
//显示结帐信息
ShowJzxx;
ShowModal;
end;
finally
YskzdForm.Free;
end;
end;
//累计优惠金额
procedure TYskzdForm.SumYhje;
var
PrevRecord: TBookMark;
begin
PrevRecord := tblYskjzls.GetBookmark;
try
tblYskjzls.DisableControls;
FYhje := 0;
FYjkc := 0;
FBfjz := 0;
tblYskjzls.First;
while not tblYskjzls.Eof do
begin
if tblYskjzlsD_XMBH.Value <> XMBH_YJK then
begin
FYhje := FYhje + tblYskjzlsD_YHJE.Value;
FBfjz := FBfjz + tblYskjzlsD_JZJE.Value;
end
else
begin
FYjkc := FYjkc + tblYskjzlsD_JZJE.Value;
end;
tblYskjzls.Next;
end;
finally
tblYskjzls.EnableControls;
if PrevRecord<>nil then
begin
tblYskjzls.GotoBookmark(PrevRecord);
tblYskjzls.FreeBookmark(PrevRecord);
end;
ShowJsxx;
end;
end;
//获取消费金额
function TYskzdForm.SumXfje: Currency;
var
SqlStr: string;
begin
SqlStr := 'select sum(D_XFJE) from YSK where '
+'(D_KHBH="'+FKhbh+'")and(D_HH<>0)and(D_XMBH<>"'
+XMBH_YJK+'")';
Result := HotelData.SumJe(SqlStr);
end;
//获取已结金额
function TYskzdForm.SumYjje: Currency;
var
SqlStr: string;
begin
SqlStr := 'select sum(D_XFJE) from YSK where '
+'(D_KHBH="'+FKhbh+'")and(D_XMBH="'+XMBH_YJK+'")';
Result := 0-HotelData.SumJe(SqlStr);
end;
//显示结算信息
procedure TYskzdForm.ShowJsxx;
begin
//结算金额
FJsje := FBfjz-FYhje-FYjkc;
//实结金额
if FJsje>=0 then
FSjje := Trunc(FJsje+0.99)
else
FSjje := Trunc(FJsje-0.99);
//欠账金额
FQzje := FXfje-FYjje;
lblYjkc.Caption := FormatFloat('#.##',FYjkc);
lblXfje.Caption := FormatFloat('#.##',FXfje);
lblYjje.Caption := FormatFloat('#.##',FYjje);
lblYhje.Caption := FormatFloat('#.##',FYhje);
lblJsje.Caption := FormatFloat('#.##',FJsje);
lblQzje.Caption := FormatFloat('#.##',FQzje);
edtSjje.Text := FormatFloat('#.##',FSjje);
end;
//显示结帐信息
procedure TYskzdForm.ShowJzxx;
begin
//初始化
edtJzrq.Text := FormatDateTime('yyyy-mm-dd',Date);
edtJzsj.Text := FormatDateTime('hh:mm',Time);
FJzrq := Date;
FJzsj := Time;
FJzfs := JZFS_RMB;
//结帐类别 1-明细结帐 0-总帐结帐
FJzlb := 1;
end;
//结帐方式选择
procedure TYskzdForm.radJzfsClick(Sender: TObject);
begin
inherited;
cmbJz.Items.Clear;
cmbJz.Style := csDropDownList;
case radJzfs.ItemIndex of
0: FJzfs := JZFS_RMB;
1:
begin
HotelData.ListMc(cmbJz,'XYK','D_XYKMC');
FJzfs := JZFS_XYK;
end;
2: FJzfs := JZFS_ZP;
end;
end;
procedure TYskzdForm.edtJzrqExit(Sender: TObject);
begin
inherited;
FJzrq := StrToDate(edtJzrq.Text);
end;
procedure TYskzdForm.edtJzsjExit(Sender: TObject);
begin
inherited;
FJzsj := StrToTime(edtJzsj.Text);
end;
//有效性检查
function TYskzdForm.IsValid: Boolean;
begin
Result := False;
case radJzfs.ItemIndex of
1:
begin
FXykbh := HotelData.FindBh('XYK','D_XYKBH','D_XYKMC',cmbJz.Text);
if FXykbh<>'' then
Result := True
else
ShowInfo('请选择信用卡!');
end;
else
Result := True;
end;
end;
//添加结帐库记录
procedure TYskzdForm.AddKrjz(AHh: Integer;AXmbh: string;AXfje,AYjje,AYhje: Currency);
begin
tblKrjz.Insert;
tblKrjz.FieldByName('D_JZBH').AsString := FJzbh;
tblKrjz.FieldByName('D_HH').AsInteger := AHh;
tblKrjz.FieldByName('D_XMBH').AsString := AXmbh;
tblKrjz.FieldByName('D_XFJE').AsCurrency := AXfje;
tblKrjz.FieldByName('D_YJJE').AsCurrency := AYjje;
tblKrjz.FieldByName('D_YHJE').AsCurrency := AYhje;
tblKrjz.FieldByName('D_JZFS').AsString := FJzfs;
tblKrjz.FieldByName('D_JZLX').AsString := JZLX_YSK;
tblKrjz.FieldByName('D_XYKBH').AsString := FXykbh;
tblKrjz.FieldByName('D_KHBH').AsString := FKhbh;
tblKrjz.FieldByName('D_JZRQ').AsDateTime := FJzrq;
tblKrjz.FieldByName('D_JZSJ').AsDateTime := FJzsj;
tblKrjz.FieldByName('D_CZYXM').AsString := CZY.CzyXm;
tblKrjz.FieldByName('D_BMBH').AsString := FBmbh;
tblKrjz.FieldByName('D_BZ').AsString := JZBZ_YSK+' '+FKhbh;
tblKrjz.Post;
end;
//添加到应收款结帐明细库中
procedure TYskzdForm.AddYskjz(AHh: Integer;AXmbh,ABz: string;AXfje,AYjje,AYhje: Currency);
begin
tblYskjz.Insert;
tblYskjz.FieldByName('D_JZBH').AsString := FJzbh;
tblYskjz.FieldByName('D_HH').AsInteger := AHh;
tblYskjz.FieldByName('D_XMBH').AsString := AXmbh;
tblYskjz.FieldByName('D_XFJE').AsCurrency := AXfje;
tblYskjz.FieldByName('D_YJJE').AsCurrency := AYjje;
tblYskjz.FieldByName('D_YHJE').AsCurrency := AYhje;
tblYskjz.FieldByName('D_JZFS').AsString := FJzfs;
tblYskjz.FieldByName('D_XYKBH').AsString := FXykbh;
tblYskjz.FieldByName('D_KHBH').AsString := FKhbh;
tblYskjz.FieldByName('D_JZRQ').AsDateTime := FJzrq;
tblYskjz.FieldByName('D_JZSJ').AsDateTime := FJzsj;
tblYskjz.FieldByName('D_CZYXM').AsString := CZY.CzyXm;
tblYskjz.FieldByName('D_BZ').AsString := ABz;
tblYskjz.Post;
end;
//更新客人结帐库
procedure TYskzdForm.UpdateKrjz;
var
AHh : Integer;
AXmbh : string;
AXfje,AYjje,AYhje: Currency;
begin
try
tblYskjzls.DisableControls;
AHh := 0;
FXfje1 := 0;FYjje1 := 0;FYhje1 := 0;
try
tblKrjz.Open;
except
On E:Exception do
begin
ShowWarning('打开数据库出错,请检查网络连接是否正常!'
+#13#10
+'错误信息:'
+E.Message);
raise;
end;
end;
tblYskjzls.First;
while not tblYskjzls.Eof do
begin
//如果结帐,并且结帐金额大于零
//if (tblYskjzlsD_JZBZ.Value='T')and(tblYskjzlsD_JZJE.Value>0) then
if (tblYskjzlsD_JZBZ.Value='T')and(tblYskjzlsD_JZJE.Value<>0) then
begin
//增加行号
Inc(AHh);
//获取消费金额 如果是预交款则为负
if tblYskjzlsD_XMBH.Value<>XMBH_YJK then
AXfje := tblYskjzlsD_JZJE.Value
else
AXfje := 0-tblYskjzlsD_JZJE.Value;
AYjje := tblYskjzlsD_YJJE.Value;
AYhje := tblYskjzlsD_YHJE.Value;
AXmbh := tblYskjzlsD_XMBH.Value;
//加入到结帐库中
AddKrjz(AHh,AXmbh,AXfje,AYjje,AYhje);
//累计求和
FXfje1 := FXfje1 + AXfje;
FYjje1 := FYjje1 + AYjje;
FYhje1 := FYhje1 + AYhje;
end;
tblYskjzls.Next;
end;
//增加结帐总单
AHh := 0;
AddKrjz(AHh,'0',FSjje+FYhje,FYjje1,FYhje1);
finally
tblKrjz.Close;
tblYskjzls.EnableControls;
end;
end;
//总帐结帐
procedure TYskzdForm.UpdateYskzz;
begin
try
tblYskjzls.DisableControls;
//先清空应收款
//HotelData.EmptyData('select * from YSK where D_KHBH="'+FKhbh+'"');
HotelData.EmptyData('delete from YSK where D_KHBH="'+FKhbh+'"');
try
tblYsk.Open;
except
On E:Exception do
begin
ShowWarning('打开数据库出错,请检查网络连接是否正常!'
+#13#10
+'错误信息:'
+E.Message);
raise;
end;
end;
//从临时库中写入余额
tblYskjzls.First;
while not tblYskjzls.Eof do
begin
//如果还有余额
if tblYskjzlsD_YE.Value <>0 then
begin
tblYsk.Insert;
tblYsk.FieldByName('D_KHBH').AsString := FKhbh;
tblYsk.FieldByName('D_ZDBH').AsString := '0';
tblYsk.FieldByName('D_HH').AsInteger := tblYskjzlsD_HH.Value;
tblYsk.FieldByName('D_XMBH').AsString := tblYskjzlsD_XMBH.Value;
tblYsk.FieldByName('D_XFJE').AsCurrency:= tblYskjzlsD_YE.Value;
tblYsk.FieldByName('D_XFRQ').AsDateTime := FJzrq;
tblYsk.FieldByName('D_XFSJ').AsDateTime := FJzsj;
tblYsk.FieldByName('D_CZYXM').AsString := CZY.CzyXm;
tblYsk.Post;
end;
tblYskjzls.Next;
end;
finally
tblYskjzls.EnableControls;
tblYsk.Close;
end;
end;
//明细结帐
procedure TYskzdForm.UpdateYskmx;
begin
try
tblYskjzls.DisableControls;
try
tblYsk.Open;
except
On E:Exception do
begin
ShowWarning('打开数据库出错,请检查网络连接是否正常!'
+#13#10
+'错误信息:'
+E.Message);
raise;
end;
end;
//从临时库中写入余额
tblYskjzls.First;
while not tblYskjzls.Eof do
begin
//如果结帐,并且结帐金额大于零
//if (tblYskjzlsD_JZBZ.Value='T')and(tblYskjzlsD_JZJE.Value>0) then
if (tblYskjzlsD_JZBZ.Value='T')and(tblYskjzlsD_JZJE.Value<>0) then
begin
//找到该记录
if tblYsk.FindKey([tblYskjzlsD_KHBH.Value,tblYskjzlsD_ZDBH.Value,tblYskjzlsD_HH.Value]) then
begin
//如果余额为零,则删除
if tblYskjzlsD_YE.Value=0 then tblYsk.Delete
else //否则,修改为余额
begin
tblYsk.Edit;
tblYsk.FieldByName('D_XFJE').AsCurrency := tblYskjzlsD_YE.Value;
tblYsk.Post;
end;
end;
end;
tblYskjzls.Next;
end;
finally
tblYskjzls.EnableControls;
tblYsk.Close;
end;
end;
//更新应收款结帐明细
procedure TYskzdForm.UpdateYskjz;
var
AHh : Integer;
AXmbh,ABz : string;
AXfje,AYjje,AYhje: Currency;
begin
try
tblYskjzls.DisableControls;
try
tblYskjz.Open;
except
On E:Exception do
begin
ShowWarning('打开数据库出错,请检查网络连接是否正常!'
+#13#10
+'错误信息:'
+E.Message);
raise;
end;
end;
tblYskjzls.First;
AHh := 1;
//添加记录
while not tblYskjzls.Eof do
begin
//如果结帐,并且结帐金额大于零
//if (tblYskjzlsD_JZBZ.Value='T')and(tblYskjzlsD_JZJE.Value>0) then
if (tblYskjzlsD_JZBZ.Value='T')and(tblYskjzlsD_JZJE.Value<>0) then
begin
//判断预交款
if tblYskjzlsD_XMBH.Value<>XMBH_YJK then
AXfje := tblYskjzlsD_JZJE.Value
else
AXfje := 0-tblYskjzlsD_JZJE.Value;
AYjje := tblYskjzlsD_YJJE.Value;
AYhje := tblYskjzlsD_YHJE.Value;
AXmbh := tblYskjzlsD_XMBH.Value;
ABz := FormatDateTime('yyyy-mm-dd',tblYskjzlsD_XFRQ.Value);
//添加记录
AddYskjz(AHh,AXmbh,ABz,AXfje,AYjje,AYhje);
end;
tblYskjzls.Next;
Inc(AHh);
end;
finally
tblYskjz.Close;
tblYskjzls.EnableControls;
end;
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -