BillsCompileFme.pas 18 KB

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