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

📄 leftpas.pas

📁 一个桌旁室收费系统
💻 PAS
字号:
unit LeftPas;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Db, DBTables, DBCtrls, Mask, ComCtrls, Grids, DBGrids, ExtCtrls,
  Variants, QRPrntr, Qrctrls, QuickRpt;

type
  TLeftForm = class(TForm)
    P1: TQuery;
    P2: TQuery;
    P3: TQuery;
    P1s: TDataSource;
    P2s: TDataSource;
    P3s: TDataSource;
    SBar: TStatusBar;
    Timer1: TTimer;
    QuickRep1: TQuickRep;
    PageHeaderBand1: TQRBand;
    QRLabel1: TQRLabel;
    DetailBand1: TQRBand;
    QRLabel2: TQRLabel;
    QRLabel3: TQRLabel;
    QRLabel4: TQRLabel;
    QRLabel5: TQRLabel;
    QRDBText1: TQRDBText;
    QRDBText2: TQRDBText;
    QRDBText3: TQRDBText;
    QRLabel21: TQRLabel;
    QRDBText14: TQRDBText;
    QRLabel22: TQRLabel;
    QRDBText15: TQRDBText;
    QRDBText4: TQRDBText;
    QRDBText5: TQRDBText;
    QRDBText6: TQRDBText;
    QRDBText7: TQRDBText;
    QRDBText8: TQRDBText;
    QRBand1: TQRBand;
    QRExpr2: TQRExpr;
    ChildBand1: TQRChildBand;
    QRBand2: TQRBand;
    QRDBText13: TQRDBText;
    QRLabel17: TQRLabel;
    QRLabel18: TQRLabel;
    QRDBText10: TQRDBText;
    QRDBText11: TQRDBText;
    QRDBText12: TQRDBText;
    QRExpr1: TQRExpr;
    QRBand3: TQRBand;
    QRLabel6: TQRLabel;
    QRLabel7: TQRLabel;
    QRLabel8: TQRLabel;
    QRLabel9: TQRLabel;
    QRBand4: TQRBand;
    QRLabel12: TQRLabel;
    QRLabel13: TQRLabel;
    QRLabel14: TQRLabel;
    QRLabel15: TQRLabel;
    ChildBand2: TQRChildBand;
    UpdateSQL1: TUpdateSQL;
    QRLabel10: TQRLabel;
    QRLabel11: TQRLabel;
    QRDBText9: TQRDBText;
    QRDBText16: TQRDBText;
    GroupBox1: TGroupBox;
    Label1: TLabel;
    Label2: TLabel;
    Label4: TLabel;
    Label10: TLabel;
    Label9: TLabel;
    Label3: TLabel;
    Edit3: TDBEdit;
    Edit10: TDBEdit;
    Edit2: TEdit;
    Edit9: TDBLookupComboBox;
    Edit4: TDBEdit;
    Panel1: TPanel;
    Button1: TButton;
    Button3: TButton;
    Memo1: TMemo;
    Edit1: TComboBox;
    Button2: TButton;
    QRLabel16: TQRLabel;
    Image1: TImage;
    procedure Calculate(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Edit1Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormActivate(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure PrintOut(Sender: TObject);
    procedure QuickRep1Preview(Sender: TObject);
    procedure PrintBall02(Sender: TQRCustomBand;
      var PrintBand: Boolean);
    procedure QRBand4BeforePrint(Sender: TQRCustomBand;
      var PrintBand: Boolean);
    procedure P1AfterPost(DataSet: TDataSet);
    procedure Edit1DrawItem(Control: TWinControl; Index: Integer;
      Rect: TRect; State: TOwnerDrawState);
    procedure Button2Click(Sender: TObject);
    procedure FormCanResize(Sender: TObject; var NewWidth,
      NewHeight: Integer; var Resize: Boolean);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  LeftForm: TLeftForm;
  LKey: Word;

implementation

uses PPreview, Data, XedUser, Printers;

var
  T: array[0..4] of TDateTime; //时间段
  P: array[1..3] of Real; //单价表
  PPart2, PPart3: Boolean;
  LTime: TDateTime;
{$R *.DFM}

procedure TLeftForm.Edit1Click(Sender: TObject);
var
  Sort: Word;
  I: Word;
  Results: Variant;
const
  LStr = '名称;时间1;时间2;时间3;单价1;单价2;单价3';
begin
  if Edit1.ItemIndex = -1 then Begin
    Edit2.Text := '';
    Exit;
  End;
  Button2.Enabled := False;
  P1.Locate('流水号', Edit1.Text, []);
  Memo1.Text := '消费时间段分布情况';
  if varisNull(P1['结束时间']) then
    LTime := Now
  else
    LTime := P1['结束时间'];
  Edit3.Text := FormatDateTime(' hh"点" nn"分" ss"秒"', P1['开始时间']);
  Edit4.Text := FormatDateTime(' hh"点" nn"分" ss"秒"', LTime);

  LKey := StrToInt(Edit1.Text);
  Sort := P1.FieldByName('娱乐类别').AsInteger;
  Results := DM.Ball00.Lookup('娱乐类别', Sort, LStr);
  Edit2.Text := Results[0];
  T[4] := 0;
  for I := 1 to 3 do begin
    T[I] := Results[I];
    P[I] := Results[I + 3];
  end;

  P2.SQL.Text := Format(
    'Select * From Ball02 Where 流水号="%d"', [LKey]);
  P2.Open;
  PPart2 := not P2.Eof;

  P3.SQL.Text := Format(
    'Select * From Ball03 Where 流水号="%d"', [LKey]);
  P3.Open;
  PPart3 := not P3.Eof;
end;

procedure TLeftForm.Calculate(Sender: TObject);
var
  I, Toff: Word;
  Sum1, Sum2, Temp: Real;
//  Sum1: 基本消费 + 租拍金额
//  Sum2: 酒水金额, Sum1: 截钟金额
  Tim1, Tim2: TDateTime;
  LDate: TDate;
  Adde: Boolean;
  HCost: array[0..3] of Real;

begin
  if Edit1.Text = '' then Exit;
  if Trim(Edit9.Text) = '' then Toff := 100
  else Toff := DM.Rate['折扣比率'];

  Sum2 := 0;
  if PPart2 then begin
    SBar.SimpleText := '正在计算酒水金额....';
    P2.First;
    repeat
      Sum2 := Sum2 + P2['金额'];
      P2.Next;
    until P2.Eof;
  end;

  if PPart3 then begin
    SBar.SimpleText := '正在计算截钟金额....';
    P3.First;
    repeat
      Tim1 := Frac(P3['开始时间']);
      Tim2 := Frac(P3['结束时间']);
      Temp := 0;
      for I := 1 to 3 do begin
        if Tim1 < 9 / 24 then Tim1 := Tim1 + 1;
        if Tim2 < 9 / 24 then Tim2 := Tim2 + 1;
        Temp := Temp + P[I] * Cost(Tim1, Tim2, T[I], T[I + 1]);
      end;
      Temp := Round(Temp);
      P3.Edit;
      P3['金额'] := Temp;
      P3.Post;
      P3.Next;
    until P3.Eof;
  end;

  Tim1 := Frac(P1['开始时间']);
  Tim2 := Frac(P1['结束时间']);
  LDate := Date; // 有没有过半夜
  if Tim2 < 9 / 24 then LDate := Date - 1;
  if Tim1 < 9 / 24 then Tim1 := Tim1 + 1;
  if Tim2 < 9 / 24 then Tim2 := Tim2 + 1;
//  Showmessage(Datetimetostr(Tim1)+'-'+Datetimetostr(Tim2));
  Adde := (Tim2 - Tim1) * 24 < 1;

  Sum1 := 0;

  if Tim1 < 9 / 24 then Tim1 := Tim1 + 1;
  if Tim2 < 9 / 24 then Tim2 := Tim2 + 1;
  if Adde then Tim2 := Tim1 + 1 / 24;
  SBar.SimpleText := '正在计算基本消费....';
  HCost[0] := 0;
  for I := 1 to 3 do begin
    HCost[I] := Cost(Tim1, Tim2, T[I], T[I + 1]);
    HCost[0] := HCost[0] + HCost[I];
    Sum1 := Sum1 + P[I] * HCost[I];
  end;
  Sum1 := Round(Sum1 * TOff / 100);
  Memo1.Text := Format('各时段消费分布情况(分钟):'
    + '%4.0f,%4.0f,%4.0f  合计:%4.0f 分钟 = %0.4f 小时',
    [HCost[1] * 60, HCost[2] * 60, HCost[3] * 60, HCost[0] * 60, HCost[0]]);

  P1.Edit;
  if Adde then begin
    P1['备注'] := P1['结束时间'];
    P1['结束时间'] := P1['开始时间'] + 1 / 24;
  end;
  P1['娱乐金额'] := Sum1;
  P1['酒水金额'] := Sum2;
  P1['折扣比率'] := Toff;
  P1['实收金额'] := Sum1 + Sum2 + P1['租拍金额'];
  P1['日期'] := LDate;
  P1.Post;
end;

procedure TLeftForm.FormCreate(Sender: TObject);
begin
  Self.BorderStyle := bsSizeable;
  QuickRep1.Hide;
  Edit4.Readonly := not Systemor;
  DM.BALL00.OPEN;
  DM.WATER.OPEN;
  DM.RATE.OPEN;
  P1.SQL.Text :=
    'Select 娱乐类别, 名称, B.*, 24*(结束时间-开始时间) ' +
    'as 消费时间 from ball00 A, ball01 B where A.娱乐类别' +
    '=B.娱乐类别 and not B.结帐标志 = TRUE';
  P1.Open;
  while not P1.Eof do begin
    Edit1.Items.Add(P1['流水号']);
    P1.Next;
  end;
  Edit4.Text := FormatDateTime(' hh"点" nn"分" ss"秒"', LTime);
end;

procedure TLeftForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  DM.BALL00.Close;
  DM.WATER.Close;
  DM.RATE.Close;
end;

procedure TLeftForm.FormActivate(Sender: TObject);
begin
  LTime := Now;
end;

procedure TLeftForm.Button3Click(Sender: TObject);
begin
  Close;
end;

procedure TLeftForm.Button1Click(Sender: TObject);
var
  T: TDateTime;
  S: string;
begin
  if Edit1.ItemIndex = -1 then Exit;
  if VarIsNull(P1['结束时间']) then begin
    P1.Edit;
    P1['结束时间'] := LTime;
    P1.Post;
    if PPart3 then begin //  补充最后截钟记录
      P3.Last;
      while P3['流水号'] <> LKey do P3.Prior;
      T := P3['结束时间'];
      P3.Append;
      P3['流水号'] := LKey;
      P3['开始时间'] := T;
      P3['结束时间'] := LTime;
      P3.Post;
    end;
    Edit4.Text := FormatDateTime(' hh"点" nn"分" ss"秒"', LTime);
  end;

  CalCulate(Self);
  S := P1.Text;
  P1.SQL.Text := format('%s and 流水号=%d',[S, LKey]);
  P1.Open;
  Printout(Self);
  P1.SQL.Text := S;
  P1.Open;
  Edit1Click(nil);
  Button2.Enabled := True;
end;

procedure TLeftForm.Timer1Timer(Sender: TObject);
begin
  Showtime(Image1);
  LTime := Now;
end;

procedure TLeftForm.PrintOut(Sender: TObject);
begin
  Enabled := False;
  QuickRep1.Prepare;
  Showmessage(inttostr(QuickRep1.QRPrinter.PageCount));
  QuickRep1.Preview;
  Enabled := True;
end;

procedure TLeftForm.QuickRep1Preview(Sender: TObject);
begin
  Application.CreateForm(TPreview, Preview);
  Preview.QRPreview1.QRPrinter := TQRPrinter(Sender);
  Preview.Show;
end;

procedure TLeftForm.PrintBall02(Sender: TQRCustomBand;
  var PrintBand: Boolean);
begin
  PrintBand := PPart2;
end;

procedure TLeftForm.QRBand4BeforePrint(Sender: TQRCustomBand;
  var PrintBand: Boolean);
begin
  PrintBand := PPart3;
end;

procedure TLeftForm.P1AfterPost(DataSet: TDataSet);
begin
  if DataSet = P1 then P1.ApplyUpdates;
  TQuery(DataSet).FlushBuffers;
end;

procedure TLeftForm.Edit1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
  if odSelected in State then Begin
    Edit1.Canvas.Brush.Color := clBlue;
  End;
  Edit1.Canvas.FillRect(Rect);
  Edit1.Canvas.TextOut(Rect.Left + 20, Rect.Top + 1, '流水号:' + Edit1.Items[Index]);
end;

procedure TLeftForm.Button2Click(Sender: TObject);
begin
  if Edit1.ItemIndex = -1 then Exit;
  if not P1.Locate('流水号', Edit1.Text, []) then Exit;
//  Edit1.ItemIndex := -1;
  Edit1Click(nil);
  P1.Edit;
  P1['结帐标志'] := True;
  P1.Post;
  Edit1.DeleteSelected;
end;

procedure TLeftForm.FormCanResize(Sender: TObject; var NewWidth,
  NewHeight: Integer; var Resize: Boolean);
begin
  NewHeight := 441;
end;

end.

⌨️ 快捷键说明

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