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

📄 c_yskzd.pas

📁 经典的酒店管理系统
💻 PAS
📖 第 1 页 / 共 2 页
字号:
{立方酒店管理系统 v1.0
 Copyright by CubicSoft
 program by ls.
 Date:20020301-20020601
 20020627 加入注释
}
unit C_Yskzd;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, C_StdJd, DosMove, StdCtrls, Buttons, ExtCtrls, C_Define, Mask,
  DB, DBTables, Grids, DBGrids, ComCtrls;

type
  TYskzdForm = class(TStdJdForm)
    Label1: TLabel;
    Label2: TLabel;
    edtJzrq: TMaskEdit;
    Label3: TLabel;
    edtJzsj: TMaskEdit;
    radJzlb: TRadioGroup;
    qryYsk: TQuery;
    tblYskjzls: TTable;
    dsYskjzls: TDataSource;
    DBGrid1: TDBGrid;
    tblYskjzlsD_XFXM: TStringField;
    Label4: TLabel;
    lblXfje: TLabel;
    Label5: TLabel;
    lblJsje: TLabel;
    Label6: TLabel;
    lblYjje: TLabel;
    Label7: TLabel;
    lblQzje: TLabel;
    Label9: TLabel;
    lblYjkc: TLabel;
    Label11: TLabel;
    lblYhje: TLabel;
    Label8: TLabel;
    edtSjje: TEdit;
    tblYskjzlsD_JSJE: TCurrencyField;
    tblYskjzlsD_YE: TCurrencyField;
    dtpB: TDateTimePicker;
    dtpE: TDateTimePicker;
    btnSele: TBitBtn;
    Label12: TLabel;
    tblKrjz: TTable;
    tblYsk: TTable;
    tblYskjz: TTable;
    tblKrzd: TTable;
    btnPrint: TBitBtn;
    Label13: TLabel;
    CheckBox1: TCheckBox;
    radJzfs: TRadioGroup;
    cmbJz: TComboBox;
    tblYskjzlsD_KHBH: TStringField;
    tblYskjzlsD_ZDBH: TStringField;
    tblYskjzlsD_HH: TIntegerField;
    tblYskjzlsD_XMBH: TStringField;
    tblYskjzlsD_XFJE: TFloatField;
    tblYskjzlsD_YJJE: TFloatField;
    tblYskjzlsD_YHJE: TFloatField;
    tblYskjzlsD_JZJE: TFloatField;
    tblYskjzlsD_XFRQ: TDateTimeField;
    tblYskjzlsD_XFSJ: TDateTimeField;
    tblYskjzlsD_JZBZ: TStringField;
    edtKhmc: TEdit;
    btnKhbh: TSpeedButton;
    Label10: TLabel;
    procedure radJzfsClick(Sender: TObject);
    procedure edtJzrqExit(Sender: TObject);
    procedure edtJzsjExit(Sender: TObject);
    procedure btnOKClick(Sender: TObject);
    procedure radJzlbClick(Sender: TObject);
    procedure tblYskjzlsCalcFields(DataSet: TDataSet);
    procedure DBGrid1DblClick(Sender: TObject);
    procedure tblYskjzlsBeforeEdit(DataSet: TDataSet);
    procedure tblYskjzlsBeforeInsert(DataSet: TDataSet);
    procedure tblYskjzlsBeforeDelete(DataSet: TDataSet);
    procedure tblYskjzlsAfterPost(DataSet: TDataSet);
    procedure tblYskjzlsD_YHJEValidate(Sender: TField);
    procedure tblYskjzlsD_JZJEValidate(Sender: TField);
    procedure CheckBox1Click(Sender: TObject);
    procedure btnSeleClick(Sender: TObject);
    procedure edtSjjeExit(Sender: TObject);
    procedure btnPrintClick(Sender: TObject);
    procedure btnKhbhClick(Sender: TObject);
    procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    procedure DBGrid1KeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    { Private declarations }
    FBmbh: string;
    IsEdit: Boolean;
    FJzbh: string;
    FKhbh: string;
    FJzlb: Integer;
    FJzrq: TDateTime;
    FJzsj: TDateTime;
    FJzfs: string;
    FXykbh: string;
    FJsje: Currency;
    FYhje: Currency;
    FYjkc: Currency;
    FBfjz: Currency;
    FSjje: Currency;
    FQzje: Currency;
    FXfje: Currency;
    FYjje: Currency;
    FXfje1: Currency;
    FYjje1: Currency;
    FYhje1: Currency;
    function IsValid: Boolean;
    procedure ShowJzxx;
    procedure ShowJsxx;
    procedure ShowZd;
    procedure ShowBfjz;
    procedure ShowQbjz;
    function SumXfje: Currency;
    function SumYjje: Currency;
    procedure SumYhje;
    procedure SelectAll(AItem: string);
    procedure SelectDate(ABDate,AEDate: TDateTime);
    procedure UpdateKrjz;
    procedure UpdateYskmx;
    procedure UpdateYskzz;
    procedure UpdateYskjz;
    procedure UpdateEwf;
    procedure AddKrzd(const AZdbh: string;AHh: Integer;AEwf: Currency);
    procedure AddKrjz(AHh: Integer;AXmbh: string;AXfje,AYjje,AYhje: Currency);
    procedure AddYskjz(AHh: Integer;AXmbh,ABz: string;AXfje,AYjje,AYhje: Currency);
  public
    { Public declarations }
  end;

var
  YskzdForm: TYskzdForm;

procedure Yskzd;

implementation

uses C_HotelData, C_Sysprint, C_CardXf, C_Wait, C_KhdaSel;

{$R *.dfm}

//应收款结帐
procedure Yskzd;
begin
  YskzdForm := TYskzdForm.Create(Application);
  try
    with YskzdForm do
    begin
      IsEdit := False;
      //获取部门编号
      FBmbh := HotelData.FindBh('YGDA','D_BMBH','D_YGBH',CZY.CzyBh);
      dtpB.Date := Date;
      dtpE.Date := Date;
      //显示结帐信息
      ShowJzxx;
      ShowModal;
    end;
  finally
    YskzdForm.Free;
  end;
end;

//累计优惠金额
procedure TYskzdForm.SumYhje;
var
  PrevRecord: TBookMark;
begin
  PrevRecord := tblYskjzls.GetBookmark;
  try
    tblYskjzls.DisableControls;
    FYhje := 0;
    FYjkc := 0;
    FBfjz := 0;
    tblYskjzls.First;
    while not tblYskjzls.Eof do
    begin
      if tblYskjzlsD_XMBH.Value <> XMBH_YJK then
      begin
        FYhje := FYhje + tblYskjzlsD_YHJE.Value;
        FBfjz := FBfjz + tblYskjzlsD_JZJE.Value;
      end
      else
      begin
        FYjkc := FYjkc + tblYskjzlsD_JZJE.Value;
      end;
      tblYskjzls.Next;
    end;
  finally
    tblYskjzls.EnableControls;
    if PrevRecord<>nil then
    begin
      tblYskjzls.GotoBookmark(PrevRecord);
      tblYskjzls.FreeBookmark(PrevRecord);
    end;
    ShowJsxx;
  end;
end;

//获取消费金额
function TYskzdForm.SumXfje: Currency;
var
  SqlStr: string;
begin
  SqlStr := 'select sum(D_XFJE) from YSK where '
           +'(D_KHBH="'+FKhbh+'")and(D_HH<>0)and(D_XMBH<>"'
           +XMBH_YJK+'")';
  Result := HotelData.SumJe(SqlStr);
end;

//获取已结金额
function TYskzdForm.SumYjje: Currency;
var
  SqlStr: string;
begin
  SqlStr := 'select sum(D_XFJE) from YSK where '
           +'(D_KHBH="'+FKhbh+'")and(D_XMBH="'+XMBH_YJK+'")';
  Result := 0-HotelData.SumJe(SqlStr);
end;


//显示结算信息
procedure TYskzdForm.ShowJsxx;
begin
  //结算金额
  FJsje := FBfjz-FYhje-FYjkc;

  //实结金额
  if FJsje>=0 then
    FSjje := Trunc(FJsje+0.99)
  else
    FSjje := Trunc(FJsje-0.99);

  //欠账金额
  FQzje := FXfje-FYjje;

  lblYjkc.Caption := FormatFloat('#.##',FYjkc);
  lblXfje.Caption := FormatFloat('#.##',FXfje);
  lblYjje.Caption := FormatFloat('#.##',FYjje);
  lblYhje.Caption := FormatFloat('#.##',FYhje);
  lblJsje.Caption := FormatFloat('#.##',FJsje);
  lblQzje.Caption := FormatFloat('#.##',FQzje);
  edtSjje.Text := FormatFloat('#.##',FSjje);
end;

//显示结帐信息
procedure TYskzdForm.ShowJzxx;
begin
  //初始化
  edtJzrq.Text := FormatDateTime('yyyy-mm-dd',Date);
  edtJzsj.Text := FormatDateTime('hh:mm',Time);
  FJzrq := Date;
  FJzsj := Time;
  FJzfs := JZFS_RMB;
  //结帐类别 1-明细结帐 0-总帐结帐
  FJzlb := 1;
end;

//结帐方式选择
procedure TYskzdForm.radJzfsClick(Sender: TObject);
begin
  inherited;
  cmbJz.Items.Clear;
  cmbJz.Style := csDropDownList;

  case radJzfs.ItemIndex of
    0: FJzfs := JZFS_RMB;
    1:
      begin
        HotelData.ListMc(cmbJz,'XYK','D_XYKMC');
        FJzfs := JZFS_XYK;
      end;
    2: FJzfs := JZFS_ZP;
  end;
end;

procedure TYskzdForm.edtJzrqExit(Sender: TObject);
begin
  inherited;
  FJzrq := StrToDate(edtJzrq.Text);
end;

procedure TYskzdForm.edtJzsjExit(Sender: TObject);
begin
  inherited;
  FJzsj := StrToTime(edtJzsj.Text);
end;

//有效性检查
function TYskzdForm.IsValid: Boolean;
begin
  Result := False;

  case radJzfs.ItemIndex of
    1:
      begin
        FXykbh := HotelData.FindBh('XYK','D_XYKBH','D_XYKMC',cmbJz.Text);
        if FXykbh<>'' then
          Result := True
        else
          ShowInfo('请选择信用卡!');
      end;
    else
      Result := True;
  end;
end;

//添加结帐库记录
procedure TYskzdForm.AddKrjz(AHh: Integer;AXmbh: string;AXfje,AYjje,AYhje: Currency);
begin
  tblKrjz.Insert;
  tblKrjz.FieldByName('D_JZBH').AsString   := FJzbh;
  tblKrjz.FieldByName('D_HH').AsInteger    := AHh;
  tblKrjz.FieldByName('D_XMBH').AsString   := AXmbh;
  tblKrjz.FieldByName('D_XFJE').AsCurrency := AXfje;
  tblKrjz.FieldByName('D_YJJE').AsCurrency := AYjje;
  tblKrjz.FieldByName('D_YHJE').AsCurrency := AYhje;
  tblKrjz.FieldByName('D_JZFS').AsString   := FJzfs;
  tblKrjz.FieldByName('D_JZLX').AsString   := JZLX_YSK;
  tblKrjz.FieldByName('D_XYKBH').AsString  := FXykbh;
  tblKrjz.FieldByName('D_KHBH').AsString   := FKhbh;
  tblKrjz.FieldByName('D_JZRQ').AsDateTime := FJzrq;
  tblKrjz.FieldByName('D_JZSJ').AsDateTime := FJzsj;
  tblKrjz.FieldByName('D_CZYXM').AsString  := CZY.CzyXm;
  tblKrjz.FieldByName('D_BMBH').AsString   := FBmbh;
  tblKrjz.FieldByName('D_BZ').AsString     := JZBZ_YSK+' '+FKhbh;
  tblKrjz.Post;
end;

//添加到应收款结帐明细库中
procedure TYskzdForm.AddYskjz(AHh: Integer;AXmbh,ABz: string;AXfje,AYjje,AYhje: Currency);
begin
  tblYskjz.Insert;
  tblYskjz.FieldByName('D_JZBH').AsString   := FJzbh;
  tblYskjz.FieldByName('D_HH').AsInteger    := AHh;
  tblYskjz.FieldByName('D_XMBH').AsString   := AXmbh;
  tblYskjz.FieldByName('D_XFJE').AsCurrency := AXfje;
  tblYskjz.FieldByName('D_YJJE').AsCurrency := AYjje;
  tblYskjz.FieldByName('D_YHJE').AsCurrency := AYhje;
  tblYskjz.FieldByName('D_JZFS').AsString   := FJzfs;
  tblYskjz.FieldByName('D_XYKBH').AsString  := FXykbh;
  tblYskjz.FieldByName('D_KHBH').AsString   := FKhbh;
  tblYskjz.FieldByName('D_JZRQ').AsDateTime := FJzrq;
  tblYskjz.FieldByName('D_JZSJ').AsDateTime := FJzsj;
  tblYskjz.FieldByName('D_CZYXM').AsString  := CZY.CzyXm;
  tblYskjz.FieldByName('D_BZ').AsString  := ABz;
  tblYskjz.Post;
end;

//更新客人结帐库
procedure TYskzdForm.UpdateKrjz;
var
  AHh              : Integer;
  AXmbh            : string;
  AXfje,AYjje,AYhje: Currency;
begin
  try
    tblYskjzls.DisableControls;
    AHh := 0;
    FXfje1 := 0;FYjje1 := 0;FYhje1 := 0;

    try
      tblKrjz.Open;
    except
      On E:Exception do
      begin
        ShowWarning('打开数据库出错,请检查网络连接是否正常!'
                    +#13#10
                    +'错误信息:'
                    +E.Message);
        raise;
      end;
    end;

    tblYskjzls.First;
    while not tblYskjzls.Eof do
    begin
      //如果结帐,并且结帐金额大于零
      //if (tblYskjzlsD_JZBZ.Value='T')and(tblYskjzlsD_JZJE.Value>0) then
      if (tblYskjzlsD_JZBZ.Value='T')and(tblYskjzlsD_JZJE.Value<>0) then
      begin
        //增加行号
        Inc(AHh);

        //获取消费金额 如果是预交款则为负
        if tblYskjzlsD_XMBH.Value<>XMBH_YJK then
          AXfje := tblYskjzlsD_JZJE.Value
        else
          AXfje := 0-tblYskjzlsD_JZJE.Value;

        AYjje := tblYskjzlsD_YJJE.Value;
        AYhje := tblYskjzlsD_YHJE.Value;
        AXmbh := tblYskjzlsD_XMBH.Value;

        //加入到结帐库中
        AddKrjz(AHh,AXmbh,AXfje,AYjje,AYhje);

        //累计求和
        FXfje1 := FXfje1 + AXfje;
        FYjje1 := FYjje1 + AYjje;
        FYhje1 := FYhje1 + AYhje;
      end;
      tblYskjzls.Next;
    end;

    //增加结帐总单
    AHh := 0;
    AddKrjz(AHh,'0',FSjje+FYhje,FYjje1,FYhje1);

  finally
    tblKrjz.Close;
    tblYskjzls.EnableControls;
  end;
end;

//总帐结帐
procedure TYskzdForm.UpdateYskzz;
begin
  try
    tblYskjzls.DisableControls;

    //先清空应收款
    //HotelData.EmptyData('select * from YSK where D_KHBH="'+FKhbh+'"');
    HotelData.EmptyData('delete from YSK where D_KHBH="'+FKhbh+'"');

    try
      tblYsk.Open;
    except
      On E:Exception do
      begin
        ShowWarning('打开数据库出错,请检查网络连接是否正常!'
                    +#13#10
                    +'错误信息:'
                    +E.Message);
        raise;
      end;
    end;

    //从临时库中写入余额
    tblYskjzls.First;
    while not tblYskjzls.Eof do
    begin

      //如果还有余额
      if tblYskjzlsD_YE.Value <>0 then
      begin
        tblYsk.Insert;
        tblYsk.FieldByName('D_KHBH').AsString := FKhbh;
        tblYsk.FieldByName('D_ZDBH').AsString := '0';
        tblYsk.FieldByName('D_HH').AsInteger  := tblYskjzlsD_HH.Value;
        tblYsk.FieldByName('D_XMBH').AsString := tblYskjzlsD_XMBH.Value;
        tblYsk.FieldByName('D_XFJE').AsCurrency:= tblYskjzlsD_YE.Value;
        tblYsk.FieldByName('D_XFRQ').AsDateTime := FJzrq;
        tblYsk.FieldByName('D_XFSJ').AsDateTime := FJzsj;
        tblYsk.FieldByName('D_CZYXM').AsString := CZY.CzyXm;
        tblYsk.Post;
      end;
      tblYskjzls.Next;
    end;
  finally
    tblYskjzls.EnableControls;
    tblYsk.Close;
  end;
