| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251 | unit rmOtherReport1Dm;interfaceuses  SysUtils, Classes, DB, DBClient, rmSelectProjectFrm, ProjectData,  sdDB;const  FixedID: array [1..10] of Integer = (1, 2, 3, 21, 57, 36, 25, 26, 15, 34);  XiangCode: array [1..10] of string = ('1-1', '1-2', '1-3', '1-4', '1-5', '1-6', '1-7', '1-8', '1-9', '1-10');type  TDataArray = array [1..10] of Double;  TrmOtherReport1Data = class(TDataModule)    cdsOtherReport1: TClientDataSet;    cdsOtherReport1Value1: TFloatField;    cdsOtherReport1Value1_1: TFloatField;    cdsOtherReport1Value1_2: TFloatField;    cdsOtherReport1Value1_3: TFloatField;    cdsOtherReport1Value1_4: TFloatField;    cdsOtherReport1Value1_5: TFloatField;    cdsOtherReport1Value1_6: TFloatField;    cdsOtherReport1Value1_7: TFloatField;    cdsOtherReport1Value1_8: TFloatField;    cdsOtherReport1Value1_9: TFloatField;    cdsOtherReport1Value1_10: TFloatField;    cdsOtherReport1Value2: TFloatField;    cdsOtherReport1Value3: TFloatField;    cdsOtherReport1Value4: TFloatField;    cdsOtherReport1Value5: TFloatField;    cdsOtherReport1Value6: TFloatField;    cdsOtherReport1Value7: TFloatField;    cdsOtherReport1Value8: TFloatField;    cdsOtherReport1Value9: TFloatField;    cdsOtherReport1Value10: TFloatField;    cdsOtherReport1Value: TFloatField;  private    FProjectData: TProjectData;    FFixedAB: TDataArray;    FFixedFinal: TDataArray;    FXiangAB: TDataArray;    FXiangFinal: TDataArray;    FGatherAB: Double;    FGatherFinal: Double;    procedure ResetDataZero;    function OpenProject(AProject: TSelectProject): TProjectData;    procedure FreeProject(AProjectData: TProjectData);    procedure GatherFixedData(var AArray: TDataArray; AIndex: Integer);    procedure GatherXiangData(var AArray: TDataArray; AIndex: Integer);    procedure GatherProject(AProject: TSelectProject);    procedure WriteData;  public    function AssignData(AProjects: TList): TDataSet;  end;implementationuses  Globals, UtilMethods;{$R *.dfm}{ TrmOtherReport1Data }function TrmOtherReport1Data.AssignData(AProjects: TList): TDataSet;var  iProject: Integer;  SelectProject: TSelectProject;begin  cdsOtherReport1.Active := True;  cdsOtherReport1.DisableControls;  cdsOtherReport1.EmptyDataSet;  ResetDataZero;  try    for iProject := 0 to AProjects.Count - 1 do      GatherProject(TSelectProject(AProjects.Items[iProject]));    WriteData;  finally    cdsOtherReport1.EnableControls;    Result := cdsOtherReport1;  end;end;procedure TrmOtherReport1Data.FreeProject(AProjectData: TProjectData);begin  if not Assigned(OpenProjectManager.FindProjectData(FProjectData.ProjectID)) then    FProjectData.Free;end;procedure TrmOtherReport1Data.GatherFixedData(  var AArray: TDataArray; AIndex: Integer);var  i: Integer;begin  for i := Low(FixedID) to High(FixedID) do    AArray[i] := AArray[i] + FProjectData.BillsData.GetGatherTotalPrice(FixedID[i], AIndex);end;procedure TrmOtherReport1Data.GatherProject(AProject: TSelectProject);begin  FProjectData := OpenProject(AProject);  try    if AProject.IsAB then    begin      GatherFixedData(FFixedAB, 0);      GatherXiangData(FXiangAB, 0);      FGatherAB := FProjectData.BillsData.Settlement[0];    end    else    begin      GatherFixedData(FFixedFinal, 4);      GatherXiangData(FXiangFinal, 4);      FGatherFinal := FGatherFinal + FProjectData.BillsData.Settlement[4];    end;  finally    FreeProject(FProjectData);  end;end;procedure TrmOtherReport1Data.GatherXiangData(  var AArray: TDataArray; AIndex: Integer);var  i: Integer;  Rec: TsdDataRecord;begin  for i := Low(XiangCode) to High(XiangCode) do  begin    Rec := FProjectData.BillsData.sddBills.Locate('Code', XiangCode[i]);    if Assigned(Rec) then    begin      case AIndex of        0: AArray[i] := AArray[i] + Rec.ValueByName('TotalPrice').AsFloat;        4: AArray[i] := AArray[i] + Rec.ValueByName('AddGatherTotalPrice').AsFloat;      end;    end;  end;end;function TrmOtherReport1Data.OpenProject(AProject: TSelectProject): TProjectData;var  Rec: TsdDataRecord;begin  Result := OpenProjectManager.FindProjectData(AProject.ProjectID);  if not Assigned(Result) then  begin    Rec := ProjectManager.sddProjectsInfo.FindKey('idxID', AProject.ProjectID);    Result := TProjectData.Create;    Result.OpenForReport(GetMyProjectsFilePath + Rec.ValueByName('FileName').AsString);  end;end;procedure TrmOtherReport1Data.ResetDataZero;begin  FillChar(FFixedAB, SizeOf(FFixedAB), 0);  FillChar(FFixedFinal, SizeOf(FFixedFinal), 0);  FillChar(FXiangAB, SizeOf(FXiangAB), 0);  FillChar(FXiangFinal, SizeOf(FXiangFinal), 0);  FGatherAB := 0;  FGatherFinal := 0;end;procedure TrmOtherReport1Data.WriteData;begin  //Åú×¼¸ÅËã  cdsOtherReport1.Append;  cdsOtherReport1Value1.AsFloat := FFixedAB[1];  cdsOtherReport1Value2.AsFloat := FFixedAB[2];  cdsOtherReport1Value3.AsFloat := FFixedAB[3];  cdsOtherReport1Value4.AsFloat := FFixedAB[4];  cdsOtherReport1Value5.AsFloat := FFixedAB[5];  cdsOtherReport1Value6.AsFloat := FFixedAB[6];  cdsOtherReport1Value7.AsFloat := FFixedAB[7];  cdsOtherReport1Value8.AsFloat := FFixedAB[8];  cdsOtherReport1Value9.AsFloat := FFixedAB[9];  cdsOtherReport1Value10.AsFloat := FFixedAB[10];  cdsOtherReport1Value1_1.AsFloat := FXiangAB[1];  cdsOtherReport1Value1_2.AsFloat := FXiangAB[2];  cdsOtherReport1Value1_3.AsFloat := FXiangAB[3];  cdsOtherReport1Value1_4.AsFloat := FXiangAB[4];  cdsOtherReport1Value1_5.AsFloat := FXiangAB[5];  cdsOtherReport1Value1_6.AsFloat := FXiangAB[6];  cdsOtherReport1Value1_7.AsFloat := FXiangAB[7];  cdsOtherReport1Value1_8.AsFloat := FXiangAB[8];  cdsOtherReport1Value1_9.AsFloat := FXiangAB[9];  cdsOtherReport1Value1_10.AsFloat := FXiangAB[10];  cdsOtherReport1Value.AsFloat := FGatherAB;  cdsOtherReport1.Post;  // ¾öËã  cdsOtherReport1.Append;  cdsOtherReport1Value1.AsFloat := FFixedFinal[1];  cdsOtherReport1Value2.AsFloat := FFixedFinal[2];  cdsOtherReport1Value3.AsFloat := FFixedFinal[3];  cdsOtherReport1Value4.AsFloat := FFixedFinal[4];  cdsOtherReport1Value5.AsFloat := FFixedFinal[5];  cdsOtherReport1Value6.AsFloat := FFixedFinal[6];  cdsOtherReport1Value7.AsFloat := FFixedFinal[7];  cdsOtherReport1Value8.AsFloat := FFixedFinal[8];  cdsOtherReport1Value9.AsFloat := FFixedFinal[9];  cdsOtherReport1Value10.AsFloat := FFixedFinal[10];  cdsOtherReport1Value1_1.AsFloat := FXiangFinal[1];  cdsOtherReport1Value1_2.AsFloat := FXiangFinal[2];  cdsOtherReport1Value1_3.AsFloat := FXiangFinal[3];  cdsOtherReport1Value1_4.AsFloat := FXiangFinal[4];  cdsOtherReport1Value1_5.AsFloat := FXiangFinal[5];  cdsOtherReport1Value1_6.AsFloat := FXiangFinal[6];  cdsOtherReport1Value1_7.AsFloat := FXiangFinal[7];  cdsOtherReport1Value1_8.AsFloat := FXiangFinal[8];  cdsOtherReport1Value1_9.AsFloat := FXiangFinal[9];  cdsOtherReport1Value1_10.AsFloat := FXiangFinal[10];  cdsOtherReport1Value.AsFloat := FGatherFinal;  cdsOtherReport1.Post;  // Ôö¼õ  cdsOtherReport1.Append;  cdsOtherReport1Value1.AsFloat := FFixedFinal[1] - FFixedAB[1];  cdsOtherReport1Value2.AsFloat := FFixedFinal[2] - FFixedAB[2];  cdsOtherReport1Value3.AsFloat := FFixedFinal[3] - FFixedAB[3];  cdsOtherReport1Value4.AsFloat := FFixedFinal[4] - FFixedAB[4];  cdsOtherReport1Value5.AsFloat := FFixedFinal[5] - FFixedAB[5];  cdsOtherReport1Value6.AsFloat := FFixedFinal[6] - FFixedAB[6];  cdsOtherReport1Value7.AsFloat := FFixedFinal[7] - FFixedAB[7];  cdsOtherReport1Value8.AsFloat := FFixedFinal[8] - FFixedAB[8];  cdsOtherReport1Value9.AsFloat := FFixedFinal[9] - FFixedAB[9];  cdsOtherReport1Value10.AsFloat := FFixedFinal[10] - FFixedAB[10];  cdsOtherReport1Value1_1.AsFloat := FXiangFinal[1] - FXiangAB[1];  cdsOtherReport1Value1_2.AsFloat := FXiangFinal[2] - FXiangAB[2];  cdsOtherReport1Value1_3.AsFloat := FXiangFinal[3] - FXiangAB[3];  cdsOtherReport1Value1_4.AsFloat := FXiangFinal[4] - FXiangAB[4];  cdsOtherReport1Value1_5.AsFloat := FXiangFinal[5] - FXiangAB[5];  cdsOtherReport1Value1_6.AsFloat := FXiangFinal[6] - FXiangAB[6];  cdsOtherReport1Value1_7.AsFloat := FXiangFinal[7] - FXiangAB[7];  cdsOtherReport1Value1_8.AsFloat := FXiangFinal[8] - FXiangAB[8];  cdsOtherReport1Value1_9.AsFloat := FXiangFinal[9] - FXiangAB[9];  cdsOtherReport1Value1_10.AsFloat := FXiangFinal[10] - FXiangAB[10];  cdsOtherReport1Value.AsFloat := FGatherFinal - FGatherAB;  cdsOtherReport1.Post;end;end.
 |