📄 c_tdzd.pas
字号:
//写入krjz.db
if FEwf<>0 then
begin
//结帐库中写入额外费
AddEwf;
//写入ewf.db
HotelData.UpdateEwfDbf(FJzbh,FJzxx.AKrxm,FEwf,FJzxx.AJzrq,FJzxx.AJzsj);
end;
end;
//帐单中增加记录
procedure TTdzdForm.AddKrzd(const AXmbh: string;AXfje: Currency);
begin
qryKrzd.Insert;
qryKrzdD_ZDBH.Value := FJzxx.AZdbh;
qryKrzdD_HH.Value := 9999;
qryKrzdD_KRBH.Value := FJzxx.AKrbh;
qryKrzdD_YJBH.Value := FJzxx.AYjbh;
qryKrzdD_ZDLB.Value := ZDLB_TD;
qryKrzdD_XMBH.Value := AXmbh;
qryKrzdD_XFJE.Value := AXfje;
qryKrzdD_XFRQ.Value := FJzxx.AJzrq;
qryKrzdD_XFSJ.Value := FJzxx.AJzsj;
qryKrzdD_JZBZ.Value := JZ_NO;
qryKrzdD_JSBZ.Value := JS_NO;
qryKrzd.Post;
end;
//修改帐单信息,额外费
procedure TTdzdForm.UpdateKrzd(const ABz: string);
var
SqlStr: string;
begin
SqlStr := 'select * from KRZD where (D_ZDBH="'+FJzxx.AZdbh+'")';
with qryKrzd do
begin
if Active then Active := False;
SQL.Clear;
SQL.Add(SqlStr);
try
Open;
except
On E:Exception do
begin
ShowWarning('打开数据库出错,请检查网络连接是否正常!'
+#13#10
+'错误信息:'
+E.Message);
raise;
end;
end;
end;
//如果额外费不等于零
if (FEwf<>0) then
AddKrzd(XMBH_EWF,FEwf);
//修改帐单总单的金额
if qryKrzd.Locate('D_HH',0,[]) then
begin
qryKrzd.Edit;
qryKrzdD_XFJE.Value := qryKrzdD_XFJE.Value + FEwf;
qryKrzd.Post;
end;
//修改帐单的信息
qryKrzd.First;
while not qryKrzd.Eof do
begin
qryKrzd.Edit;
qryKrzdD_JSBZ.Value := JS_YES;
qryKrzdD_JZRQ.Value := FJzxx.AJzrq;
qryKrzdD_JZSJ.Value := FJzxx.AJzsj;
qryKrzdD_JZBH.Value := FJzbh;
qryKrzdD_BZ.Value := qryKrzdD_BZ.Value+' '+ABz;
qryKrzdD_CZYXM.Value := CZY.CzyXm;
qryKrzdD_JZYXM.Value := CZY.CzyXm;
qryKrzdD_BMBH.Value := FBmbh;
//edit by ls. 20020824
if qryKrzdD_JZBZ.Value = JZ_NO then
qryKrzdD_JZBZ.Value := JZ_YES;
qryKrzdD_JSBZ.Value := JS_YES;
qryKrzd.Post;
qryKrzd.Next;
end;
end;
//取消
procedure TTdzdForm.btnCancClick(Sender: TObject);
begin
inherited;
tblKrjz.CancelUpdates;
end;
//结帐库中加入总单
procedure TTdzdForm.UpdateKrjz;
begin
IsAppend := True;
FHh := 0;
tblKrjz.Insert;
//edit by ls.20021020
tblKrjzD_XFJE.Value := FSjje+FYhje+FYjje;
tblKrjzD_YJJE.Value := 0-FYjje;
tblKrjzD_YHJE.Value := FYhje;
tblKrjz.Post;
IsAppend := False;
end;
//修改客人信息的离店日期
procedure TTdzdForm.UpdateKrxx;
begin
HotelData.UpdateKrxxJz(FJzxx.AKrbh,FJzxx.AJzrq,FJzxx.AJzsj);
end;
//备份客人信息
procedure TTdzdForm.BakKrxx;
begin
HotelData.BakData('select * from KRXX where D_KRBH="'+FJzxx.AKrbh+'"','KRXXDA');
end;
//清空客人信息
procedure TTdzdForm.EmptyKrxx;
begin
//HotelData.EmptyData('select * from KRXX where D_KRBH="'+FJzxx.AKrbh+'"');
HotelData.EmptyData('delete from KRXX where D_KRBH="'+FJzxx.AKrbh+'"');
end;
//备份客人帐单
procedure TTdzdForm.BakKrzd;
begin
HotelData.BakData('select * from KRZD where D_ZDBH="'+FJzxx.AZdbh+'"','KRZDDA');
end;
//清空客人押金
procedure TTdzdForm.EmptyKryj;
begin
//HotelData.EmptyData('select * from KRYJ where D_YJBH="'+FJzxx.AYjbh+'"');
HotelData.EmptyData('delete from KRYJ where D_YJBH="'+FJzxx.AYjbh+'"');
end;
{
procedure TTdzdForm.EmptyKrzd;
begin
HotelData.EmptyData('select * from KRZD where D_ZDBH="'+FJzxx.AZdbh+'"');
end;
}
procedure TTdZdForm.AddYsk(const AKhbh,AZdbh,AXmbh: string;AHh: Integer;AXfje: Currency);
begin
try
try
tblYsk.Open;
except
On E:Exception do
begin
ShowWarning('打开数据库出错,请检查网络连接是否正常!'
+#13#10
+'错误信息:'
+E.Message);
raise;
end;
end;
tblYsk.Insert;
tblYsk.FieldByName('D_KHBH').AsString := AKhbh;
tblYsk.FieldByName('D_ZDBH').AsString := AZdbh;
tblYsk.FieldByName('D_HH').AsInteger := AHh;
tblYsk.FieldByName('D_XMBH').AsString := AXmbh;
//tblYsk.FieldByName('D_XFDJ').AsCurrency := qryKrzdD_XFDJ.Value;
//tblYsk.FieldByName('D_XFSL').AsFloat := qryKrzdD_XFSL.Value;
tblYsk.FieldByName('D_XFJE').AsCurrency := AXfje;
tblYsk.FieldByName('D_XFRQ').AsDateTime := FJzxx.AJzrq;
tblYsk.FieldByName('D_XFSJ').AsDateTime := FJzxx.AJzsj;
tblYsk.FieldByName('D_CZYXM').AsString := CZY.CzyXm;
//tblYsk.FieldByName('D_BZ').AsString := qryKrzdD_BZ.Value;
tblYsk.Post;
finally
tblYsk.Close;
end;
end;
//更新应收款
procedure TTdzdForm.UpdateYsk;
begin
try
try
tblYsk.Open;
except
On E:Exception do
begin
ShowWarning('打开数据库出错,请检查网络连接是否正常!'
+#13#10
+'错误信息:'
+E.Message);
raise;
end;
end;
//添加消费明细
qryKrzd.First;
while not qryKrzd.Eof do
begin
if qryKrzdD_HH.Value <> 0 then
begin
tblYsk.Insert;
tblYsk.FieldByName('D_KHBH').AsString := FJzxx.AKhbh;
tblYsk.FieldByName('D_ZDBH').AsString := qryKrzdD_ZDBH.Value;
tblYsk.FieldByName('D_HH').AsInteger := qryKrzdD_HH.Value;
tblYsk.FieldByName('D_XMBH').AsString := qryKrzdD_XMBH.Value;
tblYsk.FieldByName('D_XFDJ').AsCurrency := qryKrzdD_XFDJ.Value;
tblYsk.FieldByName('D_XFSL').AsFloat := qryKrzdD_XFSL.Value;
tblYsk.FieldByName('D_XFJE').AsCurrency := qryKrzdD_XFJE.Value;
tblYsk.FieldByName('D_XFRQ').AsDateTime := qryKrzdD_XFRQ.Value;
tblYsk.FieldByName('D_XFSJ').AsDateTime := qryKrzdD_XFSJ.Value;
tblYsk.FieldByName('D_CZYXM').AsString := CZY.CzyXm;
tblYsk.FieldByName('D_BZ').AsString := qryKrzdD_BZ.Value;
tblYsk.Post;
end;
qryKrzd.Next;
end;
finally
tblYsk.Close;
end;
end;
//结帐库中添加预交款 贵宾卡
procedure TTdZdForm.AddYjk(AGbkJzxx: TGbkJzxx);
var
AYe,ACe: Currency;
AXmbh,AZdbh: string;
AHh: Integer;
begin
IsAppend := True;
if (AGbkJzxx.AJzfs=JZFS_RMB)
or(AGbkJzxx.AJzfs=JZFS_XYK)
or(AGbkJzxx.AJzfs=JZFS_ZP ) then
begin
//贵宾卡结帐,剩余的金额
AYe := FSjje - AGbkJzxx.AKcje;
tblKrjz.First;
while not tblKrjz.Eof do
begin
if AYe = 0 then Break;
//如果不是预交款
if tblKrjzD_XMBH.Value <> XMBH_YJK then
begin
//如果余额大于当前消费金额,修改当前结帐方式
if AYe >= tblKrjzD_XFJE.Value then
begin
tblKrjz.Edit;
tblKrjzD_JZFS.Value := AGbkJzxx.AJzfs;
tblKrjzD_XYKBH.Value:= AGbkJzxx.AXykbh;
AYe := AYe - tblKrjzD_XFJE.Value;
tblKrjz.Post;
end
else //如果余额小于当前消费金额,修改当前消费金额为余额,增加差额
begin
ACe := tblKrjzD_XFJE.Value - AYe;
AXmbh := tblKrjzD_XMBH.Value;
tblKrjz.Edit;
tblKrjzD_XFJE.Value := AYe;
tblKrjzD_JZFS.Value := AGbkJzxx.AJzfs;
tblKrjzD_XYKBH.Value:= AGbkJzxx.AXykbh;
AYe := AYe - tblKrjzD_XFJE.Value;
tblKrjz.Post;
tblKrjz.Insert;
tblKrjzD_XMBH.Value := AXmbh;
tblKrjzD_XFJE.Value := ACe;
tblKrjzD_YJJE.Value := 0;
tblKrjzD_YHJE.Value := 0;
tblKrjz.Post;
end;
end;
tblKrjz.Next;
end;
end;
//如果是记账
if (AGbkJzxx.AJzfs = JZFS_JZ) then
begin
//贵宾卡结帐,剩余的金额
AZdbh := HotelData.GetBh('D_ZDBH',PREV_ZDBH);
AHh := 0;
AYe := FSjje - AGbkJzxx.AKcje;
tblKrjz.First;
while not tblKrjz.Eof do
begin
if AYe = 0 then Break;
//如果不是预交款
if tblKrjzD_XMBH.Value <> XMBH_YJK then
begin
//如果余额大于当前消费金额,当前消费金额记账
if AYe >= tblKrjzD_XFJE.Value then
begin
AYe := AYe - tblKrjzD_XFJE.Value;
Inc(AHh);
AddYsk(AGbkJzxx.AKhbh,AZdbh,tblKrjzD_XMBH.Value,AHh,tblKrjzD_XFJE.Value);
tblKrjz.Delete;
end
else //如果余额小于当前消费金额,修改当前消费金额为差额,余额记账
begin
ACe := tblKrjzD_XFJE.Value - AYe;
AXmbh := tblKrjzD_XMBH.Value;
Inc(AHh);
AddYsk(AGbkJzxx.AKhbh,AZdbh,tblKrjzD_XMBH.Value,AHh,AYe);
tblKrjz.Edit;
tblKrjzD_XFJE.Value := ACe;
AYe := AYe - tblKrjzD_XFJE.Value;
tblKrjz.Post;
tblKrjz.Next;
end;
end;
end;
end;
tblKrjz.Insert;
tblKrjzD_XMBH.Value := XMBH_YJK;
tblKrjzD_XFJE.Value := 0-AGbkJzxx.AKcje;
tblKrjzD_YJJE.Value := 0;
tblKrjzD_YHJE.Value := 0;
tblKrjz.Post;
IsAppend := False;
end;
//确认结帐
procedure TTdzdForm.btnOKClick(Sender: TObject);
var
AGbkJzxx: TGbkJzxx;
ASjje : Currency;
begin
inherited;
ASjje := StrToCurr(edtSjje.Text);
if Abs(ASjje-FJsje)<=10 then FSjje := ASjje
else
begin
ShowWarning('实结金额差额必须小于10元!');
edtSjje.SetFocus;
Exit;
end;
if not Confirm('你确认该客人的消费结帐吗?') then
Exit;
try
tblKrjz.DisableControls;
tblKrjzD_YHJE.OnValidate := nil;// 20020627 edit by ls.
//事务启动
HotelData.DatabaseUser.StartTransaction;
try
//贵宾卡结帐
//人民币、支票、信用卡结帐
if (FJzxx.AJzfs=JZFS_RMB)
or(FJzxx.AJzfs=JZFS_ZP)
or(FJzxx.AJzfs=JZFS_XYK)
or(FJzxx.AJzfs=JZFS_GBK) then
begin
if FJzxx.AJzfs = JZFS_GBK then
begin
AGbkJzxx := CardXf(FSjje,True);
if AGbkJzxx.AKcje = 0 then
Exit;
AddYjk(AGbkJzxx);
end;
UpdateEwf;
UpdateKrzd(JZBZ_TD);
UpdateKrjz;
tblKrjz.ApplyUpdates;
qryKrzd.ApplyUpdates;
UpdateKrxx;
BakKrxx;
EmptyKrxx;
EmptyKryj;
BakKrzd;
//EmptyKrzd;
//tblKrjz.CancelUpdates;
end;
//客户记账
if (FJzxx.AJzfs=JZFS_JZ) then
begin
UpdateEwf;
UpdateKrzd(JZBZ_TD+ZDBZ_JZ+FJzxx.AKhbh);
UpdateKrjz;
UpdateYsk;
qryKrzd.ApplyUpdates;
UpdateKrxx;
BakKrxx;
EmptyKrxx;
EmptyKryj;
BakKrzd;
//EmptyKrzd;
tblKrjz.CancelUpdates;
end;
//事务提交
HotelData.DatabaseUser.Commit;
{if Confirm('是否打印帐单?') then
btnPrintClick(nil);}
except
//事务回滚
HotelData.DatabaseUser.Rollback;
raise;
end;
tblKrjz.CancelUpdates;
tblKrjz.CommitUpdates;
finally
tblKrjz.EnableControls;
end;
Close;
end;
//判断实结金额
procedure TTdzdForm.edtSjjeExit(Sender: TObject);
var
ASjje: Currency;
begin
inherited;
ASjje := StrToCurr(edtSjje.Text);
if Abs(ASjje-FJsje)<=10 then FSjje := ASjje
else
begin
ShowWarning('实结金额差额必须小于10元!');
edtSjje.SetFocus;
end;
end;
procedure TTdzdForm.btnPrintClick(Sender: TObject);
var
APrintStru: TPrintStru;
begin
APrintStru.ATitle := '帐单(结帐方式:'+lblJzfs.Caption+')';
APrintStru.ASub := '消费金额:'+lblXfje.Caption+' '
+'已结金额:'+lblYjje.Caption+' '
+'押金金额:'+lblYfje.Caption+' '
+'结算金额:'+lblJsje.Caption+' '+#13#10
+'退付金额:'+lblTfje.Caption+' '
+'优惠金额:'+lblYhje.Caption+' '
+'实结金额:'+edtSjje.Text+'元';
APrintStru.ADataSet := tblKrjz;
PrintLb(APrintStru,dbgZd);
end;
procedure TTdzdForm.btnFjmxClick(Sender: TObject);
begin
inherited;
Fjmx(FJzxx.AZdbh);
end;
procedure TTdzdForm.btnZdmxClick(Sender: TObject);
begin
inherited;
Zdmx(FJzxx.AZdbh);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -