BillsCompileFme.pas 20 KB

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