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

📄 csh510_01.pas.svn-base

📁 开源的网站整站程序,功能强大带采集系统.
💻 SVN-BASE
字号:
unit Csh510_01;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Bas200_08, dxExEdtr, ActnList, DB, ADODB, Menus, dxCntner, dxTL,
  dxDBCtrl, dxDBGrid, ExtCtrls, ComCtrls,
  ToolWin, StdCtrls, Buttons, wwdbdatetimepicker, dxDBTLCl, dxGrClms, Mask,
  wwdbedit, Wwdotdot;

type
  TCsh510_01Form = class(TBas200_08Form)
    lblAcct: TLabel;
    cbAccNm: TComboBox;
    lblDate: TLabel;
    edtFromDate: TwwDBDateTimePicker;
    edtToDate: TwwDBDateTimePicker;
    qryCsh550: TADOQuery;
    PopupMenu2: TPopupMenu;
    ADOQuery1: TADOQuery;
    ADOQuery2: TADOQuery;
    miIncome: TMenuItem;
    miTransfer: TMenuItem;
    sbSearch: TSpeedButton;
    ADODataSet1FDate: TDateField;
    ADODataSet1FCode: TStringField;
    ADODataSet1FBrief: TStringField;
    ADODataSet1FIncome: TFloatField;
    ADODataSet1FPay: TFloatField;
    ADODataSet1FBalance: TFloatField;
    dxDBGrid1FDate: TdxDBGridDateColumn;
    dxDBGrid1FCode: TdxDBGridMaskColumn;
    dxDBGrid1FBrief: TdxDBGridMaskColumn;
    dxDBGrid1FIncome: TdxDBGridMaskColumn;
    dxDBGrid1FPay: TdxDBGridMaskColumn;
    dxDBGrid1FBalance: TdxDBGridMaskColumn;
    ADOQuery1C510A_001: TWideStringField;
    ADOQuery1C510A_002: TIntegerField;
    ADOQuery1C510A_003: TIntegerField;
    ADOQuery1C510A_004: TSmallintField;
    ADOQuery1C510A_005: TSmallintField;
    ADOQuery1C510A_006: TSmallintField;
    ADOQuery1C510A_007: TSmallintField;
    ADOQuery1C510A_008: TIntegerField;
    ADOQuery1C510A_009: TFloatField;
    ADOQuery1C510A_010: TDateTimeField;
    ADOQuery1C510A_011: TWideStringField;
    ADOQuery1C510A_012: TIntegerField;
    ADOQuery1C510A_013: TFloatField;
    ADOQuery1C510A_014: TWideStringField;
    ADOQuery1C510A_015: TWideStringField;
    ADOQuery1C510A_016: TDateTimeField;
    ADOQuery1C510A_017: TWideStringField;
    ADOQuery1C510A_018: TDateTimeField;
    ADOQuery1C510A_019: TWideStringField;
    ADODataSet1FBillNo: TIntegerField;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure sbSearchClick(Sender: TObject);
    procedure cbAccNmChange(Sender: TObject);
    procedure MenuItemClick(Sender: TObject);
    procedure dxDBGrid1AMT01DrawSummaryFooter(Sender: TObject;
      ACanvas: TCanvas; ARect: TRect; var AText: String;
      var AAlignment: TAlignment; AFont: TFont; var AColor: TColor;
      var ADone: Boolean);
    procedure dxDBGrid1AMT02DrawSummaryFooter(Sender: TObject;
      ACanvas: TCanvas; ARect: TRect; var AText: String;
      var AAlignment: TAlignment; AFont: TFont; var AColor: TColor;
      var ADone: Boolean);
  private
    AIncome, APayment:Double;
    { Private declarations }
  public
    procedure SetInterface; override;
    procedure InsertEvent; override;
    procedure UpdateEvent; override;
    procedure DeleteEvent; override;
    procedure BrowseEvent; override;
    procedure RefreshEvent; override;
    procedure ReportGetValue(const ParName: String; var ParValue: Variant); override;
    { Public declarations }
  end;

var
  Csh510_01Form: TCsh510_01Form;

implementation

uses CommFun, SYSDATA, CshComm, Csh510_02, Csh510_04;

{$R *.dfm}

procedure TCsh510_01Form.MenuItemClick(Sender: TObject);
var
  AcctNo:Integer;
begin
  AcctNo:=qryCsh550.FieldByName('C550_001').Value;
  if TMenuItem(Sender).Tag=1 then
  begin
    Csh510_02Form:=TCsh510_02Form.Create(Application);
    Csh510_02Form.OpenData('');
    Csh510_02Form.ActInsert.Execute;
    Csh510_02Form.ShowModal;
  end else //转帐单
  begin
    Csh510_04Form:=TCsh510_04Form.Create(Application);
    Csh510_04Form.OpenData(AcctNo,0,0);
    Csh510_04Form.ShowModal;
  end;
  sbSearch.Click
end;

procedure TCsh510_01Form.SetInterface;
begin
  inherited;
  Caption:=GetDBString('CSH51001001');  //出纳帐本
  lblAcct.Caption:=GetDBString('CSH51001002');  //帐户
  lblDate.Caption:=GetDBString('CSH51001003');  //日期
  sbSearch.Caption:=GetDBString('CSH51001004');  //查询

  ADODataSet1.Close;
  ADODataSet1.CreateDataSet;
  ADODataSet1.FieldByName('FDate').DisplayLabel:=GetDBString('CSH51001003');    //日期
  ADODataSet1.FieldByName('FCode').DisplayLabel:=GetDBString('CSH51001005');    //票据编号
  ADODataSet1.FieldByName('FBrief').DisplayLabel:=GetDBString('CSH51001006');   //摘要
  ADODataSet1.FieldByName('FIncome').DisplayLabel:=GetDBString('CSH51001007');  //收入
  ADODataSet1.FieldByName('FPay').DisplayLabel:=GetDBString('CSH51001008');     //支出
  ADODataSet1.FieldByName('FBalance').DisplayLabel:=GetDBString('CSH51001009'); //余额

  miIncome.Caption:=GetDBString('CSH51001010');  //收支单(&D)...
  miTransfer.Caption:=GetDBString('CSH51001011');  //转帐单(&T)...
end;

procedure TCsh510_01Form.FormCreate(Sender: TObject);
begin
  inherited;
  //取得当月起始&结束日期
  edtFromDate.Date:=GetMonthFirstDate(Date);
  edtToDate.Date:=GetMonthEndDate(Date);
  //取得所有帐户名称
  GetAllAcct(cbAccNm,qryCsh550);
  sbSearch.Click;
end;

procedure TCsh510_01Form.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  inherited;
  qryCsh550.Close;
end;

procedure TCsh510_01Form.sbSearchClick(Sender: TObject);
var
  AccNo:Integer;
  AFromDate,AToDate:TDateTime;
begin
  inherited;
//查询
  if cbAccNm.Text='' then Exit;
  if (edtFromDate.Text='') or (edtToDate.Text='') then
  begin
    ShowMsg('UMS10000156');  //起始日期或结束日期不能为空
    if edtFromDate.Text='' then edtFromDate.SetFocus else edtToDate.SetFocus;
    Abort;
  end;
  AFromDate:=edtFromDate.Date;
  AToDate:=edtToDate.Date;
  if AFromDate>AToDate then
  begin
    ShowMsg('UMS10000044');  //起始日期不能大于结束日期
    edtFromDate.SetFocus;
    Abort;
  end;
  AIncome:=0;
  APayment:=0;
  //建立出纳总帐临时表
  ADODataSet1.DisableControls;
  ADODataSet1.Close;
  ADODataSet1.CreateDataSet;
  //取得帐户资料
  qryCsh550.Close;
  qryCsh550.SQL.Clear;
  if ASuper then
  begin
    qryCsh550.SQL.Add('select * from CSH550');
  end else
  begin
    qryCsh550.SQL.Add('select * from SYS500C A, CSH550 B');
    qryCsh550.SQL.Add('where A.S500C_002=B.C550_001 and A.S500C_003=''ACC'' and A.S500C_004='+GetBoolean(True)+' and A.S500C_001='+IntToStr(AUserID));
  end;
  qryCsh550.Open;
  qryCsh550.Locate('C550_002',cbAccNm.Text,[loCaseInsensitive]);
  AccNo:=qryCsh550.FieldByName('C550_001').Value;
  //取得帐户的期初余额
  ADODataSet1.Append;
  ADODataSet1.FieldByName('FDate').AsString:='';
  ADODataSet1.FieldByName('FCode').AsString:='';
  ADODataSet1.FieldByName('FBrief').Value:=GetDBString('CSH51001017');  //期初余额
  ADODataSet1.FieldByName('FIncome').AsString:='';
  ADODataSet1.FieldByName('FPay').AsString:='';
  ADODataSet1.FieldByName('FBalance').Value:=GetAccAmount(AccNo, AFromDate, AToDate, 1);
  ADODataSet1.Post;
  //取得帐户收支明细资料
  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('select * from CSH510A where C510A_004<>0 and C510A_003='+IntToStr(AccNo));
  ADOQuery1.SQL.Add(' and C510A_010>='+GetDateString(edtFromDate.Date)+' and C510A_010<='+GetDateString(edtToDate.Date));
  ADOQuery1.SQL.Add('order by C510A_001, C510A_002');
  ADOQuery1.Open;
  while not ADOQuery1.Eof do
  begin
    ADODataSet1.Append;
    ADODataSet1.FieldByName('FDate').Value:=ADOQuery1.FieldByName('C510A_010').Value;      //收支日期
    ADODataSet1.FieldByName('FCode').Value:=ADOQuery1.FieldByName('C510A_001').AsString;   //单据编号
    ADODataSet1.FieldByName('FBrief').Value:=ADOQuery1.FieldByName('C510A_015').Value;     //摘要说明
    if ADOQuery1.FieldByName('C510A_005').Value=0 then   //收入
    begin
      ADODataSet1.FieldByName('FIncome').Value:=ADOQuery1.FieldByName('C510A_009').Value;  //收支金额
      ADODataSet1.FieldByName('FPay').AsString:='';
    end else
    if ADOQuery1.FieldByName('C510A_005').Value=1 then   //支出
    begin
      ADODataSet1.FieldByName('FIncome').AsString:='';
      ADODataSet1.FieldByName('FPay').Value:=ADOQuery1.FieldByName('C510A_009').Value;     //收支金额
    end;
    ADODataSet1.FieldByName('FBalance').Value:=ADOQuery1.FieldByName('C510A_013').Value;   //帐户余额
    ADODataSet1.FieldByName('FBillNo').Value:=ADOQuery1.FieldByName('C510A_002').Value;    //单据编号
    ADODataSet1.Post;
    ADOQuery1.Next;
  end;
  //收入、支出合计
  AIncome:=GetAccAmount(AccNo, edtFromDate.Date, edtToDate.Date, 2);
  APayment:=GetAccAmount(AccNo, edtFromDate.Date, edtToDate.Date, 3);
  ADODataSet1.EnableControls;
end;

procedure TCsh510_01Form.cbAccNmChange(Sender: TObject);
begin
  inherited;
  sbSearch.Click;
end;

procedure TCsh510_01Form.ReportGetValue(const ParName: String;
  var ParValue: Variant);
begin
  inherited;

end;

procedure TCsh510_01Form.dxDBGrid1AMT01DrawSummaryFooter(Sender: TObject;
  ACanvas: TCanvas; ARect: TRect; var AText: String;
  var AAlignment: TAlignment; AFont: TFont; var AColor: TColor;
  var ADone: Boolean);
begin
  inherited;
//收入合计
  if VarToStr(AIncome)<>'' then AText:=FloatToStrF(AIncome,ffCurrency,18,2);
  AColor := clWhite;
end;

procedure TCsh510_01Form.dxDBGrid1AMT02DrawSummaryFooter(Sender: TObject;
  ACanvas: TCanvas; ARect: TRect; var AText: String;
  var AAlignment: TAlignment; AFont: TFont; var AColor: TColor;
  var ADone: Boolean);
begin
  inherited;
//支出合计
  if VarToStr(APayment)<>'' then AText:=FloatToStrF(APayment,ffCurrency,18,2);
  AColor := clWhite;
end;

procedure TCsh510_01Form.RefreshEvent;
begin
  inherited;
  sbSearch.Click;
end;

procedure TCsh510_01Form.BrowseEvent;
var
  ACsh510_02Form:TCsh510_02Form;
begin
  inherited;
  if ADODataSet1.FieldByName('FCode').AsString='' then Abort;
  ACsh510_02Form:=TCsh510_02Form.Create(Application);
  ACsh510_02Form.OpenData(ADODataSet1.FieldByName('FCode').AsString);
  ACsh510_02Form.ShowModal;
end;

procedure TCsh510_01Form.DeleteEvent;
var
  AccNo:Integer;  //帐户编号
  ADate:TDateTime;  //日期
  ABillNo,ABillNo1:Integer;  //票据编号
  ATypeNo,AObjType,ACustNo,ACurrNo:Integer;
  ADate1:TDateTime;  //日期
  AAmount:Double;
  ACode:string;
begin
  inherited;
//删除
  if ADODataSet1.IsEmpty then Exit;
  if ADODataSet1FCode.Value='' then Exit;
  if ShowDialog('UMS10000008')=IDNO then Abort; //确定要删除此记录吗?
  //取得帐户编号、日期、票据编号
  SYSDM.qryQuery.Close;
  SYSDM.qryQuery.SQL.Clear;
  SYSDM.qryQuery.SQL.Add('select C550_001,C550_005 from CSH550 where C550_002='+''''+cbAccNm.Text+'''');
  SYSDM.qryQuery.Open;
  AccNo:=SYSDM.qryQuery.FieldByName('C550_001').Value;
  ACurrNo:=SYSDM.qryQuery.FieldByName('C550_005').Value;
  ADate:=ADODataSet1FDate.Value;
  ABillNo:=ADODataSet1.FieldByName('FBillNo').AsInteger;
  //取得单据类型
  SYSDM.qryQuery.Close;
  SYSDM.qryQuery.SQL.Clear;
  SYSDM.qryQuery.SQL.Add('select C510A_003,C510A_004,C510A_008,C510A_009,C510A_007 from CSH510A where C510A_003='+IntToStr(AccNo)+' and C510A_010='+GetDateString(ADate)+' and C510A_002='+IntToStr(ABillNo));
  SYSDM.qryQuery.Open;
  ATypeNo:=SYSDM.qryQuery.FieldByName('C510A_004').Value;
  AObjType:=SYSDM.qryQuery.FieldByName('C510A_007').Value;
  ACustNo:=SYSDM.qryQuery.FieldByName('C510A_008').AsInteger;
  AAmount:=SYSDM.qryQuery.FieldByName('C510A_009').Value;
  //删除记录  应该删除主表和从表
  SYSDM.qryQuery.Close;
  SYSDM.qryQuery.SQL.Clear;
  SYSDM.qryQuery.SQL.Add('select C510A_001 from CSH510A where C510A_003='+IntToStr(AccNo)+' and C510A_010='+GetDateString(ADate)+' and C510A_002='+IntToStr(ABillNo));
  SYSDM.qryQuery.Open;
  ACode:=SYSDM.qryQuery.FieldByName('C510A_001').Value;

  SYSDM.qryQuery.Close;
  SYSDM.qryQuery.SQL.Clear;
  SYSDM.qryQuery.SQL.Add('delete from CSH510B where C510B_001='+''''+ACode+'''');
  SYSDM.qryQuery.ExecSQL;

  SYSDM.qryQuery.Close;
  SYSDM.qryQuery.SQL.Clear;
  SYSDM.qryQuery.SQL.Add('delete from CSH510A where C510A_001='+''''+ACode+'''');
  SYSDM.qryQuery.ExecSQL;

  //取上条记录的日期&编号
  GetPriorRecord(AccNo,ADate,ABillNo,ADate1,ABillNo1);
  //计算余额
  ReCalcBalance(AccNo,ADate1,ABillNo1);
  sbSearch.Click;
  if ATypeNo=3 then  //转帐单  
  begin
    //取得相关的帐户编号
    SYSDM.qryQuery.Close;
    SYSDM.qryQuery.SQL.Clear;
    SYSDM.qryQuery.SQL.Add('select C510A_003,C510A_004 from CSH510A where C510A_004=3 and C510A_003<>'+IntToStr(AccNo)+' and C510A_010='+GetDateString(ADate)+' and C510A_002='+IntToStr(ABillNo));
    SYSDM.qryQuery.Open;
    AccNo:=SYSDM.qryQuery.FieldByName('C510A_003').Value;
    //删除记录
    SYSDM.qryQuery.Close;
    SYSDM.qryQuery.SQL.Clear;
    SYSDM.qryQuery.SQL.Add('select C510A_001 from CSH510A where C510A_003='+IntToStr(AccNo)+' and C510A_010='+GetDateString(ADate)+' and C510A_002='+IntToStr(ABillNo));
    SYSDM.qryQuery.Open;
    ACode:=SYSDM.qryQuery.FieldByName('C510A_001').Value;

    SYSDM.qryQuery.Close;
    SYSDM.qryQuery.SQL.Clear;
    SYSDM.qryQuery.SQL.Add('delete from CSH510B where C510B_001='+''''+ACode+'''');
    SYSDM.qryQuery.ExecSQL;

    SYSDM.qryQuery.Close;
    SYSDM.qryQuery.SQL.Clear;
    SYSDM.qryQuery.SQL.Add('delete from CSH510A where C510A_001='+''''+ACode+'''');
    SYSDM.qryQuery.ExecSQL;

    //取上条记录的日期&编号
    GetPriorRecord(AccNo,ADate,ABillNo,ADate1,ABillNo1);
    //计算余额
    ReCalcBalance(AccNo,ADate1,ABillNo1);
  end;
  //删除债权债务帐本表
  if AObjType<>2 then
  begin
    UpdateCSH610(AObjType,ACustNo,ACurrNo,0,0,ABillNo,0,ADate,AAmount,'','','DEL');
  end;
end;

procedure TCsh510_01Form.InsertEvent;
var
  APoint:TPoint;
begin
  inherited;
  APoint:=tlbInsert.ClientToScreen(Point(0, tlbInsert.ClientHeight));
  PopupMenu2.Popup(APoint.X,APoint.Y);
end;

procedure TCsh510_01Form.UpdateEvent;
var
  AcctNo,ABillNo:Integer;
  ADate:TDateTime;
  ACode:string;
begin
  inherited;
  ACode:=ADODataSet1.FieldByName('FCode').Value;
  if ACode='' then Exit;
  if ADOQuery1.Locate('A510A_001',ACode,[]) then
  begin
    if ADOQuery1.FieldByName('C510A_004').Value<>3 then
    begin
      Csh510_02Form:=TCsh510_02Form.Create(Application);
      Csh510_02Form.OpenData(ACode);
      Csh510_02Form.ActUpdate.Execute;
      Csh510_02Form.ShowModal;
    end else //转帐单
    begin
      AcctNo:=ADOQuery1.FieldByName('C510A_003').Value;
      ADate:=ADOQuery1.FieldByName('C510A_010').Value;
      ABillNo:=ADOQuery1.FieldByName('C510A_002').Value;
      Csh510_04Form:=TCsh510_04Form.Create(Application);
      Csh510_04Form.OpenData(AcctNo,ADate,ABillNo);
      Csh510_04Form.ShowModal;
    end;
    sbSearch.Click;
  end;
end;

initialization
  RegisterClass(TCsh510_01Form);

finalization
  UnRegisterClass(TCsh510_01Form);

end.

⌨️ 快捷键说明

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