BillsCompileFme.pas 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716
  1. unit BillsCompileFme;
  2. interface
  3. uses
  4. BillsCompileDm, UtilMethods, BillsClipboard, sdIDTree, BatchReplaceBillsFrm,
  5. CheckAndClearFrm, DealBillsFrm, BillsPasteSelectFrm,
  6. sdDB, BillsTree, sdIDTreeCells,
  7. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  8. Dialogs, ActnList, sdGridDBA, sdGridTreeDBA, dxBar, ZJGrid, StdCtrls,
  9. ExtCtrls;
  10. type
  11. TBillsCompileFrame = class(TFrame)
  12. pnlExprs: TPanel;
  13. laEdtExprs: TLabeledEdit;
  14. pnlBills: TPanel;
  15. zgBillsCompile: TZJGrid;
  16. dxpmBillsCompile: TdxBarPopupMenu;
  17. stdBillsCompile: TsdGridTreeDBA;
  18. alBillsCompile: TActionList;
  19. actnCalculateLedger: TAction;
  20. actnCopyBillsBlock: TAction;
  21. actnExportGridToExcel: TAction;
  22. actnBatchAddChild: TAction;
  23. actnBatchAddNext: TAction;
  24. actnReorderChildrenCode: TAction;
  25. actnBatchReplaceBillsInfo: TAction;
  26. actnCheckAndClear: TAction;
  27. actnModifiedDealBills: TAction;
  28. actnSetBillsBookmark: TAction;
  29. actnImportGclBillsToXmj: TAction;
  30. actnImportPlaneFxBillsToXmj: TAction;
  31. procedure zgBillsCompileCopy(Sender: TObject; const ABounds: TRect;
  32. var Allow: Boolean);
  33. procedure zgBillsCompilePaste(Sender: TObject; const ABounds: TRect;
  34. var Allow: Boolean);
  35. procedure actnCopyBillsBlockExecute(Sender: TObject);
  36. procedure actnCalculateLedgerExecute(Sender: TObject);
  37. procedure dxpmBillsCompilePopup(Sender: TObject);
  38. procedure zgBillsCompileMouseDown(Sender: TObject;
  39. Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  40. procedure zgBillsCompileCellGetColor(Sender: TObject; ACoord: TPoint;
  41. var AColor: TColor);
  42. procedure zgBillsCompileCellGetFont(Sender: TObject; ACoord: TPoint;
  43. AFont: TFont);
  44. procedure laEdtExprsExit(Sender: TObject);
  45. procedure laEdtExprsKeyDown(Sender: TObject; var Key: Word;
  46. Shift: TShiftState);
  47. procedure actnBatchAddChildExecute(Sender: TObject);
  48. procedure actnBatchAddNextExecute(Sender: TObject);
  49. procedure actnBatchAddChildUpdate(Sender: TObject);
  50. procedure actnBatchAddNextUpdate(Sender: TObject);
  51. procedure actnReorderChildrenCodeExecute(Sender: TObject);
  52. procedure actnReorderChildrenCodeUpdate(Sender: TObject);
  53. procedure actnExportGridToExcelExecute(Sender: TObject);
  54. procedure actnBatchReplaceBillsInfoExecute(Sender: TObject);
  55. procedure actnBatchReplaceBillsInfoUpdate(Sender: TObject);
  56. procedure zgBillsCompileCustomPaste(Sender: TObject; ABounds: TRect;
  57. ASourSheet: TZjSheet);
  58. procedure zgBillsCompileKeyDown(Sender: TObject; var Key: Word;
  59. Shift: TShiftState);
  60. procedure actnCheckAndClearExecute(Sender: TObject);
  61. procedure actnModifiedDealBillsExecute(Sender: TObject);
  62. procedure actnModifiedDealBillsUpdate(Sender: TObject);
  63. procedure actnSetBillsBookmarkExecute(Sender: TObject);
  64. procedure actnImportGclBillsToXmjUpdate(Sender: TObject);
  65. procedure actnImportGclBillsToXmjExecute(Sender: TObject);
  66. procedure actnImportPlaneFxBillsToXmjExecute(Sender: TObject);
  67. procedure zgBillsCompileCellTextChanged(Sender: TObject; Col,
  68. Row: Integer);
  69. private
  70. FBillsCompileData: TBillsCompileData;
  71. FShowIDField: Boolean;
  72. FShowDesginQuantity: Boolean;
  73. FOnAfterSetBookmark: TBookmarkRefreshEvent;
  74. FShowAlias: Boolean;
  75. procedure CopyBillsBlock(ANode: TsdIDTreeNode; ABounds: TRect);
  76. procedure PasteBillsBlock(ANode: TsdIDTreeNode; ABounds: TRect);
  77. procedure SetShowIDField(AValue: Boolean);
  78. procedure ExpandMouseDown(AGridCell: TzjCell);
  79. procedure BeginExpandNode;
  80. procedure EndExpandNode;
  81. procedure ResetBaseDataReadOnly(AReadOnly: Boolean);
  82. procedure ResetAllowInsert(AAllow: Boolean);
  83. function CheckExprsColumn: Boolean;
  84. function CheckMemoStrColumn: Boolean;
  85. procedure SetShowDesignQuantity(const Value: Boolean);
  86. procedure SetShowAlias(const Value: Boolean);
  87. public
  88. constructor Create(AParent: TFrame; ABillsCompileData: TBillsCompileData);
  89. destructor Destroy; override;
  90. procedure ExpandNodeTo(ALevel: Integer);
  91. procedure ExpandXmjNode;
  92. procedure ExpandPegXmjNode;
  93. procedure RefreshPhase_Stage;
  94. property ShowDesignQuantity: Boolean read FShowDesginQuantity write SetShowDesignQuantity;
  95. Property ShowAlias: Boolean read FShowAlias write SetShowAlias;
  96. property OnAfterSetBookmark: TBookmarkRefreshEvent read FOnAfterSetBookmark write FOnAfterSetBookmark;
  97. property BillsCompileData: TBillsCompileData read FBillsCompileData;
  98. end;
  99. implementation
  100. uses
  101. MainFrm, BatchInsertBillsFrm, ExportExcel, ProjectData, mEncryptEditions,
  102. ExcelImport, DetailExcelImport, mDataRecord, ExcelImport_GclBills;
  103. {$R *.dfm}
  104. { TBillsCompileFrame }
  105. procedure TBillsCompileFrame.CopyBillsBlock(ANode: TsdIDTreeNode;
  106. ABounds: TRect);
  107. var
  108. Clipboard: TBillsClipboard;
  109. begin
  110. Clipboard := TBillsClipboard.Create(FBillsCompileData.BillsData);
  111. try
  112. Clipboard.Copy(ANode, ABounds.Bottom - ABounds.Top);
  113. finally
  114. Clipboard.Free;
  115. end;
  116. end;
  117. procedure TBillsCompileFrame.PasteBillsBlock(ANode: TsdIDTreeNode;
  118. ABounds: TRect);
  119. function CanHasChild: Boolean;
  120. begin
  121. Result := True;
  122. if not ANode.HasChildren then
  123. Result := ANode.Rec.ValueByName('Quantity').AsFloat = 0;
  124. end;
  125. var
  126. Clipboard: TBillsClipboard;
  127. iPos: Integer;
  128. begin
  129. if SelectBillsPasteType(iPos, CanHasChild) then
  130. begin
  131. if iPos = -1 then Exit;
  132. Clipboard := TBillsClipboard.Create(FBillsCompileData.BillsData);
  133. try
  134. Clipboard.Paste(ANode, iPos);
  135. finally
  136. FBillsCompileData.CalculateAll;
  137. Clipboard.Free;
  138. end;
  139. end;
  140. end;
  141. procedure TBillsCompileFrame.zgBillsCompileCopy(Sender: TObject;
  142. const ABounds: TRect; var Allow: Boolean);
  143. var
  144. stnNode: TsdIDTreeNode;
  145. begin
  146. Allow := TZJGrid(Sender).Tag = 0;
  147. if not Allow then
  148. begin
  149. stnNode := stdBillsCompile.IDTree.Items[ABounds.Top - zgBillsCompile.FixedRowCount];
  150. CopyBillsBlock(stnNode, ABounds);
  151. TZJGrid(Sender).Tag := 0;
  152. end;
  153. end;
  154. procedure TBillsCompileFrame.zgBillsCompilePaste(Sender: TObject;
  155. const ABounds: TRect; var Allow: Boolean);
  156. begin
  157. if HasBillsBlockFormat then
  158. begin
  159. Allow := False;
  160. if TProjectData(FBillsCompileData.ProjectData).CanInsertNormalBills then
  161. PasteBillsBlock(stdBillsCompile.IDTree.Selected, ABounds)
  162. else
  163. TipMessage('当前标段未解锁,如需使用此功能,请先解锁标段');
  164. end;
  165. end;
  166. procedure TBillsCompileFrame.actnCopyBillsBlockExecute(Sender: TObject);
  167. begin
  168. if CheckCompileEdition then
  169. begin
  170. zgBillsCompile.Tag := 1;
  171. zgBillsCompile.CopyToClipboard(zgBillsCompile.Selection.Bounds);
  172. zgBillsCompile.Selection.SelectRow(zgBillsCompile.Selection.Top, zgBillsCompile.Selection.Bottom - 1);
  173. end;
  174. end;
  175. procedure TBillsCompileFrame.actnCalculateLedgerExecute(Sender: TObject);
  176. begin
  177. FBillsCompileData.CalculateAll;
  178. end;
  179. procedure TBillsCompileFrame.dxpmBillsCompilePopup(Sender: TObject);
  180. begin
  181. SetDxBtnAction(actnCalculateLedger, MainForm.dxbtnCalculateLedger);
  182. SetDxBtnAction(actnCopyBillsBlock, MainForm.dxbtnCopyBillsBlock);
  183. SetDxBtnAction(actnBatchAddChild, MainForm.dxbtnBatchAddChild);
  184. SetDxBtnAction(actnBatchAddNext, MainForm.dxbtnBatchAddNext);
  185. SetDxBtnAction(actnReorderChildrenCode, MainForm.dxbtnReorderChildrenCode);
  186. SetDxBtnAction(actnExportGridToExcel, MainForm.dxbtnExportGridToExcel);
  187. SetDxBtnAction(actnBatchReplaceBillsInfo, MainForm.dxbtnBatchReplaceBillsInfo);
  188. SetDxBtnAction(actnCheckAndClear, MainForm.dxbtnCheckAndClear);
  189. SetDxBtnAction(actnModifiedDealBills, MainForm.dxbtnModifyDealBills);
  190. SetDxBtnAction(actnSetBillsBookmark, MainForm.dxbtnSetBookmark);
  191. SetDxBtnAction(actnImportGclBillsToXmj, MainForm.dxbtnImportGclBillsToXmj);
  192. SetDxBtnAction(actnImportPlaneFxBillsToXmj, MainForm.dxbtnImportPlaneFxBillsToXmj);
  193. end;
  194. constructor TBillsCompileFrame.Create(AParent: TFrame;
  195. ABillsCompileData: TBillsCompileData);
  196. begin
  197. inherited Create(AParent);
  198. FBillsCompileData := ABillsCompileData;
  199. stdBillsCompile.IDTree := FBillsCompileData.BillsCompileTree;
  200. with TProjectData(FBillsCompileData.ProjectData) do
  201. stdBillsCompile.Column('LockedInfo').ReadOnly := ProjProperties.PhaseCount > 0;
  202. zgBillsCompile.OnExpandMouseDown := ExpandMouseDown;
  203. end;
  204. destructor TBillsCompileFrame.Destroy;
  205. begin
  206. inherited;
  207. end;
  208. procedure TBillsCompileFrame.zgBillsCompileMouseDown(Sender: TObject;
  209. Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  210. begin
  211. if Button = mbRight then
  212. dxpmBillsCompile.PopupFromCursorPos
  213. else
  214. begin
  215. if CheckExprsColumn or CheckMemoStrColumn then
  216. laEdtExprs.Text := zgBillsCompile.CurCell.EditText
  217. else
  218. laEdtExprs.Text := '';
  219. if CheckExprsColumn then
  220. begin
  221. with stdBillsCompile.DataView do
  222. if Assigned(Current) then
  223. laEdtExprs.ReadOnly := Current.ValueByName('LockedInfo').AsBoolean;
  224. end
  225. else if CheckMemoStrColumn then
  226. begin
  227. laEdtExprs.ReadOnly := False;
  228. end;
  229. end;
  230. end;
  231. procedure TBillsCompileFrame.zgBillsCompileCellGetColor(Sender: TObject;
  232. ACoord: TPoint; var AColor: TColor);
  233. var
  234. stnNode: TBillsIDTreeNode;
  235. iCreatePhaseID: Integer;
  236. begin
  237. if ACoord.Y > stdBillsCompile.IDTree.Count + 2 then Exit;
  238. stnNode := TBillsIDTreeNode(stdBillsCompile.IDTree.Items[ACoord.Y - 3]);
  239. if not Assigned(stnNode) then Exit;
  240. iCreatePhaseID := stnNode.Rec.CreatePhaseID.AsInteger;
  241. if stnNode.ParentID = 1 then
  242. AColor := $00FBCAC4
  243. else if (stnNode.Rec.B_Code.AsString = '') and (stnNode.Level > 0) then
  244. AColor := $00F9E8DF;
  245. // 书签
  246. if stnNode.Rec.HasBookMark.AsBoolean then
  247. AColor := $00CFE2F9;
  248. // 根据节点创建期数底色不同
  249. if iCreatePhaseID > 0 then
  250. begin
  251. // 当前期不存在节点,底色为灰色提示用户
  252. if iCreatePhaseID > TProjectData(FBillsCompileData.ProjectData).PhaseIndex then
  253. AColor := $00D5D5D5
  254. // 当前期新增节点,底色为黄色提示用户
  255. else if iCreatePhaseID = TProjectData(FBillsCompileData.ProjectData).PhaseIndex then
  256. AColor := $00A7FDFD;
  257. end;
  258. end;
  259. procedure TBillsCompileFrame.zgBillsCompileCellGetFont(Sender: TObject;
  260. ACoord: TPoint; AFont: TFont);
  261. begin
  262. if ACoord.X = stdBillsCompile.VisibleCol('IsMeasureAdd') then
  263. AFont.Color := clInactiveCaptionText;
  264. end;
  265. procedure TBillsCompileFrame.laEdtExprsExit(Sender: TObject);
  266. begin
  267. if not TLabeledEdit(Sender).ReadOnly then
  268. if CheckExprsColumn or CheckMemoStrColumn then
  269. zgBillsCompile.CurCell.Text := laEdtExprs.Text;
  270. end;
  271. function TBillsCompileFrame.CheckExprsColumn: Boolean;
  272. var
  273. iCol: Integer;
  274. begin
  275. iCol := zgBillsCompile.CurCol-zgBillsCompile.FixedColCount;
  276. Result := (iCol = stdBillsCompile.VisibleCol('OrgQuantity'))
  277. or (iCol = stdBillsCompile.VisibleCol('MisQuantity'))
  278. or (iCol = stdBillsCompile.VisibleCol('OthQuantity'));
  279. end;
  280. procedure TBillsCompileFrame.laEdtExprsKeyDown(Sender: TObject;
  281. var Key: Word; Shift: TShiftState);
  282. begin
  283. if Key = VK_Return then
  284. begin
  285. zgBillsCompile.SetFocus;
  286. if not TLabeledEdit(Sender).ReadOnly then
  287. if CheckExprsColumn or CheckMemoStrColumn then
  288. zgBillsCompile.CurCell.Text := laEdtExprs.Text;
  289. end;
  290. end;
  291. procedure TBillsCompileFrame.actnBatchAddChildExecute(Sender: TObject);
  292. begin
  293. if CheckCompileEdition then
  294. begin
  295. if TProjectData(FBillsCompileData.ProjectData).CanInsertNormalBills then
  296. AddLeafBills(FBillsCompileData, itChild)
  297. else
  298. TipMessage('当前标段未解锁,如需使用此功能,请先解锁标段');
  299. end;
  300. end;
  301. procedure TBillsCompileFrame.actnBatchAddNextExecute(Sender: TObject);
  302. begin
  303. if CheckCompileEdition then
  304. begin
  305. if TProjectData(FBillsCompileData.ProjectData).CanInsertNormalBills then
  306. AddLeafBills(FBillsCompileData, itNextSibling)
  307. else
  308. TipMessage('当前标段未解锁,如需使用此功能,请先解锁标段');
  309. end;
  310. end;
  311. procedure TBillsCompileFrame.actnBatchAddChildUpdate(Sender: TObject);
  312. begin
  313. with stdBillsCompile.IDTree do
  314. TAction(Sender).Enabled := not Selected.HasChildren
  315. and (Selected.Rec.ValueByName('Code').AsString <> '');
  316. end;
  317. procedure TBillsCompileFrame.actnBatchAddNextUpdate(Sender: TObject);
  318. function CheckLastXmj(ANode: TsdIDTreeNode): Boolean;
  319. var
  320. stnChild: TsdIDTreeNode;
  321. begin
  322. Result := ANode.Rec.ValueByName('Code').AsString <> '';
  323. if not ANode.HasChildren then Exit;
  324. stnChild := ANode.FirstChild;
  325. while Result and Assigned(stnChild) do
  326. begin
  327. Result := Result and (stnChild.Rec.ValueByName('B_Code').AsString <> '');
  328. stnChild := stnChild.NextSibling;
  329. end;
  330. end;
  331. begin
  332. with stdBillsCompile.IDTree do
  333. TAction(Sender).Enabled := Assigned(Selected) and CheckLastXmj(Selected);
  334. end;
  335. procedure TBillsCompileFrame.actnReorderChildrenCodeExecute(
  336. Sender: TObject);
  337. begin
  338. if CheckCompileEdition then
  339. if QuestMessage('是否将此节点的所有子项重新自动编号?') then
  340. FBillsCompileData.ReorderChildrenCode(stdBillsCompile.IDTree.Selected);
  341. end;
  342. procedure TBillsCompileFrame.actnReorderChildrenCodeUpdate(
  343. Sender: TObject);
  344. function WithoutGclChild(ANode: TsdIDTreeNode): Boolean;
  345. var
  346. stnChild: TsdIDTreeNode;
  347. begin
  348. Result := ANode.Rec.ValueByName('Code').AsString <> '';
  349. if not ANode.HasChildren then Exit;
  350. stnChild := ANode.FirstChild;
  351. while Result and Assigned(stnChild) do
  352. begin
  353. Result := Result and (stnChild.Rec.ValueByName('B_Code').AsString = '');
  354. stnChild := stnChild.NextSibling;
  355. end;
  356. end;
  357. begin
  358. with TProjectData(FBillsCompileData.ProjectData) do
  359. TAction(Sender).Enabled := ProjProperties.PhaseCount = 0;
  360. with stdBillsCompile.IDTree do
  361. TAction(Sender).Enabled := TAction(Sender).Enabled
  362. and Assigned(Selected) and WithoutGclChild(Selected);
  363. end;
  364. procedure TBillsCompileFrame.actnExportGridToExcelExecute(Sender: TObject);
  365. var
  366. sFileName: string;
  367. ExcelExportor: TExcelExportor;
  368. begin
  369. if SaveExcelFile(sFileName) then
  370. begin
  371. ExcelExportor := TExcelExportor.Create;
  372. try
  373. ExcelExportor.ExportToFile(zgBillsCompile, sFileName);
  374. finally
  375. ExcelExportor.Free;
  376. end;
  377. end;
  378. end;
  379. procedure TBillsCompileFrame.actnBatchReplaceBillsInfoExecute(
  380. Sender: TObject);
  381. begin
  382. if CheckCompileEdition then
  383. BatchReplaceBillsInfo(stdBillsCompile.DataView.Current, FBillsCompileData.BillsData);
  384. end;
  385. procedure TBillsCompileFrame.actnBatchReplaceBillsInfoUpdate(
  386. Sender: TObject);
  387. begin
  388. with TProjectData(FBillsCompileData.ProjectData) do
  389. TAction(Sender).Enabled := ProjProperties.PhaseCount = 0;
  390. TAction(Sender).Enabled := TAction(Sender).Enabled
  391. and Assigned(stdBillsCompile.IDTree.Selected)
  392. and (stdBillsCompile.IDTree.Selected.Rec.ValueByName('B_Code').AsString <> '');
  393. end;
  394. procedure TBillsCompileFrame.zgBillsCompileCustomPaste(Sender: TObject;
  395. ABounds: TRect; ASourSheet: TZjSheet);
  396. var
  397. iRow, iCol: Integer;
  398. begin
  399. for iRow := ABounds.Top to ABounds.Bottom - 1 do
  400. begin
  401. if not zgBillsCompile.RowVisible[iRow] then Continue;
  402. for iCol := ABounds.Left to ABounds.Right - 1 do
  403. with TZJGrid(Sender).Cells[iCol, iRow] do
  404. if CanEdit then Text := ASourSheet.Values[iCol - ABounds.Left, iRow - ABounds.Top];
  405. end;
  406. end;
  407. procedure TBillsCompileFrame.SetShowDesignQuantity(const Value: Boolean);
  408. begin
  409. FShowDesginQuantity := Value;
  410. stdBillsCompile.Column('DgnQuantity1').Visible := FShowDesginQuantity;
  411. stdBillsCompile.Column('DgnQuantity2').Visible := FShowDesginQuantity;
  412. stdBillsCompile.Column('DgnPrice').Visible := FShowDesginQuantity;
  413. end;
  414. procedure TBillsCompileFrame.zgBillsCompileKeyDown(Sender: TObject;
  415. var Key: Word; Shift: TShiftState);
  416. begin
  417. // For Inner Test
  418. if (ssCtrl in Shift) and (ssShift in Shift) and (ssAlt in Shift)
  419. and (Key in [73, 105]) // 'i', 'i'
  420. and (zgBillsCompile.CurCol = 1) then
  421. SetShowIDField(not FShowIDField);
  422. end;
  423. procedure TBillsCompileFrame.SetShowIDField(AValue: Boolean);
  424. begin
  425. FShowIDField := AValue;
  426. stdBillsCompile.Column('ID').Visible := AValue;
  427. stdBillsCompile.Column('ParentID').Visible := AValue;
  428. stdBillsCompile.Column('NextSiblingID').Visible := AValue;
  429. end;
  430. procedure TBillsCompileFrame.actnCheckAndClearExecute(Sender: TObject);
  431. begin
  432. ShowCheckAndClearForm(FBillsCompileData);
  433. end;
  434. procedure TBillsCompileFrame.actnModifiedDealBillsExecute(Sender: TObject);
  435. var
  436. DealBillsForm: TDealBillsForm;
  437. begin
  438. with TProjectData(FBillsCompileData.ProjectData) do
  439. DealBillsForm := TDealBillsForm.Create(DealBillsData);
  440. try
  441. DealBillsForm.ShowModal;
  442. finally
  443. DealBillsForm.Free;
  444. end;
  445. end;
  446. procedure TBillsCompileFrame.actnModifiedDealBillsUpdate(Sender: TObject);
  447. begin
  448. TAction(Sender).Enabled := TProjectData(FBillsCompileData.ProjectData).CanUnlockInfo;
  449. end;
  450. procedure TBillsCompileFrame.actnSetBillsBookmarkExecute(Sender: TObject);
  451. var
  452. Rec: TBillsRecord;
  453. begin
  454. Rec := TBillsRecord(stdBillsCompile.IDTree.Selected.Rec);
  455. if Rec.HasBookMark.AsBoolean then
  456. begin
  457. Rec.HasBookMark.AsBoolean := False;
  458. Rec.MarkMemo.AsString := '';
  459. end
  460. else
  461. Rec.HasBookMark.AsBoolean := True;
  462. TProjectData(FBillsCompileData.ProjectData).BillsBookmarkData.RefreshBillsBookmark;
  463. if Assigned(FOnAfterSetBookmark) then
  464. FOnAfterSetBookmark(Rec.HasBookMark.AsBoolean);
  465. zgBillsCompile.InvalidateRow(zgBillsCompile.CurRow);
  466. end;
  467. procedure TBillsCompileFrame.SetShowAlias(const Value: Boolean);
  468. begin
  469. FShowAlias := Value;
  470. stdBillsCompile.Column('Alias').Visible := FShowAlias;
  471. end;
  472. procedure TBillsCompileFrame.actnImportGclBillsToXmjUpdate(
  473. Sender: TObject);
  474. begin
  475. with stdBillsCompile.IDTree do
  476. TAction(Sender).Enabled := not Selected.HasChildren and (Selected.Rec.ValueByName('Code').AsString <> '');
  477. end;
  478. procedure TBillsCompileFrame.actnImportGclBillsToXmjExecute(
  479. Sender: TObject);
  480. var
  481. sFileName: string;
  482. Importor: TDEI_GclBills;
  483. begin
  484. if TProjectData(FBillsCompileData.ProjectData).CanInsertNormalBills then
  485. begin
  486. if SelectFile(sFileName, '.xls') then
  487. begin
  488. Importor := TDEI_GclBills.Create(TProjectData(FBillsCompileData.ProjectData));
  489. try
  490. Importor.ImportToXmj(sFileName, stdBillsCompile.IDTree.Selected.ID);
  491. finally
  492. Importor.Free;
  493. end;
  494. end;
  495. end
  496. else
  497. TipMessage('当前标段未解锁,如需使用此功能,请先解锁标段');
  498. end;
  499. procedure TBillsCompileFrame.ExpandNodeTo(ALevel: Integer);
  500. begin
  501. BeginExpandNode;
  502. try
  503. FBillsCompileData.ExpandNodeTo(ALevel);
  504. finally
  505. EndExpandNode;
  506. end;
  507. end;
  508. procedure TBillsCompileFrame.ExpandXmjNode;
  509. begin
  510. BeginExpandNode;
  511. try
  512. FBillsCompileData.ExpandXmjNode;
  513. finally
  514. EndExpandNode;
  515. end;
  516. end;
  517. procedure TBillsCompileFrame.BeginExpandNode;
  518. begin
  519. zgBillsCompile.BeginUpdate;
  520. zgBillsCompile.OnCellGetColor := nil;
  521. BeginUpdateWindow(zgBillsCompile.Handle);
  522. stdBillsCompile.DisableControl;
  523. end;
  524. procedure TBillsCompileFrame.EndExpandNode;
  525. begin
  526. stdBillsCompile.EnableControl;
  527. EndUpdateWindow(zgBillsCompile.Handle);
  528. zgBillsCompile.OnCellGetColor := zgBillsCompileCellGetColor;
  529. zgBillsCompile.EndUpdate;
  530. end;
  531. procedure TBillsCompileFrame.RefreshPhase_Stage;
  532. begin
  533. with TProjectData(FBillsCompileData.ProjectData) do
  534. begin
  535. ResetBaseDataReadOnly(BaseDataReadOnly);
  536. ResetAllowInsert(AllowInsert);
  537. end;
  538. end;
  539. procedure TBillsCompileFrame.ResetAllowInsert(AAllow: Boolean);
  540. begin
  541. if AAllow then
  542. stdBillsCompile.Options := stdBillsCompile.Options + [aoAllowInsert]
  543. else
  544. stdBillsCompile.Options := stdBillsCompile.Options - [aoAllowInsert];
  545. end;
  546. procedure TBillsCompileFrame.ResetBaseDataReadOnly(AReadOnly: Boolean);
  547. begin
  548. stdBillsCompile.Column('Code').ReadOnly := AReadOnly;
  549. stdBillsCompile.Column('B_Code').ReadOnly := AReadOnly;
  550. stdBillsCompile.Column('Name').ReadOnly := AReadOnly;
  551. stdBillsCompile.Column('Units').ReadOnly := AReadOnly;
  552. stdBillsCompile.Column('Price').ReadOnly := AReadOnly;
  553. stdBillsCompile.Column('DrawingCode').ReadOnly := AReadOnly;
  554. end;
  555. procedure TBillsCompileFrame.actnImportPlaneFxBillsToXmjExecute(
  556. Sender: TObject);
  557. var
  558. sFileName: string;
  559. Importor: TPlaneFxBillsExcelImport;
  560. begin
  561. if TProjectData(FBillsCompileData.ProjectData).CanInsertNormalBills then
  562. begin
  563. if SelectFile(sFileName, '.xls') then
  564. begin
  565. Importor := TPlaneFxBillsExcelImport.Create(TProjectData(FBillsCompileData.ProjectData));
  566. try
  567. Importor.ParentID := stdBillsCompile.IDTree.Selected.ID;
  568. Importor.ImportFile(sFileName);
  569. finally
  570. Importor.Free;
  571. end;
  572. end;
  573. end
  574. else
  575. TipMessage('当前标段未解锁,如需使用此功能,请先解锁标段');
  576. end;
  577. procedure TBillsCompileFrame.ExpandPegXmjNode;
  578. begin
  579. BeginExpandNode;
  580. try
  581. FBillsCompileData.ExpandPegXmjNode;
  582. finally
  583. EndExpandNode;
  584. end;
  585. end;
  586. procedure TBillsCompileFrame.ExpandMouseDown(AGridCell: TzjCell);
  587. procedure CommonExpand(vNode: TsdIDTreeNode);
  588. begin
  589. AGridCell.Grid.BeginUpdate;
  590. vNode.Expanded := not vNode.Expanded;
  591. AGridCell.Grid.EndUpdate;
  592. AGridCell.Grid.InvalidateView(AGridCell.ViewRect);
  593. end;
  594. procedure QuikExpand(vNode: TsdIDTreeNode);
  595. begin
  596. Screen.Cursor := crHourGlass;
  597. BeginExpandNode;
  598. try
  599. vNode.Expanded := not vNode.Expanded;
  600. finally
  601. EndExpandNode;
  602. Screen.Cursor := crDefault;
  603. end;
  604. end;
  605. var
  606. stnNode: TsdIDTreeNode;
  607. begin
  608. stnNode := TsdIDTreeCell(AGridCell).TreeNode;
  609. if stnNode.PosterityCount > 10000 then
  610. QuikExpand(stnNode)
  611. else
  612. CommonExpand(stnNode);
  613. end;
  614. procedure TBillsCompileFrame.zgBillsCompileCellTextChanged(Sender: TObject;
  615. Col, Row: Integer);
  616. begin
  617. if CheckExprsColumn or CheckMemoStrColumn then
  618. laEdtExprs.Text := zgBillsCompile.CurCell.EditText
  619. else
  620. laEdtExprs.Text := '';
  621. if CheckExprsColumn then
  622. begin
  623. with stdBillsCompile.DataView do
  624. if Assigned(Current) then
  625. laEdtExprs.ReadOnly := Current.ValueByName('LockedInfo').AsBoolean;
  626. end
  627. else if CheckMemoStrColumn then
  628. begin
  629. laEdtExprs.ReadOnly := False;
  630. end;
  631. end;
  632. function TBillsCompileFrame.CheckMemoStrColumn: Boolean;
  633. var
  634. iCol: Integer;
  635. begin
  636. iCol := zgBillsCompile.CurCol - zgBillsCompile.FixedColCount;
  637. Result := (iCol = stdBillsCompile.VisibleCol('MemoStr'));
  638. end;
  639. end.