BillsCompileFme.pas 19 KB

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