| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468 | 
							- unit rmCustomized2Dm;
 
- // 广东肇庆定制 -- 汇总表(计量汇总表)
 
- // 严禁任何其他项目使用该单元
 
- interface
 
- uses
 
-   SysUtils, Classes, ZhAPI, DB, ProjectData, DBClient,
 
-   rmSelectProjectFrm, sdDB;
 
- type
 
-   TTenderBaseData = class
 
-   private
 
-     FTenderName: string;
 
-     FTotalPrice: Double;
 
-     FEndCTotalPrice: Double;
 
-     FCurDealTotalPrice: Double;
 
-     FPreDealTotalPrice: Double;
 
-     FEndDealTotalPrice: Double;
 
-     function GetEndGatherTotalPrice: Double;
 
-     function GetPrecent: Double;
 
-   public
 
-     constructor Create(const ATenderName: string);
 
-     property TenderName: string read FTenderName;
 
-     property TotalPrice: Double read FTotalPrice write FTotalPrice;
 
-     property EndCTotalPrice: Double read FEndCTotalPrice write FEndCTotalPrice;
 
-     property EndGatherTotalPrice: Double read GetEndGatherTotalPrice;
 
-     property CurDealTotalPrice: Double read FCurDealTotalPrice write FCurDealTotalPrice;
 
-     property PreDealTotalPrice: Double read FPreDealTotalPrice write FPreDealTotalPrice;
 
-     property EndDealTotalPrice: Double read FEndDealTotalPrice write FEndDealTotalPrice;
 
-     property Precent: Double read GetPrecent;
 
-   end;
 
-   TDealPayData = class
 
-   private
 
-     FName: string;
 
-     FCurTotalPrice: Double;
 
-     FPreTotalPrice: Double;
 
-     FEndTotalPrice: Double;
 
-   public
 
-     constructor Create(const AName: string);
 
-     property Name: string read FName;
 
-     property CurTotalPrice: Double read FCurTotalPrice write FCurTotalPrice;
 
-     property PreTotalPrice: Double read FPreTotalPrice write FPreTotalPrice;
 
-     property EndTotalPrice: Double read FEndTotalPrice write FEndTotalPrice;
 
-   end;
 
-   TGatherData = class
 
-   private
 
-     FTenders: TList;
 
-     FTenderGather: TTenderBaseData;
 
-     FDealPays: TList;
 
-     FPayGather: TDealPayData;
 
-     function FindDealPay(const AName: string): TDealPayData;
 
-     function GetTenderCount: Integer;
 
-     function GetTenders(AIndex: Integer): TTenderBaseData;
 
-     function GetDealPay(AIndex: Integer): TDealPayData;
 
-     function GetDealPayCount: Integer;
 
-   public
 
-     constructor Create;
 
-     destructor Destroy; override;
 
-     function AddTender(const ATenderName: string): TTenderBaseData;
 
-     procedure GatherTender;
 
-     function AddDealPay(const AName: string): TDealPayData;
 
-     property TenderCount: Integer read GetTenderCount;
 
-     property Tenders[AIndex: Integer]: TTenderBaseData read GetTenders;
 
-     property TenderGather: TTenderBaseData read FTenderGather;
 
-     property DealPayCount: Integer read GetDealPayCount;
 
-     property DealPay[AIndex: Integer]: TDealPayData read GetDealPay;
 
-     property PayGather: TDealPayData read FPayGather;
 
-   end;
 
-   TrmCustomized2Data = class(TDataModule)
 
-     cdsCustom: TClientDataSet;
 
-     cdsCustomSerialNo: TIntegerField;
 
-     cdsCustomName: TWideStringField;
 
-     cdsCustomTotalPrice: TFloatField;
 
-     cdsCustomEndCTotalPrice: TFloatField;
 
-     cdsCustomEndGatherTotalPrice: TFloatField;
 
-     cdsCustomCurDealTotalPrice: TFloatField;
 
-     cdsCustomPreDealTotalPrice: TFloatField;
 
