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

📄 c_yskzd.pas

📁 经典的酒店管理系统
💻 PAS
📖 第 1 页 / 共 2 页
字号:
//将额外费插入到帐单库中
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 + -