BillsCompileFme.pas 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581
  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: 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 CheckExprsColumn 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 then
  244. zgBillsCompile.CurCell.Text := laEdtExprs.Text;
  245. end;
  246. function TBillsCompileFrame.CheckExprsColumn: Boolean;
  247. var
  248. iCol: Integer;
  249. begin
  250. iCol := zgBillsCompile.CurCol-zgBillsCompile.FixedColCount;
  251. Result := (iCol = stdBillsCompile.VisibleCol('OrgQuantity'))
  252. or (iCol = stdBillsCompile.VisibleCol('MisQuantity'))
  253. or (iCol = stdBillsCompile.VisibleCol('OthQuantity'));
  254. end;
  255. procedure TBillsCompileFrame.laEdtExprsKeyDown(Sender: TObject;
  256. var Key: Word; Shift: TShiftState);
  257. begin
  258. if Key = VK_Return then
  259. begin
  260. zgBillsCompile.SetFocus;
  261. if not TLabeledEdit(Sender).ReadOnly then
  262. if CheckExprsColumn then
  263. zgBillsCompile.CurCell.Text := laEdtExprs.Text;
  264. end;
  265. end;
  266. procedure TBillsCompileFrame.actnBatchAddChildExecute(Sender: TObject);
  267. begin
  268. if CheckCompileEdition then
  269. AddLeafBills(FBillsCompileData, itChild);
  270. end;
  271. procedure TBillsCompileFrame.actnBatchAddNextExecute(Sender: TObject);
  272. begin
  273. if CheckCompileEdition then
  274. AddLeafBills(FBillsCompileData, itNextSibling);
  275. end;
  276. procedure TBillsCompileFrame.actnBatchAddChildUpdate(Sender: TObject);
  277. begin
  278. with stdBillsCompile.IDTree do
  279. TAction(Sender).Enabled := not Selected.HasChildren
  280. and (Selected.Rec.ValueByName('Code').AsString <> '');
  281. end;
  282. procedure TBillsCompileFrame.actnBatchAddNextUpdate(Sender: TObject);
  283. function CheckLastXmj(ANode: TsdIDTreeNode): Boolean;
  284. var
  285. stnChild: TsdIDTreeNode;
  286. begin
  287. Result := ANode.Rec.ValueByName('Code').AsString <> '';
  288. if not ANode.HasChildren then Exit;
  289. stnChild := ANode.FirstChild;
  290. while Result and Assigned(stnChild) do
  291. begin
  292. Result := Result and (stnChild.Rec.ValueByName('B_Code').AsString <> '');
  293. stnChild := stnChild.NextSibling;
  294. end;
  295. end;
  296. begin
  297. with stdBillsCompile.IDTree do
  298. TAction(Sender).Enabled := Assigned(Selected) and CheckLastXmj(Selected);
  299. end;
  300. procedure TBillsCompileFrame.actnReorderChildrenCodeExecute(
  301. Sender: TObject);
  302. begin
  303. if CheckCompileEdition then
  304. if QuestMessage('是否将此节点的所有子项重新自动编号?') then
  305. FBillsCompileData.ReorderChildrenCode(stdBillsCompile.IDTree.Selected);
  306. end;
  307. procedure TBillsCompileFrame.actnReorderChildrenCodeUpdate(
  308. Sender: TObject);
  309. function WithoutGclChild(ANode: TsdIDTreeNode): Boolean;
  310. var
  311. stnChild: TsdIDTreeNode;
  312. begin
  313. Result := ANode.Rec.ValueByName('Code').AsString <> '';
  314. if not ANode.HasChildren then Exit;
  315. stnChild := ANode.FirstChild;
  316. while Result and Assigned(stnChild) do
  317. begin
  318. Result := Result and (stnChild.Rec.ValueByName('B_Code').AsString = '');
  319. stnChild := stnChild.NextSibling;
  320. end;
  321. end;
  322. begin
  323. with TProjectData(FBillsCompileData.ProjectData) do
  324. TAction(Sender).Enabled := ProjProperties.PhaseCount = 0;
  325. with stdBillsCompile.IDTree do
  326. TAction(Sender).Enabled := TAction(Sender).Enabled
  327. and Assigned(Selected) and WithoutGclChild(Selected);
  328. end;
  329. procedure TBillsCompileFrame.actnExportGridToExcelExecute(Sender: TObject);
  330. var
  331. sFileName: string;
  332. ExcelExportor: TExcelExportor;
  333. begin
  334. if SaveFile(sFileName, '.xls') then
  335. begin
  336. ExcelExportor := TExcelExportor.Create;
  337. try
  338. ExcelExportor.ExportToFile(zgBillsCompile, sFileName);
  339. finally
  340. ExcelExportor.Free;
  341. end;
  342. end;
  343. end;
  344. procedure TBillsCompileFrame.actnBatchReplaceBillsInfoExecute(
  345. Sender: TObject);
  346. begin
  347. if CheckCompileEdition then
  348. BatchReplaceBillsInfo(stdBillsCompile.DataView.Current, FBillsCompileData.BillsData);
  349. end;
  350. procedure TBillsCompileFrame.actnBatchReplaceBillsInfoUpdate(
  351. Sender: TObject);
  352. begin
  353. with TProjectData(FBillsCompileData.ProjectData) do
  354. TAction(Sender).Enabled := ProjProperties.PhaseCount = 0;
  355. TAction(Sender).Enabled := TAction(Sender).Enabled
  356. and Assigned(stdBillsCompile.IDTree.Selected)
  357. and (stdBillsCompile.IDTree.Selected.Rec.ValueByName('B_Code').AsString <> '');
  358. end;
  359. procedure TBillsCompileFrame.zgBillsCompileCustomPaste(Sender: TObject;
  360. ABounds: TRect; ASourSheet: TZjSheet);
  361. var
  362. iRow, iCol: Integer;
  363. begin
  364. for iRow := ABounds.Top to ABounds.Bottom - 1 do
  365. begin
  366. if not zgBillsCompile.RowVisible[iRow] then Continue;
  367. for iCol := ABounds.Left to ABounds.Right - 1 do
  368. with TZJGrid(Sender).Cells[iCol, iRow] do
  369. if CanEdit then Text := ASourSheet.Values[iCol - ABounds.Left, iRow - ABounds.Top];
  370. end;
  371. end;
  372. procedure TBillsCompileFrame.SetShowDesignQuantity(const Value: Boolean);
  373. begin
  374. FShowDesginQuantity := Value;
  375. stdBillsCompile.Column('DgnQuantity1').Visible := FShowDesginQuantity;
  376. stdBillsCompile.Column('DgnQuantity2').Visible := FShowDesginQuantity;
  377. stdBillsCompile.Column('DgnPrice').Visible := FShowDesginQuantity;
  378. end;
  379. procedure TBillsCompileFrame.zgBillsCompileKeyDown(Sender: TObject;
  380. var Key: Word; Shift: TShiftState);
  381. begin
  382. // For Inner Test
  383. if (ssCtrl in Shift) and (ssShift in Shift) and (ssAlt in Shift)
  384. and (Key in [73, 105]) // 'i', 'i'
  385. and (zgBillsCompile.CurCol = 1) then
  386. SetShowIDField(not FShowIDField);
  387. end;
  388. procedure TBillsCompileFrame.SetShowIDField(AValue: Boolean);
  389. begin
  390. FShowIDField := AValue;
  391. stdBillsCompile.Column('ID').Visible := AValue;
  392. stdBillsCompile.Column('ParentID').Visible := AValue;
  393. stdBillsCompile.Column('NextSiblingID').Visible := AValue;
  394. end;
  395. procedure TBillsCompileFrame.actnCheckAndClearExecute(Sender: TObject);
  396. begin
  397. ShowCheckAndClearForm(FBillsCompileData);
  398. end;
  399. procedure TBillsCompileFrame.actnModifiedDealBillsExecute(Sender: TObject);
  400. var
  401. DealBillsForm: TDealBillsForm;
  402. begin
  403. with TProjectData(FBillsCompileData.ProjectData) do
  404. DealBillsForm := TDealBillsForm.Create(DealBillsData);
  405. try
  406. DealBillsForm.ShowModal;
  407. finally
  408. DealBillsForm.Free;
  409. end;
  410. end;
  411. procedure TBillsCompileFrame.actnModifiedDealBillsUpdate(Sender: TObject);
  412. begin
  413. TAction(Sender).Enabled := TProjectData(FBillsCompileData.ProjectData).CanUnlockInfo;
  414. end;
  415. procedure TBillsCompileFrame.actnSetBillsBookmarkExecute(Sender: TObject);
  416. var
  417. Rec: TsdDataRecord;
  418. begin
  419. Rec := stdBillsCompile.IDTree.Selected.Rec;
  420. if Rec.ValueByName('HasBookmark').AsBoolean then
  421. begin
  422. Rec.ValueByName('HasBookmark').AsBoolean := False;
  423. Rec.ValueByName('MarkMemo').AsString := '';
  424. end
  425. else
  426. Rec.ValueByName('HasBookmark').AsBoolean := True;
  427. TProjectData(FBillsCompileData.ProjectData).BillsBookmarkData.RefreshBillsBookmark;
  428. if Assigned(FOnAfterSetBookmark) then
  429. FOnAfterSetBookmark(Rec.ValueByName('HasBookmark').AsBoolean);
  430. zgBillsCompile.InvalidateRow(zgBillsCompile.CurRow);
  431. end;
  432. procedure TBillsCompileFrame.SetShowAlias(const Value: Boolean);
  433. begin
  434. FShowAlias := Value;
  435. stdBillsCompile.Column('Alias').Visible := FShowAlias;
  436. end;
  437. procedure TBillsCompileFrame.actnImportGclBillsToXmjUpdate(
  438. Sender: TObject);
  439. begin
  440. with stdBillsCompile.IDTree do
  441. TAction(Sender).Enabled := not Selected.HasChildren and (Selected.Rec.ValueByName('Code').AsString <> '');
  442. end;
  443. procedure TBillsCompileFrame.actnImportGclBillsToXmjExecute(
  444. Sender: TObject);
  445. var
  446. sFileName: string;
  447. Importor: TGclBillsExcelImport;
  448. begin
  449. if SelectFile(sFileName, '.xls') then
  450. begin
  451. Importor := TGclBillsExcelImport.Create(TProjectData(FBillsCompileData.ProjectData));
  452. try
  453. Importor.ParentID := stdBillsCompile.IDTree.Selected.ID;
  454. Importor.ImportFile(sFileName);
  455. finally
  456. Importor.Free;
  457. end;
  458. end;
  459. end;
  460. procedure TBillsCompileFrame.ExpandNodeTo(ALevel: Integer);
  461. begin
  462. BeginExpandNode;
  463. try
  464. FBillsCompileData.ExpandNodeTo(ALevel);
  465. finally
  466. EndExpandNode;
  467. end;
  468. end;
  469. procedure TBillsCompileFrame.ExpandXmjNode;
  470. begin
  471. BeginExpandNode;
  472. try
  473. FBillsCompileData.ExpandXmjNode;
  474. finally
  475. EndExpandNode;
  476. end;
  477. end;
  478. procedure TBillsCompileFrame.BeginExpandNode;
  479. begin
  480. zgBillsCompile.OnCellGetColor := nil;
  481. BeginUpdateWindow(zgBillsCompile.Handle);
  482. stdBillsCompile.DisableControl;
  483. end;
  484. procedure TBillsCompileFrame.EndExpandNode;
  485. begin
  486. stdBillsCompile.EnableControl;
  487. EndUpdateWindow(zgBillsCompile.Handle);
  488. zgBillsCompile.OnCellGetColor := zgBillsCompileCellGetColor;
  489. zgBillsCompile.Invalidate;
  490. end;
  491. procedure TBillsCompileFrame.RefreshPhase_Stage;
  492. begin
  493. with TProjectData(FBillsCompileData.ProjectData) do
  494. begin
  495. ResetBaseDataReadOnly(BaseDataReadOnly);
  496. ResetAllowInsert(AllowInsert);
  497. end;
  498. end;
  499. procedure TBillsCompileFrame.ResetAllowInsert(AAllow: Boolean);
  500. begin
  501. if AAllow then
  502. stdBillsCompile.Options := stdBillsCompile.Options + [aoAllowInsert]
  503. else
  504. stdBillsCompile.Options := stdBillsCompile.Options - [aoAllowInsert];
  505. end;
  506. procedure TBillsCompileFrame.ResetBaseDataReadOnly(AReadOnly: Boolean);
  507. begin
  508. stdBillsCompile.Column('Code').ReadOnly := AReadOnly;
  509. stdBillsCompile.Column('B_Code').ReadOnly := AReadOnly;
  510. stdBillsCompile.Column('Name').ReadOnly := AReadOnly;
  511. stdBillsCompile.Column('Units').ReadOnly := AReadOnly;
  512. stdBillsCompile.Column('Price').ReadOnly := AReadOnly;
  513. stdBillsCompile.Column('DrawingCode').ReadOnly := AReadOnly;
  514. end;
  515. end.