end;

//明细结帐
procedure TYskzdForm.UpdateYskmx;
begin
  try
    tblYskjzls.DisableControls;

    try
      tblYsk.Open;
    except
      On E:Exception do
      begin
        ShowWarning('打开数据库出错,请检查网络连接是否正常!'
                    +#13#10
                    +'错误信息:'
                    +E.Message);
        raise;
      end;
    end;

    //从临时库中写入余额
    tblYskjzls.First;
    while not tblYskjzls.Eof do
    begin

      //如果结帐,并且结帐金额大于零
      //if (tblYskjzlsD_JZBZ.Value='T')and(tblYskjzlsD_JZJE.Value>0) then
      if (tblYskjzlsD_JZBZ.Value='T')and(tblYskjzlsD_JZJE.Value<>0) then
      begin
        //找到该记录
        if tblYsk.FindKey([tblYskjzlsD_KHBH.Value,tblYskjzlsD_ZDBH.Value,tblYskjzlsD_HH.Value]) then
        begin
          //如果余额为零,则删除
          if tblYskjzlsD_YE.Value=0 then tblYsk.Delete
          else    //否则,修改为余额
          begin
            tblYsk.Edit;
            tblYsk.FieldByName('D_XFJE').AsCurrency := tblYskjzlsD_YE.Value;
            tblYsk.Post;
          end;

        end;
      end;
      tblYskjzls.Next;
    end;
  finally
    tblYskjzls.EnableControls;
    tblYsk.Close;
  end;
end;

//更新应收款结帐明细
procedure TYskzdForm.UpdateYskjz;
var
  AHh              : Integer;
  AXmbh,ABz        : string;
  AXfje,AYjje,AYhje: Currency;
begin
  try
    tblYskjzls.DisableControls;

    try
      tblYskjz.Open;
    except
      On E:Exception do
      begin
        ShowWarning('打开数据库出错,请检查网络连接是否正常!'
                    +#13#10
                    +'错误信息:'
                    +E.Message);
        raise;
      end;
    end;

    tblYskjzls.First;
    AHh := 1;

    //添加记录
    while not tblYskjzls.Eof do
    begin
      //如果结帐,并且结帐金额大于零
      //if (tblYskjzlsD_JZBZ.Value='T')and(tblYskjzlsD_JZJE.Value>0) then
      if (tblYskjzlsD_JZBZ.Value='T')and(tblYskjzlsD_JZJE.Value<>0) then
      begin

        //判断预交款
        if tblYskjzlsD_XMBH.Value<>XMBH_YJK then
          AXfje := tblYskjzlsD_JZJE.Value
        else
          AXfje := 0-tblYskjzlsD_JZJE.Value;

        AYjje := tblYskjzlsD_YJJE.Value;
        AYhje := tblYskjzlsD_YHJE.Value;
        AXmbh := tblYskjzlsD_XMBH.Value;
        ABz   := FormatDateTime('yyyy-mm-dd',tblYskjzlsD_XFRQ.Value);
        //添加记录
        AddYskjz(AHh,AXmbh,ABz,AXfje,AYjje,AYhje);
      end;
      tblYskjzls.Next;
      Inc(AHh);
    end;
  finally
    tblYskjz.Close;
    tblYskjzls.EnableControls;
  end;
end;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -