📄 c_yskzd.pas
字号:
//将额外费插入到帐单库中
procedure TYskzdForm.AddKrzd(const AZdbh: string;AHh: Integer;AEwf: Currency);
begin
tblKrzd.Insert;
tblKrzd.FieldByName('D_ZDBH').AsString := AZdbh;
tblKrzd.FieldByName('D_HH').AsInteger := AHh;
tblKrzd.FieldByName('D_ZDLB').AsString := ZDLB_SYS;
tblKrzd.FieldByName('D_XMBH').AsString := XMBH_EWF;
tblKrzd.FieldByName('D_XFJE').AsCurrency := AEwf;
tblKrzd.FieldByName('D_XFRQ').AsDateTime := FJzrq;
tblKrzd.FieldByName('D_XFSJ').AsDateTime := FJzsj;
tblKrzd.FieldByName('D_JZBZ').AsString := JZ_YES;
tblKrzd.FieldByName('D_JSBZ').AsString := JS_YES;
tblKrzd.FieldByName('D_CZYXM').AsString := CZY.CzyXm;
tblKrzd.FieldByName('D_JZBH').AsString := FJzbh;
tblKrzd.FieldByName('D_BZ').AsString := ZDBZ_SYS;
tblKrzd.Post;
end;
//更新额外费
procedure TYskzdForm.UpdateEwf;
var
AEwf : Currency;
AKhmc,AZdbh: string;
begin
try
try
tblKrzd.Open;
except
On E:Exception do
begin
ShowWarning('打开数据库出错,请检查网络连接是否正常!'
+#13#10
+'错误信息:'
+E.Message);
raise;
end;
end;
tblYskjzls.DisableControls;
//获取额外费
AEwf := FSjje-FJsje;
//写入krjz.db
if AEwf<>0 then
begin
IsEdit := True;
tblYskjzls.Insert;
tblYskjzlsD_KHBH.Value := FKhbh;
tblYskjzlsD_ZDBH.Value := '9999';
tblYskjzlsD_HH.Value := 9999;
tblYskjzlsD_XMBH.Value := XMBH_EWF;
tblYskjzlsD_XFJE.Value := AEwf;
tblYskjzlsD_JZJE.Value := AEwf;
tblYskjzlsD_XFRQ.Value := FJzrq;
tblYskjzlsD_XFSJ.Value := FJzsj;
tblYskjzlsD_JZBZ.Value := 'T';
tblYskjzls.Post;
//写入ewf.db
AKhmc := HotelData.FindMc('KHDA','D_KHBH','D_KHMC',FKhbh);
HotelData.UpdateEwfDbf(FJzbh,AKhmc,AEwf,FJzrq,FJzsj);
IsEdit := False;
//获取帐单编号
AZdbh := HotelData.GetBh('D_ZDBH',PREV_ZDBH);
//添加到帐单库中
AddKrzd(AZdbh,0,AEwf);
AddKrzd(AZdbh,1,AEwf);
end;
finally
tblKrzd.Close;
tblYskjzls.EnableControls;
end;
end;
//结帐确认
procedure TYskzdForm.btnOKClick(Sender: TObject);
begin
inherited;
//检查有效性
if not IsValid then Exit;
if not Confirm('你确认该客人的消费结帐吗?') then
Exit;
tblYskjzlsD_YHJE.OnValidate := nil;
tblYskjzlsD_JZJE.OnValidate := nil;
//获取结帐编号
FJzbh := HotelData.GetBh('D_JZBH',PREV_JZBH);
//事务启动
HotelData.DatabaseUser.StartTransaction;
try
//判断结帐类别
if FJzlb=0 then UpdateYskzz //总帐结帐
else UpdateYskmx; //明细结帐
//更新额外费
UpdateEwf;
//更新客人结帐库
UpdateKrjz;
//更新应收款结帐库
UpdateYskjz;
//事务提交
HotelData.DatabaseUser.Commit;
{if Confirm('是否打印帐单?') then
btnPrintClick(nil);}
except
//事务回滚
HotelData.DatabaseUser.Rollback;
raise;
end;
Close;
end;
//显示总帐结帐帐单
procedure TYskzdForm.ShowQbjz;
var
s : string;
AHh: Integer;
begin
with qryYsk do
begin
if Active then Active := False;
s := 'select D_XMBH,sum(D_XFJE) from YSK where (D_KHBH="'
+ FKhbh + '") and (D_HH<>0) group by D_XMBH';
SQL.Clear;
SQL.Add(s);
try
Open;
except
On E:Exception do
begin
ShowWarning('打开数据库出错,请检查网络连接是否正常!'
+#13#10
+'错误信息:'
+E.Message);
raise;
end;
end;
end;
//增加帐单
try
IsEdit := True;
tblYskjzls.DisableControls;
//清空临时库
tblYskjzls.Close;
tblYskjzls.EmptyTable;
try
tblYskjzls.Open;
except
On E:Exception do
begin
ShowWarning('打开数据库出错,请检查网络连接是否正常!'
+#13#10
+'错误信息:'
+E.Message);
raise;
end;
end;
qryYsk.First;
AHh := 1;
//从应收款库中添加
while not qryYsk.Eof do
begin
tblYskjzls.Insert;
tblYskjzlsD_KHBH.Value := FKhbh;
tblYskjzlsD_ZDBH.Value := '0';
tblYskjzlsD_HH.Value := AHh;
tblYskjzlsD_XMBH.Value := qryYsk.Fields[0].AsString;
tblYskjzlsD_XFJE.Value := qryYsk.Fields[1].AsCurrency;
tblYskjzlsD_XFRQ.Value := Date;
tblYskjzlsD_XFSJ.Value := Time;
tblYskjzls.Post;
qryYsk.Next;
Inc(AHh);
end;
finally
tblYskjzls.EnableControls;
IsEdit := False;
end;
end;
//明细结帐帐单
procedure TYskzdForm.ShowBfjz;
var
s: string;
begin
with qryYsk do
begin
if Active then Active := False;
s := 'select * from YSK where (D_KHBH="'
+ FKhbh + '") and (D_HH<>0)';
SQL.Clear;
SQL.Add(s);
try
Open;
except
On E:Exception do
begin
ShowWarning('打开数据库出错,请检查网络连接是否正常!'
+#13#10
+'错误信息:'
+E.Message);
raise;
end;
end;
end;
try
IsEdit := True;
tblYskjzls.DisableControls;
//清空临时库
tblYskjzls.Close;
tblYskjzls.EmptyTable;
try
tblYskjzls.Open;
except
On E:Exception do
begin
ShowWarning('打开数据库出错,请检查网络连接是否正常!'
+#13#10
+'错误信息:'
+E.Message);
raise;
end;
end;
//从应收款库中增加
qryYsk.First;
while not qryYsk.Eof do
begin
tblYskjzls.Insert;
tblYskjzlsD_KHBH.Value := FKhbh;
tblYskjzlsD_ZDBH.Value := qryYsk.FieldbyName('D_ZDBH').AsString;
tblYskjzlsD_HH.Value := qryYsk.FieldbyName('D_HH').AsInteger;
tblYskjzlsD_XMBH.Value := qryYsk.FieldByName('D_XMBH').AsString;
tblYskjzlsD_XFJE.Value := qryYsk.FieldByName('D_XFJE').AsCurrency;
tblYskjzlsD_XFRQ.Value := qryYsk.FieldByName('D_XFRQ').AsDateTime;
tblYskjzlsD_XFSJ.Value := qryYsk.FieldbyName('D_XFSJ').AsDateTime;
tblYskjzls.Post;
qryYsk.Next;
end;
finally
tblYskjzls.EnableControls;
IsEdit := False;
end;
end;
//显示帐单
procedure TYskzdForm.ShowZd;
begin
WaitForm := TWaitForm.Create(Application);
try
WaitForm.FTitle := '统计客户应收款';
WaitForm.Show;
WaitForm.Update;
//判断结帐类型
if FJzlb=0 then ShowQbjz
else ShowBfjz;
tblYskjzls.First;
//获取消费金额
FXfje := SumXfje;
//获取已结金额
FYjje := SumYjje;
//显示结算信息
ShowJsxx;
//允许全选
CheckBox1.Visible := True;
CheckBox1.Checked := False;
finally
WaitForm.Hide;
WaitForm.Free;
end;
end;
//选择结帐类别
procedure TYskzdForm.radJzlbClick(Sender: TObject);
begin
inherited;
case radJzlb.ItemIndex of
0: FJzlb := 0;
1: FJzlb := 1;
end;
ShowZd;
end;
//计算字段
procedure TYskzdForm.tblYskjzlsCalcFields(DataSet: TDataSet);
begin
inherited;
if tblYskjzlsD_XMBH.Value <> XMBH_YJK then
begin
tblYskjzlsD_JSJE.Value := tblYskjzlsD_JZJE.Value - tblYskjzlsD_YHJE.Value;
tblYskjzlsD_YE.Value := tblYskjzlsD_XFJE.Value - tblYskjzlsD_JZJE.Value;
end
else
begin
tblYskjzlsD_JSJE.Value := tblYskjzlsD_JZJE.Value;
tblYskjzlsD_YE.Value := tblYskjzlsD_XFJE.Value + tblYskjzlsD_JZJE.Value;
end;
end;
//选择结帐日期段
procedure TYskzdForm.SelectDate(ABDate,AEDate: TDateTime);
begin
try
tblYskjzls.DisableControls;
IsEdit := True;
tblYskjzls.First;
//符合时间的记录
while not tblYskjzls.Eof do
begin
//如果时间符合
if (tblYskjzlsD_XFRQ.Value>=ABDate)and(tblYskjzlsD_XFRQ.Value<=AEDate) then
begin
//置结算标志为True
tblYskjzls.Edit;
tblYskjzlsD_JZBZ.Value := 'T';
//如果结算
if tblYskjzlsD_JZBZ.Value='T' then
begin
//如果不是预交款,则结帐金额等于消费金额,否则为零
if tblYskjzlsD_XMBH.Value <> XMBH_YJK then
tblYskjzlsD_JZJE.Value := tblYskjzlsD_XFJE.Value
else
tblYskjzlsD_JZJE.Value := 0;
//优惠金额为零
tblYskjzlsD_YHJE.Value := 0;
end
else //如果不结算
begin
tblYskjzlsD_JZJE.Value := 0;
tblYskjzlsD_YHJE.Value := 0;
end;
tblYskjzls.Post;
end;
tblYskjzls.Next;
end;
finally
tblYskjzls.EnableControls;
IsEdit := False;
end;
end;
//选择所有
procedure TYskzdForm.SelectAll(AItem: string);
begin
try
tblYskjzls.DisableControls;
IsEdit := True;
tblYskjzls.First;
while not tblYskjzls.Eof do
begin
tblYskjzls.Edit;
tblYskjzlsD_JZBZ.Value := AItem;
if tblYskjzlsD_JZBZ.Value='T' then
begin
if tblYskjzlsD_XMBH.Value <> XMBH_YJK then
tblYskjzlsD_JZJE.Value := tblYskjzlsD_XFJE.Value
else
tblYskjzlsD_JZJE.Value := 0;
tblYskjzlsD_YHJE.Value := 0;
end
else
begin
tblYskjzlsD_JZJE.Value := 0;
tblYskjzlsD_YHJE.Value := 0;
end;
tblYskjzls.Post;
tblYskjzls.Next;
end;
finally
tblYskjzls.EnableControls;
IsEdit := False;
end;
end;
//双击鼠标表示选中或不选中
procedure TYskzdForm.DBGrid1DblClick(Sender: TObject);
begin
inherited;
IsEdit := True;
tblYskjzls.Edit;
if tblYskjzlsD_JZBZ.Value='T' then tblYskjzlsD_JZBZ.Value := 'F'
else
tblYskjzlsD_JZBZ.Value := 'T';
if tblYskjzlsD_JZBZ.Value='T' then
begin
if tblYskjzlsD_XMBH.Value <> XMBH_YJK then
tblYskjzlsD_JZJE.Value := tblYskjzlsD_XFJE.Value
else
tblYskjzlsD_JZJE.Value := 0;
tblYskjzlsD_YHJE.Value := 0;
end
else
begin
tblYskjzlsD_JZJE.Value := 0;
tblYskjzlsD_YHJE.Value := 0;
end;
tblYskjzls.Post;
IsEdit := False;
end;
//如果未选中结帐则不允许编辑
procedure TYskzdForm.tblYskjzlsBeforeEdit(DataSet: TDataSet);
begin
inherited;
if (not tblYskjzlsD_JZBZ.AsBoolean)and(not IsEdit) then Abort;
end;
procedure TYskzdForm.tblYskjzlsBeforeInsert(DataSet: TDataSet);
begin
inherited;
if not IsEdit then Abort;
end;
procedure TYskzdForm.tblYskjzlsBeforeDelete(DataSet: TDataSet);
begin
inherited;
Abort;
end;
procedure TYskzdForm.tblYskjzlsAfterPost(DataSet: TDataSet);
begin
inherited;
SumYhje;
end;
//优惠金额有效性检查
procedure TYskzdForm.tblYskjzlsD_YHJEValidate(Sender: TField);
begin
inherited;
if tblYskjzlsD_XMBH.Value<>XMBH_YJK then
begin
if tblYskjzlsD_JZJE.AsCurrency < 0 then Exit;
if (tblYskjzlsD_YHJE.AsCurrency>tblYskjzlsD_JZJE.AsCurrency) then
raise Exception.Create('优惠金额必须小于本次结帐金额!');
end
else
begin
if tblYskjzlsD_YHJE.Value <> 0 then
raise Exception.Create('预交款不能优惠!');
end;
end;
//本次结帐金额的有效性检查
procedure TYskzdForm.tblYskjzlsD_JZJEValidate(Sender: TField);
begin
inherited;
if (tblYskjzlsD_XMBH.Value<>XMBH_YJK) then
begin
//if tblYskjzlsD_XMBH.Value = XMBH_EWF then Exit;
if tblYskjzlsD_JZJE.Value < 0 then Exit;
if (tblYskjzlsD_JZJE.Value>tblYskjzlsD_XFJE.Value)or
(tblYskjzlsD_JZJE.Value<tblYskjzlsD_YHJE.Value) then
begin
if tblYskjzlsD_JZJE.Value = 0 then Exit;
raise Exception.Create('本次结帐金额必须小于消费金额,大于优惠金额!');
end;
end
else
begin
//if tblYskjzlsD_XMBH.Value = XMBH_EWF then Exit;
if (tblYskjzlsD_JZJE.Value>0-tblYskjzlsD_XFJE.Value) then
raise Exception.Create('预交款扣除金额必须大于零并且小于预交款!');
end;
end;
//全选或全不选
procedure TYskzdForm.CheckBox1Click(Sender: TObject);
begin
inherited;
if CheckBox1.Checked then
SelectAll('T')
else
SelectAll('F');
end;
//选择结帐日期段
procedure TYskzdForm.btnSeleClick(Sender: TObject);
begin
inherited;
if dtpE.Date >= dtpB.Date then
SelectDate(dtpB.DateTime,dtpE.DateTime);
end;
//判断实结金额
procedure TYskzdForm.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 TYskzdForm.btnPrintClick(Sender: TObject);
var
APrintStru: TPrintStru;
begin
APrintStru.ATitle := '帐单(结帐方式:'+FJzfs+')';
APrintStru.ASub := '消费金额:'+lblXfje.Caption+' '
+'预交金额:'+lblYjje.Caption+' '
+'预交扣除:'+lblYjkc.Caption+' '
+'结算金额:'+lblJsje.Caption+' '+#13#10
+'欠账金额:'+lblQzje.Caption+' '
+'优惠金额:'+lblYhje.Caption+' '
+'实结金额:'+edtSjje.Text+'元';
APrintStru.ADataSet := tblYskjzls;
PrintLb(APrintStru,DBGrid1);
end;
procedure TYskzdForm.btnKhbhClick(Sender: TObject);
begin
inherited;
FKhbh := KhdaSel;
if FKhbh <> '' then
begin
edtKhmc.Text := HotelData.FindMc('KHDA','D_KHBH','D_KHMC',FKhbh);
ShowZd;
end;
end;
procedure TYskzdForm.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
inherited;
if tblYskjzlsD_JZBZ.Value = 'T' then
DBGrid1.Canvas.Font.Color := clRed;
DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;
procedure TYskzdForm.DBGrid1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
inherited;
if Key = VK_F5 then DBGrid1DblClick(nil);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -