123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884 |
- unit rmMentalCustomized1Dm;
- // 工程量清单章级汇总表 -- 交叉表
- // 先统计各项目中,各章级清单的金额,然后汇总
- // 甘肃--高管局定制 -- 严禁任何其他项目使用该单元结果。
- interface
- uses
- SysUtils, Classes, DB, DBClient, ZhAPI, rmSelectProjectFrm,
- ProjectData, sdDB, UtilMethods, sdIDTree;
- type
- {Custom1}
- TTP_Record = record
- FTotalPrice: Double;
- FAddQcTotalPrice: Double;
- FAddGatherTotalPrice: Double;
- end;
- TChapterGcl = array [1..9] of Double;
- TProjectChapterGcl = class
- private
- FProjectName: string;
- FTotalPrice: TChapterGcl;
- FAddQcTotalPrice: TChapterGcl;
- FAddGatherTotalPrice: TChapterGcl;
- function GetTotalPrice(AIndex: Integer): Double;
- procedure SetTotalPrice(AIndex: Integer; const Value: Double);
- function GetAddGatherTotalPrice(AIndex: Integer): Double;
- function GetAddQcTotalPrice(AIndex: Integer): Double;
- procedure SetAddGatherTotalPrice(AIndex: Integer; const Value: Double);
- procedure SetAddQcTotalPrice(AIndex: Integer; const Value: Double);
- function GetCompletePercent(AIndex: Integer): Double;
- function GetChapterTotal: Double;
- function GetTempTotal: Double;
- function GetBidPrice: Double;
- function GetAG_ChapterTotal: Double;
- function GetAG_TempTotal: Double;
- function GetAG_BidPrice: Double;
- function GetAQ_ChapterTotal: Double;
- function GetAQ_TempTotal: Double;
- function GetAQ_BidPrice: Double;
- function GetCT_CompletePercent: Double;
- function GetBP_CompletePercent: Double;
- function GetTT_CompletePercent: Double;
- public
- constructor Create(const AProjectName: string);
- property ProjectName: string read FProjectName;
- property TotalPrice[AIndex: Integer]: Double read GetTotalPrice write SetTotalPrice;
- property AddQcTotalPrice[AIndex: Integer]: Double read GetAddQcTotalPrice write SetAddQcTotalPrice;
- property AddGatherTotalPrice[AIndex: Integer]: Double read GetAddGatherTotalPrice write SetAddGatherTotalPrice;
- property CompletePercent[AIndex: Integer]: Double read GetCompletePercent;
- property ChapterTotal: Double read GetChapterTotal;
- property TempTotal: Double read GetTempTotal;
- property BidPrice: Double read GetBidPrice;
- property AQ_ChapterTotal: Double read GetAQ_ChapterTotal;
- property AQ_TempTotal: Double read GetAQ_TempTotal;
- property AQ_BidPrice: Double read GetAQ_BidPrice;
- property AG_ChapterTotal: Double read GetAG_ChapterTotal;
- property AG_TempTotal: Double read GetAG_TempTotal;
- property AG_BidPrice: Double read GetAG_BidPrice;
- property CT_CompletePercent: Double read GetCT_CompletePercent;
- property TT_CompletePercent: Double read GetTT_CompletePercent;
- property BP_CompletePercent: Double read GetBP_CompletePercent;
- end;
- TChapterGather = class
- private
- FProjectsChapter: TList;
- FTotalChapter: TProjectChapterGcl;
- public
- constructor Create;
- destructor Destroy; override;
- function AddProjectChapterGcl(const AProjectName: string): TProjectChapterGcl;
- procedure CalcTotal;
- end;
- {Custom2}
- TTender = class
- private
- FTenderName: string;
- FTotalPrice: Double;
- FEndGatherTotalPrice: Double;
- function GetPercent: Double;
- public
- constructor Create(ATenderName: string);
- property TenderName: string read FTenderName;
- property TotalPrice: Double read FTotalPrice write FTotalPrice;
- property EndGatherTotalPrice: Double read FEndGatherTotalPrice write FEndGatherTotalPrice;
- property Percent: Double read GetPercent;
- end;
- TTenderClass = class
- private
- FClassName: string;
- FTenders: TList;
- function GetPercent: Double;
- function GetTotalPrice: Double;
- function GetEndGatherTotalPrice: Double;
- public
- constructor Create(const AClassName: string);
- destructor Destroy; override;
- function AddTender(const ATenderName: string): TTender;
- property TotalPrice: Double read GetTotalPrice;
- property EndGatherTotalPrice: Double read GetEndGatherTotalPrice;
- property Percent: Double read GetPercent;
- end;
- TTenderClassList = class
- private
- FClassList: TList;
- function FindTenderClass(const AClassName: string): TTenderClass;
- function AddTenderClass(const AClassName: string): TTenderClass;
- public
- constructor Create;
- destructor Destroy; override;
- function TenderClass(const AClassName: string): TTenderClass;
- end;
- TrmMentalCustomized1Data = class(TDataModule)
- // 格式1
- cdsCustom1: TClientDataSet;
- cdsCustom1ProjectID: TIntegerField;
- cdsCustom1ProjectName: TWideStringField;
- cdsCustom1SerialNo: TIntegerField;
- cdsCustom1ChapterID: TWideStringField;
- cdsCustom1ChapterName: TWideStringField;
- cdsCustom1P_TotalPrice: TFloatField;
- cdsCustom1P_AddQcTotalPrice: TFloatField;
- cdsCustom1P_AddGatherTotalPrice: TFloatField;
- cdsCustom1P_Percent: TFloatField;
- cdsCustom1TotalPrice: TFloatField;
- cdsCustom1AddQcTotalPrice: TFloatField;
- cdsCustom1AddGatherTotalPrice: TFloatField;
- cdsCustom1Percent: TFloatField;
- // 格式2
- cdsCustom2: TClientDataSet;
- cdsCustom2ClassID: TIntegerField;
- cdsCustom2SerialNo: TFloatField;
- cdsCustom2ClassName: TWideStringField;
- cdsCustom2TenderName: TWideStringField;
- cdsCustom2TotalPrice: TFloatField;
- cdsCustom2EndGatherTotalPrice: TFloatField;
- cdsCustom2Percent: TFloatField;
- private
- FMentalType: Integer;
- // Custom1
- FChapterGather: TChapterGather;
- FProjectData: TProjectData;
- // Custom2
- FClasses: TTenderClassList;
- FWriteSerilaNo: Integer;
- procedure BeforeGather(AProjects: TList);
- procedure AfterGather;
- function OpenProjectData(AProject: TSelectProject): TProjectChapterGcl;
- procedure FreeProjectData;
- function XmjNode(const ACode: string): TsdIDTreeNode;
- // 汇总项目节ACode下的所有起始编号为AChapterID的清单金额
- function ChapterTotalPrice(const ACode: string; AChapterID: string = ''): TTP_Record;
- function B_CodeToChapter(const AB_Code: string): Integer;
- procedure GatherGclChapter(AProjectChapter: TProjectChapterGcl);
- procedure GatherProject(AProject: TSelectProject);
- function TenderClassName(AProjectID: Integer): string;
- procedure GatherTenderMainData(AProject: TSelectProject);
- procedure CalcuateGather;
- procedure GatherData(AProjects: TList);
- procedure WriteProjectChapter(AProjectID: Integer; AProject, ATotal: TProjectChapterGcl);
- procedure WriteCustomized0;
- procedure WriteTenderClass(AClassID: Integer; ATenderClass: TTenderClass);
- procedure WriteCustomized1;
- procedure WriteData;
- public
- function AssignData(AProjects: TList): TDataSet;
- property MentalType: Integer read FMentalType write FMentalType;
- end;
- implementation
- uses
- BillsDm, mDataRecord, Globals, Windows;
- {$R *.dfm}
- { TrmGclChapterGatherData }
- procedure TrmMentalCustomized1Data.AfterGather;
- begin
- FChapterGather.Free;
- cdsCustom1.EnableControls;
- cdsCustom1.IndexFieldNames := 'ProjectID;SerialNo';
- FClasses.Free;
- cdsCustom2.EnableControls;
- end;
- function TrmMentalCustomized1Data.AssignData(AProjects: TList): TDataSet;
- var
- iProject: Integer;
- SelectProject: TSelectProject;
- begin
- BeforeGather(AProjects);
- try
- GatherData(AProjects);
- WriteData;
- finally
- case FMentalType of
- 0: Result := cdsCustom1;
- 1: Result := cdsCustom2;
- end;
- AfterGather;
- end;
- end;
- procedure TrmMentalCustomized1Data.BeforeGather(AProjects: TList);
- begin
- cdsCustom1.DisableControls;
- cdsCustom1.Active := True;
- cdsCustom1.EmptyDataSet;
- FChapterGather := TChapterGather.Create;
- cdsCustom2.DisableControls;
- cdsCustom2.Active := True;
- cdsCustom2.EmptyDataSet;
- FClasses := TTenderClassList.Create;
- end;
- function TrmMentalCustomized1Data.B_CodeToChapter(
- const AB_Code: string): Integer;
- var
- sgs: TStrings;
- iFirst, iSecond: Integer;
- begin
- Result := 0;
- sgs := TStringList.Create;
- try
- sgs.Delimiter := '-';
- sgs.DelimitedText := AB_Code;
- iFirst := StrToIntDef(sgs.Strings[0], 0);
- // X,M表示1-9,其中XMM-M与M-XMM-M同属X章级
- if (iFirst < 99) and (sgs.Count > 1) then
- begin
- iSecond := StrToIntDef(sgs.Strings[1], 0);
- Result := Trunc(iSecond/100);
- end
- else
- Result := Trunc(iFirst/100);
- finally
- sgs.Free;
- end;
- end;
- procedure TrmMentalCustomized1Data.CalcuateGather;
- begin
- if FMentalType = 0 then
- FChapterGather.CalcTotal;
- end;
- function TrmMentalCustomized1Data.ChapterTotalPrice(const ACode: string;
- AChapterID: string): TTP_Record;
- var
- stnNode, stnChild: TsdIDTreeNode;
- iNext, iTotal: Integer;
- begin
- Result.FTotalPrice := 0;
- Result.FAddQcTotalPrice := 0;
- Result.FAddGatherTotalPrice := 0;
- stnNode := XmjNode(ACode);
- if not Assigned(stnNode) then Exit;
-
- stnChild := stnNode.FirstChild;
- iNext := 1;
- iTotal := stnNode.PosterityCount;
- while iNext <= iTotal do
- begin
- with TBillsRecord(stnChild.Rec) do
- if not stnChild.HasChildren and (B_Code.AsString <> '') then
- if (AChapterID = '') or (Pos(AChapterID, Trim(B_Code.AsString)) = 1) then
- begin
- Result.FTotalPrice := Result.FTotalPrice + TotalPrice.AsFloat;
- Result.FAddQcTotalPrice := Result.FAddQcTotalPrice + AddQcTotalPrice.AsFloat;
- Result.FAddGatherTotalPrice := Result.FAddGatherTotalPrice + AddGatherTotalPrice.AsFloat;
- end;
- Inc(iNext);
- stnChild := stnChild.NextNode;
- end;
- end;
- procedure TrmMentalCustomized1Data.FreeProjectData;
- begin
- if not Assigned(OpenProjectManager.FindProjectData(FProjectData.ProjectID)) then
- FProjectData.Free;
- end;
- procedure TrmMentalCustomized1Data.GatherData(AProjects: TList);
- var
- iProject: Integer;
- begin
- for iProject := 0 to AProjects.Count - 1 do
- if MentalType = 0 then
- GatherProject(TSelectProject(AProjects.Items[iProject]))
- else
- GatherTenderMainData(TSelectProject(AProjects.Items[iProject]));
- CalcuateGather;
- end;
- procedure TrmMentalCustomized1Data.GatherGclChapter(
- AProjectChapter: TProjectChapterGcl);
- procedure GatherChapter(AChapterID: Integer; const ACode: string; ASearchChapter: string = '');
- var
- CalcRecord: TTP_Record;
- begin
- CalcRecord := ChapterTotalPrice(ACode, ASearchChapter);
- AProjectChapter.TotalPrice[AChapterID] :=
- AProjectChapter.TotalPrice[AChapterID] + CalcRecord.FTotalPrice;
- AProjectChapter.AddQcTotalPrice[AChapterID] :=
- AProjectChapter.AddQcTotalPrice[AChapterID] + CalcRecord.FAddQcTotalPrice;
- AProjectChapter.AddGatherTotalPrice[AChapterID] :=
- AProjectChapter.AddGatherTotalPrice[AChapterID] + CalcRecord.FAddGatherTotalPrice;
- end;
- begin
- // 1-1下的全部清单为100章
- GatherChapter(1, '1-1', '');
- // 1-2下的全部清单为200章
- GatherChapter(2, '1-2', '');
- // 1-3下的全部清单为300章
- GatherChapter(3, '1-3', '');
- // 1-4下的全部清单为400章
- GatherChapter(4, '1-4', '');
- // 1-5、1-6下的全部清单为500章
- GatherChapter(5, '1-5', '');
- GatherChapter(5, '1-6', '');
- // 1-7下【清单编号以6开头】的全部清单为600章
- GatherChapter(6, '1-7', '6');
- // 1-7下【清单编号以2、8开头】的全部清单为600章
- GatherChapter(8, '1-7', '2');
- GatherChapter(8, '1-7', '8');
- // 1-8下的全部清单为800章
- GatherChapter(7, '1-8', '');
- // 1-9下的全部清单为900章
- GatherChapter(9, '1-9', '');
- end;
- procedure TrmMentalCustomized1Data.GatherProject(AProject: TSelectProject);
- var
- ProjectChapter: TProjectChapterGcl;
- begin
- ProjectChapter := OpenProjectData(AProject);
- try
- GatherGclChapter(ProjectChapter);
- finally
- FreeProjectData;
- end;
- end;
- procedure TrmMentalCustomized1Data.GatherTenderMainData(
- AProject: TSelectProject);
- var
- TenderClass: TTenderClass;
- Rec: TsdDataRecord;
- Tender: TTender;
- begin
- TenderClass := FClasses.TenderClass(TenderClassName(AProject.ProjectID));
- Rec := ProjectManager.sddProjectsInfo.FindKey('idxID', AProject.ProjectID);
- Tender := TenderClass.AddTender(Rec.ValueByName('Name').AsString);
- Tender.TotalPrice := Rec.ValueByName('DealTotalPrice').AsFloat;
- Tender.EndGatherTotalPrice := Rec.ValueByName('EndTotalPrice').AsFloat;
- end;
- function TrmMentalCustomized1Data.OpenProjectData(
- AProject: TSelectProject): TProjectChapterGcl;
- var
- Rec: TsdDataRecord;
- begin
- FProjectData := OpenProjectManager.FindProjectData(AProject.ProjectID);
- Rec := ProjectManager.sddProjectsInfo.FindKey('idxID', AProject.ProjectID);
- if not Assigned(FProjectData) then
- begin
- FProjectData := TProjectData.Create;
- FProjectData.OpenForReport(GetMyProjectsFilePath + Rec.ValueByName('FileName').AsString);
- end;
- Result := FChapterGather.AddProjectChapterGcl(Rec.ValueByName('Name').AsString);
- end;
- function TrmMentalCustomized1Data.TenderClassName(
- AProjectID: Integer): string;
- var
- vNode: TsdIDTreeNode;
- begin
- Result := '';
- vNode := ProjectManager.ProjectsTree.FindNode(AProjectID);
- if not Assigned(vNode) then Exit;
- while Assigned(vNode.Parent) do
- vNode := vNode.Parent;
- Result := vNode.Rec.ValueByName('Name').AsString;
- end;
- procedure TrmMentalCustomized1Data.WriteCustomized0;
- var
- iProject: Integer;
- ProjectChapter: TProjectChapterGcl;
- begin
- for iProject := 0 to FChapterGather.FProjectsChapter.Count - 1 do
- begin
- ProjectChapter := TProjectChapterGcl(FChapterGather.FProjectsChapter.Items[iProject]);
- WriteProjectChapter(iProject, ProjectChapter, FChapterGather.FTotalChapter);
- end;
- end;
- procedure TrmMentalCustomized1Data.WriteCustomized1;
- var
- iClass: Integer;
- begin
- FWriteSerilaNo := 1;
- for iClass := 0 to FClasses.FClassList.Count - 1 do
- WriteTenderClass(iClass, TTenderClass(FClasses.FClassList.Items[iClass]));
- end;
- procedure TrmMentalCustomized1Data.WriteData;
- begin
- case FMentalType of
- 0: WriteCustomized0;
- 1: WriteCustomized1;
- end;
- end;
- procedure TrmMentalCustomized1Data.WriteProjectChapter(
- AProjectID: Integer; AProject, ATotal: TProjectChapterGcl);
- const
- SChapterID: array [1..12] of string = ('100', '200', '300', '400',
- '500', '600', '700', '800', '900', '', '', '');
- SChapterName: array [1..12] of string = ('总则', '路基', '路面', '桥梁、涵洞',
- '隧道', '安全设施及预埋管线', '绿化及环境保护', '机电工程', '房建', '100章至900章清单合计 A', '暂列金额 B=A*10%', '投标价 C=A+B');
- procedure AddProjectChapter(AIndex: Integer);
- begin
- cdsCustom1.Append;
- cdsCustom1ProjectID.AsInteger := AProjectID;
- cdsCustom1ProjectName.AsString := AProject.FProjectName;
- cdsCustom1SerialNo.AsInteger := AIndex;
- cdsCustom1ChapterID.AsString := SChapterID[AIndex];
- cdsCustom1ChapterName.AsString := SChapterName[AIndex];
- cdsCustom1P_TotalPrice.AsFloat := AProject.TotalPrice[AIndex];
- cdsCustom1P_AddQcTotalPrice.AsFloat := AProject.AddQcTotalPrice[AIndex];
- cdsCustom1P_AddGatherTotalPrice.AsFloat := AProject.AddGatherTotalPrice[AIndex];
- cdsCustom1P_Percent.AsFloat := AProject.CompletePercent[AIndex];
- cdsCustom1TotalPrice.AsFloat := ATotal.TotalPrice[AIndex];
- cdsCustom1AddQcTotalPrice.AsFloat := ATotal.AddQcTotalPrice[AIndex];
- cdsCustom1AddGatherTotalPrice.AsFloat := ATotal.AddGatherTotalPrice[AIndex];
- cdsCustom1Percent.AsFloat := ATotal.CompletePercent[AIndex];
- cdsCustom1.Post;
- end;
- procedure AddProjectChapterTotal(AIndex: Integer);
- begin
- cdsCustom1.Append;
- cdsCustom1ProjectID.AsInteger := AProjectID;
- cdsCustom1ProjectName.AsString := AProject.FProjectName;
- cdsCustom1SerialNo.AsInteger := AIndex;
- cdsCustom1ChapterID.AsString := SChapterID[AIndex];
- cdsCustom1ChapterName.AsString := SChapterName[AIndex];
- cdsCustom1P_TotalPrice.AsFloat := AProject.ChapterTotal;
- cdsCustom1P_AddQcTotalPrice.AsFloat := AProject.AQ_ChapterTotal;
- cdsCustom1P_AddGatherTotalPrice.AsFloat := AProject.AG_ChapterTotal;
- cdsCustom1P_Percent.AsFloat := AProject.CT_CompletePercent;
- cdsCustom1TotalPrice.AsFloat := ATotal.ChapterTotal;
- cdsCustom1AddQcTotalPrice.AsFloat := ATotal.AQ_ChapterTotal;
- cdsCustom1AddGatherTotalPrice.AsFloat := ATotal.AG_ChapterTotal;
- cdsCustom1Percent.AsFloat := ATotal.CT_CompletePercent;
- cdsCustom1.Post;
- end;
- procedure AddProjectTempTotal(AIndex: Integer);
- begin
- cdsCustom1.Append;
- cdsCustom1ProjectID.AsInteger := AProjectID;
- cdsCustom1ProjectName.AsString := AProject.FProjectName;
- cdsCustom1SerialNo.AsInteger := AIndex;
- cdsCustom1ChapterID.AsString := SChapterID[AIndex];
- cdsCustom1ChapterName.AsString := SChapterName[AIndex];
- cdsCustom1P_TotalPrice.AsFloat := AProject.TempTotal;
- cdsCustom1P_AddQcTotalPrice.AsFloat := AProject.AQ_TempTotal;
- cdsCustom1P_AddGatherTotalPrice.AsFloat := AProject.AG_TempTotal;
- cdsCustom1P_Percent.AsFloat := AProject.TT_CompletePercent;
- cdsCustom1TotalPrice.AsFloat := ATotal.TempTotal;
- cdsCustom1AddQcTotalPrice.AsFloat := ATotal.AQ_TempTotal;
- cdsCustom1AddGatherTotalPrice.AsFloat := ATotal.AG_TempTotal;
- cdsCustom1Percent.AsFloat := ATotal.TT_CompletePercent;
- cdsCustom1.Post;
- end;
- procedure AddProjectBidPrice(AIndex: Integer);
- begin
- cdsCustom1.Append;
- cdsCustom1ProjectID.AsInteger := AProjectID;
- cdsCustom1ProjectName.AsString := AProject.FProjectName;
- cdsCustom1SerialNo.AsInteger := AIndex;
- cdsCustom1ChapterID.AsString := SChapterID[AIndex];
- cdsCustom1ChapterName.AsString := SChapterName[AIndex];
- cdsCustom1P_TotalPrice.AsFloat := AProject.BidPrice;
- cdsCustom1P_AddQcTotalPrice.AsFloat := AProject.AQ_BidPrice;
- cdsCustom1P_AddGatherTotalPrice.AsFloat := AProject.AG_BidPrice;
- cdsCustom1P_Percent.AsFloat := AProject.BP_CompletePercent;
- cdsCustom1TotalPrice.AsFloat := ATotal.BidPrice;
- cdsCustom1AddQcTotalPrice.AsFloat := ATotal.AQ_BidPrice;
- cdsCustom1AddGatherTotalPrice.AsFloat := ATotal.AG_BidPrice;
- cdsCustom1Percent.AsFloat := ATotal.BP_CompletePercent;
- cdsCustom1.Post;
- end;
- var
- iIndex: Integer;
- begin
- for iIndex := Low(TChapterGcl) to High(TChapterGcl) do
- AddProjectChapter(iIndex);
- AddProjectChapterTotal(10);
- AddProjectTempTotal(11);
- AddProjectBidPrice(12);
- end;
- { TProjectChapterGcl }
- constructor TProjectChapterGcl.Create(const AProjectName: string);
- begin
- FProjectName := AProjectName;
- ZeroMemory(@FTotalPrice, SizeOf(TChapterGcl));
- ZeroMemory(@FAddQcTotalPrice, SizeOf(TChapterGcl));
- ZeroMemory(@FAddGatherTotalPrice, SizeOf(TChapterGcl));
- end;
- function TProjectChapterGcl.GetAddGatherTotalPrice(
- AIndex: Integer): Double;
- begin
- Result := FAddGatherTotalPrice[AIndex];
- end;
- function TProjectChapterGcl.GetAddQcTotalPrice(AIndex: Integer): Double;
- begin
- Result := FAddQcTotalPrice[AIndex];
- end;
- function TProjectChapterGcl.GetAG_BidPrice: Double;
- begin
- Result := AG_ChapterTotal + AG_TempTotal;
- end;
- function TProjectChapterGcl.GetAG_ChapterTotal: Double;
- var
- i: Integer;
- begin
- Result := 0;
- for i := Low(TChapterGcl) to High(TChapterGcl) do
- Result := Result + FAddGatherTotalPrice[i];
- end;
- function TProjectChapterGcl.GetAG_TempTotal: Double;
- begin
- Result := AG_ChapterTotal * 0.1;
- end;
- function TProjectChapterGcl.GetAQ_BidPrice: Double;
- begin
- Result := AQ_ChapterTotal + AQ_TempTotal;
- end;
- function TProjectChapterGcl.GetAQ_ChapterTotal: Double;
- var
- i: Integer;
- begin
- Result := 0;
- for i := Low(TChapterGcl) to High(TChapterGcl) do
- Result := Result + FAddQcTotalPrice[i];
- end;
- function TProjectChapterGcl.GetAQ_TempTotal: Double;
- begin
- Result := AQ_ChapterTotal * 0.1;
- end;
- function TProjectChapterGcl.GetBidPrice: Double;
- begin
- Result := ChapterTotal + TempTotal;
- end;
- function TProjectChapterGcl.GetBP_CompletePercent: Double;
- begin
- if (BidPrice + AQ_BidPrice) <> 0 then
- Result := AG_BidPrice/(BidPrice + AQ_BidPrice)*100
- else
- Result := 0;
- end;
- function TProjectChapterGcl.GetChapterTotal: Double;
- var
- i: Integer;
- begin
- Result := 0;
- for i := Low(TChapterGcl) to High(TChapterGcl) do
- Result := Result + FTotalPrice[i];
- end;
- function TProjectChapterGcl.GetCompletePercent(AIndex: Integer): Double;
- begin
- if (FTotalPrice[AIndex] + FAddQcTotalPrice[AIndex]) <> 0 then
- Result := FAddGatherTotalPrice[AIndex]/(FTotalPrice[AIndex] + FAddQcTotalPrice[AIndex])*100
- else
- Result := 0;
- end;
- function TProjectChapterGcl.GetCT_CompletePercent: Double;
- begin
- if (ChapterTotal + AQ_ChapterTotal) <> 0 then
- Result := AG_ChapterTotal/(ChapterTotal + AQ_ChapterTotal)*100
- else
- Result := 0;
- end;
- function TProjectChapterGcl.GetTempTotal: Double;
- begin
- Result := ChapterTotal * 0.1;
- end;
- function TProjectChapterGcl.GetTotalPrice(AIndex: Integer): Double;
- begin
- Result := FTotalPrice[AIndex];
- end;
- function TProjectChapterGcl.GetTT_CompletePercent: Double;
- begin
- if (TempTotal + AQ_TempTotal) <> 0 then
- Result := AG_TempTotal/(TempTotal + AQ_TempTotal)*100
- else
- Result := 0;
- end;
- procedure TProjectChapterGcl.SetAddGatherTotalPrice(AIndex: Integer;
- const Value: Double);
- begin
- FAddGatherTotalPrice[AIndex] := Value;
- end;
- procedure TProjectChapterGcl.SetAddQcTotalPrice(AIndex: Integer;
- const Value: Double);
- begin
- FAddQcTotalPrice[AIndex] := Value;
- end;
- procedure TProjectChapterGcl.SetTotalPrice(AIndex: Integer;
- const Value: Double);
- begin
- FTotalPrice[AIndex] := Value;
- end;
- { TChapterGather }
- function TChapterGather.AddProjectChapterGcl(
- const AProjectName: string): TProjectChapterGcl;
- begin
- Result := TProjectChapterGcl.Create(AProjectName);
- FProjectsChapter.Add(Result);
- end;
- procedure TChapterGather.CalcTotal;
- var
- iProject, iChapter: Integer;
- ProjectChapter: TProjectChapterGcl;
- begin
- for iProject := 0 to FProjectsChapter.Count - 1 do
- begin
- ProjectChapter := TProjectChapterGcl(FProjectsChapter.Items[iProject]);
- for iChapter := Low(TChapterGcl) to High(TChapterGcl) do
- begin
- FTotalChapter.TotalPrice[iChapter] := FTotalChapter.TotalPrice[iChapter] + ProjectChapter.TotalPrice[iChapter];
- FTotalChapter.AddQcTotalPrice[iChapter] := FTotalChapter.AddQcTotalPrice[iChapter] + ProjectChapter.AddQcTotalPrice[iChapter];
- FTotalChapter.AddGatherTotalPrice[iChapter] := FTotalChapter.AddGatherTotalPrice[iChapter] + ProjectChapter.AddGatherTotalPrice[iChapter];
- end;
- end;
- end;
- constructor TChapterGather.Create;
- begin
- FProjectsChapter := TList.Create;
- FTotalChapter := TProjectChapterGcl.Create('合计');
- end;
- destructor TChapterGather.Destroy;
- begin
- FTotalChapter.Free;
- ClearObjects(FProjectsChapter);
- FProjectsChapter.Free;
- inherited;
- end;
- { TTender }
- constructor TTender.Create(ATenderName: string);
- begin
- FTenderName := ATenderName;
- end;
- function TTender.GetPercent: Double;
- begin
- if FTotalPrice <> 0 then
- Result := FEndGatherTotalPrice/FTotalPrice*100
- else
- Result := 0;
- end;
- { TTenderClass }
- function TTenderClass.AddTender(const ATenderName: string): TTender;
- begin
- Result := TTender.Create(ATenderName);
- FTenders.Add(Result);
- end;
- constructor TTenderClass.Create(const AClassName: string);
- begin
- FClassName := AClassName;
- FTenders := TList.Create;
- end;
- destructor TTenderClass.Destroy;
- begin
- ClearObjects(FTenders);
- FTenders.Free;
- inherited;
- end;
- function TTenderClass.GetEndGatherTotalPrice: Double;
- var
- i: Integer;
- begin
- Result := 0;
- for i := 0 to FTenders.Count - 1 do
- Result := Result + TTender(FTenders.Items[i]).EndGatherTotalPrice;
- end;
- function TTenderClass.GetPercent: Double;
- begin
- if TotalPrice <> 0 then
- Result := EndGatherTotalPrice/TotalPrice*100
- else
- Result := 0;
- end;
- function TTenderClass.GetTotalPrice: Double;
- var
- i: Integer;
- begin
- Result := 0;
- for i := 0 to FTenders.Count - 1 do
- Result := Result + TTender(FTenders.Items[i]).TotalPrice;
- end;
- { TTenderClassList }
- function TTenderClassList.AddTenderClass(
- const AClassName: string): TTenderClass;
- begin
- Result := TTenderClass.Create(AClassName);
- FClassList.Add(Result);
- end;
- constructor TTenderClassList.Create;
- begin
- FClassList := TList.Create;
- end;
- destructor TTenderClassList.Destroy;
- begin
- ClearObjects(FClassList);
- FClassList.Free;
- inherited;
- end;
- function TTenderClassList.FindTenderClass(
- const AClassName: string): TTenderClass;
- var
- iClass: Integer;
- TenderClass: TTenderClass;
- begin
- Result := nil;
- for iClass := 0 to FClassList.Count - 1 do
- begin
- TenderClass := TTenderClass(FClassList.Items[iClass]);
- if SameText(AClassName, TenderClass.FClassName) then
- begin
- Result := TenderClass;
- Break;
- end;
- end;
- end;
- function TTenderClassList.TenderClass(
- const AClassName: string): TTenderClass;
- begin
- Result := FindTenderClass(AClassName);
- if not Assigned(Result) then
- Result := AddTenderClass(AClassName);
- end;
- procedure TrmMentalCustomized1Data.WriteTenderClass(AClassID: Integer;
- ATenderClass: TTenderClass);
- procedure AddTenderRecord(ATender: TTender);
- begin
- cdsCustom2.Append;
- cdsCustom2ClassID.AsInteger := AClassID;
- cdsCustom2SerialNo.AsInteger := FWriteSerilaNo;
- cdsCustom2ClassName.AsString := ATenderClass.FClassName;
- cdsCustom2TenderName.AsString := ATender.TenderName;
- cdsCustom2TotalPrice.AsFloat := ATender.TotalPrice;
- cdsCustom2EndGatherTotalPrice.AsFloat := ATender.EndGatherTotalPrice;
- cdsCustom2Percent.AsFloat := ATender.Percent;
- cdsCustom2.Post;
- Inc(FWriteSerilaNo);
- end;
- procedure AddTotalRecord;
- begin
- cdsCustom2.Append;
- cdsCustom2ClassID.AsInteger := AClassID;
- cdsCustom2ClassName.AsString := '小计';
- cdsCustom2TotalPrice.AsFloat := ATenderClass.TotalPrice;
- cdsCustom2EndGatherTotalPrice.AsFloat := ATenderClass.EndGatherTotalPrice;
- cdsCustom2Percent.AsFloat := ATenderClass.Percent;
- cdsCustom2.Post;
- end;
- var
- iTender: Integer;
- begin
- for iTender := 0 to ATenderClass.FTenders.Count - 1 do
- AddTenderRecord(TTender(ATenderClass.FTenders.Items[iTender]));
- AddTotalRecord;
- end;
- function TrmMentalCustomized1Data.XmjNode(
- const ACode: string): TsdIDTreeNode;
- var
- iID: Integer;
- Rec: TsdDataRecord;
- begin
- Result := nil;
- Rec := FProjectData.BillsData.sddBills.Locate('Code', ACode);
- if Assigned(Rec) then
- Result := FProjectData.BillsCompileData.BillsCompileTree.FindNode(Rec.ValueByName('ID').AsInteger);
- end;
- end.
|