📄 csh710_01.pas.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 + -