| 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.
 
 
  |