ZJJLDm.pas 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613
  1. unit ZJJLDm;
  2. interface
  3. uses
  4. ZjGrid,
  5. SysUtils, Classes, DB, DBClient, ADODB, sdIDTree, sdDB, Provider,
  6. Windows, BillsTree;
  7. type
  8. TZJJLType = (ztFx, ztGcl);
  9. TZJJLNode = class
  10. private
  11. FBillsID: Integer;
  12. FCode: string;
  13. FCertificateCode: string;
  14. FBillsCode: string;
  15. FFormulaMemo: string;
  16. FRelaFile: string;
  17. FType: Integer;
  18. end;
  19. TZJJLInfoRec = Record
  20. FBFXName: string;
  21. PegName: string;
  22. BGLCode: string;
  23. DrawingCode: string;
  24. UnitName: string;
  25. end;
  26. TZJJLData = class(TDataModule)
  27. atZJJL: TADOTable;
  28. dspZJJL: TDataSetProvider;
  29. cdsZJJL: TClientDataSet;
  30. cdsZJJLID: TIntegerField;
  31. cdsZJJLBillsID: TIntegerField;
  32. cdsZJJLCode: TWideStringField;
  33. cdsZJJLCertificateCode: TWideStringField;
  34. cdsZJJLBillsCode: TWideStringField;
  35. cdsZJJLFormulaMemo: TMemoField;
  36. cdsZJJLType: TIntegerField;
  37. cdsZJJLView: TClientDataSet;
  38. cdsZJJLViewID: TIntegerField;
  39. cdsZJJLViewBillsID: TIntegerField;
  40. cdsZJJLViewCode: TWideStringField;
  41. cdsZJJLViewCertificateCode: TWideStringField;
  42. cdsZJJLViewBillsCode: TWideStringField;
  43. cdsZJJLViewFormulaMemo: TMemoField;
  44. cdsZJJLViewType: TIntegerField;
  45. cdsZJJLRelaFile: TMemoField;
  46. cdsZJJLViewRelaFile: TMemoField;
  47. cdsZJJLBGLCode: TMemoField;
  48. cdsZJJLPegName: TWideStringField;
  49. cdsZJJLFBFXName: TWideStringField;
  50. cdsZJJLBeginPeg: TWideStringField;
  51. cdsZJJLEndPeg: TWideStringField;
  52. cdsZJJLUnitName: TWideStringField;
  53. cdsZJJLDrawingCode: TWideStringField;
  54. cdsZJJLViewBGLCode: TMemoField;
  55. cdsZJJLViewPegName: TWideStringField;
  56. cdsZJJLViewFBFXName: TWideStringField;
  57. cdsZJJLViewBeginPeg: TWideStringField;
  58. cdsZJJLViewEndPeg: TWideStringField;
  59. cdsZJJLViewUnitName: TWideStringField;
  60. cdsZJJLViewDrawingCode: TWideStringField;
  61. procedure cdsZJJLViewAfterScroll(DataSet: TDataSet);
  62. private
  63. FPhaseData: TObject;
  64. FCanModified: Boolean;
  65. FNewID: Integer;
  66. FOrgDataList: TList;
  67. FDetailGrid: TZJGrid;
  68. procedure GenerateZJJLNode(ANode: TsdIDTreeNode; AType: Integer);
  69. function CheckLastXmj(AID: Integer): Boolean;
  70. function CheckBGExist(ANode: TsdIDTreeNode): Boolean;
  71. function CheckMeasureExist(ANode: TsdIDTreeNode): Boolean;
  72. procedure GenerateLastXmj(ANode: TsdIDTreeNode);
  73. procedure GenerateNode(ANode: TsdIDTreeNode);
  74. procedure GenerateLeafNode(ANode: TsdIDTreeNode);
  75. procedure GenerateNodeByB_Code(ANode: TsdIDTreeNode);
  76. procedure DeleteAll;
  77. procedure RestoreOrgData;
  78. procedure DetailGridCellCanEdit(Sender: TObject; const ACoord: TPoint;
  79. var Allow: Boolean);
  80. procedure DetailGridCellTextChanged(Sender: TObject; Col, Row: Integer);
  81. // 向父项检测,直至提取到图册号为止
  82. function GetDrawingCode(ANode: TsdIDTreeNode): string;
  83. procedure CheckZjjlVerison;
  84. function GetMainBillsTree: TsdIDTree;
  85. public
  86. constructor Create(APhaseData: TObject);
  87. destructor Destroy; override;
  88. procedure Open(AConnection: TADOConnection);
  89. procedure Save;
  90. procedure GenerateAll;
  91. procedure GenerateAllByB_Code;
  92. procedure AssignedCurData;
  93. function GetInfoRecByCode(ABillsID: Integer): TZJJLInfoRec;
  94. function GetInfoRecByB_Code(ABillsID: Integer): TZJJLInfoRec;
  95. function GetInfoRec(ABillsID, AType: Integer): TZJJLInfoRec;
  96. procedure LocateBills;
  97. property PhaseData: TObject read FPhaseData;
  98. property MainBillsTree: TsdIDTree read GetMainBillsTree;
  99. property CanModified: Boolean read FCanModified write FCanModified;
  100. property DetailGrid: TZJGrid read FDetailGrid;
  101. end;
  102. implementation
  103. uses
  104. PhaseData, ProjectData, BillsDm, UtilMethods, ProjectProperty, ZhAPI,
  105. BillsCompileDm, BillsMeasureDm;
  106. {$R *.dfm}
  107. { TZJJLData }
  108. constructor TZJJLData.Create(APhaseData: TObject);
  109. begin
  110. inherited Create(nil);
  111. FPhaseData := APhaseData;
  112. FOrgDataList := TList.Create;
  113. FDetailGrid := TZJGrid.Create(nil);
  114. FDetailGrid.Options := FDetailGrid.Options + [goWarpText];
  115. FDetailGrid.OnCellCanEdit := DetailGridCellCanEdit;
  116. FDetailGrid.OnCellTextChanged := DetailGridCellTextChanged;
  117. end;
  118. destructor TZJJLData.Destroy;
  119. begin
  120. FDetailGrid.Free;
  121. ClearObjects(FOrgDataList);
  122. FOrgDataList.Free;
  123. inherited;
  124. end;
  125. function TZJJLData.GetMainBillsTree: TsdIDTree;
  126. begin
  127. with TProjectData(TPhaseData(FPhaseData).ProjectData) do
  128. Result := BillsMeasureData.BillsMeasureTree;
  129. end;
  130. procedure TZJJLData.Open(AConnection: TADOConnection);
  131. begin
  132. atZJJL.Connection := AConnection;
  133. cdsZJJL.Open;
  134. cdsZJJL.IndexFieldNames := 'ID';
  135. cdsZJJLView.CloneCursor(cdsZJJL, True);
  136. cdsZJJLView.IndexFieldNames := 'ID';
  137. CheckZjjlVerison;
  138. end;
  139. procedure TZJJLData.Save;
  140. begin
  141. cdsZJJL.ApplyUpdates(0);
  142. end;
  143. function TZJJLData.CheckLastXmj(AID: Integer): Boolean;
  144. var
  145. stnNode, stnChild: TsdIDTreeNode;
  146. begin
  147. stnNode := MainBillsTree.FindNode(AID);
  148. Result := stnNode.Rec.ValueByName('Code').AsString <> '';
  149. if not stnNode.HasChildren or not Result then Exit;
  150. stnChild := stnNode.FirstChild;
  151. Result := stnChild.Rec.ValueByName('B_Code').AsString <> '';
  152. end;
  153. procedure TZJJLData.AssignedCurData;
  154. var
  155. iRowIndex: Integer;
  156. InfoRec: TZJJLInfoRec;
  157. begin
  158. FDetailGrid.OnCellTextChanged := nil;
  159. FDetailGrid.FixedRowCount := 0;
  160. FDetailGrid.FixedColCount := 0;
  161. FDetailGrid.ColCount := 1;
  162. FDetailGrid.RowCount := 9;
  163. FDetailGrid.DefaultColWidth := 300;
  164. for iRowIndex := 0 to FDetailGrid.RowCount - 1 do
  165. FDetailGrid[0, iRowIndex].Align := gaTopLeft;
  166. InfoRec := GetInfoRec(cdsZJJLViewBillsID.AsInteger, cdsZJJLViewType.AsInteger);
  167. FDetailGrid.Cells[0, 0].Text := '变更令号:' + cdsZJJLViewBGLCode.AsString;
  168. FDetailGrid.Cells[0, 1].Text := '桩号或部位:' + cdsZJJLViewPegName.AsString;
  169. FDetailGrid.Cells[0, 2].Text := '分部分项工程:' + cdsZJJLViewFBFXName.AsString;
  170. FDetailGrid.Cells[0, 3].Text := '计量单元:' + cdsZJJLViewUnitName.AsString;
  171. FDetailGrid.Cells[0, 4].Text := '图号:' + cdsZJJLViewDrawingCode.AsString;
  172. FDetailGrid.Cells[0, 5].Text := '计算式说明:';
  173. FDetailGrid.Cells[0, 6].Text := cdsZJJLViewFormulaMemo.AsString;
  174. FDetailGrid.Cells[0, 6].Align := gaTopLeft;
  175. FDetailGrid.RowHeights[6] := 57;
  176. FDetailGrid.Cells[0, 7].Text := '计算草图几何尺寸:';
  177. FDetailGrid.Cells[0, 8].Text := cdsZJJLViewRelaFile.AsString;
  178. FDetailGrid.Cells[0, 8].Align := gaTopLeft;
  179. FDetailGrid.RowHeights[8] := 57;
  180. FDetailGrid.OnCellTextChanged := DetailGridCellTextChanged;
  181. end;
  182. procedure TZJJLData.GenerateAll;
  183. begin
  184. RestoreOrgData;
  185. FNewID := 1;
  186. DeleteAll;
  187. GenerateNode(MainBillsTree.FirstNode);
  188. TPhaseData(FPhaseData).PhaseProperty.ZjjlVersion := 1;
  189. end;
  190. procedure TZJJLData.GenerateNode(ANode: TsdIDTreeNode);
  191. begin
  192. if not Assigned(ANode) then Exit;
  193. if CheckLastXmj(ANode.ID) then
  194. GenerateLastXmj(ANode)
  195. else
  196. GenerateNode(ANode.FirstChild);
  197. GenerateNode(ANode.NextSibling);
  198. end;
  199. procedure TZJJLData.GenerateLastXmj(ANode: TsdIDTreeNode);
  200. begin
  201. if CheckMeasureExist(ANode) then
  202. GenerateZJJLNode(ANode, 0);
  203. end;
  204. function TZJJLData.CheckBGExist(ANode: TsdIDTreeNode): Boolean;
  205. function CheckBGLExist(AID: Integer): Boolean;
  206. var
  207. StageRec: TsdDataRecord;
  208. begin
  209. StageRec := TPhaseData(FPhaseData).StageData.StageRecord(AID);
  210. Result := Assigned(StageRec) and
  211. ((StageRec.ValueByName('QcBGLCode').AsString <> '')
  212. or (StageRec.ValueByName('PcBGLCode').AsString <> ''));
  213. end;
  214. var
  215. iChild: Integer;
  216. begin
  217. Result := False;
  218. if not Assigned(ANode) then Exit;
  219. if ANode.HasChildren then
  220. begin
  221. for iChild := 0 to ANode.ChildCount - 1 do
  222. begin
  223. Result := Result or CheckBGExist(ANode.ChildNodes[iChild]);
  224. if Result then Break;
  225. end;
  226. end
  227. else
  228. Result := CheckBGLExist(ANode.ID);
  229. end;
  230. procedure TZJJLData.DeleteAll;
  231. begin
  232. cdsZJJL.First;
  233. while not cdsZJJL.Eof do
  234. cdsZJJL.Delete;
  235. end;
  236. procedure TZJJLData.RestoreOrgData;
  237. function CreateNodeData: TZJJLNode;
  238. begin
  239. Result := TZJJLNode.Create;
  240. Result.FBillsID := cdsZJJLBillsID.AsInteger;
  241. Result.FCode := cdsZJJLCode.AsString;
  242. Result.FCertificateCode := cdsZJJLCertificateCode.AsString;
  243. Result.FBillsCode := cdsZJJLBillsCode.AsString;
  244. Result.FFormulaMemo := cdsZJJLFormulaMemo.AsString;
  245. Result.FRelaFile := cdsZJJLRelaFile.AsString;
  246. Result.FType := cdsZJJLType.AsInteger;
  247. end;
  248. begin
  249. FOrgDataList.Clear;
  250. cdsZJJL.First;
  251. while not cdsZJJL.Eof do
  252. begin
  253. FOrgDataList.Add(CreateNodeData);
  254. cdsZJJL.Next;
  255. end;
  256. end;
  257. function TZJJLData.CheckMeasureExist(ANode: TsdIDTreeNode): Boolean;
  258. function CheckStageCompleteData(AID: Integer): Boolean;
  259. var
  260. StageRec: TsdDataRecord;
  261. begin
  262. StageRec := TPhaseData(FPhaseData).StageData.StageRecord(AID);
  263. Result := Assigned(StageRec) and
  264. ((StageRec.ValueByName('GatherQuantity').AsFloat <> 0)
  265. or (StageRec.ValueByName('GatherTotalPrice').AsFloat <> 0));
  266. end;
  267. var
  268. iChild: Integer;
  269. begin
  270. Result := False;
  271. if not Assigned(ANode) then Exit;
  272. if ANode.HasChildren then
  273. begin
  274. for iChild := 0 to ANode.ChildCount - 1 do
  275. begin
  276. Result := Result or CheckMeasureExist(ANode.ChildNodes[iChild]);
  277. if Result then Break;
  278. end;
  279. end
  280. else
  281. Result := CheckStageCompleteData(ANode.ID);
  282. end;
  283. procedure TZJJLData.cdsZJJLViewAfterScroll(DataSet: TDataSet);
  284. begin
  285. AssignedCurData;
  286. end;
  287. procedure TZJJLData.DetailGridCellCanEdit(Sender: TObject;
  288. const ACoord: TPoint; var Allow: Boolean);
  289. begin
  290. Allow := ((ACoord.Y = 6) or (ACoord.Y = 8)) and
  291. not TPhaseData(FPhaseData).StageDataReadOnly;
  292. end;
  293. function TZJJLData.GetInfoRecByCode(ABillsID: Integer): TZJJLInfoRec;
  294. function GetBGLCode(ANode: TsdIDTreeNode): string;
  295. begin
  296. with TProjectData(TPhaseData(FPhaseData).ProjectData) do
  297. Result := BillsMeasureData.GatherRelaBGL(ANode);
  298. end;
  299. function GetPegName(APegNode: TsdIDTreeNode): string;
  300. begin
  301. if Assigned(APegNode) then
  302. Result := APegNode.Rec.ValueByName('Name').AsString
  303. else
  304. Result := '';
  305. end;
  306. function GetPegNode(ANode: TsdIDTreeNode): TsdIDTreeNode;
  307. begin
  308. Result := nil;
  309. if not Assigned(ANode) then Exit;
  310. if CheckPeg(ANode.Rec.ValueByName('Name').AsString) then
  311. Result := ANode
  312. else
  313. Result := GetPegNode(ANode.Parent);
  314. end;
  315. // 取树结构的第ALevel层节点的名称(level从0开始)
  316. function GetNameByLevel(ANode: TsdIDTreeNode; ALevel: Integer): string;
  317. begin
  318. Result := '';
  319. if not Assigned(ANode) then Exit;
  320. if ANode.Level = ALevel then
  321. Result := ANode.Rec.ValueByName('Name').AsString
  322. else if ANode.Level > ALevel then
  323. Result := GetNameByLevel(ANode.Parent, ALevel);
  324. end;
  325. function GetFBFXName(ANode, APegNode: TsdIDTreeNode): string;
  326. var
  327. vCurNode: TsdIDTreeNode;
  328. begin
  329. Result := '';
  330. if not Assigned(ANode) then Exit;
  331. // 如果计量单元节点的名称为桩号(转化为判断计量单元节点与桩号节点为同一个)
  332. if not Assigned(APegNode) or (ANode.ID = APegNode.ID) then
  333. begin
  334. // 取树结构的第三、四层节点的名称
  335. Result := GetNameByLevel(ANode, 2);
  336. if (Result <> '') and (GetNameByLevel(ANode, 3) <> '') then
  337. Result := Result + ',';
  338. Result := Result + GetNameByLevel(ANode, 3);
  339. end
  340. // 否则,合并[桩号节点的子节点]至[计量单元节点的父节点]的名称
  341. else
  342. begin
  343. vCurNode := ANode.Parent;
  344. // 转化为判断层次,层次大于[桩号节点的子节点]的层次
  345. while vCurNode.Level > APegNode.Level do
  346. begin
  347. Result := vCurNode.Rec.ValueByName('Name').AsString + ',' + Result;
  348. vCurNode := vCurNode.Parent;
  349. end;
  350. end;
  351. end;
  352. function GetFieldStrDef(ANode: TsdIDTreeNode; const AFieldName, ADef: string): string;
  353. begin
  354. if Assigned(ANode) then
  355. Result := ANode.Rec.ValueByName(AFieldName).AsString
  356. else
  357. Result := '';
  358. end;
  359. var
  360. vPeg, vNode: TsdIDTreeNode;
  361. begin
  362. vNode := MainBillsTree.FindNode(ABillsID);
  363. vPeg := GetPegNode(vNode);
  364. Result.BGLCode := GetBGLCode(vNode);
  365. Result.PegName := GetPegName(vPeg);
  366. Result.FBFXName := GetFBFXName(vNode, vPeg);
  367. Result.UnitName := GetFieldStrDef(vNode, 'Name', '');
  368. Result.DrawingCode := GetDrawingCode(vNode);
  369. end;
  370. procedure TZJJLData.DetailGridCellTextChanged(Sender: TObject; Col,
  371. Row: Integer);
  372. begin
  373. if (Row = 6) then
  374. begin
  375. cdsZJJLView.Edit;
  376. cdsZJJLViewFormulaMemo.AsString := TZJGrid(Sender).Cells[Col, Row].Text;
  377. cdsZJJLView.Post;
  378. end
  379. else if (Row = 8) then
  380. begin
  381. cdsZJJLView.Edit;
  382. cdsZJJLViewRelaFile.AsString := TZJGrid(Sender).Cells[Col, Row].Text;
  383. cdsZJJLView.Post;
  384. end;
  385. end;
  386. procedure TZJJLData.GenerateAllByB_Code;
  387. begin
  388. RestoreOrgData;
  389. FNewID := 1;
  390. DeleteAll;
  391. GenerateNodeByB_Code(MainBillsTree.FirstNode);
  392. TPhaseData(FPhaseData).PhaseProperty.ZjjlVersion := 1;
  393. end;
  394. procedure TZJJLData.GenerateNodeByB_Code(ANode: TsdIDTreeNode);
  395. begin
  396. if not Assigned(ANode) then Exit;
  397. if ANode.HasChildren then
  398. GenerateNodeByB_Code(ANode.FirstChild)
  399. else
  400. GenerateLeafNode(ANode);
  401. GenerateNodeByB_Code(ANode.NextSibling);
  402. end;
  403. procedure TZJJLData.GenerateLeafNode(ANode: TsdIDTreeNode);
  404. function CheckMeasureExist(AID: Integer): Boolean;
  405. var
  406. StageRec: TsdDataRecord;
  407. begin
  408. StageRec := TPhaseData(FPhaseData).StageData.StageRecord(AID);
  409. Result := Assigned(StageRec) and
  410. ((StageRec.ValueByName('GatherQuantity').AsFloat <> 0)
  411. or (StageRec.ValueByName('GatherTotalPrice').AsFloat <> 0));
  412. end;
  413. begin
  414. if (ANode.Rec.ValueByName('B_Code').AsString <> '') and
  415. CheckMeasureExist(ANode.ID) then
  416. GenerateZJJLNode(ANode, 1);
  417. end;
  418. procedure TZJJLData.GenerateZJJLNode(ANode: TsdIDTreeNode;
  419. AType: Integer);
  420. function GetNewCode: string;
  421. begin
  422. with TProjectData(TPhaseData(FPhaseData).ProjectData) do
  423. begin
  424. Result := ProjProperties.ZJJLPreText;
  425. if (Result <> '') and (Result[Length(Result)] <> '-') then
  426. Result := Result + '-';
  427. Result := Result + Format('%d-%d', [PhaseIndex, FNewID]);
  428. end;
  429. end;
  430. function GetOrgZJJLNode(ABillsID: Integer): TZJJLNode;
  431. var
  432. iIndex: Integer;
  433. begin
  434. Result := nil;
  435. for iIndex := 0 to FOrgDataList.Count - 1 do
  436. // 7/30新增了一个“总量控制”模式,Type字段控制。真的是要疯掉了。
  437. if (TZJJLNode(FOrgDataList.Items[iIndex]).FBillsID = ABillsID)
  438. and (TZJJLNode(FOrgDataList.Items[iIndex]).FType = AType) then
  439. begin
  440. Result := TZJJLNode(FOrgDataList.Items[iIndex]);
  441. Break;
  442. end;
  443. end;
  444. var
  445. ZJJLNode: TZJJLNode;
  446. begin
  447. cdsZJJL.Append;
  448. cdsZJJLID.AsInteger := FNewID;
  449. cdsZJJLBillsID.AsInteger := ANode.ID;
  450. cdsZJJLType.AsInteger := AType;
  451. ZJJLNode := GetOrgZJJLNode(ANode.ID);
  452. cdsZJJLCode.AsString := GetNewCode;
  453. if AType = Ord(ztFx) then
  454. cdsZJJLBillsCode.AsString := ANode.Rec.ValueByName('Code').AsString
  455. else if AType = Ord(ztGcl) then
  456. cdsZJJLBillsCode.AsString := ANode.Rec.ValueByName('B_Code').AsString;
  457. if Assigned(ZJJLNode) then
  458. begin
  459. cdsZJJLCertificateCode.AsString := ZJJLNode.FCertificateCode;
  460. cdsZJJLFormulaMemo.AsString := ZJJLNode.FFormulaMemo;
  461. cdsZJJLRelaFile.AsString := ZJJLNode.FRelaFile;
  462. end;
  463. cdsZJJL.Post;
  464. Inc(FNewID);
  465. end;
  466. function TZJJLData.GetInfoRecByB_Code(ABillsID: Integer): TZJJLInfoRec;
  467. function GetBGLCode(ANode: TsdIDTreeNode): string;
  468. begin
  469. with TProjectData(TPhaseData(FPhaseData).ProjectData) do
  470. Result := BillsMeasureData.GatherRelaBGL(ANode);
  471. end;
  472. var
  473. vNode: TsdIDTreeNode;
  474. begin
  475. vNode := MainBillsTree.FindNode(ABillsID);
  476. Result.BGLCode := GetBGLCode(vNode);
  477. if Assigned(vNode.Parent) then
  478. Result.PegName := vNode.Parent.Rec.ValueByName('Name').AsString;
  479. Result.FBFXName := '';
  480. Result.UnitName := vNode.Rec.ValueByName('Name').AsString;
  481. Result.DrawingCode := GetDrawingCode(vNode);
  482. end;
  483. function TZJJLData.GetInfoRec(ABillsID, AType: Integer): TZJJLInfoRec;
  484. begin
  485. if AType = 0 then
  486. Result := GetInfoRecByCode(ABillsID)
  487. else if AType = 1 then
  488. Result := GetInfoRecByB_Code(ABillsID);
  489. end;
  490. procedure TZJJLData.LocateBills;
  491. var
  492. Rec: TsdDataRecord;
  493. begin
  494. with TProjectData(TPhaseData(FPhaseData).ProjectData) do
  495. begin
  496. Rec := BillsData.sddBills.FindKey('idxID', cdsZJJLViewBillsID.AsInteger);
  497. BillsMeasureData.sdvBillsMeasure.LocateInControl(Rec);
  498. end;
  499. end;
  500. function TZJJLData.GetDrawingCode(ANode: TsdIDTreeNode): string;
  501. var
  502. vNode: TBillsIDTreeNode;
  503. begin
  504. Result := '';
  505. vNode := TBillsIDTreeNode(ANode);
  506. while (Result = '') and Assigned(vNode) do
  507. begin
  508. if Assigned(vNode.Rec) then
  509. Result := vNode.Rec.DrawingCode.AsString;
  510. vNode := TBillsIDTreeNode(vNode.Parent);
  511. end;
  512. end;
  513. procedure TZJJLData.CheckZjjlVerison;
  514. procedure LoadVersion0Info;
  515. var
  516. sSql: string;
  517. ZJJLInfoRec: TZJJLInfoRec;
  518. begin
  519. cdsZJJL.First;
  520. while not cdsZJJL.Eof do
  521. begin
  522. ZJJLInfoRec := GetInfoRec(cdsZJJLBillsID.AsInteger, cdsZJJLType.AsInteger);
  523. cdsZJJL.Edit;
  524. cdsZJJLBGLCode.AsString := ZJJLInfoRec.BGLCode;
  525. cdsZJJLPegName.AsString := ZJJLInfoRec.PegName;
  526. cdsZJJLFBFXName.AsString := ZJJLInfoRec.FBFXName;
  527. cdsZJJLUnitName.AsString := ZJJLInfoRec.UnitName;
  528. cdsZJJLDrawingCode.AsString := ZJJLInfoRec.DrawingCode;
  529. cdsZJJL.Post;
  530. cdsZJJL.Next;
  531. end;
  532. end;
  533. begin
  534. if TPhaseData(PhaseData).PhaseProperty.ZjjlVersion = 0 then
  535. LoadVersion0Info;
  536. end;
  537. end.