BillsCompileFme.pas 19 KB

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