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

📄 jizhang.pas

📁 家庭收支管理
💻 PAS
字号:
unit jizhang;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, GridsEh, DBGridEh, ComCtrls, DBCtrlsEh, Mask, ExtCtrls,
  jpeg;

type
  TJizhangForm = class(TForm)
    GroupBox1: TGroupBox;
    Label1: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label7: TLabel;
    Button1: TButton;
    Label6: TLabel;
    Button2: TButton;
    Button3: TButton;
    GroupBox2: TGroupBox;
    dt_date: TDBDateTimeEditEh;
    DBGridEh: TDBGridEh;
    edt_number: TDBNumberEditEh;
    edt_note: TDBEditEh;
    edt_account: TDBEditEh;
    edt_szcode: TDBEditEh;
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    tvw_account: TTreeView;
    tvw_szcode: TTreeView;
    edt_aaccount: TDBEditEh;
    TabSheet3: TTabSheet;
    tvw_aaccount: TTreeView;
    Button4: TButton;
    TabSheet4: TTabSheet;
    Image: TImage;
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure edt_accountEnter(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure edt_szcodeChange(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Button3Click(Sender: TObject);
    procedure dt_dateEnter(Sender: TObject);
    procedure edt_numberEnter(Sender: TObject);
    procedure WMNCHitTest(var Msg:TMessage);message WM_NCHITTEST;
    procedure tvw_accountClick(Sender: TObject);
    procedure tvw_szcodeClick(Sender: TObject);
    procedure tvw_aaccountClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure JiZhangStart;
  end;

var
  JizhangForm: TJizhangForm;

implementation

{$R *.dfm}

uses DataModule;

procedure TJizhangForm.WMNCHitTest(var Msg:TMessage);
begin
  inherited;
  Msg.Result:=HTCLIENT;
end;

procedure TJizhangForm.JiZhangStart;
begin
  DataForm.ABSQuery1.SQL.Clear;
  DataForm.ABSQuery1.SQL.Add('insert into szData (select * from lrk)');
  DataForm.ABSQuery1.ExecSQL;
  DataForm.ABSQuery1.SQL.Clear;
  DataForm.ABSQuery1.SQL.Add('update zhanghu set Present=Present+:cs1 where Account=:cs2');
  DataForm.tbl_Lrk.DisableControls;
  DataForm.tbl_Lrk.First;
  while not DataForm.tbl_Lrk.Eof do
  begin
    DataForm.ABSQuery1.ParamByName('cs1').AsFloat:=DataForm.tbl_Lrk.FieldByName('income').AsFloat-DataForm.tbl_Lrk.FieldByName('Payout').AsFloat;
    DataForm.ABSQuery1.ParamByName('cs2').AsString:=DataForm.tbl_Lrk.FieldByName('Account').AsString;
    DataForm.ABSQuery1.ExecSQL;
    DataForm.tbl_Lrk.Next;
  end;
  DataForm.ABSQuery1.SQL.Clear;
  DataForm.ABSQuery1.SQL.Add('delete from lrk');
  DataForm.ABSQuery1.ExecSQL;
  DataForm.tbl_Lrk.EnableControls;
  DataForm.tbl_Lrk.Refresh;
  if DataForm.tbl_Account.Active then
  begin
    DataForm.tbl_Account.Close;
    DataForm.tbl_Account.Open;
  end;  
end;

procedure TJizhangForm.FormKeyPress(Sender: TObject; var Key: Char);
begin
  if Key=#13 then
  begin
    Key:=#0;
    Perform(CM_DialogKey,VK_TAB,0);
  end;  
end;

procedure TJizhangForm.edt_accountEnter(Sender: TObject);
begin
  PageControl1.ActivePageIndex:=(Sender as TDBEditEh).Tag;
end;

procedure TJizhangForm.FormCreate(Sender: TObject);
var
  Root0,Root1,Child:TTreeNode;
  i,bj:integer;
  fn:string;
begin
  if FileExists('Treeview.jpg') then Image.Picture.LoadFromFile('Treeview.jpg');
  tvw_Account.Items.Clear;
  Root0:=tvw_Account.Items.AddFirst(nil,'可选择账户列表');
  Root0.ImageIndex:=0;
  Root0.SelectedIndex:=0;
  bj:=-1;
  DataForm.ABSQuery1.SQL.Clear;
  DataForm.ABSQuery1.SQL.Add('select AccountType,Account,AccountName,Apply from zhanghu order by AccountType,Account');
  DataForm.ABSQuery1.Open;
  DataForm.ABSQuery1.First;
  while not DataForm.ABSQuery1.Eof do
  begin
    i:=DataForm.ABSQuery1.FieldByName('AccountType').AsInteger;
    fn:='('+DataForm.ABSQuery1.FieldByName('Account').AsString+')'+DataForm.ABSQuery1.FieldByName('AccountName').AsString;
    if DataForm.ABSQuery1.FieldByName('Apply').AsBoolean then
    begin
      if i<>bj then
      begin
        bj:=i;
        case i of
          0:Root1:=tvw_Account.Items.AddChild(Root0,'现金类');
          1:Root1:=tvw_Account.Items.AddChild(Root0,'存款类');
          2:Root1:=tvw_Account.Items.AddChild(Root0,'投资类');
          3:Root1:=tvw_Account.Items.AddChild(Root0,'贷款类');
          4:Root1:=tvw_Account.Items.AddChild(Root0,'其他类');
          //0:Root1:=tvw_Account.Items.Add(nil,'现金类');
          //1:Root1:=tvw_Account.Items.Add(nil,'存款类');
          //2:Root1:=tvw_Account.Items.Add(nil,'投资类');
          //3:Root1:=tvw_Account.Items.Add(nil,'其他类');
        end;
        Root1.ImageIndex:=1;
        Root1.SelectedIndex:=1;
      end;
      Child:=tvw_Account.Items.AddChild(Root1,fn);
      Child.ImageIndex:=2;
      Child.SelectedIndex:=3;
    end;
    DataForm.ABSQuery1.Next;
  end;
  tvw_Account.FullExpand;
  tvw_Account.Selected:=tvw_Account.Items.GetFirstNode;

  tvw_szcode.Items.Clear;
  Root0:=tvw_szcode.Items.AddFirst(nil,'可选择交易类别列表');
  Root0.ImageIndex:=0;
  Root0.SelectedIndex:=0;
  bj:=-1;

  DataForm.ABSQuery1.SQL.Clear;
  DataForm.ABSQuery1.SQL.Add('select szType,szCode,szName from szType order by szType,szCode');
  DataForm.ABSQuery1.Open;
  DataForm.ABSQuery1.First;
  while not DataForm.ABSQuery1.Eof do
  begin
    i:=DataForm.ABSQuery1.FieldByName('szType').AsInteger;
    fn:='('+DataForm.ABSQuery1.FieldByName('szCode').AsString+')'+DataForm.ABSQuery1.FieldByName('szName').AsString;
    if i<>bj then
    begin
      bj:=i;
      case i of
        0:Root1:=tvw_szcode.Items.AddChild(Root0,'内部核算');
        1:Root1:=tvw_szcode.Items.AddChild(Root0,'收入分类');
        2:Root1:=tvw_szcode.Items.AddChild(Root0,'食品支出');
        3:Root1:=tvw_szcode.Items.AddChild(Root0,'用品支出');
        4:Root1:=tvw_szcode.Items.AddChild(Root0,'费用支出');
        9:Root1:=tvw_szcode.Items.AddChild(Root0,'其他支出');
      end;
      Root1.ImageIndex:=1;
      Root1.SelectedIndex:=1;
    end;
    Child:=tvw_szcode.Items.AddChild(Root1,fn);
    Child.ImageIndex:=2;
    Child.SelectedIndex:=3;
    DataForm.ABSQuery1.Next;
  end;
  tvw_szcode.FullExpand;
  tvw_szcode.Selected:=tvw_szcode.Items.GetFirstNode;

  tvw_aaccount.Items.Assign(tvw_account.Items);
  tvw_aaccount.FullExpand;
  tvw_Aaccount.Selected:=tvw_Aaccount.Items.GetFirstNode;

  dt_date.Value:=date;

  DataForm.DataSource.DataSet:=DataForm.tbl_Lrk;
  DBGridEh.DataSource:=DataForm.DataSource;
  DataForm.tbl_Lrk.Open;
  DataForm.tbl_WorkNo.Open;
end;

procedure TJizhangForm.Button1Click(Sender: TObject);
var rcn:longint;
begin
  if (edt_account.Text='') or (edt_szcode.Text='') or (edt_number.Value=0) or (edt_number.Text='') or (edt_aaccount.Enabled and (edt_aaccount.Text='')) then
  begin
    application.MessageBox('当前录入数据不完整,不能保存!','提示信息',MB_OK+MB_ICONERROR);
    exit;
  end;  
  //读取日志号
  rcn:=DataForm.tbl_WorkNo.FieldByName('RecNo').AsInteger;
  DataForm.tbl_WorkNo.Edit;
  DataForm.tbl_WorkNo.FieldByName('RecNo').AsInteger:=rcn+1;
  DataForm.tbl_WorkNo.CheckBrowseMode;
  //保存数据
  if copy(edt_szCode.Text,2,6)='000000' then   //内部转账
  begin
    DataForm.tbl_Lrk.Append;
    DataForm.tbl_Lrk.FieldByName('RecNo').AsInteger:=rcn;
    DataForm.tbl_Lrk.FieldByName('szDate').AsVariant:=dt_date.Text;
    DataForm.tbl_Lrk.FieldByName('Account').AsString:=copy(edt_account.Text,2,10);
    DataForm.tbl_Lrk.FieldByName('szCode').AsString:=copy(edt_szCode.Text,2,6);
    DataForm.tbl_Lrk.FieldByName('income').AsFloat:=0;
    DataForm.tbl_Lrk.FieldByName('payout').AsFloat:=edt_number.Value;
    DataForm.tbl_Lrk.FieldByName('Aaccount').AsString:=copy(edt_aaccount.Text,2,10);
    DataForm.tbl_Lrk.FieldByName('Note').AsString:=edt_note.Text;
    DataForm.tbl_Lrk.CheckBrowseMode;
    DataForm.tbl_Lrk.Append;
    DataForm.tbl_Lrk.FieldByName('RecNo').AsInteger:=rcn;
    DataForm.tbl_Lrk.FieldByName('szDate').AsVariant:=dt_date.Text;
    DataForm.tbl_Lrk.FieldByName('Account').AsString:=copy(edt_aaccount.Text,2,10);
    DataForm.tbl_Lrk.FieldByName('szCode').AsString:=copy(edt_szCode.Text,2,6);
    DataForm.tbl_Lrk.FieldByName('income').AsFloat:=edt_number.Value;
    DataForm.tbl_Lrk.FieldByName('payout').AsFloat:=0;
    DataForm.tbl_Lrk.FieldByName('Aaccount').AsString:=copy(edt_account.Text,2,10);
    DataForm.tbl_Lrk.FieldByName('Note').AsString:=edt_note.Text;
    DataForm.tbl_Lrk.CheckBrowseMode;
  end else begin    //非内部转账
    DataForm.tbl_Lrk.Append;
    DataForm.tbl_Lrk.FieldByName('RecNo').AsInteger:=rcn;
    DataForm.tbl_Lrk.FieldByName('szDate').AsVariant:=dt_date.Text;
    DataForm.tbl_Lrk.FieldByName('Account').AsString:=copy(edt_account.Text,2,10);
    DataForm.tbl_Lrk.FieldByName('szCode').AsString:=copy(edt_szCode.Text,2,6);
    if copy(edt_szCode.Text,2,3)='001' then begin   //收入
      DataForm.tbl_Lrk.FieldByName('income').AsFloat:=edt_number.Value;
      DataForm.tbl_Lrk.FieldByName('payout').AsFloat:=0;
    end else begin    //支出
      DataForm.tbl_Lrk.FieldByName('income').AsFloat:=0;
      DataForm.tbl_Lrk.FieldByName('payout').AsFloat:=edt_number.Value;
    end;
    DataForm.tbl_Lrk.FieldByName('Note').AsString:=edt_note.Text;
    DataForm.tbl_Lrk.CheckBrowseMode;
  end;
  edt_account.Text:='';
  edt_szcode.Text:='';
  edt_number.Text:='';
  edt_aaccount.Text:='';
  edt_aaccount.Enabled:=false;
  edt_aaccount.Color:=clbtnface;
  edt_note.Text:='';
  edt_account.SetFocus;
end;

procedure TJizhangForm.edt_szcodeChange(Sender: TObject);
begin
  if copy(edt_szCode.Text,2,6)='000000' then begin
    edt_aaccount.Enabled:=true;
    edt_aaccount.Color:=clwindow;
  end else begin
    edt_aaccount.Enabled:=false;
    edt_aaccount.Color:=clbtnface;
  end;  
end;

procedure TJizhangForm.Button2Click(Sender: TObject);
begin
  if application.MessageBox(pchar('您确定要删除日志号为 [ '+DataForm.tbl_Lrk.FieldByName('RecNo').AsString+' ] 的收支数据吗?'),'提示信息',MB_OKCANCEL+MB_ICONQUESTION)=ID_CANCEL then exit;
  DBGridEh.SumList.Active:=False;
  DataForm.tbl_Lrk.DisableControls;
  DataForm.ABSQuery1.SQL.Clear;
  DataForm.ABSQuery1.SQL.Add('delete from lrk where RecNo=:cs');
  DataForm.ABSQuery1.ParamByName('cs').AsInteger:=DataForm.tbl_Lrk.FieldByName('RecNo').AsInteger;
  DataForm.ABSQuery1.ExecSQL;
  DataForm.tbl_Lrk.EnableControls;
  DataForm.tbl_Lrk.Refresh;
  DBGridEh.SumList.Active:=True;
end;

procedure TJizhangForm.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  if DataForm.tbl_Lrk.RecordCount>0 then
    if application.MessageBox('存在已录入但没有记账的数据,您是否在退出前批量记账?','提示信息',MB_YESNO+MB_ICONQUESTION)=ID_YES then JiZhangStart;
  DataForm.tbl_Lrk.Close;
  DataForm.tbl_WorkNo.Close;
  DataForm.DataSource.DataSet:=nil;
  DBGridEh.DataSource:=nil;
  Action:=CaFree;
end;

procedure TJizhangForm.Button3Click(Sender: TObject);
begin
  if application.MessageBox('即将开始批量记账,您确定吗?','提示信息',MB_OKCANCEL+MB_ICONQUESTION)=ID_CANCEL then exit;
  JiZhangStart;
  DBGridEh.SumList.RecalcAll;
  application.MessageBox('收支数据已成功记入历史库!','提示信息',MB_OK+MB_ICONINFORMATION);
end;

procedure TJizhangForm.dt_dateEnter(Sender: TObject);
begin
  PageControl1.ActivePageIndex:=3;
end;

procedure TJizhangForm.edt_numberEnter(Sender: TObject);
begin
  PageControl1.ActivePageIndex:=3;
end;

procedure TJizhangForm.tvw_accountClick(Sender: TObject);
begin
  with tvw_Account do
    if Selected.Level=2 then
      edt_Account.Text:=Selected.Text
    else
      edt_Account.Text:='';
end;

procedure TJizhangForm.tvw_szcodeClick(Sender: TObject);
begin
  with tvw_szcode do
    if Selected.Level=2 then
      edt_szcode.Text:=Selected.Text
    else
      edt_szcode.Text:='';
end;

procedure TJizhangForm.tvw_aaccountClick(Sender: TObject);
begin
  with tvw_aaccount do
    if Selected.Level=2 then
      edt_Aaccount.Text:=Selected.Text
    else
      edt_Aaccount.Text:='';
end;

end.

⌨️ 快捷键说明

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