BillsCompileFme.pas 22 KB

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