-     cdsCustomEndDealTotalPrice: TFloatField;
 
-     cdsCustomPrecent: TFloatField;
 
-   private
 
-     FProjectData: TProjectData;
 
-     FProjectName: string;
 
-     FGatherData: TGatherData;
 
-     FSerialNo: Integer;
 
-     procedure BeforeGather;
 
-     procedure AfterGather;
 
-     procedure OpenProjectData(AProject: TSelectProject);
 
-     procedure FreeProjectData;
 
-     procedure GatherProject(AProject: TSelectProject);
 
-     procedure WriteData;
 
-   public
 
-     function AssignData(AProjects: TList): TDataSet;
 
-   end;
 
- implementation
 
- uses
 
-   DealPaymentDm, PhasePayDm, Globals, UtilMethods;
 
- {$R *.dfm}
 
- { TTenderBaseData }
 
- constructor TTenderBaseData.Create(const ATenderName: string);
 
- begin
 
-   FTenderName := ATenderName;
 
-   FTotalPrice := 0;
 
-   FEndCTotalPrice := 0;
 
-   FCurDealTotalPrice := 0;
 
-   FPreDealTotalPrice := 0;
 
-   FEndDealTotalPrice := 0;
 
- end;
 
- function TTenderBaseData.GetEndGatherTotalPrice: Double;
 
- begin
 
-   Result := TotalPrice + EndCTotalPrice;
 
- end;
 
- function TTenderBaseData.GetPrecent: Double;
 
- begin
 
-   if EndGatherTotalPrice <> 0 then
 
-     Result := EndDealTotalPrice/EndGatherTotalPrice*100
 
-   else
 
-     Result := 0;
 
- end;
 
- { TGatherData }
 
- function TGatherData.AddDealPay(const AName: string): TDealPayData;
 
- begin
 
-   Result := FindDealPay(AName);
 
-   if not Assigned(Result) then
 
-   begin
 
-     Result := TDealPayData.Create(AName);
 
-     FDealPays.Add(Result);
 
-   end;
 
- end;
 
- function TGatherData.AddTender(const ATenderName: string): TTenderBaseData;
 
- begin
 
-   Result := TTenderBaseData.Create(ATenderName);
 
-   FTenders.Add(Result);
 
- end;
 
- constructor TGatherData.Create;
 
- begin
 
-   FTenders := TList.Create;
 
-   FTenderGather := TTenderBaseData.Create('合计');
 
-   FDealPays := TList.Create;
 
-   FPayGather := TDealPayData.Create('支付');
 
- end;
 
- destructor TGatherData.Destroy;
 
- begin
 
-   FPayGather.Free;
 
-   ClearObjects(FDealPays);
 
-   FDealPays.Free;
 
-   FTenderGather.Free;
 
-   ClearObjects(FTenders);
 
-   FTenders.Free;
 
-   inherited;
 
- end;
 
- function TGatherData.FindDealPay(const AName: string): TDealPayData;
 
- var
 
-   iIndex: Integer;
 
- begin
 
-   Result := nil;
 
-   for iIndex := 0 to DealPayCount - 1 do
 
-   begin
 
-     if SameText(AName, DealPay[iIndex].Name) then
 
-     begin
 
-       Result := DealPay[iIndex];
 
-       Break;
 
-     end;
 
-   end;
 
- end;
 
- procedure TGatherData.GatherTender;
 
- var
 
-   iIndex: Integer;
 
-   Tender: TTenderBaseData;
 
- begin
 
-   FTenderGather.TotalPrice := 0;
 
-   FTenderGather.EndCTotalPrice := 0;
 
-   FTenderGather.CurDealTotalPrice := 0;
 
-   FTenderGather.PreDealTotalPrice := 0;
 
-   FTenderGather.EndDealTotalPrice := 0;
 
-   for iIndex := 0 to FTenders.Count - 1 do
 
-   begin
 
-     Tender := Tenders[iIndex];
 
-     FTenderGather.TotalPrice := FTenderGather.TotalPrice + Tender.TotalPrice;
 
