csh510_01.pas.svn-base

来自「一个用Delphi开发的ERP软件」· SVN-BASE 代码 · 共 388 行

SVN-BASE
388
字号
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;

type
  TCsh510_01Form = class(TBas200_08Form)
    lblAcct: TLabel;
    cbAccNm: TComboBox;
    lblDate: TLabel;
    edtFromDate: TwwDBDateTimePicker;
    edtToDate: TwwDBDateTimePicker;
    ADODataSet1BILDT: TDateTimeField;
    ADODataSet1BILNO: TStringField;
    ADODataSet1MEMO: TStringField;
    ADODataSet1AMT01: TBCDField;
    ADODataSet1AMT02: TBCDField;
    ADODataSet1AMT03: TBCDField;
    dxDBGrid1BILDT: TdxDBGridDateColumn;
    dxDBGrid1BILNO: TdxDBGridMaskColumn;
    dxDBGrid1MEMO: TdxDBGridMaskColumn;
    dxDBGrid1AMT01: TdxDBGridCurrencyColumn;
    dxDBGrid1AMT02: TdxDBGridCurrencyColumn;
    dxDBGrid1AMT03: TdxDBGridCurrencyColumn;
    qryCsh550: TADOQuery;
    PopupMenu2: TPopupMenu;
    ADOQuery1: TADOQuery;
    ADOQuery2: TADOQuery;
    miIncome: TMenuItem;
    miTransfer: TMenuItem;
    sbSearch: TSpeedButton;
    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:=GetValue('select C550_001 from CSH550 where C550_002='+''''+cbAccNm.Text+'''');
  if TMenuItem(Sender).Tag=1 then
  begin
    Csh510_02Form:=TCsh510_02Form.Create(Application);
    Csh510_02Form.OpenData(AcctNo,0,0);
    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');  //查询

  ADODataSet1BILDT.DisplayLabel:=GetDBString('CSH51001003');  //日期
  ADODataSet1BILNO.DisplayLabel:=GetDBString('CSH51001005');  //票据编号
  ADODataSet1MEMO.DisplayLabel:=GetDBString('CSH51001006');  //摘要
  ADODataSet1AMT01.DisplayLabel:=GetDBString('CSH51001007');  //收入
  ADODataSet1AMT02.DisplayLabel:=GetDBString('CSH51001008');  //支出
  ADODataSet1AMT03.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.FieldDefs.Clear;
  ADODataSet1.FieldDefs.Add('BILDT',ftDateTime,0);
  ADODataSet1.FieldDefs.Add('BILNO',ftString,20);
  ADODataSet1.FieldDefs.Add('MEMO',ftString,60);
  ADODataSet1.FieldDefs.Add('AMT01',ftCurrency,0);
  ADODataSet1.FieldDefs.Add('AMT02',ftCurrency,0);
  ADODataSet1.FieldDefs.Add('AMT03',ftCurrency,0);
  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 SYS500D A, CSH550 B');
    qryCsh550.SQL.Add('where A.S500D_003=B.C550_001 and A.S500D_002=''ACC'' and A.S500D_004=Yes and A.S500D_001= :S500A_001');
    qryCsh550.Parameters[0].Value:=AUserID;
  end;
  qryCsh550.Open;
  qryCsh550.Locate('C550_002',cbAccNm.Text,[loCaseInsensitive]);
  AccNo:=qryCsh550.FieldByName('C550_001').Value;
  //取得帐户的期初余额
  ADODataSet1.Append;
  ADODataSet1.FieldByName('BILDT').AsString:='';
  ADODataSet1.FieldByName('BILNO').AsString:='';
  ADODataSet1.FieldByName('MEMO').Value:=GetDBString('CSH51001017');  //期初余额
  ADODataSet1.FieldByName('AMT01').AsString:='';
  ADODataSet1.FieldByName('AMT02').AsString:='';
  ADODataSet1.FieldByName('AMT03').Value:=GetAccAmount(AccNo, AFromDate, AToDate, 1);
  ADODataSet1.Post;
  //取得帐户收支明细资料
  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('select * from CSH500 where C500_002<>0 and C500_001='+IntToStr(AccNo));
  ADOQuery1.SQL.Add(' and C500_003>='+GetDateString(edtFromDate.Date)+' and C500_003<='+GetDateString(edtToDate.Date));
  ADOQuery1.SQL.Add('order by C500_001, C500_003, C500_004');
  ADOQuery1.Open;
  while not ADOQuery1.Eof do
  begin
    ADODataSet1.Append;
    ADODataSet1.FieldByName('BILDT').Value:=ADOQuery1.FieldByName('C500_003').Value;
    ADODataSet1.FieldByName('BILNO').Value:=ADOQuery1.FieldByName('C500_004').AsString;
    ADODataSet1.FieldByName('MEMO').Value:=ADOQuery1.FieldByName('C500_009').Value;
    if ADOQuery1.FieldByName('C500_008').Value=0 then   //收入
    begin
      ADODataSet1.FieldByName('AMT01').Value:=ADOQuery1.FieldByName('C500_007').Value;
      ADODataSet1.FieldByName('AMT02').AsString:='';
    end else
    if ADOQuery1.FieldByName('C500_008').Value=1 then   //支出
    begin
      ADODataSet1.FieldByName('AMT01').AsString:='';
      ADODataSet1.FieldByName('AMT02').Value:=ADOQuery1.FieldByName('C500_007').Value;
    end;
    ADODataSet1.FieldByName('AMT03').Value:=ADOQuery1.FieldByName('C500_014').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;
  if ParName='BILL_DAT' then ParValue:=GetDBString('CSH51001003')  //日期
  else if ParName='BILL_NUM' then ParValue:=GetDBString('CSH51001005')  //票据编号
  else if ParName='MEMO_001' then ParValue:=GetDBString('CSH51001006')  //摘要
  else if ParName='AMOT_001' then ParValue:=GetDBString('CSH51001007')  //收入
  else if ParName='AMOT_002' then ParValue:=GetDBString('CSH51001008')  //支出
  else if ParName='AMOT_003' then ParValue:=GetDBString('CSH51001009')  //余额
  else if ParName='ACCT_NAM' then ParValue:=GetDBString('CSH51001019')+cbAccNm.Text  //帐户名称:
  else if ParName='DATE_001' then ParValue:=GetDBString('CSH51001020')+edtFromDate.Text  //起始日期:
  else if ParName='DATE_002' then ParValue:=GetDBString('CSH51001021')+edtToDate.Text  //结束日期:
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;
begin
  inherited;
  if ActUpdate.Enabled then ActUpdate.Execute;
end;

procedure TCsh510_01Form.DeleteEvent;
var
  AccNo:Integer;  //帐户编号
  ADate:TDateTime;  //日期
  ABillNo,ABillNo1:Integer;  //票据编号
  ATypeNo,AObjType,ACustNo,ACurrNo:Integer;  
  ADate1:TDateTime;  //日期
  AAmount:Double;
begin
  inherited;
//删除
  if ADODataSet1.IsEmpty then Exit;
  if ADODataSet1BILNO.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:=ADODataSet1BILDT.Value;
  ABillNo:=ADODataSet1BILNO.AsInteger;
  //取得单据类型
  SYSDM.qryQuery.Close;
  SYSDM.qryQuery.SQL.Clear;
  SYSDM.qryQuery.SQL.Add('select C500_001,C500_002,C500_005,C500_007,C500_015 from CSH500 where C500_001='+IntToStr(AccNo)+' and C500_003='+GetDateString(ADate)+' and C500_004='+IntToStr(ABillNo));
  SYSDM.qryQuery.Open;
  ATypeNo:=SYSDM.qryQuery.FieldByName('C500_002').Value;
  AObjType:=SYSDM.qryQuery.FieldByName('C500_015').Value;
  ACustNo:=SYSDM.qryQuery.FieldByName('C500_005').AsInteger;
  AAmount:=SYSDM.qryQuery.FieldByName('C500_007').Value;
  //删除记录
  SYSDM.qryQuery.Close;
  SYSDM.qryQuery.SQL.Clear;
  SYSDM.qryQuery.SQL.Add('delete from CSH500 where C500_001='+IntToStr(AccNo)+' and C500_003='+GetDateString(ADate)+' and C500_004='+IntToStr(ABillNo));
  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 C500_001,C500_002 from CSH500 where C500_002=3 and C500_001<>'+IntToStr(AccNo)+' and C500_003='+GetDateString(ADate)+' and C500_004='+IntToStr(ABillNo));
    SYSDM.qryQuery.Open;
    AccNo:=SYSDM.qryQuery.FieldByName('C500_001').Value;
    //删除记录
    SYSDM.qryQuery.Close;
    SYSDM.qryQuery.SQL.Clear;
    SYSDM.qryQuery.SQL.Add('delete from CSH500 where C500_001='+IntToStr(AccNo)+' and C500_003='+GetDateString(ADate)+' and C500_004='+IntToStr(ABillNo));
    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;
begin
  inherited;
  if ADODataSet1BILNO.Value='' then Exit;
  qryCsh550.Locate('C550_002',cbAccNm.Text,[loCaseInsensitive]);
  AcctNo:=qryCsh550.FieldByName('C550_001').Value;
  ABillNo:=ADODataSet1BILNO.AsInteger;
  ADate:=ADODataSet1BILDT.Value;
  ADOQuery2.Close;
  ADOQuery2.SQL.Clear;
  ADOQuery2.SQL.Add('select * from CSH500 where C500_001='+IntToStr(AcctNo)+' and C500_003='+GetDateString(ADate)+' and C500_004='+IntToStr(ABillNo));
  ADOQuery2.Open;
  if ADOQuery2.FieldByName('C500_002').Value<>3 then
  begin
    Csh510_02Form:=TCsh510_02Form.Create(Application);
    Csh510_02Form.OpenData(AcctNo,ADate,ABillNo);
    Csh510_02Form.ShowModal;
  end else //转帐单
  begin
    Csh510_04Form:=TCsh510_04Form.Create(Application);
    Csh510_04Form.OpenData(AcctNo,ADate,ABillNo);
    Csh510_04Form.ShowModal;
  end;
  sbSearch.Click;
end;

initialization
  RegisterClass(TCsh510_01Form);

finalization
  UnRegisterClass(TCsh510_01Form);

end.

⌨️ 快捷键说明

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