BillsCompileFme.pas 19 KB

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