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

📄 c_fykjz.pas

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