📄 repclass.pas
字号:
unit RepClass;
interface
Uses Windows, Messages, SysUtils, Classes, SubRepClass, dbtables;
Type TOpAmountRpt= Class
Private
FDt_Curr,Dt_Addup:Tdatetime;
Fb_OverlayCurrData,Fb_OverLayhisData:boolean;
opD_GZBX,opD_TSJB,opD_ZXCX,opD_TDXX,opD_DFCJ,opD_XXGZ:TOpAmountDealInfo;
opC_GZBX,opC_TSJB,opC_ZXCX,opC_TDXX,opC_DFCJ,opC_XXGZ:TOpAmountCompareInfo;//TOpCompareAmountInfo;
M_LMonRation,M_LYearRation,M_LYeraAdRation,M_AllPercent : String;
M_MonORation,M_TORation,M_MonSRation,M_TSRation: String;
KeyStr : Array of Array of String;
SubKeyStr: Array of Array of String;
function CheckRecord(STableName: String): Boolean;
function DeleteRec(STableName: String): Boolean;
procedure CreateDealInfo;
function CreateSubDealInfo(SubInfo: TOpAmountDealInfo;Qry_Insert:TQuery): Boolean;
function CreateCompInfo:Boolean;
function CalPercent(ComType: TOpAmountCompareInfo): Boolean;
// function InsertDealInfo(BusiInfo: TOpAmountDealInfo;InsertQuery: TQuery): Boolean;
function WriteTable(OpType,OpID,SCurrDate: String;IsSub: Boolean;SubNo: Integer): Boolean;
procedure CalRation(Busin: TOpAmountDealInfo);
function MakeComSql:String;
Public
Function createOpDealAmountInfo:Boolean; //创建业务处理信息
Function createOpCompareAmountInfo:Boolean; //创建业务比较信息
Function printOpDealAmountRpt(reporttype:integer):boolean; //打印业务处理报表
function MakeInsert(SCurrDate: String): Boolean;
// function InserTable(Query: TQuery;Str: String): Boolean;
Function printOpCompareAmountRpt(reporttype:integer):boolean;//打印比较分析报表
//构造函数 参数:当前时间、累计时间、是否覆盖当前数据、是否覆盖历史数据
constructor Create(Dt_Curr,Dt_AddupDate:Tdatetime;b_OverlayCurrData,b_Overlayhisdata:boolean);
end;
const
DealTitleStr = '业务分类,本月,累计,本月,累计,本月,累计,本月,累计,本月,累计,本月,累计,本月,累计';
CompTitleStr = '分类,本月,累计,同比上月增长率,同比去年同期增长率,同比去年累计增长率,占总数百分比';
implementation
uses SystemDM , pubReport,CommonFunc;
{ TOpAmountRpt }
function TOpAmountRpt.CalPercent(ComType: TOpAmountCompareInfo): Boolean;
begin
Result := False;
with ComType do
begin
if M_iTotalLYApNum <> 0 then
M_LYeraAdRation := Format('%F',[(m_iTotalApNum - M_iTotalLYApNum) / M_iTotalLYApNum * 100])
else
M_LYeraAdRation := '去年没数据';
if M_iTotalLMNum <> 0 then
M_LMonRation := Format('%F',[(M_iTotalCMNum - M_iTotalLMNum) / M_iTotalLMNum * 100])
else
M_LMonRation := '上月没数据';
if m_iTotalLYCMNum <> 0 then
M_LYearRation := Format('%F',[(M_iTotalCMNum - m_iTotalLYCMNum) / m_iTotalLYCMNum * 100])
else
M_LYearRation := '去年没数据';
if m_iTotalApNum <> 0 then
M_AllPercent := Format('%F',[M_iTotalCMNum / m_iTotalApNum * 100])
else
M_AllPercent := '累计没数据';
end;
end;
procedure TOpAmountRpt.CalRation(Busin: TOpAmountDealInfo);
begin
if Busin.M_iTotalCMNum <> 0 then
M_MonORation := Format('%F',[Busin.M_iOtAcmpCMNum / Busin.M_iTotalCMNum * 100])
else
M_MonORation := '0';
if Busin.m_iTotalApNum <> 0 then
M_TORation := Format('%F',[Busin.m_iOtAcmpApNum / Busin.m_iTotalApNum * 100])
else
M_TORation := '0';
if Busin.M_iTotalCMNum <> 0 then
M_MonSRation := Format('%F',[Busin.M_iCmUserSatisfyNum / Busin.M_iTotalCMNum * 100])
else
M_MonSRation := '0';
if Busin.m_iTotalApNum <> 0 then
M_TSRation := Format('%F',[Busin.m_iApUserSatisfyNum / Busin.m_iTotalApNum * 100])
else
M_TSRation := '0';
end;
function TOpAmountRpt.CheckRecord(STableName: String): Boolean;
var
SCurrDate,SAdDate: String;
begin
Result := False;
SCurrDate := FormatDateTime('YYYY-MM',FDt_Curr);
SAdDate := FormatDateTime('YYYY-MM',Dt_Addup);
with TQuery.Create(nil) do
try
Close;
DataBaseName := SysDM.DBMain.DatabaseName;
// if SType = '1' then
Sql.Text := Format('SELECT * FROM %S WHERE STAT_MONTH = ''%S''',[STableName,SCurrDate]);
//Sql.SaveToFile('c:\rep3.txt');
//else
//Sql.Text := Format('SELECT * FROM %S WHERE STAT_MONTH = ''%S''',[STableName,SCurrDate]);
Open;
if RecordCount > 0 then
Result := True;
finally
Free;
end;
end;
constructor TOpAmountRpt.Create(Dt_Curr, Dt_AddupDate: Tdatetime;
b_OverlayCurrData, b_Overlayhisdata: boolean);
begin
Fb_OverlayCurrData := b_OverlayCurrData;
Fb_OverLayhisData := b_Overlayhisdata;
FDt_Curr := Dt_Curr;
Dt_Addup := Dt_AddUpDate;
end;
function TOpAmountRpt.CreateCompInfo: Boolean;
var
SCurrDate : String;
Qry_Insert: TQuery;
begin
SCurrDate := FormatDateTime('YYYY-MM',FDt_Curr);
Qry_Insert := TQuery.Create(nil);
opC_GZBX := TOpAmountCompareInfo.Create(FDt_Curr,Dt_Addup,True,'A','2');
opC_ZXCX := TOpAmountCompareInfo.Create(FDt_Curr,Dt_Addup,True,'A','1');
opC_TSJB := TOpAmountCompareInfo.Create(FDt_Curr,Dt_Addup,True,'A','3');
opC_TDXX := TOpAmountCompareInfo.Create(FDt_Curr,Dt_Addup,True,'A','5');
opC_DFCJ := TOpAmountCompareInfo.Create(FDt_Curr,Dt_Addup,True,'A','6');
opC_XXGZ := TOpAmountCompareInfo.Create(FDt_Curr,Dt_Addup,True,'A','4');
try
with Qry_Insert do
begin
Close;
DataBaseName := SysDm.DBMain.DatabaseName;
opC_GZBX.FillAllData;
CalPercent(opC_GZBX);
Sql.Add(Format('INSERT INTO STAT_OPAMOUNT_COMPARE_INFO VALUES '+
'(''2'',''A'',''%S'',:A,%D,%D,''%S'',''%S'',''%S'',''%S'');',
[SCurrDate,opC_GZBX.M_iTotalCMNum,opC_GZBX.m_iTotalApNum,
M_LMonRation,M_LYearRation,M_LYeraAdRation,M_AllPercent]));
opC_ZXCX.FillAllData;
CalPercent(opC_ZXCX);
Sql.Add(Format('INSERT INTO STAT_OPAMOUNT_COMPARE_INFO VALUES '+
'(''1'',''A'',''%S'',:A,%D,%D,''%S'',''%S'',''%S'',''%S'');',
[SCurrDate,opC_ZXCX.M_iTotalCMNum,opC_ZXCX.m_iTotalApNum,
M_LMonRation,M_LYearRation,M_LYeraAdRation,M_AllPercent]));
opC_TSJB.FillAllData;
CalPercent(opC_TSJB);
Sql.Add(Format('INSERT INTO STAT_OPAMOUNT_COMPARE_INFO VALUES '+
'(''3'',''A'',''%S'',:A,%D,%D,''%S'',''%S'',''%S'',''%S'');',
[SCurrDate,opC_TSJB.M_iTotalCMNum,opC_TSJB.m_iTotalApNum,
M_LMonRation,M_LYearRation,M_LYeraAdRation,M_AllPercent]));
opC_TDXX.FillAllData;
CalPercent(opC_TDXX);
Sql.Add(Format('INSERT INTO STAT_OPAMOUNT_COMPARE_INFO VALUES '+
'(''5'',''A'',''%S'',:A,%D,%D,''%S'',''%S'',''%S'',''%S'');',
[SCurrDate,opC_TDXX.M_iTotalCMNum,opC_TDXX.m_iTotalApNum,
M_LMonRation,M_LYearRation,M_LYeraAdRation,M_AllPercent]));
opC_DFCJ.FillAllData;
CalPercent(opC_DFCJ);
Sql.Add(Format('INSERT INTO STAT_OPAMOUNT_COMPARE_INFO VALUES '+
'(''6'',''A'',''%S'',:A,%D,%D,''%S'',''%S'',''%S'',''%S'');',
[SCurrDate,opC_DFCJ.M_iTotalCMNum,opC_DFCJ.m_iTotalApNum,
M_LMonRation,M_LYearRation,M_LYeraAdRation,M_AllPercent]));
opC_XXGZ.FillAllData;
CalPercent(opC_XXGZ);
Sql.Add(Format('INSERT INTO STAT_OPAMOUNT_COMPARE_INFO VALUES '+
'(''4'',''A'',''%S'',:A,%D,%D,''%S'',''%S'',''%S'',''%S'');',
[SCurrDate,opC_XXGZ.M_iTotalCMNum,opC_XXGZ.m_iTotalApNum,
M_LMonRation,M_LYearRation,M_LYeraAdRation,M_AllPercent]));
ParamByName('A').AsDate := FDt_Curr;
ExecSql;
Result := True;
end;
finally
Qry_Insert.Free;
opC_GZBX.Free;
opC_ZXCX.Free;
opC_TDXX.Free;
opC_XXGZ.Free;
opC_TSJB.Free;
opC_DFCJ.Free;
end;
end;
procedure TOpAmountRpt.CreateDealInfo;
var
Qry_Insert: TQuery;
SCurrDate: String;
begin
opD_GZBX := TOpAmountDealInfo.Create(FDt_Curr,Dt_AddUp,'A','2');
opD_ZXCX := TOpAmountDealInfo.Create(FDt_Curr,Dt_Addup,'A','1');
opD_TSJB := TOpAmountDealInfo.Create(FDt_Curr,Dt_Addup,'A','3');
opD_TDXX := TOpAmountDealInfo.Create(FDt_Curr,Dt_Addup,'A','5');
opD_DFCJ := TOpAmountDealInfo.Create(FDt_Curr,Dt_Addup,'A','6');
opD_XXGZ := TOpAmountDealInfo.Create(FDt_Curr,Dt_Addup,'A','4');
Qry_Insert := TQuery.Create(nil);
try
SCurrDate := FormatDateTime('YYYY-MM',FDt_Curr);
opD_GZBX.CalBusiSum;
opD_ZXCX.CalBusiSum;
opD_TSJB.CalBusiSum;
opd_TDXX.CalBusiSum;
opD_DFCJ.CalBusiSum;
opD_XXGZ.CalBusiSum;
with Qry_Insert do
begin
Close;
DataBaseName := SysDm.DBMain.DatabaseName;
CreateSubDealInfo(opD_GZBX,Qry_Insert);
CalRation(Opd_Gzbx);
Sql.Add(Format('INSERT INTO STAT_OPAMOUNT_DEAL_INFO '+
'VALUES (''2'',''A'',''%S'',:A,%D,%D,%D,%D,%D,%D,%D,%D,%D,%D,''%S'',''%S'',''%S'',''%S'');',
[SCurrDate,opD_GZBX.M_iTotalCMNum,opD_GZBX.m_iTotalApNum,
opD_GZBX.M_iACMPCMNum,opD_GZBX.m_iACMPApNum,opD_GZBX.M_iNoAcmpCMNum,
opD_GZBX.m_iNoAcmpApNum,opD_GZBX.M_iOtAcmpCMNum,opD_GZBX.m_iOtAcmpApNum,
opD_GZBX.M_iCmUserSatisfyNum,opD_GZBX.m_iApUserSatisfyNum,M_MonORation,M_TORation,M_MonSRation,M_TSration
]));
CreateSubDealInfo(opD_ZXCX,Qry_Insert);
CalRation(Opd_ZXCX);
Sql.Add(Format('INSERT INTO STAT_OPAMOUNT_DEAL_INFO '+
'VALUES (''1'',''A'',''%S'',:A,%D,%D,%D,%D,%D,%D,%D,%D,%D,%D,''%S'',''%S'',''%S'',''%S'');',
[SCurrDate,opD_ZXCX.M_iTotalCMNum,opD_ZXCX.m_iTotalApNum,
opD_ZXCX.M_iACMPCMNum,opD_ZXCX.m_iACMPApNum,opD_ZXCX.M_iNoAcmpCMNum,
opD_ZXCX.m_iNoAcmpApNum,opD_ZXCX.M_iOtAcmpCMNum,opD_ZXCX.m_iOtAcmpApNum,
opD_ZXCX.M_iCmUserSatisfyNum,opD_ZXCX.m_iApUserSatisfyNum,M_MonORation,M_TORation,M_MonSRation,M_TSration
]));
CreateSubDealInfo(opD_TSJB,Qry_Insert);
CalRation(Opd_TSJB);
Sql.Add(Format('INSERT INTO STAT_OPAMOUNT_DEAL_INFO '+
'VALUES (''3'',''A'',''%S'',:A,%D,%D,%D,%D,%D,%D,%D,%D,%D,%D,''%S'',''%S'',''%S'',''%S'');',
[SCurrDate,opD_TSJB.M_iTotalCMNum,opD_TSJB.m_iTotalApNum,
opD_TSJB.M_iACMPCMNum,opD_TSJB.m_iACMPApNum,opD_TSJB.M_iNoAcmpCMNum,
opD_TSJB.m_iNoAcmpApNum,opD_TSJB.M_iOtAcmpCMNum,opD_TSJB.m_iOtAcmpApNum,
opD_TSJB.M_iCmUserSatisfyNum,opD_TSJB.m_iApUserSatisfyNum,M_MonORation,M_TORation,M_MonSRation,M_TSration
]));
CreateSubDealInfo(opD_TDXX,Qry_Insert);
CalRation(Opd_TDXX);
Sql.Add(Format('INSERT INTO STAT_OPAMOUNT_DEAL_INFO '+
'VALUES (''5'',''A'',''%S'',:A,%D,%D,%D,%D,%D,%D,%D,%D,%D,%D,''%S'',''%S'',''%S'',''%S'');',
[SCurrDate,opD_TDXX.M_iTotalCMNum,opD_TDXX.m_iTotalApNum,
opD_TDXX.M_iACMPCMNum,opD_TDXX.m_iACMPApNum,opD_TDXX.M_iNoAcmpCMNum,
opD_TDXX.m_iNoAcmpApNum,opD_TDXX.M_iOtAcmpCMNum,opD_TDXX.m_iOtAcmpApNum,
opD_TDXX.M_iCmUserSatisfyNum,opD_TDXX.m_iApUserSatisfyNum,M_MonORation,M_TORation,M_MonSRation,M_TSration
]));
CreateSubDealInfo(opD_DFCJ,Qry_Insert);
CalRation(Opd_DFCJ);
Sql.Add(Format('INSERT INTO STAT_OPAMOUNT_DEAL_INFO '+
'VALUES (''6'',''A'',''%S'',:A,%D,%D,%D,%D,%D,%D,%D,%D,%D,%D,''%S'',''%S'',''%S'',''%S'');',
[SCurrDate,opD_DFCJ.M_iTotalCMNum,opD_DFCJ.m_iTotalApNum,
opD_DFCJ.M_iACMPCMNum,opD_DFCJ.m_iACMPApNum,opD_DFCJ.M_iNoAcmpCMNum,
opD_DFCJ.m_iNoAcmpApNum,opD_DFCJ.M_iOtAcmpCMNum,opD_DFCJ.m_iOtAcmpApNum,
opD_DFCJ.M_iCmUserSatisfyNum,opD_DFCJ.m_iApUserSatisfyNum,M_MonORation,M_TORation,M_MonSRation,M_TSration
]));
CreateSubDealInfo(opD_XXGZ,Qry_Insert);
CalRation(Opd_XXGZ);
Sql.Add(Format('INSERT INTO STAT_OPAMOUNT_DEAL_INFO '+
'VALUES (''4'',''A'',''%S'',:A,%D,%D,%D,%D,%D,%D,%D,%D,%D,%D,''%S'',''%S'',''%S'',''%S'')',
[SCurrDate,opD_XXGZ.M_iTotalCMNum,opD_XXGZ.m_iTotalApNum,
opD_XXGZ.M_iACMPCMNum,opD_XXGZ.m_iACMPApNum,opD_XXGZ.M_iNoAcmpCMNum,
opD_XXGZ.m_iNoAcmpApNum,opD_XXGZ.M_iOtAcmpCMNum,opD_XXGZ.m_iOtAcmpApNum,
opD_XXGZ.M_iCmUserSatisfyNum,opD_XXGZ.m_iApUserSatisfyNum,M_MonORation,M_TORation,M_MonSRation,M_TSration
]));
ParamByName('A').AsDate := FDt_Curr;
//Sql.SaveToFile('c:\ty.ty');
ExecSql;
end;
finally
opD_GZBX.Free;
opD_ZXCX.Free;
opD_TDXX.Free;
opD_XXGZ.Free;
opD_TSJB.Free;
opD_DFCJ.Free;
Qry_Insert.Free;
end;
end;
function TOpAmountRpt.createOpCompareAmountInfo: Boolean;
begin
Result := False;
if CheckRecord ('STAT_OPAMOUNT_COMPARE_INFO') then
begin
if Fb_OverLayhisData then
begin
DeleteRec('STAT_OPAMOUNT_COMPARE_INFO');
CreateCompInfo;
Result := True;
end
else Exit;
end
else
begin
CreateCompInfo;
Result := True;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -