ScProjGLJGatherDM.pas 51 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281
  1. unit ScProjGLJGatherDM;
  2. interface
  3. uses
  4. Windows, SysUtils, Classes, ProjectsDM, ScProjBaseDM, ScProjList, DB, ADODB,
  5. DBClient, ScProjectCompare, sdDB, sdProvider, ScProjManagerTree;
  6. type
  7. TReportType = (rtNone, rtTable_02_1, rtTable_ZYZ4);
  8. TProjGLJSum = record
  9. ID: Integer;
  10. Name: string;
  11. FileName: string;
  12. Selected: Boolean;
  13. ProjType: Integer;
  14. BuildProjName: string;
  15. Author: string;
  16. Auditor: string;
  17. end;
  18. PProjGLJSum = ^TProjGLJSum;
  19. TScProjGLJGather = class(TDataModule)
  20. aqProjGLJ: TADOQuery;
  21. cdsProjData: TClientDataSet;
  22. cdsProjDataBuildProjName: TWideStringField;
  23. cdsProjDataAuthor: TWideStringField;
  24. cdsProjDataAuditor: TWideStringField;
  25. aqProjGLJAName: TWideStringField;
  26. aqProjGLJAUnit: TWideStringField;
  27. aqProjGLJUAmount: TFloatField;
  28. aqProjGLJAType: TIntegerField;
  29. aqProjGLJPrice: TCurrencyField;
  30. aqMateBuildFee: TADOQuery;
  31. aqMateBuildFeeMateFee: TBCDField;
  32. aqMateBuildFeeBuildFee: TFloatField;
  33. aqMateBuildFeeFileName: TStringField;
  34. aqMateBuildFeeTenderMateFee: TBCDField;
  35. aqMateBuildFeeTenderBuildFee: TFloatField;
  36. aqProjGLJUTenderAmount: TFloatField;
  37. aqProjGLJTenderPrice: TCurrencyField;
  38. sdmpGLJGather: TsdMemoryProvider;
  39. sdsGLJGather: TsdDataSet;
  40. sdvGLJGather: TsdDataView;
  41. sdmpGLJGatherD: TsdMemoryProvider;
  42. sdsGLJGatherD: TsdDataSet;
  43. sdvGLJGatherD: TsdDataView;
  44. sdmpGLJForReport: TsdMemoryProvider;
  45. sdsGLJForReport: TsdDataSet;
  46. sdvGLJForReport: TsdDataView;
  47. sdmpProjData: TsdMemoryProvider;
  48. sdsProjData: TsdDataSet;
  49. sdvProjData: TsdDataView;
  50. aqProjGLJMain: TBooleanField;
  51. aqProjGLJACode: TWideStringField;
  52. aqProjGLJASpecs: TStringField;
  53. procedure DataModuleCreate(Sender: TObject);
  54. procedure DataModuleDestroy(Sender: TObject);
  55. private
  56. { Private declarations }
  57. FProjects: TList;
  58. FReportType: TReportType;
  59. FBuildProj: TScProjManagerTreeNode;
  60. FSilence: Boolean;
  61. FCompareDM: TScProjectCompareDM;
  62. FIsCompareGather: Boolean;
  63. FAggregator: TsdAggregator;
  64. FIsTender: Boolean;
  65. procedure AddProjRecord(AConnection: TADOConnection; AProjID: Integer;
  66. AProjName: string);
  67. procedure CheckProjects(ABuildProjName: string);
  68. procedure DoSumAmount;
  69. procedure ClearProjList;
  70. procedure MakeProjList(ABuildProj: TScProjManagerTreeNode);
  71. procedure MakeProjListForCompareGather(AProjList: TList);
  72. procedure CopyGatherDataForCompare(ACompareData: TsdDataView);
  73. public
  74. { Public declarations }
  75. function GatherProjs(ABuildProjName: string): Boolean;
  76. function GatherGLJ(ABuildProjName: string;
  77. AIsCompareGather: Boolean = False; AIsCompareProj: Boolean = False;
  78. AProjList: TList = nil): Boolean;
  79. function GatherGLJForReport(ABuildProjName: string;
  80. AIsCompareGather: Boolean = False; AIsCompareProj: Boolean = False;
  81. AProjList: TList = nil): Boolean;
  82. property ReportType: TReportType read FReportType write FReportType;
  83. property Silence: Boolean read FSilence write FSilence;
  84. property IsTender: Boolean read FIsTender write FIsTender;
  85. // 同步907 Task514 核备规程编审对比表
  86. property CompareDM: TScProjectCompareDM read FCompareDM;
  87. end;
  88. var
  89. ScProjGLJGather: TScProjGLJGather;
  90. implementation
  91. uses
  92. ScIDTree, ScUtils, Math, ScProjectsGather, ScSelectGatherForm, ScFileArchiver,
  93. ScConsts, Variants;
  94. {$R *.dfm}
  95. const
  96. sql_GLJGather = 'SELECT Code As ACode, Name As AName, Unit As AUnit, Specs As ASpecs, '
  97. + ' Amount AS UAmount, Type As AType, BudgetPrice As Price, '
  98. + ' TenderAmount AS UTenderAmount, TenderPrice As TenderPrice, '
  99. + ' Main AS Main '
  100. + 'FROM ProjectGLJ '
  101. + 'WHERE Amount <> 0';
  102. sql_GLJGatherTender = 'SELECT Code As ACode, Name As AName, Unit As AUnit, Specs As ASpecs, '
  103. + ' TenderAmount AS UAmount, Type As AType, TenderPrice As Price, '
  104. + ' TenderAmount AS UTenderAmount, TenderPrice As TenderPrice, '
  105. + ' Main AS Main '
  106. + 'FROM ProjectGLJ '
  107. + 'WHERE TenderAmount <> 0';
  108. { TScProjGLJGather }
  109. procedure TScProjGLJGather.AddProjRecord(AConnection: TADOConnection;
  110. AProjID: Integer; AProjName: string);
  111. var
  112. fMachineAmount: Currency;
  113. bIsEstimate: Boolean;
  114. Rec: TsdDataRecord;
  115. begin
  116. bIsEstimate := False;
  117. {$IFDEF _ScEstimate}
  118. bIsEstimate := True;
  119. {$ENDIF}
  120. fMachineAmount := 0;
  121. aqProjGLJ.Close;
  122. if not IsTender then
  123. aqProjGLJ.SQL.Text := sql_GLJGather
  124. else
  125. aqProjGLJ.SQL.Text := sql_GLJGatherTender;
  126. aqProjGLJ.Connection := AConnection;
  127. aqProjGLJ.Open;
  128. aqProjGLJ.First;
  129. sdsGLJGather.BeginUpdate;
  130. try
  131. while not aqProjGLJ.Eof do
  132. begin
  133. if aqProjGLJACode.AsString = SJiJiaCode then
  134. begin
  135. aqProjGLJ.Next;
  136. Continue;
  137. end;
  138. (* if bIsEstimate then
  139. begin
  140. if ((aqProjGLJACode.AsInteger <> 400) {$IFDEF _ScGanSu}and (aqProjGLJACode.AsInteger <> 998){$ENDIF}) and (aqProjGLJAType.AsInteger = 4) then
  141. begin
  142. // fMachineAmount := fMachineAmount + aqProjGLJUAmount.AsFloat * aqProjGLJPrice.AsCurrency;
  143. aqProjGLJ.Next;
  144. Continue;
  145. end;
  146. end; *)
  147. {如果是02—1表,并且是混凝土,则不添加。 李涛 2010.4.29}
  148. if (FReportType = rtNone) or
  149. (((FReportType = rtTable_02_1) or (FReportType = rtTable_ZYZ4)) and (aqProjGLJAType.AsInteger <> 2)) then
  150. begin
  151. Rec := sdsGLJGather.Add(True);
  152. try
  153. Rec.ValueByName('Code').AsString := aqProjGLJACode.AsString;
  154. Rec.ValueByName('Name').AsString := aqProjGLJAName.AsString;
  155. Rec.ValueByName('Unit').AsString := aqProjGLJAUnit.AsString;
  156. Rec.ValueByName('Specs').AsString := aqProjGLJASpecs.AsString;
  157. Rec.ValueByName('ProjectName').AsString := AProjName;
  158. Rec.ValueByName('Price').AsCurrency := aqProjGLJPrice.AsCurrency;
  159. Rec.ValueByName('Amount').AsFloat := aqProjGLJUAmount.AsFloat;
  160. Rec.ValueByName('ProjectID').AsInteger := AProjID;
  161. Rec.ValueByName('LibID').AsInteger := 0;
  162. Rec.ValueByName('Type').AsInteger := aqProjGLJAType.AsInteger;
  163. finally
  164. Rec.EndUpdate;
  165. end;
  166. end;
  167. aqProjGLJ.Next;
  168. end;
  169. finally
  170. sdsGLJGather.EndUpdate;
  171. end;
  172. { if bIsEstimate then
  173. begin
  174. if cdsGLJGather.Locate('Code', 400, []) then
  175. begin
  176. cdsGLJGather.Edit;
  177. cdsGLJGatherAmount.Value := cdsGLJGatherAmount.Value + fMachineAmount;
  178. cdsGLJGather.Post;
  179. end
  180. else
  181. begin
  182. cdsGLJGather.Append;
  183. cdsGLJGatherCode.AsInteger := 400;
  184. cdsGLJGatherName.AsString := '机械使用费';
  185. cdsGLJGatherUnit.AsString := '元';
  186. cdsGLJGatherProjectName.AsString := AProjName;
  187. cdsGLJGatherPrice.AsCurrency := 1;
  188. cdsGLJGatherAmount.Value := fMachineAmount;
  189. cdsGLJGatherProjectID.AsInteger := AProjID;
  190. cdsGLJGatherLibID.AsInteger := 0;
  191. cdsGLJGatherType.AsInteger := 3;
  192. cdsGLJGather.Post;
  193. end;
  194. end;}
  195. end;
  196. procedure TScProjGLJGather.MakeProjList(ABuildProj: TScProjManagerTreeNode);
  197. procedure LoadTenders(ATenderInfos: TList);
  198. var
  199. Tenders: TList;
  200. i: Integer;
  201. Rec: TsdDataRecord;
  202. sFileName, strName: string;
  203. pProjSum: PProjGLJSum;
  204. begin
  205. if not Assigned(ATenderInfos) then Exit;
  206. Tenders := TList.Create;
  207. try
  208. ProjectManager.LoadBuildProjectTenders(ABuildProj.ID, Tenders);
  209. for i := 0 to Tenders.Count - 1 do
  210. begin
  211. Rec := TsdDataRecord(Tenders.Items[i]);
  212. sFileName := Rec.ValueByName('FileName').AsString;
  213. strName := Rec.ValueByName('Name').AsString;
  214. if FileExists(sFileName) then
  215. begin
  216. // 固化清单 汇总项目识别固化清单
  217. if IsSmartCostProjectFile(sFileName) or IsStaticBillsFile(sFileName) then
  218. begin
  219. New(pProjSum);
  220. ZeroMemory(pProjSum, Sizeof(TProjChapterSum));
  221. pProjSum^.ID := Rec.ValueByName('ID').AsInteger;
  222. pProjSum^.Name := strName;
  223. pProjSum^.FileName := sFileName;
  224. pProjSum^.Selected := Rec.ValueByName('Selected').AsBoolean;
  225. pProjSum^.ProjType := Rec.ValueByName('ProjectType').AsInteger;
  226. ATenderInfos.Add(pProjSum);
  227. end
  228. else
  229. MessageWarning(0, Format('所选建设项目中,项目文件[%s]不是有效的SmartCost预算项目文件。'#13#10 +
  230. '请进入“建设项目管理”进行管理。', [strName]));
  231. end
  232. else
  233. MessageWarning(0, Format('所选建设项目中,项目文件[%s]不存在。'#13#10 +
  234. '请进入“建设项目管理”重新查找该项目。', [strName]));
  235. end;
  236. finally
  237. Tenders.Free;
  238. end;
  239. end;
  240. var
  241. pProjSum: PProjGLJSum;
  242. I, BaseFile: Integer;
  243. vProjList: TList;
  244. begin
  245. vProjList := TList.Create;
  246. try
  247. ClearProjList;
  248. LoadTenders(vProjList);
  249. // *汇总表类型
  250. if SelectProjects(vProjList, BaseFile, 2, FSilence) then
  251. begin
  252. for I := 0 to vProjList.Count - 1 do
  253. begin
  254. pProjSum := PProjGLJSum(vProjList[I]);
  255. if pProjSum^.Selected then
  256. FProjects.Add(pProjSum)
  257. else
  258. Dispose(pProjSum);
  259. end;
  260. end
  261. else
  262. if SelectProjects(vProjList, BaseFile, 1, FSilence) then
  263. begin
  264. for I := 0 to vProjList.Count - 1 do
  265. begin
  266. pProjSum := PProjGLJSum(vProjList[I]);
  267. if pProjSum^.Selected then
  268. FProjects.Add(pProjSum)
  269. else
  270. Dispose(pProjSum);
  271. end;
  272. end;
  273. finally
  274. vProjList.Free;
  275. end;
  276. end;
  277. procedure TScProjGLJGather.CheckProjects(ABuildProjName: string);
  278. var
  279. I: Integer;
  280. Proj: TScProjManagerTreeNode;
  281. begin
  282. Proj := ProjectManager.FindBuildProjectWithFull(ABuildProjName);
  283. MakeProjList(Proj);
  284. { if (Proj <> nil) and (Proj.FirstChild <> nil) then
  285. begin
  286. Proj := TScProjectItem(Proj.FirstChild);
  287. while Proj <> nil do
  288. begin
  289. ProjData := ProjList.IndexByName(Proj.FileName);
  290. if ProjData = nil then
  291. ProjData := ProjList.AddProj(Proj.FileName);
  292. if not ProjData.IsOpened then
  293. ProjData.Open;
  294. if Proj.PrevSibling = nil then
  295. begin
  296. cdsProjData.Active := True;
  297. cdsProjData.EmptyDataSet;
  298. cdsProjData.Append;
  299. cdsProjDataBuildProjName.Value := ProjData.BuildProjectName;
  300. cdsProjDataAuthor.Value := ProjData.Author;
  301. cdsProjDataAuditor.Value := ProjData.Auditor;
  302. cdsProjData.Post;
  303. cdsProjData.First;
  304. end;
  305. FProjects.Add(ProjList.IndexByName(Proj.FileName));
  306. Proj := TScProjectItem(Proj.NextSibling);
  307. end;
  308. end;}
  309. end;
  310. function TScProjGLJGather.GatherProjs(ABuildProjName: string): Boolean;
  311. var
  312. I: Integer;
  313. ProjData: TScProjBaseData;
  314. pProjSum: PProjGLJSum;
  315. Rec: TsdDataRecord;
  316. bIsOpened: Boolean;
  317. begin
  318. sdvGLJGather.Open;
  319. sdsGLJGather.DeleteAll;
  320. sdvGLJGather.IndexName := 'idxSort';
  321. if ABuildProjName = '' then
  322. ABuildProjName := strUnTypeProj;
  323. CheckProjects(ABuildProjName);
  324. for I := 0 to FProjects.Count - 1 do
  325. begin
  326. try
  327. pProjSum := PProjGLJSum(FProjects[I]);
  328. ProjData := ProjList.IndexByName(pProjSum^.FileName);
  329. bIsOpened := ProjData <> nil;
  330. if ProjData = nil then
  331. ProjData := ProjList.AddProj(pProjSum^.FileName);
  332. if not ProjData.IsOpened then ProjData.Open;
  333. AddProjRecord(ProjData.Connection.Connection, I, ProjData.Alias);
  334. if I = 0 then
  335. begin
  336. sdvProjData.Active := True;
  337. sdsProjData.DeleteAll;
  338. Rec := sdsProjData.Add;
  339. Rec.ValueByName('BuildProjName').AsString := ProjData.BuildProjectName;
  340. Rec.ValueByName('Author').AsString := ProjData.Author;
  341. Rec.ValueByName('Auditor').AsString := ProjData.Auditor;
  342. end;
  343. finally
  344. if not bIsOpened then
  345. FreeAndNil(ProjData);
  346. end;
  347. end;
  348. DoSumAmount;
  349. ScProgress(100);
  350. end;
  351. procedure TScProjGLJGather.DataModuleCreate(Sender: TObject);
  352. begin
  353. FProjects := TList.Create;
  354. FReportType := rtNone;
  355. FCompareDM := TScProjectCompareDM.Create(nil);
  356. FIsCompareGather := False;
  357. FAggregator := TsdAggregator.Create(nil);
  358. FAggregator.DataSet := sdsGLJGather;
  359. FAggregator.IndexName := 'idxSort';
  360. end;
  361. procedure TScProjGLJGather.DataModuleDestroy(Sender: TObject);
  362. begin
  363. FAggregator.Free;
  364. FCompareDM.Free;
  365. ClearProjList;
  366. FProjects.Free;
  367. end;
  368. procedure TScProjGLJGather.ClearProjList;
  369. var
  370. I: Integer;
  371. begin
  372. if not FIsCompareGather then
  373. begin
  374. for I := 0 to FProjects.Count - 1 do
  375. begin
  376. Dispose(PProjGLJSum(FProjects[I]));
  377. end;
  378. FProjects.Clear;
  379. end
  380. else
  381. FProjects.Clear;
  382. end;
  383. // 因为改为直接从ProjectGLJ表中取数据,所以不需要汇总,这里只清除消耗为0的工料机
  384. procedure TScProjGLJGather.DoSumAmount;
  385. var
  386. I: Integer;
  387. Rec: TsdDataRecord;
  388. fSumAmount: Double;
  389. begin
  390. I := 0;
  391. while I <= sdsGLJGather.RecordCount - 1 do
  392. begin
  393. Rec := sdsGLJGather[I];
  394. if FReportType = rtTable_ZYZ4 then
  395. fSumAmount := FAggregator.Aggregate(VarArrayOf(
  396. [Rec.ValueByName('Code').AsString, Rec.ValueByName('Name').AsString,
  397. Rec.ValueByName('Specs').AsString, Rec.ValueByName('Unit').AsString,
  398. Rec.ValueByName('Price').AsCurrency]), 'Amount')
  399. else
  400. fSumAmount := FAggregator.Aggregate(VarArrayOf(
  401. [Rec.ValueByName('Code').AsString, Rec.ValueByName('Name').AsString,
  402. Rec.ValueByName('Specs').AsString, Rec.ValueByName('Unit').AsString]), 'Amount');
  403. // lsm 2010-1-21删除消耗为0的工料机
  404. if fSumAmount = 0 then
  405. sdsGLJGather.Remove(Rec)
  406. else
  407. begin
  408. Rec.ValueByName('SumAmount').AsFloat := fSumAmount;
  409. Inc(I);
  410. end;
  411. end;
  412. end;
  413. {aqProjGLJ的SQL
  414. SELECT ACode, AName, AUnit, Sum(AAmount) AS UAmount, AType
  415. FROM
  416. (
  417. SELECT P.Code AS ACode, P.Name AS AName, P.Unit AS AUnit,
  418. Sum(G.Quantity*G.RationItemQuantity) AS AAmount, P.Type AS AType, P.LibID
  419. FROM ProjectGLJ AS P, GLJList AS G
  420. WHERE (P.Code=G.Code) AND (G.Type<>2) AND (P.LibID=G.LibID) AND
  421. ((SELECT Sum(G9.Quantity*G9.RationItemQuantity)
  422. FROM GLJList AS G9, ProjectGLJ AS P9
  423. WHERE (P9.Code=G9.Code) AND (G9.Type<>2) AND (P9.LibID=G9.LibID)
  424. )>0 )
  425. GROUP BY P.Code, P.Name, P.Unit, P.Type, P.LibID
  426. UNION ALL
  427. SELECT P1.Code AS ACode, P1.Name AS AName, P1.Unit AS AUnit,
  428. SUM(M1.RG*G1.Quantity*G1.RationItemQuantity) AS AAmount, P1.Type AS AType, P1.LibID
  429. FROM GLJList AS G1, MachinePrice AS M1, ProjectGLJ AS P1
  430. WHERE (P1.Code=3) AND (G1.Code=M1.Code) AND (P1.LibID=G1.LibID) AND
  431. ((SELECT SUM(M8.RG*G8.Quantity*G8.RationItemQuantity)
  432. FROM GLJList AS G8, MachinePrice AS M8, ProjectGLJ AS P8
  433. WHERE (P8.Code=3) AND (G8.Code=M8.Code) AND (P8.LibID=G8.LibID)
  434. )>0 )
  435. GROUP BY P1.Code, P1.Name, P1.Unit, P1.Type, P1.LibID
  436. UNION ALL
  437. SELECT P1.Code AS ACode, P1.Name AS AName, P1.Unit AS AUnit,
  438. SUM(M1.ZY*G1.Quantity*G1.RationItemQuantity) AS AAmount, P1.Type AS AType, P1.LibID
  439. FROM GLJList AS G1, MachinePrice AS M1, ProjectGLJ AS P1
  440. WHERE (P1.Code=263) AND (G1.Code=M1.Code) AND (P1.LibID=G1.LibID) AND
  441. ((SELECT SUM(M8.ZY*G8.Quantity*G8.RationItemQuantity)
  442. FROM GLJList AS G8, MachinePrice AS M8, ProjectGLJ AS P8
  443. WHERE (P8.Code=263) AND (G8.Code=M8.Code) AND (P8.LibID=G8.LibID)
  444. )>0 )
  445. GROUP BY P1.Code, P1.Name, P1.Unit, P1.Type, P1.LibID
  446. UNION ALL
  447. SELECT P1.Code AS ACode, P1.Name AS AName, P1.Unit AS AUnit,
  448. SUM(M1.QY*G1.Quantity*G1.RationItemQuantity) AS AAmount, P1.Type AS AType, P1.LibID
  449. FROM GLJList AS G1, MachinePrice AS M1, ProjectGLJ AS P1
  450. WHERE (P1.Code=264) AND (G1.Code=M1.Code) AND (P1.LibID=G1.LibID) AND
  451. ((SELECT SUM(M8.QY*G8.Quantity*G8.RationItemQuantity)
  452. FROM GLJList AS G8, MachinePrice AS M8, ProjectGLJ AS P8
  453. WHERE (P8.Code=264) AND (G8.Code=M8.Code) AND (P8.LibID=G8.LibID)
  454. )>0 )
  455. GROUP BY P1.Code, P1.Name, P1.Unit, P1.Type, P1.LibID
  456. UNION ALL
  457. SELECT P1.Code AS ACode, P1.Name AS AName, P1.Unit AS AUnit,
  458. SUM(M1.CY*G1.Quantity*G1.RationItemQuantity) AS AAmount, P1.Type AS AType, P1.LibID
  459. FROM GLJList AS G1, MachinePrice AS M1, ProjectGLJ AS P1
  460. WHERE (P1.Code=265) AND (G1.Code=M1.Code) AND (P1.LibID=G1.LibID) AND
  461. ((SELECT SUM(M8.CY*G8.Quantity*G8.RationItemQuantity)
  462. FROM GLJList AS G8, MachinePrice AS M8, ProjectGLJ AS P8
  463. WHERE (P8.Code=265) AND (G8.Code=M8.Code) AND (P8.LibID=G8.LibID)
  464. )>0 )
  465. GROUP BY P1.Code, P1.Name, P1.Unit, P1.Type, P1.LibID
  466. UNION ALL
  467. SELECT P1.Code AS ACode, P1.Name AS AName, P1.Unit AS AUnit,
  468. SUM(M1.Mei*G1.Quantity*G1.RationItemQuantity) AS AAmount, P1.Type AS AType, P1.LibID
  469. FROM GLJList AS G1, MachinePrice AS M1, ProjectGLJ AS P1
  470. WHERE (P1.Code=266) AND (G1.Code=M1.Code) AND (P1.LibID=G1.LibID) AND
  471. ((SELECT SUM(M8.Mei*G8.Quantity*G8.RationItemQuantity)
  472. FROM GLJList AS G8, MachinePrice AS M8, ProjectGLJ AS P8
  473. WHERE (P8.Code=266) AND (G8.Code=M8.Code) AND (P8.LibID=G8.LibID)
  474. )>0 )
  475. GROUP BY P1.Code, P1.Name, P1.Unit, P1.Type, P1.LibID
  476. UNION ALL
  477. SELECT P1.Code AS ACode, P1.Name AS AName, P1.Unit AS AUnit,
  478. SUM(M1.Dian*G1.Quantity*G1.RationItemQuantity) AS AAmount, P1.Type AS AType, P1.LibID
  479. FROM GLJList AS G1, MachinePrice AS M1, ProjectGLJ AS P1
  480. WHERE (P1.Code=267) AND (G1.Code=M1.Code) AND (P1.LibID=G1.LibID) AND
  481. ((SELECT SUM(M8.Dian*G8.Quantity*G8.RationItemQuantity)
  482. FROM GLJList AS G8, MachinePrice AS M8, ProjectGLJ AS P8
  483. WHERE (P8.Code=267) AND (G8.Code=M8.Code) AND (P8.LibID=G8.LibID)
  484. )>0 )
  485. GROUP BY P1.Code, P1.Name, P1.Unit, P1.Type, P1.LibID
  486. UNION ALL
  487. SELECT P1.Code AS ACode, P1.Name AS AName, P1.Unit AS AUnit,
  488. SUM(M1.Shui*G1.Quantity*G1.RationItemQuantity) AS AAmount, P1.Type AS AType, P1.LibID
  489. FROM GLJList AS G1, MachinePrice AS M1, ProjectGLJ AS P1
  490. WHERE (P1.Code=268) AND (G1.Code=M1.Code) AND (P1.LibID=G1.LibID) AND
  491. ((SELECT SUM(M8.Shui*G8.Quantity*G8.RationItemQuantity)
  492. FROM GLJList AS G8, MachinePrice AS M8, ProjectGLJ AS P8
  493. WHERE (P8.Code=268) AND (G8.Code=M8.Code) AND (P8.LibID=G8.LibID)
  494. )>0 )
  495. GROUP BY P1.Code, P1.Name, P1.Unit, P1.Type, P1.LibID
  496. UNION ALL
  497. SELECT P1.Code AS ACode, P1.Name AS AName, P1.Unit AS AUnit,
  498. SUM(M1.MC*G1.Quantity*G1.RationItemQuantity) AS AAmount, P1.Type AS AType, P1.LibID
  499. FROM GLJList AS G1, MachinePrice AS M1, ProjectGLJ AS P1
  500. WHERE (P1.Code=269) AND (G1.Code=M1.Code) AND (P1.LibID=G1.LibID) AND
  501. ((SELECT SUM(M8.MC*G8.Quantity*G8.RationItemQuantity)
  502. FROM GLJList AS G8, MachinePrice AS M8, ProjectGLJ AS P8
  503. WHERE (P8.Code=269) AND (G8.Code=M8.Code) AND (P8.LibID=G8.LibID)
  504. )>0 )
  505. GROUP BY P1.Code, P1.Name, P1.Unit, P1.Type, P1.LibID
  506. )
  507. GROUP BY ACode, AName, AUnit, AType
  508. }
  509. function TScProjGLJGather.GatherGLJ(ABuildProjName: string;
  510. AIsCompareGather: Boolean = False; AIsCompareProj: Boolean = False;
  511. AProjList: TList = nil): Boolean;
  512. procedure AddGLJFieldDef(ABuildProj: TScProjManagerTreeNode; AIsCompareGather: Boolean = False; AProjList: TList = nil);
  513. var
  514. I: Integer;
  515. begin
  516. // *生成汇总造价文件的列表
  517. if AIsCompareGather then
  518. MakeProjListForCompareGather(AProjList)
  519. else
  520. MakeProjList(ABuildProj);
  521. // *添加cdsGLJGatherD的需要的字段
  522. with sdsGLJGatherD.Fields do
  523. begin
  524. Clear;
  525. //Add(gfID, ftInteger);
  526. Add(gfCodeSN, ftString, 12);
  527. Add(gfCodeDis, ftString, 12);
  528. Add(gfName, ftString, 50);
  529. Add(gfUnits, ftString, 12);
  530. Add(gfSumAmount, ftFloat);
  531. Add(gfTenderSumAmount, ftFloat);
  532. //Add(gfSumAmount, ftString, 50);
  533. Add(gfType, ftInteger);
  534. for I := 0 to FProjects.Count - 1 do
  535. begin
  536. Add(gfAmountPreFix + IntToStr(I), ftFloat);
  537. //Add(gfAmountPreFix + IntToStr(I), ftString, 50);
  538. Add(gfBudgetPricePrefix + IntToStr(I), ftFloat);
  539. Add(gfSumPricePrefix + IntToStr(I), ftFloat);
  540. Add(gfMateFeePrefix + IntToStr(I), ftFloat);
  541. Add(gfBuildFeePrefix + IntToStr(I), ftFloat);
  542. Add(gfFileNamePrefix + IntToStr(I), ftString, 50);
  543. Add(gfMatePercentPrefix + IntToStr(I), ftFloat);
  544. Add(gfBuildPercentPrefix + IntToStr(I), ftFloat);
  545. // lengshumei 2011-2-10 重庆成渝复线加调价后字段
  546. Add(gfTenderAmountPreFix + IntToStr(I), ftFloat);
  547. Add(gfTenderPricePrefix + IntToStr(I), ftFloat);
  548. Add(gfTenderSumPricePrefix + IntToStr(I), ftFloat);
  549. Add(gfTenderMateFeePrefix + IntToStr(I), ftFloat);
  550. Add(gfTenderBuildFeePrefix + IntToStr(I), ftFloat);
  551. Add(gfTenderMatePercentPrefix + IntToStr(I), ftFloat);
  552. Add(gfTenderBuildPercentPrefix + IntToStr(I), ftFloat);
  553. end;
  554. Add(gfAvgBudgetPrice, ftFloat);
  555. Add(gfBuildSumPrice, ftFloat);
  556. Add(gfTenderAvgBudgetPrice, ftFloat);
  557. Add(gfTenderBuildSumPrice, ftFloat);
  558. // lengshumei 2013-12-17广东工程比较表中需要先汇总建设项目数据再比较
  559. Add(gfMain, ftBoolean);
  560. Add(gfSpecs, ftString, 50);
  561. end;
  562. end;
  563. function LocateMaterial(ACode, AName: string; var ARecord: TsdDataRecord): Boolean;
  564. var
  565. (*CodeLocated, NameLocated: Boolean;
  566. CodeCode, NameCode: string;*)
  567. vCode, vName: Variant;
  568. begin
  569. if ACode = '' then
  570. vCode := Null
  571. else
  572. vCode := ACode;
  573. if AName = '' then
  574. vName := Null
  575. else
  576. vName := AName;
  577. ARecord := sdsGLJGatherD.Locate('CodeDis;Name', VarArrayOf([vCode, vName]));
  578. Result := ARecord <> nil;
  579. end;
  580. procedure AddGLJRecords;
  581. var
  582. L: Integer;
  583. //TempMateFee, TempBuildFee, TempSumPrice: Double;
  584. TempMateFee, TempBuildFee: Double;
  585. TempTenderMateFee, TempTenderBuildFee: Double;
  586. ProjData: TScProjBaseData;
  587. AmountFieldName, BudgetPriceFieldName, PriceFieldName, MatePercentFieldName,
  588. BuildPercentFieldName, MateFeeFieldName, BuildFeeFieldName, FileNameFieldName, TempFileName: string;
  589. TenderAmountFieldName, TenderBudgetPriceFieldName, TenderPriceFieldName, TenderMatePercentFieldName,
  590. TenderBuildPercentFieldName, TenderMateFeeFieldName, TenderBuildFeeFieldName: string;
  591. BPSumMateFee, BPSumBuildFee, BPSumTenderMateFee, BPSumTenderBuildFee: Double;
  592. pProjSum: PProjGLJSum;
  593. Rec: TsdDataRecord;
  594. bIsOpened: Boolean;
  595. begin
  596. BPSumMateFee := 0;
  597. BPSumBuildFee := 0;
  598. BPSumTenderMateFee := 0;
  599. BPSumTenderBuildFee := 0;
  600. for L := 0 to FProjects.Count - 1 do
  601. begin
  602. AmountFieldName := gfAmountPrefix + IntToStr(L);
  603. BudgetPriceFieldName := gfBudgetPricePrefix + IntToStr(L);
  604. PriceFieldName := gfSumPricePrefix + IntToStr(L);
  605. MatePercentFieldName := gfMatePercentPrefix + IntToStr(L);
  606. BuildPercentFieldName := gfBuildPercentPrefix + IntToStr(L);
  607. MateFeeFieldName := gfMateFeePrefix + IntToStr(L);
  608. BuildFeeFieldName := gfBuildFeePrefix + IntToStr(L);
  609. FileNameFieldName := gfFileNamePrefix + IntToStr(L);
  610. // lengshumei 2011-2-10 重庆成渝复线加调价后字段
  611. TenderAmountFieldName := gfTenderAmountPrefix + IntToStr(L);
  612. TenderBudgetPriceFieldName := gfTenderPricePrefix + IntToStr(L);
  613. TenderPriceFieldName := gfTenderSumPricePrefix + IntToStr(L);
  614. TenderMatePercentFieldName := gfTenderMatePercentPrefix + IntToStr(L);
  615. TenderBuildPercentFieldName := gfTenderBuildPercentPrefix + IntToStr(L);
  616. TenderMateFeeFieldName := gfTenderMateFeePrefix + IntToStr(L);
  617. TenderBuildFeeFieldName := gfTenderBuildFeePrefix + IntToStr(L);
  618. try
  619. //TempSumPrice := 0;
  620. // 前面AddFileDef已经判断了文件是否存在,这里不用再判断
  621. pProjSum := PProjGLJSum(FProjects[L]);
  622. ProjData := ProjList.IndexByName(pProjSum^.FileName);
  623. bIsOpened := ProjData <> nil;
  624. if ProjData = nil then
  625. ProjData := ProjList.AddProj(pProjSum^.FileName);
  626. if not ProjData.IsOpened then ProjData.Open;
  627. aqMateBuildFee.Close;
  628. aqMateBuildFee.Connection := ProjData.Connection.Connection;
  629. aqMateBuildFee.Open;
  630. aqMateBuildFee.First;
  631. TempMateFee := 0;
  632. TempBuildFee := ScRoundTo(aqMateBuildFeeBuildFee.AsFloat, 0);
  633. if AIsCompareGather then
  634. TempFileName := ''
  635. else
  636. TempFileName := pProjSum.Name;
  637. TempTenderMateFee := 0;
  638. TempTenderBuildFee := ScRoundTo(aqMateBuildFeeTenderBuildFee.AsFloat, 0);
  639. ProjData.Open;
  640. aqProjGLJ.Close;
  641. aqProjGLJ.Connection := ProjData.Connection.Connection;
  642. aqProjGLJ.Open;
  643. aqProjGLJ.First;
  644. // *将第一个项目的材料放到cdsGLJGatherD中
  645. if L = 0 then
  646. begin
  647. sdsGLJGatherD.BeginUpdate;
  648. try
  649. while not aqProjGLJ.Eof do
  650. begin
  651. if ((aqProjGLJAType.AsInteger = 1) or (aqProjGLJAType.AsInteger = 4) or (aqProjGLJAType.AsInteger = 8))
  652. and (ScRoundTo(aqProjGLJUAmount.AsFloat, -3) <> 0) then
  653. begin
  654. Rec := sdsGLJGatherD.Add(True);
  655. try
  656. Rec.ValueByName('CodeSN').AsString := aqProjGLJACode.AsString;
  657. Rec.ValueByName('CodeDis').AsString := aqProjGLJACode.AsString;
  658. Rec.ValueByName('Name').AsString := aqProjGLJAName.AsString;
  659. Rec.ValueByName('Units').AsString := aqProjGLJAUnit.AsString;
  660. Rec.ValueByName('Type').AsInteger := aqProjGLJAType.AsInteger;
  661. Rec.ValueByName('Specs').AsString := aqProjGLJASpecs.AsString;
  662. Rec.ValueByName(AmountFieldName).AsFloat := ScRoundTo(aqProjGLJUAmount.AsFloat, -3);
  663. Rec.ValueByName(BudgetPriceFieldName).AsFloat := ScRoundTo(aqProjGLJPrice.AsFloat, -2);
  664. Rec.ValueByName(PriceFieldName).AsFloat := ScRoundTo(aqProjGLJUAmount.AsFloat * aqProjGLJPrice.AsFloat, 0);
  665. //Rec.ValueByName(MateFeeFieldName).AsFloat := TempMateFee + Rec.ValueByName(PriceFieldName).AsFloat;
  666. if aqProjGLJAType.AsInteger = 4 then
  667. TempMateFee := TempMateFee + Rec.ValueByName(PriceFieldName).AsFloat;
  668. Rec.ValueByName(BuildFeeFieldName).AsFloat := TempBuildFee;
  669. Rec.ValueByName(FileNameFieldName).AsString := TempFileName;
  670. Rec.ValueByName(TenderAmountFieldName).AsFloat := ScRoundTo(aqProjGLJUTenderAmount.AsFloat, -3);
  671. Rec.ValueByName(TenderBudgetPriceFieldName).AsFloat := ScRoundTo(aqProjGLJTenderPrice.AsFloat, -2);
  672. Rec.ValueByName(TenderPriceFieldName).AsFloat := ScRoundTo(aqProjGLJUTenderAmount.AsFloat * aqProjGLJTenderPrice.AsFloat, 0);
  673. //Rec.ValueByName(TenderMateFeeFieldName).AsFloat := TempTenderMateFee;
  674. if aqProjGLJAType.AsInteger = 4 then
  675. TempTenderMateFee := TempTenderMateFee + Rec.ValueByName(TenderPriceFieldName).AsFloat;
  676. Rec.ValueByName(TenderBuildFeeFieldName).AsFloat := TempTenderBuildFee;
  677. if TempMateFee = 0 then
  678. Rec.ValueByName(MatePercentFieldName).AsFloat := 0
  679. else
  680. Rec.ValueByName(MatePercentFieldName).AsFloat := ScRoundTo(Rec.ValueByName(PriceFieldName).AsFloat * 100/ TempMateFee, -2);
  681. if TempBuildFee = 0 then
  682. Rec.ValueByName(BuildPercentFieldName).AsFloat := 0
  683. else
  684. Rec.ValueByName(BuildPercentFieldName).AsFloat := ScRoundTo(Rec.ValueByName(PriceFieldName).AsFloat * 100/ TempBuildFee, -2);
  685. if TempTenderMateFee = 0 then
  686. Rec.ValueByName(TenderMatePercentFieldName).AsFloat := 0
  687. else
  688. Rec.ValueByName(TenderMatePercentFieldName).AsFloat := ScRoundTo(Rec.ValueByName(TenderPriceFieldName).AsFloat * 100/ TempTenderMateFee, -2);
  689. if TempTenderBuildFee = 0 then
  690. Rec.ValueByName(TenderBuildPercentFieldName).AsFloat := 0
  691. else
  692. Rec.ValueByName(TenderBuildPercentFieldName).AsFloat := ScRoundTo(Rec.ValueByName(TenderPriceFieldName).AsFloat * 100/ TempTenderBuildFee, -2);
  693. //TempSumPrice := TempSumPrice + cdscdsGLJGatherD.FieldByName(PriceFieldName).AsFloat;
  694. Rec.ValueByName(gfMain).AsBoolean := aqProjGLJMain.AsBoolean;
  695. finally
  696. Rec.EndUpdate;
  697. end;
  698. aqProjGLJ.Next;
  699. end
  700. else
  701. aqProjGLJ.Next;
  702. end;
  703. finally
  704. sdsGLJGatherD.EndUpdate;
  705. end;
  706. BPSumMateFee := BPSumMateFee + TempMateFee;
  707. BPSumBuildFee := BPSumBuildFee + TempBuildFee;
  708. BPSumTenderMateFee := BPSumTenderMateFee + TempTenderMateFee;
  709. BPSumTenderBuildFee := BPSumTenderBuildFee + TempTenderBuildFee;
  710. // 第一个项目获取建设项目信息
  711. sdvProjData.Open;
  712. sdsProjData.DeleteAll;
  713. Rec := sdvProjData.Append(True);
  714. if ProjData <> nil then
  715. begin
  716. Rec.ValueByName('BuildProjName').Value := ProjData.BuildProjectName;
  717. Rec.ValueByName('Author').Value := ProjData.Author;
  718. Rec.ValueByName('Auditor').Value := ProjData.Auditor;
  719. end
  720. else
  721. begin
  722. Rec.ValueByName('BuildProjName').Value := '';
  723. Rec.ValueByName('Author').Value := '';
  724. Rec.ValueByName('Auditor').Value := '';
  725. end;
  726. Rec.EndUpdate;
  727. end
  728. else
  729. begin
  730. while not aqProjGLJ.Eof do
  731. begin
  732. if ((aqProjGLJAType.AsInteger = 1) or (aqProjGLJAType.AsInteger = 4) or (aqProjGLJAType.AsInteger = 8))
  733. and (ScRoundTo(aqProjGLJUAmount.AsFloat, -3) <> 0) then
  734. begin
  735. Rec := nil;
  736. if LocateMaterial(aqProjGLJACode.AsString, aqProjGLJAName.AsString, Rec) then
  737. begin
  738. Rec.BeginUpdate;
  739. try
  740. Rec.ValueByName(AmountFieldName).AsFloat := ScRoundTo(aqProjGLJUAmount.AsFloat, -3);
  741. Rec.ValueByName(BudgetPriceFieldName).AsFloat := ScRoundTo(aqProjGLJPrice.AsFloat, -2);
  742. Rec.ValueByName(PriceFieldName).AsFloat := ScRoundTo(aqProjGLJUAmount.AsFloat * aqProjGLJPrice.AsFloat, 0);
  743. Rec.ValueByName(MateFeeFieldName).AsFloat := TempMateFee + Rec.ValueByName(PriceFieldName).AsFloat;
  744. if aqProjGLJAType.AsInteger = 4 then
  745. TempMateFee := TempMateFee + Rec.ValueByName(PriceFieldName).AsFloat;
  746. Rec.ValueByName(BuildFeeFieldName).AsFloat := TempBuildFee;
  747. Rec.ValueByName(FileNameFieldName).AsString := TempFileName;
  748. Rec.ValueByName(TenderAmountFieldName).AsFloat := ScRoundTo(aqProjGLJUTenderAmount.AsFloat, -3);
  749. Rec.ValueByName(TenderBudgetPriceFieldName).AsFloat := ScRoundTo(aqProjGLJTenderPrice.AsFloat, -2);
  750. Rec.ValueByName(TenderPriceFieldName).AsFloat := ScRoundTo(aqProjGLJUTenderAmount.AsFloat * aqProjGLJTenderPrice.AsFloat, 0);
  751. Rec.ValueByName(TenderMateFeeFieldName).AsFloat := TempTenderMateFee;
  752. if aqProjGLJAType.AsInteger = 4 then
  753. TempTenderMateFee := TempTenderMateFee + Rec.ValueByName(TenderPriceFieldName).AsFloat;
  754. Rec.ValueByName(TenderBuildFeeFieldName).AsFloat := TempTenderBuildFee;
  755. if TempMateFee = 0 then
  756. Rec.ValueByName(MatePercentFieldName).AsFloat := 0
  757. else
  758. Rec.ValueByName(MatePercentFieldName).AsFloat := ScRoundTo(Rec.ValueByName(PriceFieldName).AsFloat * 100/ TempMateFee, -2);
  759. if TempBuildFee = 0 then
  760. Rec.ValueByName(BuildPercentFieldName).AsFloat := 0
  761. else
  762. Rec.ValueByName(BuildPercentFieldName).AsFloat := ScRoundTo(Rec.ValueByName(PriceFieldName).AsFloat * 100/ TempBuildFee, -2);
  763. if TempTenderMateFee = 0 then
  764. Rec.ValueByName(TenderMatePercentFieldName).AsFloat := 0
  765. else
  766. Rec.ValueByName(TenderMatePercentFieldName).AsFloat := ScRoundTo(Rec.ValueByName(TenderPriceFieldName).AsFloat * 100/ TempTenderMateFee, -2);
  767. if TempTenderBuildFee = 0 then
  768. Rec.ValueByName(TenderBuildPercentFieldName).AsFloat := 0
  769. else
  770. Rec.ValueByName(TenderBuildPercentFieldName).AsFloat := ScRoundTo(Rec.ValueByName(TenderPriceFieldName).AsFloat * 100/ TempTenderBuildFee, -2);
  771. Rec.ValueByName(gfMain).AsBoolean := aqProjGLJMain.AsBoolean;
  772. finally
  773. Rec.EndUpdate;
  774. end;
  775. aqProjGLJ.Next;
  776. end
  777. else
  778. // *前面项目中没有的材料
  779. begin
  780. Rec := sdsGLJGatherD.Add(True);
  781. try
  782. Rec.ValueByName('CodeSN').AsString := aqProjGLJACode.AsString;
  783. Rec.ValueByName('CodeDis').AsString := aqProjGLJACode.AsString;
  784. Rec.ValueByName('Name').AsString := aqProjGLJAName.AsString;
  785. Rec.ValueByName('Units').AsString := aqProjGLJAUnit.AsString;
  786. Rec.ValueByName('Type').AsInteger := aqProjGLJAType.AsInteger;
  787. Rec.ValueByName('Specs').AsString := aqProjGLJASpecs.AsString;
  788. Rec.ValueByName(AmountFieldName).AsFloat := ScRoundTo(aqProjGLJUAmount.AsFloat, -3);
  789. Rec.ValueByName(BudgetPriceFieldName).AsFloat := ScRoundTo(aqProjGLJPrice.AsFloat, -2);
  790. Rec.ValueByName(PriceFieldName).AsFloat := ScRoundTo(aqProjGLJUAmount.AsFloat * aqProjGLJPrice.AsFloat, 0);
  791. Rec.ValueByName(MateFeeFieldName).AsFloat := TempMateFee + Rec.ValueByName(PriceFieldName).AsFloat;
  792. if aqProjGLJAType.AsInteger = 4 then
  793. TempMateFee := TempMateFee + Rec.ValueByName(PriceFieldName).AsFloat;
  794. Rec.ValueByName(BuildFeeFieldName).AsFloat := TempBuildFee;
  795. Rec.ValueByName(FileNameFieldName).AsString := TempFileName;
  796. Rec.ValueByName(TenderAmountFieldName).AsFloat := ScRoundTo(aqProjGLJUTenderAmount.AsFloat, -3);
  797. Rec.ValueByName(TenderBudgetPriceFieldName).AsFloat := ScRoundTo(aqProjGLJTenderPrice.AsFloat, -2);
  798. Rec.ValueByName(TenderPriceFieldName).AsFloat := ScRoundTo(aqProjGLJUTenderAmount.AsFloat * aqProjGLJTenderPrice.AsFloat, 0);
  799. Rec.ValueByName(TenderMateFeeFieldName).AsFloat := TempTenderMateFee;
  800. if aqProjGLJAType.AsInteger = 4 then
  801. TempTenderMateFee := TempTenderMateFee + Rec.ValueByName(TenderPriceFieldName).AsFloat;
  802. Rec.ValueByName(TenderBuildFeeFieldName).AsFloat := TempTenderBuildFee;
  803. if TempMateFee = 0 then
  804. Rec.ValueByName(MatePercentFieldName).AsFloat := 0
  805. else
  806. Rec.ValueByName(MatePercentFieldName).AsFloat := ScRoundTo(Rec.ValueByName(PriceFieldName).AsFloat * 100/ TempMateFee, -2);
  807. if TempBuildFee = 0 then
  808. Rec.ValueByName(BuildPercentFieldName).AsFloat := 0
  809. else
  810. Rec.ValueByName(BuildPercentFieldName).AsFloat := ScRoundTo(Rec.ValueByName(PriceFieldName).AsFloat * 100/ TempBuildFee, -2);
  811. if TempTenderMateFee = 0 then
  812. Rec.ValueByName(TenderMatePercentFieldName).AsFloat := 0
  813. else
  814. Rec.ValueByName(TenderMatePercentFieldName).AsFloat := ScRoundTo(Rec.ValueByName(TenderPriceFieldName).AsFloat * 100/ TempTenderMateFee, -2);
  815. if TempTenderBuildFee = 0 then
  816. Rec.ValueByName(TenderBuildPercentFieldName).AsFloat := 0
  817. else
  818. Rec.ValueByName(TenderBuildPercentFieldName).AsFloat := ScRoundTo(Rec.ValueByName(TenderPriceFieldName).AsFloat * 100/ TempTenderBuildFee, -2);
  819. Rec.ValueByName(gfMain).AsBoolean := aqProjGLJMain.AsBoolean;
  820. finally
  821. Rec.EndUpdate;
  822. end;
  823. aqProjGLJ.Next;
  824. end;
  825. end
  826. else
  827. aqProjGLJ.Next;
  828. end;
  829. BPSumMateFee := BPSumMateFee + TempMateFee;
  830. BPSumBuildFee := BPSumBuildFee + TempBuildFee;
  831. BPSumTenderMateFee := BPSumTenderMateFee + TempTenderMateFee;
  832. BPSumTenderBuildFee := BPSumTenderBuildFee + TempTenderBuildFee;
  833. end;
  834. finally
  835. if not bIsOpened then
  836. FreeAndNil(ProjData);
  837. end;
  838. end;
  839. // lengshumei 2013-12-17 用于广东版的编审对比工程表
  840. if AIsCompareGather then
  841. begin
  842. FCompareDM.sdvProjFees.Active := True;
  843. if AIsCompareProj then
  844. begin
  845. FCompareDM.sdsProjFees.DeleteAll;
  846. Rec := FCompareDM.sdsProjFees.Add;
  847. Rec.ValueByName('CompareMateFee').AsFloat := ScRoundTo(BPSumMateFee, 0 );
  848. Rec.ValueByName('CompareBuildFee').AsFloat := ScRoundTo(BPSumBuildFee, 0 );
  849. Rec.ValueByName('TenderCompareMateFee').AsFloat := ScRoundTo(BPSumTenderMateFee, 0 );
  850. Rec.ValueByName('TenderCompareBuildFee').AsFloat := ScRoundTo(BPSumTenderBuildFee, 0 );
  851. end
  852. else
  853. begin
  854. Rec := FCompareDM.sdvProjFees[0];
  855. Rec.ValueByName('SourceMateFee').AsFloat := ScRoundTo(BPSumMateFee, 0 );
  856. Rec.ValueByName('SourceBuildFee').AsFloat := ScRoundTo(BPSumBuildFee, 0 );
  857. Rec.ValueByName('TenderSourceMateFee').AsFloat := ScRoundTo(BPSumTenderMateFee, 0 );
  858. Rec.ValueByName('TenderSourceBuildFee').AsFloat := ScRoundTo(BPSumTenderBuildFee, 0 );
  859. end;
  860. end;
  861. end;
  862. // *计算总数量 和 总金额 和平均预算价
  863. procedure CalcSumAmount;
  864. var
  865. I, J: Integer;
  866. AmountFieldName, PriceFieldName, MateFeeFieldName, BuildFeeFieldName,
  867. MatePercentFieldName, BuildPercentFieldName: string;
  868. TenderAmountFieldName, TenderPriceFieldName, TenderMateFeeFieldName, TenderBuildFeeFieldName,
  869. TenderMatePercentFieldName, TenderBuildPercentFieldName: string;
  870. TempMateFee, TempBuildFee, TempSumPrice: Double;
  871. TempTenderMateFee, TempTenderBuildFee, TempTenderSumPrice: Double;
  872. Rec: TsdDataRecord;
  873. begin
  874. sdsGLJGatherD.BeginUpdate;
  875. try
  876. for I := 0 to sdvGLJGatherD.RecordCount - 1 do
  877. begin
  878. Rec := sdvGLJGatherD[I];
  879. try
  880. Rec.ValueByName(gfSumAmount).AsFloat := 0;
  881. // lengshumei 2010-12-1 重庆定制报表加字段
  882. Rec.ValueByName(gfAvgBudgetPrice).AsFloat := 0;
  883. Rec.ValueByName(gfBuildSumPrice).AsFloat := 0;
  884. Rec.ValueByName(gfTenderAvgBudgetPrice).AsFloat := 0;
  885. Rec.ValueByName(gfTenderBuildSumPrice).AsFloat := 0;
  886. for J := 0 to FProjects.Count - 1 do
  887. begin
  888. AmountFieldName := gfAmountPrefix + IntToStr(J);
  889. Rec.ValueByName(gfSumAmount).AsFloat := ScRoundTo(Rec.ValueByName(gfSumAmount).AsFloat
  890. + Rec.ValueByName(AmountFieldName).AsFloat, -3);
  891. Rec.ValueByName(gfBuildSumPrice).AsFloat := ScRoundTo(Rec.ValueByName(gfBuildSumPrice).AsFloat
  892. + Rec.ValueByName(gfSumPricePrefix + IntToStr(J)).AsFloat, -2);
  893. TenderAmountFieldName := gfTenderAmountPrefix + IntToStr(J);
  894. Rec.ValueByName(gfTenderSumAmount).AsFloat := ScRoundTo(Rec.ValueByName(gfTenderSumAmount).AsFloat
  895. + Rec.ValueByName(TenderAmountFieldName).AsFloat, -3);
  896. Rec.ValueByName(gfTenderBuildSumPrice).AsFloat := ScRoundTo(Rec.ValueByName(gfTenderBuildSumPrice).AsFloat
  897. + Rec.ValueByName(gfTenderSumPricePrefix + IntToStr(J)).AsFloat, -2);
  898. end;
  899. if Rec.ValueByName(gfSumAmount).AsFloat = 0 then
  900. Rec.ValueByName(gfAvgBudgetPrice).AsFloat := 0
  901. else
  902. Rec.ValueByName(gfAvgBudgetPrice).AsFloat := ScRoundTo(Rec.ValueByName(gfBuildSumPrice).AsFloat
  903. / Rec.ValueByName(gfSumAmount).AsFloat, -2);
  904. if Rec.ValueByName(gfTenderSumAmount).AsFloat = 0 then
  905. Rec.ValueByName(gfTenderAvgBudgetPrice).AsFloat := 0
  906. else
  907. Rec.ValueByName(gfTenderAvgBudgetPrice).AsFloat := ScRoundTo(Rec.ValueByName(gfTenderBuildSumPrice).AsFloat
  908. / Rec.ValueByName(gfTenderSumAmount).AsFloat, -2);
  909. finally
  910. Rec.EndUpdate;
  911. end;
  912. end;
  913. finally
  914. sdsGLJGatherD.EndUpdate;
  915. end;
  916. // 如果工料机总消耗量为0 ,则删除
  917. I := 0;
  918. while I <= sdvGLJGatherD.RecordCount - 1 do
  919. begin
  920. Rec := sdvGLJGatherD[I];
  921. for J := 0 to FProjects.Count - 1 do
  922. begin
  923. AmountFieldName := gfAmountPrefix + IntToStr(J);
  924. if Rec.ValueByName(AmountFieldName).AsFloat = 0 then
  925. Continue
  926. else if (Rec.ValueByName(AmountFieldName).AsFloat = 0) and (J = FProjects.Count - 1) then
  927. sdvGLJGatherD.Delete(I);
  928. end;
  929. Inc(I);
  930. end;
  931. (*
  932. // 计算并添加合计行
  933. for I := 0 to FProjects.Count - 1 do
  934. begin
  935. cdsGLJGatherD.First;
  936. TempMateFee := 0;
  937. TempBuildFee := 0;
  938. TempSumPrice := 0;
  939. PriceFieldName := gfSumPricePrefix + IntToStr(I);
  940. MateFeeFieldName := gfMateFeePrefix + IntToStr(I);
  941. BuildFeeFieldName := gfBuildFeePrefix + IntToStr(I);
  942. MatePercentFieldName := gfMatePercentPrefix + IntToStr(I);
  943. BuildPercentFieldName := gfBuildPercentPrefix + IntToStr(I);
  944. while not cdsGLJGatherD.Eof do
  945. begin
  946. if cdsGLJGatherD.FieldByName('Name').AsString <> '合计' then
  947. begin
  948. TempSumPrice := TempSumPrice + cdsGLJGatherD.FieldByName(PriceFieldName).AsFloat;
  949. TempMateFee := cdsGLJGatherD.FieldByName(MateFeeFieldName).AsFloat;
  950. if TempBuildFee = 0 then
  951. TempBuildFee := cdsGLJGatherD.FieldByName(BuildFeeFieldName).AsFloat;
  952. end;
  953. cdsGLJGatherD.Next;
  954. end;
  955. if I = 0 then
  956. begin
  957. cdsGLJGatherD.Append;
  958. cdsGLJGatherD.FieldByName('CodeSN').AsInteger := 999999999;
  959. cdsGLJGatherD.FieldByName('Name').AsString := '合计';
  960. cdsGLJGatherD.FieldByName('Type').AsInteger := 5;
  961. cdsGLJGatherD.FieldByName(PriceFieldName).AsFloat := ScRoundTo(TempSumPrice, 0);
  962. if TempMateFee = 0 then
  963. cdsGLJGatherD.FieldByName(MatePercentFieldName).AsFloat := 0
  964. else
  965. cdsGLJGatherD.FieldByName(MatePercentFieldName).AsFloat := ScRoundTo(cdsGLJGatherD.FieldByName(PriceFieldName).AsFloat * 100/ TempMateFee, -2);
  966. if TempBuildFee = 0 then
  967. cdsGLJGatherD.FieldByName(BuildPercentFieldName).AsFloat := 0
  968. else
  969. cdsGLJGatherD.FieldByName(BuildPercentFieldName).AsFloat := ScRoundTo(cdsGLJGatherD.FieldByName(PriceFieldName).AsFloat * 100/ TempBuildFee, -2);
  970. cdsGLJGatherD.Post;
  971. end
  972. else
  973. begin
  974. cdsGLJGatherD.First;
  975. while not cdsGLJGatherD.Eof do
  976. begin
  977. if cdsGLJGatherD.FieldByName('Name').AsString = '合计' then
  978. begin
  979. cdsGLJGatherD.Edit;
  980. cdsGLJGatherD.FieldByName(PriceFieldName).AsFloat := ScRoundTo(TempSumPrice, 0);
  981. if TempMateFee = 0 then
  982. cdsGLJGatherD.FieldByName(MatePercentFieldName).AsFloat := 0
  983. else
  984. cdsGLJGatherD.FieldByName(MatePercentFieldName).AsFloat := ScRoundTo(cdsGLJGatherD.FieldByName(PriceFieldName).AsFloat * 100/ TempMateFee, -2);
  985. if TempBuildFee = 0 then
  986. cdsGLJGatherD.FieldByName(BuildPercentFieldName).AsFloat := 0
  987. else
  988. cdsGLJGatherD.FieldByName(BuildPercentFieldName).AsFloat := ScRoundTo(cdsGLJGatherD.FieldByName(PriceFieldName).AsFloat * 100/ TempBuildFee, -2);
  989. cdsGLJGatherD.Post;
  990. end;
  991. cdsGLJGatherD.Next;
  992. end;
  993. end;
  994. end;*)
  995. end;
  996. begin
  997. Result := False;
  998. // *如果已经初始化过,先清空cds
  999. sdvGLJGatherD.Open;
  1000. sdsGLJGatherD.DeleteAll;
  1001. sdsGLJGatherD.Close;
  1002. FBuildProj := ProjectManager.FindBuildProjectWithFull(ABuildProjName);
  1003. // *添加cds中的字段
  1004. AddGLJFieldDef(FBuildProj, AIsCompareGather, AProjList);
  1005. sdsGLJGatherD.IndexList.Clear;
  1006. sdsGLJGatherD.AddIndex('idxSortByType', 'Type;CodeSN');
  1007. sdvGLJGatherD.IndexName := 'idxSortByType';
  1008. sdvGLJGatherD.Open;
  1009. AddGLJRecords;
  1010. CalcSumAmount;
  1011. if AIsCompareGather then
  1012. begin
  1013. if AIsCompareProj then
  1014. CopyGatherDataForCompare(FCompareDM.sdvMtlGatherCompare)
  1015. else
  1016. CopyGatherDataForCompare(FCompareDM.sdvMtlGatherSource);
  1017. end;
  1018. ScProgress(100);
  1019. Result := True;
  1020. end;
  1021. function TScProjGLJGather.GatherGLJForReport(
  1022. ABuildProjName: string;
  1023. AIsCompareGather: Boolean = False; AIsCompareProj: Boolean = False;
  1024. AProjList: TList = nil): Boolean;
  1025. procedure AddGLJFieldDef;
  1026. begin
  1027. // *添加cdsGLJGatherD的需要的字段
  1028. sdvGLJForReport.Open;
  1029. sdsGLJForReport.DeleteAll;
  1030. sdsGLJForReport.Close;
  1031. with sdsGLJForReport.Fields do
  1032. begin
  1033. Clear;
  1034. Add(gfCodeSN, ftString, 12);
  1035. Add(gfCodeDis, ftString, 12);
  1036. Add(gfName, ftString, 50);
  1037. Add(gfUnits, ftString, 12);
  1038. Add(gfSumAmount, ftFloat);
  1039. Add(gfType, ftInteger);
  1040. Add(gfAmountPreFix, ftFloat);
  1041. Add(gfBudgetPricePrefix, ftFloat);
  1042. Add(gfSumPricePrefix, ftFloat);
  1043. //Add(gfMateFeePrefix, ftFloat);
  1044. //Add(gfBuildFeePrefix, ftFloat);
  1045. //Add(gfFileNamePrefix, ftString, 50);
  1046. Add(gfMatePercentPrefix, ftFloat);
  1047. Add(gfBuildPercentPrefix, ftFloat);
  1048. Add(gfProjectID, ftInteger);
  1049. Add(gfProjectName, ftString, 255);
  1050. // lengshumei 2010-12-1 重庆定制报表需加字段
  1051. Add(gfAvgBudgetPrice, ftFloat);
  1052. Add(gfBuildSumPrice, ftFloat);
  1053. // lengshumei 2010-2-10 重庆成渝复线加调价后字段
  1054. Add(gfTenderSumAmount, ftFloat);
  1055. Add(gfTenderAmountPreFix, ftFloat);
  1056. Add(gfTenderPricePrefix, ftFloat);
  1057. Add(gfTenderSumPricePrefix, ftFloat);
  1058. Add(gfTenderMatePercentPrefix, ftFloat);
  1059. Add(gfTenderBuildPercentPrefix, ftFloat);
  1060. Add(gfTenderAvgBudgetPrice, ftFloat);
  1061. Add(gfTenderBuildSumPrice, ftFloat);
  1062. Add(gfSpecs, ftString, 50);
  1063. end;
  1064. sdsGLJForReport.IndexList.Clear;
  1065. sdsGLJForReport.AddIndex('idxSortBySN', gfCodeSN);
  1066. sdvGLJForReport.IndexName := 'idxSortBySN';
  1067. end;
  1068. procedure AddReportRecords;
  1069. var
  1070. I, J: Integer;
  1071. ProjectID: Integer;
  1072. ProjectName: string;
  1073. DRec, RRec: TsdDataRecord;
  1074. begin
  1075. sdvGLJForReport.Open;
  1076. sdsGLJForReport.BeginUpdate;
  1077. try
  1078. for I := 0 to FProjects.Count - 1 do
  1079. begin
  1080. ProjectID := I;
  1081. ProjectName := PProjGLJSum(FProjects[I]).Name;
  1082. for J := 0 to sdvGLJGatherD.RecordCount - 1 do
  1083. begin
  1084. DRec := sdvGLJGatherD[J];
  1085. RRec := sdsGLJForReport.Add(True);
  1086. try
  1087. RRec.ValueByName(gfCodeSN).AsString := DRec.ValueByName(gfCodeSN).AsString;
  1088. RRec.ValueByName(gfCodeDis).AsString := DRec.ValueByName(gfCodeDis).AsString;
  1089. RRec.ValueByName(gfName).AsString := DRec.ValueByName(gfName).AsString;
  1090. RRec.ValueByName(gfUnits).AsString := DRec.ValueByName(gfUnits).AsString;
  1091. RRec.ValueByName(gfSumAmount).AsFloat := DRec.ValueByName(gfSumAmount).AsFloat;
  1092. RRec.ValueByName(gfType).AsInteger := DRec.ValueByName(gfType).AsInteger;
  1093. RRec.ValueByName(gfAmountPreFix).AsFloat := DRec.ValueByName(gfAmountPreFix + IntToStr(I)).AsFloat;
  1094. RRec.ValueByName(gfBudgetPricePrefix).AsFloat := DRec.ValueByName(gfBudgetPricePrefix + IntToStr(I)).AsFloat;
  1095. RRec.ValueByName(gfSumPricePrefix).AsFloat := DRec.ValueByName(gfSumPricePrefix + IntToStr(I)).AsFloat;
  1096. //RRec.ValueByName(gfMateFeePrefix).AsFloat := DRec.ValueByName(gfMateFeePrefix + IntToStr(I)).AsFloat;
  1097. //RRec.ValueByName(gfBuildFeePrefix).AsFloat := DRec.ValueByName(gfBuildFeePrefix + IntToStr(I)).AsFloat;
  1098. RRec.ValueByName(gfMatePercentPrefix).AsFloat := DRec.ValueByName(gfMatePercentPrefix + IntToStr(I)).AsFloat;
  1099. RRec.ValueByName(gfBuildPercentPrefix).AsFloat := DRec.ValueByName(gfBuildPercentPrefix + IntToStr(I)).AsFloat;
  1100. RRec.ValueByName(gfProjectID).AsInteger := I;
  1101. // litao
  1102. RRec.ValueByName(gfProjectName).AsString := ProjectName; //RRec.ValueByName(gfFileNamePrefix + IntToStr(I)).AsString;
  1103. // lengshumei 2010-12-1 重庆定制报表加字段
  1104. RRec.ValueByName(gfAvgBudgetPrice).AsFloat := DRec.ValueByName(gfAvgBudgetPrice).AsFloat;
  1105. RRec.ValueByName(gfBuildSumPrice).AsFloat := DRec.ValueByName(gfBuildSumPrice).AsFloat;
  1106. // lengshumei 2010-2-10 重庆成渝复线加调价后字段
  1107. RRec.ValueByName(gfTenderSumAmount).AsFloat := DRec.ValueByName(gfTenderSumAmount).AsFloat;
  1108. RRec.ValueByName(gfTenderAmountPreFix).AsFloat := DRec.ValueByName(gfTenderAmountPreFix + IntToStr(I)).AsFloat;
  1109. RRec.ValueByName(gfTenderPricePrefix).AsFloat := DRec.ValueByName(gfTenderPricePrefix + IntToStr(I)).AsFloat;
  1110. RRec.ValueByName(gfTenderSumPricePrefix).AsFloat := DRec.ValueByName(gfTenderSumPricePrefix + IntToStr(I)).AsFloat;
  1111. RRec.ValueByName(gfTenderMatePercentPrefix).AsFloat := DRec.ValueByName(gfTenderMatePercentPrefix + IntToStr(I)).AsFloat;
  1112. RRec.ValueByName(gfTenderBuildPercentPrefix).AsFloat := DRec.ValueByName(gfTenderBuildPercentPrefix + IntToStr(I)).AsFloat;
  1113. RRec.ValueByName(gfTenderAvgBudgetPrice).AsFloat := DRec.ValueByName(gfTenderAvgBudgetPrice).AsFloat;
  1114. RRec.ValueByName(gfTenderBuildSumPrice).AsFloat := DRec.ValueByName(gfTenderBuildSumPrice).AsFloat;
  1115. RRec.ValueByName(gfSpecs).AsString := DRec.ValueByName(gfSpecs).AsString;
  1116. finally
  1117. RRec.EndUpdate;
  1118. end;
  1119. end;
  1120. end;
  1121. finally
  1122. sdsGLJForReport.EndUpdate;
  1123. end;
  1124. end;
  1125. var
  1126. Rec: TsdDataRecord;
  1127. begin
  1128. FIsCompareGather := AIsCompareGather;
  1129. Result := GatherGLJ(ABuildProjName, AIsCompareGather, AIsCompareProj, AProjList);
  1130. if Result then
  1131. begin
  1132. if not AIsCompareGather then
  1133. begin
  1134. AddGLJFieldDef;
  1135. AddReportRecords;
  1136. end;
  1137. end;
  1138. end;
  1139. procedure TScProjGLJGather.MakeProjListForCompareGather(AProjList: TList);
  1140. var
  1141. pProjSum: PProjGLJSum;
  1142. I: Integer;
  1143. begin
  1144. ClearProjList;
  1145. //FProjects.Clear;
  1146. for I := 0 to AProjList.Count - 1 do
  1147. begin
  1148. pProjSum := PProjGLJSum(AProjList[I]);
  1149. {if pProjSum^.Selected then
  1150. FProjects.Add(pProjSum)
  1151. else
  1152. Dispose(pProjSum); }
  1153. FProjects.Add(pProjSum);
  1154. end;
  1155. end;
  1156. procedure TScProjGLJGather.CopyGatherDataForCompare(
  1157. ACompareData: TsdDataView);
  1158. var
  1159. I: Integer;
  1160. Rec, CRec: TsdDataRecord;
  1161. begin
  1162. ACompareData.Active := True;
  1163. ACompareData.DataSet.DeleteAll;
  1164. ACompareData.DataSet.BeginUpdate;
  1165. try
  1166. for I := 0 to sdvGLJGatherD.RecordCount - 1 do
  1167. begin
  1168. Rec := sdvGLJGatherD[I];
  1169. if Rec.ValueByName(gfMain).AsBoolean and (Rec.ValueByName(gfType).AsInteger = 4) then
  1170. begin
  1171. CRec := ACompareData.Append(True);
  1172. try
  1173. CRec.ValueByName(gfMain).AsBoolean := Rec.ValueByName(gfMain).AsBoolean;
  1174. CRec.ValueByName(gfCodeSN).AsString := Rec.ValueByName(gfCodeSN).AsString;
  1175. CRec.ValueByName(gfCodeDis).AsString := Rec.ValueByName(gfCodeDis).AsString;
  1176. CRec.ValueByName(gfName).AsString := Rec.ValueByName(gfName).AsString;
  1177. CRec.ValueByName(gfUnit).AsString := Rec.ValueByName(gfUnits).AsString;
  1178. CRec.ValueByName(gfSumAmount).AsFloat := Rec.ValueByName(gfSumAmount).AsFloat;
  1179. CRec.ValueByName(gfAvgBudgetPrice).AsFloat := Rec.ValueByName(gfAvgBudgetPrice).AsFloat;
  1180. CRec.ValueByName(gfBuildSumPrice).AsFloat := Rec.ValueByName(gfBuildSumPrice).AsFloat;
  1181. CRec.ValueByName(gfTenderSumAmount).AsFloat := Rec.ValueByName(gfTenderSumAmount).AsFloat;
  1182. CRec.ValueByName(gfTenderAvgBudgetPrice).AsFloat := Rec.ValueByName(gfTenderAvgBudgetPrice).AsFloat;
  1183. CRec.ValueByName(gfTenderBuildSumPrice).AsFloat := Rec.ValueByName(gfTenderBuildSumPrice).AsFloat;
  1184. finally
  1185. CRec.EndUpdate;
  1186. end;
  1187. end;
  1188. end;
  1189. finally
  1190. ACompareData.DataSet.EndUpdate;
  1191. end;
  1192. end;
  1193. end.