rmOtherReport1Dm.pas 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. unit rmOtherReport1Dm;
  2. interface
  3. uses
  4. SysUtils, Classes, DB, DBClient, rmSelectProjectFrm, ProjectData,
  5. sdDB;
  6. const
  7. FixedID: array [1..10] of Integer = (1, 2, 3, 21, 57, 36, 25, 26, 15, 34);
  8. 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');
  9. type
  10. TDataArray = array [1..10] of Double;
  11. TrmOtherReport1Data = class(TDataModule)
  12. cdsOtherReport1: TClientDataSet;
  13. cdsOtherReport1Value1: TFloatField;
  14. cdsOtherReport1Value1_1: TFloatField;
  15. cdsOtherReport1Value1_2: TFloatField;
  16. cdsOtherReport1Value1_3: TFloatField;
  17. cdsOtherReport1Value1_4: TFloatField;
  18. cdsOtherReport1Value1_5: TFloatField;
  19. cdsOtherReport1Value1_6: TFloatField;
  20. cdsOtherReport1Value1_7: TFloatField;
  21. cdsOtherReport1Value1_8: TFloatField;
  22. cdsOtherReport1Value1_9: TFloatField;
  23. cdsOtherReport1Value1_10: TFloatField;
  24. cdsOtherReport1Value2: TFloatField;
  25. cdsOtherReport1Value3: TFloatField;
  26. cdsOtherReport1Value4: TFloatField;
  27. cdsOtherReport1Value5: TFloatField;
  28. cdsOtherReport1Value6: TFloatField;
  29. cdsOtherReport1Value7: TFloatField;
  30. cdsOtherReport1Value8: TFloatField;
  31. cdsOtherReport1Value9: TFloatField;
  32. cdsOtherReport1Value10: TFloatField;
  33. cdsOtherReport1Value: TFloatField;
  34. private
  35. FProjectData: TProjectData;
  36. FFixedAB: TDataArray;
  37. FFixedFinal: TDataArray;
  38. FXiangAB: TDataArray;
  39. FXiangFinal: TDataArray;
  40. FGatherAB: Double;
  41. FGatherFinal: Double;
  42. procedure ResetDataZero;
  43. function OpenProject(AProject: TSelectProject): TProjectData;
  44. procedure FreeProject(AProjectData: TProjectData);
  45. procedure GatherFixedData(var AArray: TDataArray; AIndex: Integer);
  46. procedure GatherXiangData(var AArray: TDataArray; AIndex: Integer);
  47. procedure GatherProject(AProject: TSelectProject);
  48. procedure WriteData;
  49. public
  50. function AssignData(AProjects: TList): TDataSet;
  51. end;
  52. implementation
  53. uses
  54. Globals, UtilMethods;
  55. {$R *.dfm}
  56. { TrmOtherReport1Data }
  57. function TrmOtherReport1Data.AssignData(AProjects: TList): TDataSet;
  58. var
  59. iProject: Integer;
  60. SelectProject: TSelectProject;
  61. begin
  62. cdsOtherReport1.Active := True;
  63. cdsOtherReport1.DisableControls;
  64. cdsOtherReport1.EmptyDataSet;
  65. ResetDataZero;
  66. try
  67. for iProject := 0 to AProjects.Count - 1 do
  68. GatherProject(TSelectProject(AProjects.Items[iProject]));
  69. WriteData;
  70. finally
  71. cdsOtherReport1.EnableControls;
  72. Result := cdsOtherReport1;
  73. end;
  74. end;
  75. procedure TrmOtherReport1Data.FreeProject(AProjectData: TProjectData);
  76. begin
  77. if not Assigned(OpenProjectManager.FindProjectData(FProjectData.ProjectID)) then
  78. FProjectData.Free;
  79. end;
  80. procedure TrmOtherReport1Data.GatherFixedData(
  81. var AArray: TDataArray; AIndex: Integer);
  82. var
  83. i: Integer;
  84. begin
  85. for i := Low(FixedID) to High(FixedID) do
  86. AArray[i] := AArray[i] + FProjectData.BillsData.GetGatherTotalPrice(FixedID[i], AIndex);
  87. end;
  88. procedure TrmOtherReport1Data.GatherProject(AProject: TSelectProject);
  89. begin
  90. FProjectData := OpenProject(AProject);
  91. try
  92. if AProject.IsAB then
  93. begin
  94. GatherFixedData(FFixedAB, 0);
  95. GatherXiangData(FXiangAB, 0);
  96. FGatherAB := FProjectData.BillsData.Settlement[0];
  97. end
  98. else
  99. begin
  100. GatherFixedData(FFixedFinal, 4);
  101. GatherXiangData(FXiangFinal, 4);
  102. FGatherFinal := FGatherFinal + FProjectData.BillsData.Settlement[4];
  103. end;
  104. finally
  105. FreeProject(FProjectData);
  106. end;
  107. end;
  108. procedure TrmOtherReport1Data.GatherXiangData(
  109. var AArray: TDataArray; AIndex: Integer);
  110. var
  111. i: Integer;
  112. Rec: TsdDataRecord;
  113. begin
  114. for i := Low(XiangCode) to High(XiangCode) do
  115. begin
  116. Rec := FProjectData.BillsData.sddBills.Locate('Code', XiangCode[i]);
  117. if Assigned(Rec) then
  118. begin
  119. case AIndex of
  120. 0: AArray[i] := AArray[i] + Rec.ValueByName('TotalPrice').AsFloat;
  121. 4: AArray[i] := AArray[i] + Rec.ValueByName('AddGatherTotalPrice').AsFloat;
  122. end;
  123. end;
  124. end;
  125. end;
  126. function TrmOtherReport1Data.OpenProject(AProject: TSelectProject): TProjectData;
  127. var
  128. Rec: TsdDataRecord;
  129. begin
  130. Result := OpenProjectManager.FindProjectData(AProject.ProjectID);
  131. if not Assigned(Result) then
  132. begin
  133. Rec := ProjectManager.sddProjectsInfo.FindKey('idxID', AProject.ProjectID);
  134. Result := TProjectData.Create;
  135. Result.OpenForReport(GetMyProjectsFilePath + Rec.ValueByName('FileName').AsString);
  136. end;
  137. end;
  138. procedure TrmOtherReport1Data.ResetDataZero;
  139. begin
  140. FillChar(FFixedAB, SizeOf(FFixedAB), 0);
  141. FillChar(FFixedFinal, SizeOf(FFixedFinal), 0);
  142. FillChar(FXiangAB, SizeOf(FXiangAB), 0);
  143. FillChar(FXiangFinal, SizeOf(FXiangFinal), 0);
  144. FGatherAB := 0;
  145. FGatherFinal := 0;
  146. end;
  147. procedure TrmOtherReport1Data.WriteData;
  148. begin
  149. //Åú×¼¸ÅËã
  150. cdsOtherReport1.Append;
  151. cdsOtherReport1Value1.AsFloat := FFixedAB[1];
  152. cdsOtherReport1Value2.AsFloat := FFixedAB[2];
  153. cdsOtherReport1Value3.AsFloat := FFixedAB[3];
  154. cdsOtherReport1Value4.AsFloat := FFixedAB[4];
  155. cdsOtherReport1Value5.AsFloat := FFixedAB[5];
  156. cdsOtherReport1Value6.AsFloat := FFixedAB[6];
  157. cdsOtherReport1Value7.AsFloat := FFixedAB[7];
  158. cdsOtherReport1Value8.AsFloat := FFixedAB[8];
  159. cdsOtherReport1Value9.AsFloat := FFixedAB[9];
  160. cdsOtherReport1Value10.AsFloat := FFixedAB[10];
  161. cdsOtherReport1Value1_1.AsFloat := FXiangAB[1];
  162. cdsOtherReport1Value1_2.AsFloat := FXiangAB[2];
  163. cdsOtherReport1Value1_3.AsFloat := FXiangAB[3];
  164. cdsOtherReport1Value1_4.AsFloat := FXiangAB[4];
  165. cdsOtherReport1Value1_5.AsFloat := FXiangAB[5];
  166. cdsOtherReport1Value1_6.AsFloat := FXiangAB[6];
  167. cdsOtherReport1Value1_7.AsFloat := FXiangAB[7];
  168. cdsOtherReport1Value1_8.AsFloat := FXiangAB[8];
  169. cdsOtherReport1Value1_9.AsFloat := FXiangAB[9];
  170. cdsOtherReport1Value1_10.AsFloat := FXiangAB[10];
  171. cdsOtherReport1Value.AsFloat := FGatherAB;
  172. cdsOtherReport1.Post;
  173. // ¾öËã
  174. cdsOtherReport1.Append;
  175. cdsOtherReport1Value1.AsFloat := FFixedFinal[1];
  176. cdsOtherReport1Value2.AsFloat := FFixedFinal[2];
  177. cdsOtherReport1Value3.AsFloat := FFixedFinal[3];
  178. cdsOtherReport1Value4.AsFloat := FFixedFinal[4];
  179. cdsOtherReport1Value5.AsFloat := FFixedFinal[5];
  180. cdsOtherReport1Value6.AsFloat := FFixedFinal[6];
  181. cdsOtherReport1Value7.AsFloat := FFixedFinal[7];
  182. cdsOtherReport1Value8.AsFloat := FFixedFinal[8];
  183. cdsOtherReport1Value9.AsFloat := FFixedFinal[9];
  184. cdsOtherReport1Value10.AsFloat := FFixedFinal[10];
  185. cdsOtherReport1Value1_1.AsFloat := FXiangFinal[1];
  186. cdsOtherReport1Value1_2.AsFloat := FXiangFinal[2];
  187. cdsOtherReport1Value1_3.AsFloat := FXiangFinal[3];
  188. cdsOtherReport1Value1_4.AsFloat := FXiangFinal[4];
  189. cdsOtherReport1Value1_5.AsFloat := FXiangFinal[5];
  190. cdsOtherReport1Value1_6.AsFloat := FXiangFinal[6];
  191. cdsOtherReport1Value1_7.AsFloat := FXiangFinal[7];
  192. cdsOtherReport1Value1_8.AsFloat := FXiangFinal[8];
  193. cdsOtherReport1Value1_9.AsFloat := FXiangFinal[9];
  194. cdsOtherReport1Value1_10.AsFloat := FXiangFinal[10];
  195. cdsOtherReport1Value.AsFloat := FGatherFinal;
  196. cdsOtherReport1.Post;
  197. // Ôö¼õ
  198. cdsOtherReport1.Append;
  199. cdsOtherReport1Value1.AsFloat := FFixedFinal[1] - FFixedAB[1];
  200. cdsOtherReport1Value2.AsFloat := FFixedFinal[2] - FFixedAB[2];
  201. cdsOtherReport1Value3.AsFloat := FFixedFinal[3] - FFixedAB[3];
  202. cdsOtherReport1Value4.AsFloat := FFixedFinal[4] - FFixedAB[4];
  203. cdsOtherReport1Value5.AsFloat := FFixedFinal[5] - FFixedAB[5];
  204. cdsOtherReport1Value6.AsFloat := FFixedFinal[6] - FFixedAB[6];
  205. cdsOtherReport1Value7.AsFloat := FFixedFinal[7] - FFixedAB[7];
  206. cdsOtherReport1Value8.AsFloat := FFixedFinal[8] - FFixedAB[8];
  207. cdsOtherReport1Value9.AsFloat := FFixedFinal[9] - FFixedAB[9];
  208. cdsOtherReport1Value10.AsFloat := FFixedFinal[10] - FFixedAB[10];
  209. cdsOtherReport1Value1_1.AsFloat := FXiangFinal[1] - FXiangAB[1];
  210. cdsOtherReport1Value1_2.AsFloat := FXiangFinal[2] - FXiangAB[2];
  211. cdsOtherReport1Value1_3.AsFloat := FXiangFinal[3] - FXiangAB[3];
  212. cdsOtherReport1Value1_4.AsFloat := FXiangFinal[4] - FXiangAB[4];
  213. cdsOtherReport1Value1_5.AsFloat := FXiangFinal[5] - FXiangAB[5];
  214. cdsOtherReport1Value1_6.AsFloat := FXiangFinal[6] - FXiangAB[6];
  215. cdsOtherReport1Value1_7.AsFloat := FXiangFinal[7] - FXiangAB[7];
  216. cdsOtherReport1Value1_8.AsFloat := FXiangFinal[8] - FXiangAB[8];
  217. cdsOtherReport1Value1_9.AsFloat := FXiangFinal[9] - FXiangAB[9];
  218. cdsOtherReport1Value1_10.AsFloat := FXiangFinal[10] - FXiangAB[10];
  219. cdsOtherReport1Value.AsFloat := FGatherFinal - FGatherAB;
  220. cdsOtherReport1.Post;
  221. end;
  222. end.