BillsCompileFme.pas 19 KB

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