BillsCompileFme.pas 22 KB

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