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

📄 csh710_01.pas.svn-base

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

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, BAS200_09, dxExEdtr, Menus, DB, ADODB, ActnList, dxCntner, dxTL,
  dxDBCtrl, dxDBTL, ExtCtrls, ComCtrls, wwfltdlg,
  ToolWin, Buttons, StdCtrls, wwdbdatetimepicker, dxDBTLCl, Grids, DBGrids,
  TeEngine, Series, TeeProcs, Chart, DbChart;

type
  TCsh710_01Form = class(TBas200_09Form)
    lblDate: TLabel;
    edtFromDate: TwwDBDateTimePicker;
    edtToDate: TwwDBDateTimePicker;
    ADODataSet1CURNM: TStringField;
    ADODataSet1CLSNO: TIntegerField;
    ADODataSet1CLSNM: TStringField;
    ADODataSet1PARNO: TIntegerField;
    ADODataSet1AMOUNT: TCurrencyField;
    ADODataSet1LEVEL: TIntegerField;
    ADODataSet1SEQNO: TIntegerField;
    dxDBTreeList1CURNM: TdxDBTreeListMaskColumn;
    dxDBTreeList1CLSNM: TdxDBTreeListMaskColumn;
    dxDBTreeList1AMOUNT: TdxDBTreeListCurrencyColumn;
    ADODataSet2: TADODataSet;
    ADODataSet2CURNM: TStringField;
    ADODataSet2CLSNO: TIntegerField;
    ADODataSet2CLSNM: TStringField;
    ADODataSet2PARNO: TIntegerField;
    ADODataSet2AMOUNT: TBCDField;
    ADODataSet2LEVEL: TIntegerField;
    ADODataSet2SEQNO: TIntegerField;
    qryCsh550: TADOQuery;
    ADOQuery1: TADOQuery;
    sbSearch: TSpeedButton;
    Panel2: TPanel;
    DBChart1: TDBChart;
    BarSeries1: TBarSeries;
    Splitter1: TSplitter;
    ActOpen: TAction;
    PopupMenu1: TPopupMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    N4: TMenuItem;
    N5: TMenuItem;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure sbSearchClick(Sender: TObject);
    procedure ActPrintExecute(Sender: TObject);
    procedure dxDBTreeList1AMOUNTDrawSummaryFooter(Sender: TObject;
      ACanvas: TCanvas; ARect: TRect; var AText: String;
      var AAlignment: TAlignment; AFont: TFont; var AColor: TColor;
      var ADone: Boolean);
    procedure ActOpenExecute(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    ALevelNo:Integer;  //层次号
    ASum:Double;
    procedure UpdateParent(AParentNo:Integer;AValue:Double;ADataSet:TDataSet;ACurrName:String);
    { Private declarations }
  public
    procedure SetInterface; override;
    procedure RefreshEvent; override;
    procedure ReportGetValue(const ParName: String; var ParValue: Variant); override;
    { Public declarations }
  end;

var
  Csh710_01Form: TCsh710_01Form;

implementation

uses SYSDATA, CommFun, Csh510_01,CshComm;

{$R *.dfm}

//将下级分类金额累加到上级分类
procedure TCsh710_01Form.UpdateParent(AParentNo:Integer;AValue:Double;ADataSet:TDataSet;ACurrName:String);
var
  AParent:Integer;
  AClassName:String;
begin
  ALevelNo:=ALevelNo+1;
  //查找业务分类表中该记录是否有上级分类
  AParent:=GetValue('select C140_004 from CSH140 where C140_001='+IntToStr(AParentNo));
  if ADataSet.Locate('CLSNO',AParentNo,[]) then
  begin
    ADataSet.Edit;
    ADataSet.FieldByName('AMOUNT').Value:=ADataSet.FieldByName('AMOUNT').AsFloat+AValue;
    ADataSet.Post;
  end else
  begin
    AClassName:=GetValue('select C140_002 from CSH140 where C140_001='+IntToStr(AParentNo));
    ADataSet.Append;
    ADataSet.FieldByName('CURNM').Value:=ACurrName;
    ADataSet.FieldByName('CLSNO').Value:=AParentNo;
    ADataSet.FieldByName('CLSNM').Value:=AClassName;
    ADataSet.FieldByName('PARNO').Value:=AParent;
    ADataSet.FieldByName('LEVEL').Value:=0;
    ADataSet.FieldByName('SEQNO').Value:=0;
    ADataSet.FieldByName('AMOUNT').Value:=AValue;
    ADataSet.Post;
  end;
  //查找业务分类表中该记录是否有上级分类
  if AParent<>0 then UpdateParent(AParent,AValue,ADataSet,ACurrName);
end;

procedure TCsh710_01Form.SetInterface;
begin
  inherited;
  Caption:=GetDBString('CSH71001001');  //资金来源查询
  lblDate.Caption:=GetDBString('CSH71001002');  //日期
  sbSearch.Caption:=GetDBString('CSH71001003');  //查询
  ADODataSet1CURNM.DisplayLabel:=GetDBString('CSH71001004');  //币别
  ADODataSet1CLSNM.DisplayLabel:=GetDBString('CSH71001005');  //业务分类
  ADODataSet1AMOUNT.DisplayLabel:=GetDBString('CSH71001006');  //金额
  if ASuper then Button1.visible:=True;

end;

procedure TCsh710_01Form.FormCreate(Sender: TObject);
begin
  inherited;
  SetInterface;

  //取得当月起始&结束日期
  edtFromDate.Date:=GetMonthFirstDate(Date);
  edtToDate.Date:=GetMonthEndDate(Date);
  sbSearch.Click;
end;

procedure TCsh710_01Form.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  inherited;
  ADODataSet1.Close;
  ADOQuery1.Close;
end;

procedure TCsh710_01Form.sbSearchClick(Sender: TObject);
var
  ABookmark:TBookmark;
  ACurrName:string;
  Amount:Double;
  AClassNo:Integer;
  AFromDate,AToDate:TDateTime;
begin
  inherited;
//查询
  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;
  Screen.Cursor:=crHourGlass;
  ADOQuery1.Close;
  ADOQuery1.Parameters.ParamByName('DATE1').Value:=edtFromDate.Date;
  ADOQuery1.Parameters.ParamByName('DATE2').Value:=edtToDate.Date;
  ADOQuery1.Open;

  //建立出纳总帐临时表
  ADODataSet1.DisableControls;
  ADODataSet1.Close;
  ADODataSet1.FieldDefs.Clear;
  ADODataSet1.FieldDefs.Add('CURNM',ftString,30);
  ADODataSet1.FieldDefs.Add('CLSNO',ftInteger,0);
  ADODataSet1.FieldDefs.Add('CLSNM',ftString,50);
  ADODataSet1.FieldDefs.Add('PARNO',ftInteger,0);
  ADODataSet1.FieldDefs.Add('LEVEL',ftInteger,0);
  ADODataSet1.FieldDefs.Add('SEQNO',ftInteger,0);
  ADODataSet1.FieldDefs.Add('AMOUNT',ftCurrency,0);
  ADODataSet1.CreateDataSet;
  ASum:=0;
  while not ADOQuery1.Eof do
  begin
    ADODataSet1.Append;
    ADODataSet1.FieldByName('CURNM').Value:=ADOQuery1.FieldByName('G100_003').Value;
    ADODataSet1.FieldByName('CLSNO').Value:=ADOQuery1.FieldByName('C140_001').Value;
    ADODataSet1.FieldByName('CLSNM').Value:=ADOQuery1.FieldByName('C140_002').Value;
    ADODataSet1.FieldByName('PARNO').Value:=ADOQuery1.FieldByName('C140_004').Value;
    ADODataSet1.FieldByName('LEVEL').Value:=0;
    ADODataSet1.FieldByName('SEQNO').Value:=0;
    ADODataSet1.FieldByName('AMOUNT').Value:=ADOQuery1.FieldByName('C510A_009').Value;
    ADODataSet1.Post;
    ASum:=ASum+ADODataSet1.FieldByName('AMOUNT').Value;
    ADOQuery1.Next;
  end;
  //计算上级分类的金额
  ADODataSet1.First;
  while not ADODataSet1.Eof do
  begin
    ABookmark:=ADODataSet1.GetBookmark;
    ACurrName:=ADODataSet1.FieldByName('CURNM').Value;
    AMount:=ADODataSet1.FieldByName('AMOUNT').Value;
    AClassNo:=ADODataSet1.FieldByName('PARNO').Value;
    ALevelNo:=0;
    if AClassNo<>0 then UpdateParent(AClassNo,AMount,ADODataSet1,ACurrName);
    ADODataSet1.GotoBookmark(ABookmark);
    ADODataSet1.FreeBookmark(ABookmark);
    //修改层次号 0=最顶层
    ADODataSet1.Edit;
    ADODataSet1.FieldByName('LEVEL').Value:=ALevelNo;
    ADODataSet1.Post;
    ADODataSet1.Next;
  end;
  ADODataSet1.EnableControls;
  DBChart1.RefreshData;
  Screen.Cursor:=crDefault;
end;

procedure TCsh710_01Form.ReportGetValue(const ParName: String;
  var ParValue: Variant);
begin
  inherited;
  if ParName='CURNM' then ParValue:=GetDBString('CSH71001004')       //币别
  else if ParName='TYPNM' then ParValue:=GetDBString('CSH71001005')  //业务分类
  else if ParName='AMOUNT' then ParValue:=GetDBString('CSH71001006') //金额
  else if ParName='DATE1' then ParValue:=GetDBString('CSH71001008')+edtFromDate.Text  //'起始日期:'
  else if ParName='DATE2' then ParValue:=GetDBString('CSH71001009')+edtToDate.Text  //'结束日期:'
end;

procedure TCsh710_01Form.ActPrintExecute(Sender: TObject);
var
  I:Integer;
  ALastNode:TdxTreeListNode;
begin
  if ADODataSet1.IsEmpty then
  begin
    ShowMsg('UMS10000002');  //表记录为空,操作无效
    Abort;
  end;
  //打印前,先排序,按显示的顺序
  I:=1;
  ADODataSet1.DisableControls;
  dxDBTreeList1.GotoLast(True);
  ALastNode:=dxDBTreeList1.FocusedNode;
  dxDBTreeList1.GotoFirst;
  while dxDBTreeList1.FocusedNode<>ALastNode do
  begin
    ADODataSet1.Edit;
    ADODataSet1.FieldByName('SEQNO').Value:=I;
    ADODataSet1.Post;
    dxDBTreeList1.GotoNext(True);
    I:=I+1;
  end;
  ADODataSet1.Edit;
  ADODataSet1.FieldByName('SEQNO').Value:=I;
  ADODataSet1.Post;
  ADODataSet1.EnableControls;

  ADODataSet2.Recordset:=ADODataSet1.Recordset;
//  inherited;

  SelectReport(ADODataSet2,AProgramID,AReportName,ReportGetValue);
  ActRefresh.Execute;
end;

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

procedure TCsh710_01Form.ActOpenExecute(Sender: TObject);
var
  AFieldInfo:TwwFieldInfo;
begin
  inherited;
//查看
  if ADODataSet1.IsEmpty then Exit;
  Screen.Cursor:=crHourGlass;
  Csh510_01Form:=TCsh510_01Form.Create(Application);
  Csh510_01Form.edtFromDate.Date:=edtFromDate.Date;
  Csh510_01Form.edtToDate.Date:=edtToDate.Date;
  Csh510_01Form.sbSearch.Click;
  AFieldInfo:=TwwFieldInfo.Create;
  FilterDialog(Csh510_01Form.DataSource1,False);
  AFieldInfo.FieldName:='I120_003';
//  AFieldInfo.DisplayLabel:=Csh510_01Form.ADOQuery1I120_003.DisplayLabel;
  AFieldInfo.MatchType:=fdMatchStart;
  AFieldInfo.CaseSensitive:=False;
  AFieldInfo.NonMatching:=False;
//  AFieldInfo.FilterValue:=ADODataSet1FName.Value;;
  SYSDM.wwFilterDialog1.FieldInfo.Add(AFieldInfo);
  SYSDM.wwFilterDialog1.ApplyFilter;
  Screen.Cursor:=crDefault;
  Csh510_01Form.ShowModal;
//  if Assigned(AFieldInfo) then AFieldInfo.Free;
end;

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

procedure TCsh710_01Form.Button1Click(Sender: TObject);
var
  AQuery1:TADOQuery;
  AQuery2:TADOQuery;
  ACode:String;
  I:integer;
  ADate:TDateTime;
begin
  inherited;
  ADate:=GetServerDate;
  I:=0;
  AQuery1:=TADOQuery.create(nil);
  AQuery2:=TADOQuery.create(nil);
  AQuery1.Connection:=SYSDM.ADOC;
  AQuery2.Connection:=SYSDM.ADOC;

  AQuery1.Close;
  AQuery1.SQL.Add('select * from CSH500 Order By C500_001,C500_003,C500_004');
  AQuery1.Open;

  AQuery1.First;
  while not AQuery1.Eof do
  begin
    //主表   --begin
    ACode:=GetAutoCode('CSH510');

    AQuery2.Close;
    AQuery2.SQL.Clear;
    AQuery2.SQL.Add('select * from CSH510A');
    AQuery2.Open;
    AQuery2.Append;
    //填写明确的信息
    AQuery2.FieldByName('C510A_001').Value:=ACode;    //收支单号
    AQuery2.FieldByName('C510A_002').Value:=I;        //顺序编号
    AQuery2.FieldByName('C510A_003').Value:=AQuery1.FieldByName('C500_001').Value;    //帐户编号(关联帐户表)
    AQuery2.FieldByName('C510A_004').Value:=AQuery1.FieldByName('C500_002').Value;    //单据类型(0=建帐单,1=收入单,2=支出单,3=转帐单,4=借入单,5=借出单,6=还入单,7=还出单)
    AQuery2.FieldByName('C510A_005').Value:=AQuery1.FieldByName('C500_008').Value;    //收入支出(0=收入,1=支出)
    AQuery2.FieldByName('C510A_006').Value:=AQuery1.FieldByName('C500_016').Value;    //来源类型(0=手工输入,1=销售定单,2=采购定单,3=任务工单)
    AQuery2.FieldByName('C510A_007').Value:=AQuery1.FieldByName('C500_015').Value;    //对象类型(0=客户,1=员工,2=空白)
    AQuery2.FieldByName('C510A_008').Value:=AQuery1.FieldByName('C500_005').Value;    //对象编号(存放客户编号,员工编号)
    AQuery2.FieldByName('C510A_009').Value:=AQuery1.FieldByName('C500_007').Value;    //收支金额(收支金额汇总)
    AQuery2.FieldByName('C510A_010').Value:=AQuery1.FieldByName('C500_003').Value;    //收支日期
//    AQuery2.FieldByName('C510A_011').Value:=AQuery1.FieldByName('').Value;          //票据编号(银行帐使用(未使用))
    AQuery2.FieldByName('C510A_012').Value:=50;    //经办人员(关联员工表)
    AQuery2.FieldByName('C510A_013').Value:=0;     //帐户余额
//    AQuery2.FieldByName('C510A_014').Value:=AQuery1.FieldByName('').Value;           //原始单号
    AQuery2.FieldByName('C510A_015').Value:=AQuery1.FieldByName('C500_009').Value;     //摘要说明
    AQuery2.FieldByName('C510A_016').Value:=FormatDateTime('yyyy-mm-dd hh:mm:ss',ADate);    //制单日期
    AQuery2.FieldByName('C510A_017').Value:='yuki';    //制单人员
    AQuery2.FieldByName('C510A_018').Value:=FormatDateTime('yyyy-mm-dd hh:mm:ss',ADate);    //修改日期
    AQuery2.FieldByName('C510A_019').Value:='yuki';    //修改人员
    AQuery2.Post;

    //从表    --begin
    AQuery2.Close;
    AQuery2.SQL.Clear;
    AQuery2.SQL.Add('select * from CSH510B');
    AQuery2.Open;
    AQuery2.Append;
    //填写明确的信息
    AQuery2.FieldByName('C510B_001').Value:=ACode;    //收支单号(关联主表)
    AQuery2.FieldByName('C510B_002').Value:=1;    //收支行号(子表行号)
//    AQuery2.FieldByName('C510B_003').Value:=AQuery1.FieldByName('').Value;    //发票编号
//    AQuery2.FieldByName('C510B_004').Value:=AQuery1.FieldByName('').Value;    //发票行号
//    AQuery2.FieldByName('C510B_005').Value:=AQuery1.FieldByName('').Value;    //应收金额(应收应付金额)
    AQuery2.FieldByName('C510B_006').Value:=AQuery1.FieldByName('C500_007').Value;    //实收金额(实际交易金额)
    AQuery2.FieldByName('C510B_007').Value:=AQuery1.FieldByName('C500_006').Value;    //业务分类(关联业务表)
    AQuery2.FieldByName('C510B_008').Value:=AQuery1.FieldByName('C500_011').Value;    //项目编号(关联项目表)
    AQuery2.FieldByName('C510B_009').Value:=AQuery1.FieldByName('C500_012').Value;    //部门编号(关联部门表)                                                                    
    AQuery2.FieldByName('C510B_010').Value:=AQuery1.FieldByName('C500_018').Value;    //任务工单(来源类型是任务工单时显示)                                                      
    AQuery2.FieldByName('C510B_011').Value:=AQuery1.FieldByName('C500_009').Value;    //备注说明(备注说明)                                                                      
    AQuery2.Post;
    AQuery1.Next;
    I:=I+1;
  end;
  ADate:=01/01/2006;
  ReCalcBalance(2,ADate, 0);
  showmessage('ok');
end;

initialization
  RegisterClass(TCsh710_01Form);

finalization
  UnRegisterClass(TCsh710_01Form);

end.

⌨️ 快捷键说明

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