BillsCompileFme.pas 18 KB

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