-     FTenderGather.EndCTotalPrice := FTenderGather.EndCTotalPrice + Tender.FEndCTotalPrice;
 
-     FTenderGather.CurDealTotalPrice := FTenderGather.CurDealTotalPrice + Tender.CurDealTotalPrice;
 
-     FTenderGather.PreDealTotalPrice := FTenderGather.PreDealTotalPrice + Tender.PreDealTotalPrice;
 
-     FTenderGather.EndDealTotalPrice := FTenderGather.EndDealTotalPrice + Tender.EndDealTotalPrice;
 
-   end;
 
- end;
 
- function TGatherData.GetDealPay(AIndex: Integer): TDealPayData;
 
- begin
 
-   Result := TDealPayData(FDealPays.Items[AIndex]);
 
- end;
 
- function TGatherData.GetDealPayCount: Integer;
 
- begin
 
-   Result := FDealPays.Count;
 
- end;
 
- function TGatherData.GetTenderCount: Integer;
 
- begin
 
-   Result := FTenders.Count;
 
- end;
 
- function TGatherData.GetTenders(AIndex: Integer): TTenderBaseData;
 
- begin
 
-   Result := TTenderBaseData(FTenders.Items[AIndex]);
 
- end;
 
- { TDealPayData }
 
- constructor TDealPayData.Create(const AName: string);
 
- begin
 
-   FName := AName;
 
-   FCurTotalPrice := 0;
 
-   FPreTotalPrice := 0;
 
-   FEndTotalPrice := 0;
 
- end;
 
- { TrmCustomized2Data }
 
- procedure TrmCustomized2Data.AfterGather;
 
- begin
 
-   FGatherData.Free;
 
- end;
 
- function TrmCustomized2Data.AssignData(AProjects: TList): TDataSet;
 
- var
 
-   iProject: Integer;
 
- begin
 
-   BeforeGather;
 
-   try
 
-     for iProject := 0 to AProjects.Count - 1 do
 
-       GatherProject(TSelectProject(AProjects.Items[iProject]));
 
-     FGatherData.GatherTender;
 
-     WriteData;
 
-   finally
 
-     Result := cdsCustom;
 
-     AfterGather;
 
-   end;
 
- end;
 
- procedure TrmCustomized2Data.BeforeGather;
 
- begin
 
-   cdsCustom.Active := True;
 
-   cdsCustom.EmptyDataSet;
 
-   FGatherData := TGatherData.Create;
 
- end;
 
- procedure TrmCustomized2Data.FreeProjectData;
 
- begin
 
-   if not Assigned(OpenProjectManager.FindProjectData(FProjectData.ProjectID)) then
 
-     FProjectData.Free;
 
- end;
 
- procedure TrmCustomized2Data.GatherProject(AProject: TSelectProject);
 
- var
 
-   sCurField, sPreField, sEndField: string;
 
-   function DealPayRecord(const AName: string): TsdDataRecord;
 
-   var
 
-     iRec: Integer;
 
-     Rec: TsdDataRecord;
 
-   begin
 
-     Result := nil;
 
-     with FProjectData.DealPaymentData do
 
-     begin
 
-       for iRec := 0 to sddDealPayment.RecordCount - 1 do
 
-       begin
 
-         Rec := sddDealPayment.Records[iRec];
 
-         if SameText(AName, Rec.ValueByName('Name').AsString) then
 
-         begin
 
-           Result := Rec;
 
-           Break;
 
-         end;
 
-       end;
 
-     end;
 
-   end;
 
-   procedure GatherBaseData;
 
-   var
 
-     TenderBase: TTenderBaseData;
 
-     Rec, StageRec: TsdDataRecord;
 
-   begin
 
-     TenderBase := FGatherData.AddTender(FProjectName);
 
-     TenderBase.TotalPrice := FProjectData.BillsData.Settlement[0];
 
-     TenderBase.EndCTotalPrice := FProjectData.BillsData.Settlement[2];
 
-     Rec := DealPayRecord('本期完成计量');
 
-     StageRec := FProjectData.PhaseData.PhasePayData.PayRecord(Rec.ValueByName('ID').AsInteger);
 
-     TenderBase.CurDealTotalPrice := StageRec.ValueByName(sCurField).AsFloat;
 
-     TenderBase.PreDealTotalPrice := StageRec.ValueByName(sPreField).AsFloat;
 
-     TenderBase.EndDealTotalPrice := StageRec.ValueByName(sEndField).AsFloat;
 
-   end;
 
-   procedure GatherCommonDealPayData;
 
-   var
 
-     iRec: Integer;
 
-     Rec, StageRec: TsdDataRecord;
 
-     DealPay: TDealPayData;
 
-   begin
 
-     with FProjectData.DealPaymentData do
 
-     begin
 
-       for iRec := 0 to sddDealPayment.RecordCount - 1 do
 
-       begin
 
-         Rec := sddDealPayment.Records[iRec];
 
-         if SameText(Rec.ValueByName('Name').AsString, '本期完成计量') or
 
-            SameText(Rec.ValueByName('Name').AsString, '本期应付') or
 
-            SameText(Rec.ValueByName('Name').AsString, '本期实付') then
 
-           Continue;
 
-         StageRec := FProjectData.PhaseData.PhasePayData.PayRecord(Rec.ValueByName('ID').AsInteger);
 
-         if StageRec.ValueByName(sEndField).AsFloat = 0 then
 
-           Continue;
 
-         DealPay := FGatherData.AddDealPay(Rec.ValueByName('Name').AsString);
 
-         DealPay.CurTotalPrice := DealPay.CurTotalPrice + StageRec.ValueByName(sCurField).AsFloat;
 
-         DealPay.PreTotalPrice := DealPay.PreTotalPrice + StageRec.ValueByName(sPreField).AsFloat;
 
-         DealPay.EndTotalPrice := DealPay.EndTotalPrice + StageRec.ValueByName(sEndField).AsFloat;
 
-       end;
 
-     end;
 
-   end;
 
-   procedure GatherPayData;
 
-   var
 
-     Rec, StageRec: TsdDataRecord;
 
-   begin
 
-     Rec := DealPayRecord('本期应付');
 
-     StageRec := FProjectData.PhaseData.PhasePayData.PayRecord(Rec.ValueByName('ID').AsInteger);
 
-     with FGatherData.PayGather do
 
-     begin
 
-       CurTotalPrice := CurTotalPrice + StageRec.ValueByName(sCurField).AsFloat;
 
-       PreTotalPrice := PreTotalPrice + StageRec.ValueByName(sPreField).AsFloat;
 
-       EndTotalPrice := EndTotalPrice + StageRec.ValueByName(sEndField).AsFloat;
 
-     end;
 
-   end;
 
- begin
 
-   OpenProjectData(AProject);
 
-   try
 
-     sCurField := 'TotalPrice' + IntToStr(FProjectData.PhaseData.AuditCount);
 
-     sPreField := 'PreTotalPrice' + IntToStr(FProjectData.PhaseData.AuditCount);
 
-     sEndField := 'EndTotalPrice' + IntToStr(FProjectData.PhaseData.AuditCount);
 
-     GatherBaseData;
 
-     GatherCommonDealPayData;
 
-     GatherPayData;
 
-   finally
 
-     FreeProjectData;
 
-   end;
 
- end;
 
- procedure TrmCustomized2Data.OpenProjectData(AProject: TSelectProject);
 
- 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.OpenForReport2(GetMyProjectsFilePath + Rec.ValueByName('FileName').AsString);
 
-   end;
 
-   FProjectName := Rec.ValueByName('Name').AsString;
 
- end;
 
- procedure TrmCustomized2Data.WriteData;
 
-   procedure WriteProjectData;
 
-   var
 
-     i: Integer;
 
-     Tender: TTenderBaseData;
 
-   begin
 
-     for i := 0 to FGatherData.TenderCount - 1 do
 
-     begin
 
-       Tender := FGatherData.Tenders[i];
 
-       cdsCustom.Append;
 
-       cdsCustomSerialNo.AsInteger := FSerialNo;
 
-       cdsCustomName.AsString := Tender.TenderName;
 
-       cdsCustomTotalPrice.AsFloat := Tender.TotalPrice;
 
-       cdsCustomEndCTotalPrice.AsFloat := Tender.EndCTotalPrice;
 
-       cdsCustomEndGatherTotalPrice.AsFloat := Tender.EndGatherTotalPrice;
 
-       cdsCustomCurDealTotalPrice.AsFloat := Tender.CurDealTotalPrice;
 
-       cdsCustomPreDealTotalPrice.AsFloat := Tender.PreDealTotalPrice;
 
-       cdsCustomEndDealTotalPrice.AsFloat := Tender.EndDealTotalPrice;
 
-       cdsCustomPrecent.AsFloat := Tender.Precent;
 
-       cdsCustom.Post;
 
-       Inc(FSerialNo);
 
-     end;
 
-   end;
 
-   procedure WriteProjectGather;
 
-   begin
 
-     cdsCustom.Append;
 
-     cdsCustomName.AsString := FGatherData.TenderGather.TenderName;
 
-     cdsCustomTotalPrice.AsFloat := FGatherData.TenderGather.TotalPrice;
 
-     cdsCustomEndCTotalPrice.AsFloat := FGatherData.TenderGather.EndCTotalPrice;
 
-     cdsCustomEndGatherTotalPrice.AsFloat := FGatherData.TenderGather.EndGatherTotalPrice;
 
-     cdsCustomCurDealTotalPrice.AsFloat := FGatherData.TenderGather.CurDealTotalPrice;
 
-     cdsCustomPreDealTotalPrice.AsFloat := FGatherData.TenderGather.PreDealTotalPrice;
 
-     cdsCustomEndDealTotalPrice.AsFloat := FGatherData.TenderGather.EndDealTotalPrice;
 
-     cdsCustomPrecent.AsFloat := FGatherData.TenderGather.Precent;
 
-     cdsCustom.Post;
 
-   end;
 
-   procedure WriteDealPays;
 
-   var
 
-     i: Integer;
 
-     DealPay: TDealPayData;
 
-   begin
 
-     for i := 0 to FGatherData.DealPayCount - 1 do
 
-     begin
 
-       DealPay := FGatherData.DealPay[i];
 
-       cdsCustom.Append;
 
-       cdsCustomSerialNo.AsInteger := FSerialNo;
 
-       cdsCustomName.AsString := DealPay.Name;
 
-       cdsCustomCurDealTotalPrice.AsFloat := DealPay.CurTotalPrice;
 
-       cdsCustomPreDealTotalPrice.AsFloat := DealPay.PreTotalPrice;
 
-       cdsCustomEndDealTotalPrice.AsFloat := DealPay.EndTotalPrice;
 
-       cdsCustom.Post;
 
-       Inc(FSerialNo);
 
-     end;
 
-   end;
 
-   procedure WriteGatherPay;
 
-   begin
 
-     cdsCustom.Append;
 
-     cdsCustomSerialNo.AsInteger := FSerialNo;
 
-     cdsCustomName.AsString := FGatherData.PayGather.Name;
 
-     cdsCustomCurDealTotalPrice.AsFloat := FGatherData.PayGather.CurTotalPrice;
 
-     cdsCustomPreDealTotalPrice.AsFloat := FGatherData.PayGather.PreTotalPrice;
 
-     cdsCustomEndDealTotalPrice.AsFloat := FGatherData.PayGather.EndTotalPrice;
 
-     cdsCustom.Post;
 
-   end;
 
- begin
 
-   FSerialNo := 1;
 
-   WriteProjectData;
 
-   WriteProjectGather;
 
-   WriteDealPays;
 
-   WriteGatherPay;
 
- end;
 
- end.
 
 
  |