📄 c_fykjz.pas
字号:
tblYsk.FieldByName('D_HH').AsInteger := tblKrjzD_HH.Value;
tblYsk.FieldByName('D_XMBH').AsString := tblKrjzD_XMBH.Value;
tblYsk.FieldByName('D_XFDJ').AsCurrency := 0;
tblYsk.FieldByName('D_XFSL').AsFloat := 1;
tblYsk.FieldByName('D_XFJE').AsCurrency := tblKrjzD_XFJE.Value-tblKrjzD_YHJE.Value;
tblYsk.FieldByName('D_XFRQ').AsDateTime := Date;
tblYsk.FieldByName('D_XFSJ').AsDateTime := Time;
tblYsk.FieldByName('D_CZYXM').AsString := CZY.CzyXm;
tblYsk.FieldByName('D_BZ').AsString := ZDBZ_JZ+HotelData.FindMc('KHDA','D_KHBH','D_KHMC',FKhbh);
tblYsk.Post;
tblKrjz.Next;
end;
finally
tblYsk.Close;
end;
end;
//更新客人帐单
procedure TFykJzForm.UpdateKrzd;
var
AZdbh: string;
begin
if tblKrjz.IsEmpty then Exit;
//获取帐单编号
AZdbh := HotelData.GetBh('D_ZDBH',PREV_ZDBH);
try
try
tblKrzd.Open;
except
On E:Exception do
begin
ShowWarning('打开数据库出错,请检查网络连接是否正常!'
+#13#10
+'错误信息:'
+E.Message);
raise;
end;
end;
tblKrjz.DisableControls;
tblKrjz.First;
while not tblKrjz.Eof do
begin
tblKrzd.Insert;
tblKrzd.FieldByName('D_ZDBH').AsString := AZdbh;
tblKrzd.FieldByName('D_HH').AsInteger := tblKrjzD_HH.Value;
tblKrzd.FieldByName('D_ZDLB').AsString := ZDLB_FYK;
tblKrzd.FieldByName('D_XMBH').AsString := tblKrjzD_XMBH.Value;
tblKrzd.FieldByName('D_XFJE').AsCurrency := tblKrjzD_XFJE.Value;
tblKrzd.FieldByName('D_YHJE').AsCurrency := tblKrjzD_YHJE.Value;
tblKrzd.FieldByName('D_XFRQ').AsDateTime := tblKrjzD_JZRQ.Value;
tblKrzd.FieldByName('D_XFSJ').AsDateTime := tblKrjzD_JZSJ.Value;
tblKrzd.FieldByName('D_JZRQ').AsDateTime := tblKrjzD_JZRQ.Value;
tblKrzd.FieldByName('D_JZSJ').AsDateTime := tblKrjzD_JZSJ.Value;
tblKrzd.FieldByName('D_JZBZ').AsString := JZ_YES;
tblKrzd.FieldByName('D_JSBZ').AsString := JS_YES;
tblKrzd.FieldByName('D_CZYXM').AsString := CZY.CzyXm;
tblKrzd.FieldByName('D_JZYXM').AsString := CZY.CzyXm;
tblKrzd.FieldByName('D_BMBH').AsString := FBmbh;
if FJzfs=JZFS_JZ then
tblKrzd.FieldByName('D_BZ').AsString := ZDBZ_FYK+' '+ZDBZ_JZ+' '+FKhbh
else
tblKrzd.FieldByName('D_BZ').AsString := ZDBZ_FYK;
tblKrzd.FieldByName('D_JZBH').AsString := FJzbh;
tblKrzd.Post;
tblKrjz.Next;
end;
finally
tblKrjz.EnableControls;
tblKrzd.Close;
end;
end;
//添加预交款
//结帐库中添加预交款 贵宾卡结帐
procedure TFYkjzForm.AddYjk(AGbkJzxx: TGbkJzxx);
var
AYe,ACe: Currency;
AXmbh: string;
begin
IsUpdate := True;
IsSum := False;
tblKrjzD_XMBH.OnValidate := nil;
tblKrjzD_YHJE.OnValidate := nil;
tblKrjzD_XFJE.OnValidate := nil;
if (AGbkJzxx.AJzfs=JZFS_RMB)
or(AGbkJzxx.AJzfs=JZFS_XYK)
or(AGbkJzxx.AJzfs=JZFS_ZP ) then
begin
//贵宾卡结帐,剩余的金额
AYe := FJsje - 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;
tblKrjz.Insert;
tblKrjzD_XMBH.Value := XMBH_YJK;
tblKrjzD_XFJE.Value := 0-AGbkJzxx.AKcje;
tblKrjzD_YJJE.Value := 0;
tblKrjzD_YHJE.Value := 0;
tblKrjz.Post;
tblKrjzD_XMBH.OnValidate := tblKrjzD_XMBHValidate;
tblKrjzD_YHJE.OnValidate := tblKrjzD_YHJEValidate;
tblKrjzD_XFJE.OnValidate := tblKrjzD_XFJEValidate;
IsUpdate := False;
IsSum := True;
end;
//结帐确认
procedure TFykJzForm.btnOKClick(Sender: TObject);
var
AGbkJzxx: TGbkJzxx;
begin
inherited;
//判断有效性
if not IsValid then Exit;
if tblKrjz.IsEmpty then
begin
ShowInfo('请录入消费项目!');
Exit;
end;
if not Confirm('你确认该客人的消费结帐吗?') then
Exit;
if tblKrjz.State in [dsInsert,dsEdit] then
begin
if tblKrjzD_XMBH.Value = '' then
tblKrjz.Cancel
else
tblKrjz.Post;
end;
//事务启动
tblKrjz.DisableControls;
HotelData.DatabaseUser.StartTransaction;
try
//如果结帐方式是贵宾卡
if FJzfs=JZFS_GBK then
begin
AGbkJzxx := CardXf(FJsje,False);
if AGbkJzxx.AKcje = 0 then
begin
HotelData.DatabaseUser.Rollback;
Exit;
end;
AddYjk(AGbkJzxx);
UpdateKrjz;
UpdateKrzd;
end;
//如果结帐方式是人民币、信用卡、支票
if (FJzfs=JZFS_RMB)or(FJzfs=JZFS_XYK)or(FJzfs=JZFS_ZP) then
begin
UpdateKrjz;
UpdateKrzd;
end;
//如果结帐方式是记帐
if FJzfs=JZFS_JZ then
begin
UpdateKrzd;
UpdateYsk;
tblKrjz.CancelUpdates;
end;
tblKrjz.ApplyUpdates;
tblKrjz.CommitUpdates;
//事务提交
HotelData.DatabaseUser.Commit;
except
//事务回滚
HotelData.DatabaseUser.Rollback;
raise;
end;
{if Confirm('是否打印帐单?') then
btnPrintClick(nil);}
tblKrjz.EnableControls;
//初始化
edtJzrq.Text := FormatDateTime('yyyy-mm-dd',Date);
edtJzsj.Text := FormatDateTime('hh:mm',Time);
FJzrq := Date;
FJzsj := Time;
FJzfs := JZFS_RMB;
IsUpdate := True;
IsSum := True;
radJzfs.ItemIndex := 0;
cmbJz.Items.Clear;
edtJzrq.SetFocus;
lblXfje.Caption := '0元';
lblYhje.Caption := '0元';
lblJsje.Caption := '0元';
ShowZd;
//Close;
end;
procedure TFykJzForm.tblKrjzNewRecord(DataSet: TDataSet);
begin
inherited;
tblKrjzD_JZBH.Value := FJzbh;
tblKrjzD_HH.Value := FHh;
tblKrjzD_JZLX.Value := JZLX_FYK;
tblKrjzD_CZYXM.Value:= CZY.CzyXm;
tblKrjzD_BMBH.Value := FBmbh;
tblKrjzD_BZ.Value := JZBZ_FYK;
tblKrjzD_JZRQ.Value := Date;
tblKrjzD_JZSJ.Value := Now;
end;
procedure TFykJzForm.tblKrjzAfterPost(DataSet: TDataSet);
begin
inherited;
if IsUpdate then Inc(FHh);
if IsSum then SumXfje;
end;
//取消
procedure TFykJzForm.btnCancClick(Sender: TObject);
begin
inherited;
tblKrjz.CancelUpdates;
end;
procedure TFykJzForm.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
inherited;
if DBGrid1.SelectedIndex=0 then
begin
if Ord(Key)=VK_BACK then FKey := ''
else
begin
FKey := FKey + Key;
if HotelData.tblXMDM.Locate('D_DM',FKey,[loPartialKey]) then
begin
tblKrjz.Edit;
tblKrjzD_XMBH.Value := HotelData.tblXMDM.FieldByName('D_XMBH').AsString;
end;
end;
end;
end;
procedure TFykJzForm.DBGrid1ColEnter(Sender: TObject);
begin
inherited;
if DBGrid1.SelectedIndex=0 then FKey := '';
end;
procedure TFykJzForm.btnPrintClick(Sender: TObject);
var
APrintStru: TPrintStru;
begin
APrintStru.ATitle := '帐单(结帐方式:'+FJzfs+')';
APrintStru.ASub := '消费金额:'+lblXfje.Caption+' '
+'结算金额:'+lblJsje.Caption+' '
+'优惠金额:'+lblYhje.Caption+' ';
APrintStru.ADataSet := tblKrjz;
PrintLb(APrintStru,DBGrid1);
end;
procedure TFykJzForm.tblKrjzD_XFJEValidate(Sender: TField);
begin
inherited;
if tblKrjzD_XFJE.IsNull or (tblKrjzD_XFJE.Value<=0) then
raise Exception.Create('请输入大于零的金额');
end;
procedure TFykJzForm.tblKrjzD_YHJEValidate(Sender: TField);
begin
inherited;
if tblKrjzD_YHJE.Value < 0 then
raise Exception.Create('优惠金额不能小于零!');
end;
procedure TFykJzForm.tblKrjzD_XMBHValidate(Sender: TField);
begin
inherited;
if tblKrjzD_XMBH.Value = XMBH_YJK then
raise Exception.Create('预交款不能结账!');
if tblKrjzD_XMBH.Value = XMBH_CF then
raise Exception.Create('请在餐饮管理系统->非餐费结帐中录入');
end;
procedure TFykJzForm.cmbJzDblClick(Sender: TObject);
begin
inherited;
if FJzfs = JZFS_JZ then
cmbJz.Text := KhdaSel1;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -