📄 c_zd.pas
字号:
+'错误信息:'
+E.Message);
raise;
end;
end;
//获得行号
AHh := FGzxx.AZdhh;
try
tblKrjz.DisableControls;
//添加消费明细
tblKrjz.First;
while not tblKrjz.Eof do
begin
qryGz.Insert;
qryGz.FieldByName('D_ZDBH').AsString := FGzxx.AZdbh;
qryGz.FieldByName('D_HH').AsInteger := AHh;
qryGz.FieldByName('D_ZDLB').AsString := FGzxx.AZdlb;
qryGz.FieldByName('D_KRBH').AsString := FGzxx.AKrbh;
qryGz.FieldByName('D_YJBH').AsString := FGzxx.AYjbh;
qryGz.FieldByName('D_XMBH').AsString := tblKrjzD_XMBH.Value;
qryGz.FieldByName('D_XFJE').AsCurrency := tblKrjzD_XFJE.Value;
qryGz.FieldByName('D_XFRQ').AsDateTime := FJzxx.AJzrq;
qryGz.FieldByName('D_XFSJ').AsDateTime := FJzxx.AJzsj;
qryGz.FieldByName('D_JZBZ').AsString := JZ_NO;
qryGz.FieldByName('D_JSBZ').AsString := JS_NO;
qryGz.FieldByName('D_BZ').AsString := ZDBZ_GZ+FJzfhs;
qryGz.Post;
Inc(AHh);
tblKrjz.Next;
end;
//修改总单
if qryGz.Locate('D_HH',0,[]) then
begin
qryGz.Edit;
qryGz.FieldByName('D_XFJE').AsCurrency :=
qryGz.FieldByName('D_XFJE').AsCurrency + FXfje;
qryGz.Post;
end;
finally
qryGz.Close;
tblKrjz.EnableControls;
end;
end;
//更新应收款
procedure TZdForm.UpdateYsk;
var
i: Integer;
SqlStr : string;
begin
try
try
tblYsk.Open;
except
On E:Exception do
begin
ShowWarning('打开数据库出错,请检查网络连接是否正常!'
+#13#10
+'错误信息:'
+E.Message);
raise;
end;
end;
//edit by ls.2002.12.15 挂帐按项目分类
SqlStr := '';
for I:= 0 to FItemNo do
begin
if I>0 then SqlStr := SqlStr + 'or';
SqlStr := SqlStr + '(D_ZDBH="'+FKfxx[i].AZdbh+'")';
end;
SqlStr := 'select D_XMBH,sum(D_XFJE) from KRZD where (D_HH<>0) and ('+SqlStr+ ') group by D_XMBH';
//过滤
with qryYsk do
begin
Close;
SQL.Clear;
SQL.Add(SqlStr);
try
Open;
except
On E:Exception do
begin
ShowWarning('打开数据库出错,请检查网络连接是否正常!'
+#13#10
+'错误信息:'
+E.Message);
raise;
end;
end;
end;
qryYsk.First;
i := 1;
while not qryYsk.Eof do
begin
tblYsk.Insert;
tblYsk.FieldByName('D_KHBH').AsString := FJzxx.AKhbh;
tblYsk.FieldByName('D_ZDBH').AsString := HotelData.GetBh('','');//qryKrzdD_ZDBH.Value;
tblYsk.FieldByName('D_HH').AsInteger := i;//qryKrzdD_HH.Value;
tblYsk.FieldByName('D_XMBH').AsString := qryYsk.FieldByName('D_XMBH').AsString;//qryKrzdD_XMBH.Value;
tblYsk.FieldByName('D_XFDJ').AsCurrency := 0;//qryKrzdD_XFDJ.Value;
tblYsk.FieldByName('D_XFSL').AsFloat := 0;//qryKrzdD_XFSL.Value;
tblYsk.FieldByName('D_XFJE').AsCurrency := qryYsk.FieldByName('SUM').AsCurrency;//qryKrzdD_XFJE.Value;
tblYsk.FieldByName('D_XFRQ').AsDateTime := Date;//qryKrzdD_XFRQ.Value;
tblYsk.FieldByName('D_XFSJ').AsDateTime := Time;//qryKrzdD_XFSJ.Value;
tblYsk.FieldByName('D_CZYXM').AsString := CZY.CzyXm;
tblYsk.FieldByName('D_BZ').AsString := ZDBZ_JZ+FJzfhs;//qryKrzdD_BZ.Value;
tblYsk.Post;
{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 := Date;//qryKrzdD_XFRQ.Value;
tblYsk.FieldByName('D_XFSJ').AsDateTime := Time;//qryKrzdD_XFSJ.Value;
tblYsk.FieldByName('D_CZYXM').AsString := CZY.CzyXm;
tblYsk.FieldByName('D_BZ').AsString := qryKrzdD_BZ.Value;
tblYsk.Post;
end;}
qryYsk.Next;
Inc(i);
end;
finally
tblYsk.Close;
end;
end;
procedure TZdForm.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 TZdForm.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 TZdForm.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;
//事务启动
HotelData.DatabaseUser.StartTransaction;
try
//贵宾卡结帐
if (FJzxx.AJzfs=JZFS_GBK) then
begin
AGbkJzxx := CardXf(FSjje,True);
if AGbkJzxx.AKcje = 0 then
Exit;
AddYjk(AGbkJzxx);
//更新额外费,写入结帐库、额外费库中
UpdateEwf;
//更新客人帐单,包括当天房价、电话费、额外费、其他信息
UpdateKrzd(JZBZ_SK+JZBZ_GBK+FJzfhs);
//增加结帐库中的总单 行号=0
UpdateKrjz;
tblKrjz.ApplyUpdates;
qryKrzd.ApplyUpdates;
//更新客房状态、半全价
UpdateKfzt;
//更新客人信息的离店日期
UpdateKrxx;
//备份客人信息
BakKrxx;
//清空客人信息
EmptyKrxx;
//清空客人押金
EmptyKryj;
//备份客人帐单
BakKrzd;
//不清空客人帐单,夜审后再清空
end;
//人民币、支票、信用卡结帐
if (FJzxx.AJzfs=JZFS_RMB)
or(FJzxx.AJzfs=JZFS_ZP)
or(FJzxx.AJzfs=JZFS_XYK) then
begin
//更新额外费,写入结帐库、额外费库中
UpdateEwf;
//更新客人帐单,包括当天房价、电话费、额外费、其他信息
UpdateKrzd(JZBZ_SK+FJzxx.AJzfs+FJzfhs);
//增加结帐库中的总单 行号=0
UpdateKrjz;
tblKrjz.ApplyUpdates;
qryKrzd.ApplyUpdates;
//更新客房状态、半全价
UpdateKfzt;
//更新客人信息的离店日期
UpdateKrxx;
//备份客人信息
BakKrxx;
//清空客人信息
EmptyKrxx;
//清空客人押金
EmptyKryj;
//备份客人帐单
BakKrzd;
//不清空客人帐单,夜审后再清空
//EmptyKrzd;
end;
//挂散客、挂团队
if (FJzxx.AJzfs=JZFS_GSK)or(FJzxx.AJzfs=JZFS_GTD) then
begin
//更新挂帐对象
UpdateGz;
//更新客房状态、半全价
UpdateKfzt;
//更新客人信息的离店日期
UpdateKrxx;
//备份客人信息
BakKrxx;
//清空客人信息
EmptyKrxx;
//清空客人押金
EmptyKryj;
//清空客人帐单
EmptyKrzd;
//挂帐时,取消结帐库中的记录
tblKrjz.CancelUpdates;
end;
//未结帐
if (FJzxx.AJzfs=JZFS_WJZ) then
begin
UpdateKrzd(JZBZ_WJZ+FJzfhs);
qryKrzd.ApplyUpdates;
UpdateKfzt;
UpdateKrxx;
tblKrjz.CancelUpdates;
//BakKrxx;
//EmptyKrxx;
//BakKrzd;
//EmptyKrzd;
end;
//客户记帐
if (FJzxx.AJzfs=JZFS_JZ) then
begin
UpdateEwf;
UpdateKrzd(ZDBZ_JZ+HotelData.FindMc('KHDA','D_KHBH','D_KHMC',FJzxx.AKhbh));
//更新应收款
qryKrzd.ApplyUpdates;
UpdateYsk;
UpdateKfzt;
UpdateKrxx;
BakKrxx;
EmptyKrxx;
EmptyKryj;
BakKrzd;
//EmptyKrzd;
//客户记账,取消结帐库中的记录
tblKrjz.CancelUpdates;
end;
UpdateBqj;
UpdateXxdc;
{if Confirm('是否打印帐单?') then
btnPrintClick(nil);}
//事务提交
HotelData.DatabaseUser.Commit;
except
//事务回滚
HotelData.DatabaseUser.Rollback;
raise;
end;
//清除缓存
tblKrjz.CancelUpdates;
tblKrjz.CommitUpdates;
finally
tblKrjz.EnableControls;
end;
Close;
end;
//判断实结金额
procedure TZdForm.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 TZdForm.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;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -