📄 csh810_01.pas.svn-base
字号:
AName:=SYSDM.qryQuery.FieldByName('FName').Value;
if ACurNm<>SYSDM.qryQuery.FieldByName('FCurNm').Value then
begin
ACurNm:=SYSDM.qryQuery.FieldByName('FCurNm').Value;
SetParentData(ADataSet,ACurNm); //设置顶层分类数据
end;
if not ADataSet.Locate('FCurNm;FNo',VarArrayOf([ACurNm,ANo]),[]) then
begin
ADataSet.Append;
ADataSet.FieldByName('FCurNm').Value:=ACurNm;
ADataSet.FieldByName('FNo').Value:=ANo;
ADataSet.FieldByName('FParent').Value:=AParent;
ADataSet.FieldByName('FName').Value:=AName;
ADataSet.FieldByName('FDate1').Value:=0;
ADataSet.FieldByName('FDate2').Value:=0;
ADataSet.FieldByName('FAmount').Value:=0;
ADataSet.FieldByName('FPercent').Value:=0;
ADataSet.FieldByName('FLevel').Value:=0;
ADataSet.FieldByName('FSeqNo').Value:=0;
ADataSet.Post;
end;
case APeriod of
1:AFieldName:='FDate1';
2:AFieldName:='FDate2';
end;
ADataSet.Edit;
ADataSet.FieldByName(AFieldName).Value:=AAmount;
ADataSet.Post;
if AType=0 then AIncome:=AIncome+AAmount else APayment:=APayment+AAmount;
SYSDM.qryQuery.Next;
end;
if ADataSet.IsEmpty then Exit;
ABalance:=AIncome-APayment;
//更新收支余额、收入、支出的金额
UpdateSumAmount(ADataSet,AFieldName,ABalance,AIncome,APayment);
end;
//比较分析--按部门
procedure GetDeptAmount(ADataSet:TADODataSet;AStartDate,AEndDate:TDateTime;APeriod:Integer);
var
AType,AParent,ANo:Integer;
AAmount,AIncome,APayment,ABalance:Double;
ACurNm,AName,AFieldName:string;
begin
AIncome:=0;
APayment:=0;
//按部门、收入支出类型分组求和
SYSDM.qryQuery.Close;
SYSDM.qryQuery.SQL.Clear;
SYSDM.qryQuery.SQL.Add('select G100_003 as FCurNm, H100_001 as FNo, H100_002 as FName, 0 as FParent, C510A_005 as FType, sum(C510B_006) as FAmount from CSH510A,CSH510B, HRM100, CSH550, GLD100');
SYSDM.qryQuery.SQL.Add('where C510B_009=H100_001 and C510A_004 not in (0,3) and C510A_003=C550_001 and C550_005=G100_001 and C510A_010>='+GetDateString(AStartDate)+' and C510A_010<='+GetDateString(AEndDate)+' and C510A_001=C510B_001');
SYSDM.qryQuery.SQL.Add('group by G100_003, H100_001, H100_002, H100_003, C510A_005');
SYSDM.qryQuery.Open;
while not SYSDM.qryQuery.Eof do
begin
AType:=SYSDM.qryQuery.FieldByName('FType').AsInteger;
AParent:=SYSDM.qryQuery.FieldByName('FParent').Value;
if AParent=0 then AParent:=AType-1;
AAmount:=SYSDM.qryQuery.FieldByName('FAmount').Value;
ANo:=SYSDM.qryQuery.FieldByName('FNo').Value;
AName:=SYSDM.qryQuery.FieldByName('FName').Value;
if ACurNm<>SYSDM.qryQuery.FieldByName('FCurNm').Value then
begin
ACurNm:=SYSDM.qryQuery.FieldByName('FCurNm').Value;
SetParentData(ADataSet,ACurNm); //设置顶层分类数据
end;
if not ADataSet.Locate('FCurNm;FNo',VarArrayOf([ACurNm,ANo]),[]) then
begin
ADataSet.Append;
ADataSet.FieldByName('FCurNm').Value:=ACurNm;
ADataSet.FieldByName('FNo').Value:=ANo;
ADataSet.FieldByName('FParent').Value:=AParent;
ADataSet.FieldByName('FName').Value:=AName;
ADataSet.FieldByName('FDate1').Value:=0;
ADataSet.FieldByName('FDate2').Value:=0;
ADataSet.FieldByName('FAmount').Value:=0;
ADataSet.FieldByName('FPercent').Value:=0;
ADataSet.FieldByName('FLevel').Value:=0;
ADataSet.FieldByName('FSeqNo').Value:=0;
ADataSet.Post;
end;
case APeriod of
1:AFieldName:='FDate1';
2:AFieldName:='FDate2';
end;
ADataSet.Edit;
ADataSet.FieldByName(AFieldName).Value:=AAmount;
ADataSet.Post;
if AType=0 then AIncome:=AIncome+AAmount else APayment:=APayment+AAmount;
SYSDM.qryQuery.Next;
end;
if ADataSet.IsEmpty then Exit;
ABalance:=AIncome-APayment;
//更新收支余额、收入、支出的金额
UpdateSumAmount(ADataSet,AFieldName,ABalance,AIncome,APayment);
end;
//比较分析--按项目
procedure GetProjctAmount(ADataSet:TADODataSet;AStartDate,AEndDate:TDateTime;APeriod:Integer);
var
AType,AParent,ANo:Integer;
AAmount,AIncome,APayment,ABalance:Double;
ACurNm,AName,AFieldName:string;
begin
AIncome:=0;
APayment:=0;
//按项目分组求和
SYSDM.qryQuery.Close;
SYSDM.qryQuery.SQL.Clear;
SYSDM.qryQuery.SQL.Add('select G100_003 as FCurNm, C150_001 as FNo, C150_002 as FName, C150_003 as FParent, C510A_005 as FType, sum(C510B_006) as FAmount from CSH510A,CSH510B,CSH150, CSH550, GLD100');
SYSDM.qryQuery.SQL.Add('where C510B_008=C150_001 and C510A_004 not in (0,3) and C510A_003=C550_001 and C550_005=G100_001 and C510A_010>='+GetDateString(AStartDate)+' and C510A_010<='+GetDateString(AEndDate));
SYSDM.qryQuery.SQL.Add('group by G100_003, C150_001, C150_002, C150_003, C510A_005');
SYSDM.qryQuery.Open;
while not SYSDM.qryQuery.Eof do
begin
AType:=SYSDM.qryQuery.FieldByName('FType').AsInteger;
AParent:=SYSDM.qryQuery.FieldByName('FParent').Value;
if AParent=0 then AParent:=AType-1;
AAmount:=SYSDM.qryQuery.FieldByName('FAmount').Value;
if AType=1 then AAmount:=AAmount*-1;
ANo:=SYSDM.qryQuery.FieldByName('FNo').Value;
AName:=SYSDM.qryQuery.FieldByName('FName').Value;
ACurNm:=SYSDM.qryQuery.FieldByName('FCurNm').Value;
if not ADataSet.Locate('FCurNm',ACurNm,[]) then
begin
ADataSet.Append;
ADataSet.FieldByName('FCurNm').Value:=ACurNm;
ADataSet.FieldByName('FNo').Value:=0;
ADataSet.FieldByName('FParent').Value:=0;
ADataSet.FieldByName('FName').Value:=GetDBString('COM00004008'); //所有项目
ADataSet.FieldByName('FAmount').Value:=0;
ADataSet.FieldByName('FLevel').Value:=0;
ADataSet.FieldByName('FSeqNo').Value:=0;
ADataSet.Post;
end;
if not ADataSet.Locate('FCurNm;FNo',VarArrayOf([ACurNm,ANo]),[]) then
begin
ADataSet.Append;
ADataSet.FieldByName('FCurNm').Value:=ACurNm;
ADataSet.FieldByName('FNo').Value:=ANo;
ADataSet.FieldByName('FParent').Value:=AParent;
ADataSet.FieldByName('FName').Value:=AName;
ADataSet.FieldByName('FDate1').Value:=0;
ADataSet.FieldByName('FDate2').Value:=0;
ADataSet.FieldByName('FAmount').Value:=0;
ADataSet.FieldByName('FPercent').Value:=0;
ADataSet.FieldByName('FLevel').Value:=0;
ADataSet.FieldByName('FSeqNo').Value:=0;
ADataSet.Post;
end;
case APeriod of
1:AFieldName:='FDate1';
2:AFieldName:='FDate2';
end;
ADataSet.Edit;
ADataSet.FieldByName(AFieldName).Value:=AAmount;
ADataSet.Post;
if AType=0 then AIncome:=AIncome+AAmount else APayment:=APayment+AAmount;
SYSDM.qryQuery.Next;
end;
if ADataSet.IsEmpty then Exit;
ABalance:=AIncome+APayment;
ADataSet.Locate('FNo',0,[]);
ADataSet.Edit;
ADataSet.FieldByName(AFieldName).Value:=ABalance;
ADataSet.FieldByName('FAmount').Value:=ADataSet.FieldByName('FDate1').Value-ADataSet.FieldByName('FDate2').Value;
ADataSet.Post;
end;
procedure TCsh810_01Form.sbSearchClick(Sender: TObject);
var
AStartDate1,AEndDate1,AStartDate2,AEndDate2:TDateTime;
begin
inherited;
//查询
if cbItem.Text='' then Exit;
if cbType.Text='' then Exit;
if (edtFromDate1.Text='') or (edtToDate1.Text='') then
begin
ShowMsg('UMS10000156'); //起始日期或结束日期不能为空
if edtFromDate1.Text='' then edtFromDate1.SetFocus else edtToDate1.SetFocus;
Abort;
end;
if (edtFromDate2.Text='') or (edtToDate2.Text='') then
begin
ShowMsg('UMS10000156'); //起始日期或结束日期不能为空
if edtFromDate2.Text='' then edtFromDate2.SetFocus else edtToDate2.SetFocus;
Abort;
end;
AStartDate1:=edtFromDate1.Date;
AEndDate1:=edtToDate1.Date;
AStartDate2:=edtFromDate2.Date;
AEndDate2:=edtToDate2.Date;
if AStartDate1>AEndDate1 then
begin
ShowMsg('UMS10000044'); //起始日期不能大于结束日期
edtFromDate1.SetFocus;
Abort;
end;
if AStartDate2>AEndDate2 then
begin
ShowMsg('UMS10000044'); //起始日期不能大于结束日期
edtFromDate2.SetFocus;
Abort;
end;
//建立临时表
Screen.Cursor:=crHourGlass;
ADODataSet1.DisableControls;
ADODataSet1.Close;
ADODataSet1.FieldDefs.Clear;
ADODataSet1.FieldDefs.Add('FCurNm',ftString,30);
ADODataSet1.FieldDefs.Add('FNo',ftInteger,0);
ADODataSet1.FieldDefs.Add('FParent',ftInteger,0);
ADODataSet1.FieldDefs.Add('FName',ftString,50);
ADODataSet1.FieldDefs.Add('FDate1',ftCurrency,0);
ADODataSet1.FieldDefs.Add('FDate2',ftCurrency,0);
ADODataSet1.FieldDefs.Add('FAmount',ftCurrency,0);
ADODataSet1.FieldDefs.Add('FPercent',ftFloat,0);
ADODataSet1.FieldDefs.Add('FLevel',ftInteger,0);
ADODataSet1.FieldDefs.Add('FSeqNo',ftInteger,0);
ADODataSet1.CreateDataSet;
case cbItem.ItemIndex of
0: //业务分类
begin
GetClassAmount(ADODataSet1,AStartDate1,AEndDate1,1);
GetClassAmount(ADODataSet1,AStartDate2,AEndDate2,2);
//插入上级业务分类
GetParentClass(ADODataSet1);
end;
1: //客户
begin
GetCustAmount(ADODataSet1,AStartDate1,AEndDate1,1);
GetCustAmount(ADODataSet1,AStartDate2,AEndDate2,2);
end;
2: //部门
begin
GetDeptAmount(ADODataSet1,AStartDate1,AEndDate1,1);
GetDeptAmount(ADODataSet1,AStartDate2,AEndDate2,2);
end;
3: //项目
begin
GetProjctAmount(ADODataSet1,AStartDate1,AEndDate1,1);
GetProjctAmount(ADODataSet1,AStartDate2,AEndDate2,2);
//插入上级项目
GetParentProject(ADODataSet1); //取得上级项目
end;
end;
//计算增长额、增长率
ADODataSet1.First;
while not ADODataSet1.Eof do
begin
ADODataSet1.Edit;
ADODataSet1.FieldByName('FAmount').Value:=ADODataSet1.FieldByName('FDate2').Value-ADODataSet1.FieldByName('FDate1').Value;
if ADODataSet1.FieldByName('FDate1').Value<>0 then
ADODataSet1.FieldByName('FPercent').Value:=ADODataSet1.FieldByName('FAmount').Value/ADODataSet1.FieldByName('FDate1').Value*100
else
ADODataSet1.FieldByName('FPercent').Value:=0;
ADODataSet1.Post;
ADODataSet1.Next;
end;
ADODataSet1.First;
ADODataSet1.Next;
ADODataSet1.EnableControls;
DBChart1.RefreshData;
Screen.Cursor:=crDefault;
end;
procedure TCsh810_01Form.ReportGetValue(const ParName: String;
var ParValue: Variant);
begin
inherited;
if ParName='CURNM' then ParValue:=GetDBString('CSH81001007') //'币别'
else if ParName='TYPNM' then ParValue:=GetDBString('CSH81001008') //'名称'
else if ParName='FRDAT' then ParValue:=GetDBString('CSH81001003') //'期段1'
else if ParName='TODAT' then ParValue:=GetDBString('CSH81001005') //'期段2'
else if ParName='AMOUNT' then ParValue:=GetDBString('CSH81001009') //'增长额'
else if ParName='PERCENT' then ParValue:=GetDBString('CSH81001010') //'增长率'
else if ParName='ITEM' then ParValue:=GetDBString('CSH81001018')+cbItem.Text //'项目:'
else if ParName='TYPE' then ParValue:=GetDBString('CSH81001019')+cbType.Text //'类型:'
else if ParName='DATE1' then ParValue:=GetDBString('CSH81001020')+edtFromDate1.Text //'期段1:'
else if ParName='DATE2' then ParValue:=GetDBString('CSH81001021')+edtToDate1.Text //'至 '
else if ParName='DATE3' then ParValue:=GetDBString('CSH81001022')+edtFromDate2.Text //'期段2:'
else if ParName='DATE4' then ParValue:=GetDBString('CSH81001021')+edtToDate2.Text //'至 '
end;
procedure TCsh810_01Form.cbTypeChange(Sender: TObject);
var
ADate:TDateTime;
begin
inherited;
ADate:=Date;
case cbType.ItemIndex of
0: //本月与上月比较
begin
edtFromDate1.Date:=GetMonthFirstDate(ADate);
edtToDate1.Date:=GetMonthEndDate(ADate);
edtFromDate2.Date:=GetLastMonthFirstDate(ADate);
edtToDate2.Date:=GetLastMonthEndDate(ADate);
end;
1: //本季与上季比较
begin
edtFromDate1.Date:=GetSeasonFirstDate(ADate);
edtToDate1.Date:=GetSeasonEndDate(ADate);
edtFromDate2.Date:=GetLastSeasonFirstDate(ADate);
edtToDate2.Date:=GetLastSeasonEndDate(ADate);
end;
2: //本年与上年比较
begin
edtFromDate1.Date:=GetYearFirstDate(ADate);
edtToDate1.Date:=GetYearEndDate(ADate);
edtFromDate2.Date:=GetLastYearFirstDate(ADate);
edtToDate2.Date:=GetLastYearEndDate(ADate);
end;
3: //本年与上年同期比较
begin
edtFromDate1.Date:=GetMonthFirstDate(ADate);
edtToDate1.Date:=GetMonthEndDate(ADate);
edtFromDate2.Date:=GetLastYearSameDate(edtFromDate1.Date);
edtToDate2.Date:=GetLastYearSameDate(edtToDate1.Date);
end;
end;
end;
procedure TCsh810_01Form.ActPrintExecute(Sender: TObject);
var
I:Integer;
ALastNode:TdxTreeListNode;
begin
//打印前,先排序,按显示的顺序
I:=1;
ADODataSet1.DisableControls;
dxDBTreeList1.GotoLast(True);
ALastNode:=dxDBTreeList1.FocusedNode;
dxDBTreeList1.GotoFirst;
while dxDBTreeList1.FocusedNode<>ALastNode do
begin
ADODataSet1.Edit;
ADODataSet1.FieldByName('FSeqNo').Value:=I;
ADODataSet1.Post;
dxDBTreeList1.GotoNext(True);
I:=I+1;
end;
ADODataSet1.Edit;
ADODataSet1.FieldByName('FSeqNo').Value:=I;
ADODataSet1.Post;
ADODataSet1.EnableControls;
try
SYSDM.frReport2.OnGetValue:=ReportGetValue;
inherited;
finally
SYSDM.frReport2.OnGetValue:=nil;
end;
end;
procedure TCsh810_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:=edtFromDate1.Date;
Csh510_01Form.edtToDate.Date:=edtToDate1.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 TCsh810_01Form.RefreshEvent;
begin
inherited;
sbSearch.Click;
end;
initialization
RegisterClass(TCsh810_01Form);
finalization
UnRegisterClass(TCsh810_01Form);
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -