⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c_zd.pas

📁 经典的酒店管理系统
💻 PAS
📖 第 1 页 / 共 3 页
字号:
                  +'错误信息:'
                  +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 + -