BillsCompileFme.pas 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725
  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. stdBillsCompile.Column('LockedInfo').ReadOnly := ProjProperties.PhaseCount > 0;
  205. zgBillsCompile.OnExpandMouseDown := ExpandMouseDown;
  206. end;
  207. destructor TBillsCompileFrame.Destroy;
  208. begin
  209. inherited;
  210. end;
  211. procedure TBillsCompileFrame.zgBillsCompileMouseDown(Sender: TObject;
  212. Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  213. begin
  214. if Button = mbRight then
  215. dxpmBillsCompile.PopupFromCursorPos
  216. else
  217. begin
  218. if CheckExprsColumn or CheckMemoStrColumn then
  219. laEdtExprs.Text := zgBillsCompile.CurCell.EditText
  220. else
  221. laEdtExprs.Text := '';
  222. if CheckExprsColumn then
  223. begin
  224. with stdBillsCompile.DataView do
  225. if Assigned(Current) then
  226. laEdtExprs.ReadOnly := Current.ValueByName('LockedInfo').AsBoolean;
  227. end
  228. else if CheckMemoStrColumn then
  229. begin
  230. laEdtExprs.ReadOnly := False;
  231. end;
  232. end;
  233. end;
  234. procedure TBillsCompileFrame.zgBillsCompileCellGetColor(Sender: TObject;
  235. ACoord: TPoint; var AColor: TColor);
  236. var
  237. stnNode: TBillsIDTreeNode;
  238. iCreatePhaseID: Integer;
  239. begin
  240. if ACoord.Y > stdBillsCompile.IDTree.Count + 2 then Exit;
  241. stnNode := TBillsIDTreeNode(stdBillsCompile.IDTree.Items[ACoord.Y - 3]);
  242. if not Assigned(stnNode) then Exit;
  243. iCreatePhaseID := stnNode.Rec.CreatePhaseID.AsInteger;
  244. if stnNode.ParentID = 1 then
  245. AColor := $00FBCAC4
  246. else if (stnNode.Rec.B_Code.AsString = '') and (stnNode.Level > 0) then
  247. AColor := $00F9E8DF;
  248. // 书签
  249. if stnNode.Rec.HasBookMark.AsBoolean then
  250. AColor := $00CFE2F9;
  251. // 根据节点创建期数底色不同
  252. if iCreatePhaseID > 0 then
  253. begin
  254. // 当前期不存在节点,底色为灰色提示用户
  255. if iCreatePhaseID > TProjectData(FBillsCompileData.ProjectData).PhaseIndex then
  256. AColor := $00D5D5D5
  257. // 当前期新增节点,底色为黄色提示用户
  258. else if iCreatePhaseID = TProjectData(FBillsCompileData.ProjectData).PhaseIndex then
  259. AColor := $00A7FDFD;
  260. end;
  261. end;
  262. procedure TBillsCompileFrame.zgBillsCompileCellGetFont(Sender: TObject;
  263. ACoord: TPoint; AFont: TFont);
  264. begin
  265. if ACoord.X = stdBillsCompile.VisibleCol('IsMeasureAdd') then
  266. AFont.Color := clInactiveCaptionText;
  267. end;
  268. procedure TBillsCompileFrame.laEdtExprsExit(Sender: TObject);
  269. begin
  270. if not TLabeledEdit(Sender).ReadOnly then
  271. if CheckExprsColumn or CheckMemoStrColumn then
  272. zgBillsCompile.CurCell.Text := laEdtExprs.Text;
  273. end;
  274. function TBillsCompileFrame.CheckExprsColumn: Boolean;
  275. var
  276. iCol: Integer;
  277. begin
  278. iCol := zgBillsCompile.CurCol-zgBillsCompile.FixedColCount;
  279. Result := (iCol = stdBillsCompile.VisibleCol('OrgQuantity'))
  280. or (iCol = stdBillsCompile.VisibleCol('MisQuantity'))
  281. or (iCol = stdBillsCompile.VisibleCol('OthQuantity'));
  282. end;
  283. procedure TBillsCompileFrame.laEdtExprsKeyDown(Sender: TObject;
  284. var Key: Word; Shift: TShiftState);
  285. begin
  286. if Key = VK_Return then
  287. begin
  288. zgBillsCompile.SetFocus;
  289. if not TLabeledEdit(Sender).ReadOnly then
  290. if CheckExprsColumn or CheckMemoStrColumn then
  291. zgBillsCompile.CurCell.Text := laEdtExprs.Text;
  292. end;
  293. end;
  294. procedure TBillsCompileFrame.actnBatchAddChildExecute(Sender: TObject);
  295. begin
  296. if CheckCompileEdition then
  297. begin
  298. if TProjectData(FBillsCompileData.ProjectData).CanInsertNormalBills then
  299. AddLeafBills(FBillsCompileData, itChild)
  300. else
  301. TipMessage('当前标段未解锁,如需使用此功能,请先解锁标段');
  302. end;
  303. end;
  304. procedure TBillsCompileFrame.actnBatchAddNextExecute(Sender: TObject);
  305. begin
  306. if CheckCompileEdition then
  307. begin
  308. if TProjectData(FBillsCompileData.ProjectData).CanInsertNormalBills then
  309. AddLeafBills(FBillsCompileData, itNextSibling)
  310. else
  311. TipMessage('当前标段未解锁,如需使用此功能,请先解锁标段');
  312. end;
  313. end;
  314. procedure TBillsCompileFrame.actnBatchAddChildUpdate(Sender: TObject);
  315. begin
  316. with stdBillsCompile.IDTree do
  317. TAction(Sender).Enabled := not Selected.HasChildren
  318. and (Selected.Rec.ValueByName('Code').AsString <> '');
  319. end;
  320. procedure TBillsCompileFrame.actnBatchAddNextUpdate(Sender: TObject);
  321. function CheckLastXmj(ANode: TsdIDTreeNode): Boolean;
  322. var
  323. stnChild: TsdIDTreeNode;
  324. begin
  325. Result := ANode.Rec.ValueByName('Code').AsString <> '';
  326. if not ANode.HasChildren then Exit;
  327. stnChild := ANode.FirstChild;
  328. while Result and Assigned(stnChild) do
  329. begin
  330. Result := Result and (stnChild.Rec.ValueByName('B_Code').AsString <> '');
  331. stnChild := stnChild.NextSibling;
  332. end;
  333. end;
  334. begin
  335. with stdBillsCompile.IDTree do
  336. TAction(Sender).Enabled := Assigned(Selected) and CheckLastXmj(Selected);
  337. end;
  338. procedure TBillsCompileFrame.actnReorderChildrenCodeExecute(
  339. Sender: TObject);
  340. begin
  341. if CheckCompileEdition then
  342. if QuestMessage('是否将此节点的所有子项重新自动编号?') then
  343. FBillsCompileData.ReorderChildrenCode(stdBillsCompile.IDTree.Selected);
  344. end;
  345. procedure TBillsCompileFrame.actnReorderChildrenCodeUpdate(
  346. Sender: TObject);
  347. function WithoutGclChild(ANode: TsdIDTreeNode): Boolean;
  348. var
  349. stnChild: TsdIDTreeNode;
  350. begin
  351. Result := ANode.Rec.ValueByName('Code').AsString <> '';
  352. if not ANode.HasChildren then Exit;
  353. stnChild := ANode.FirstChild;
  354. while Result and Assigned(stnChild) do
  355. begin
  356. Result := Result and (stnChild.Rec.ValueByName('B_Code').AsString = '');
  357. stnChild := stnChild.NextSibling;
  358. end;
  359. end;
  360. begin
  361. with TProjectData(FBillsCompileData.ProjectData) do
  362. TAction(Sender).Enabled := ProjProperties.PhaseCount = 0;
  363. with stdBillsCompile.IDTree do
  364. TAction(Sender).Enabled := TAction(Sender).Enabled
  365. and Assigned(Selected) and WithoutGclChild(Selected);
  366. end;
  367. procedure TBillsCompileFrame.actnExportGridToExcelExecute(Sender: TObject);
  368. var
  369. sFileName: string;
  370. ExcelExportor: TExcelExportor;
  371. begin
  372. if SaveExcelFile(sFileName) then
  373. begin
  374. ExcelExportor := TExcelExportor.Create;
  375. try
  376. ExcelExportor.ExportToFile(zgBillsCompile, sFileName);
  377. finally
  378. ExcelExportor.Free;
  379. end;
  380. end;
  381. end;
  382. procedure TBillsCompileFrame.actnBatchReplaceBillsInfoExecute(
  383. Sender: TObject);
  384. begin
  385. if CheckCompileEdition then
  386. BatchReplaceBillsInfo(stdBillsCompile.DataView.Current, FBillsCompileData.BillsData);
  387. end;
  388. procedure TBillsCompileFrame.actnBatchReplaceBillsInfoUpdate(
  389. Sender: TObject);
  390. begin
  391. with TProjectData(FBillsCompileData.ProjectData) do
  392. TAction(Sender).Enabled := ProjProperties.PhaseCount = 0;
  393. TAction(Sender).Enabled := TAction(Sender).Enabled
  394. and Assigned(stdBillsCompile.IDTree.Selected)
  395. and (stdBillsCompile.IDTree.Selected.Rec.ValueByName('B_Code').AsString <> '');
  396. end;
  397. procedure TBillsCompileFrame.zgBillsCompileCustomPaste(Sender: TObject;
  398. ABounds: TRect; ASourSheet: TZjSheet);
  399. var
  400. iRow, iCol: Integer;
  401. begin
  402. for iRow := ABounds.Top to ABounds.Bottom - 1 do
  403. begin
  404. if not zgBillsCompile.RowVisible[iRow] then Continue;
  405. for iCol := ABounds.Left to ABounds.Right - 1 do
  406. with TZJGrid(Sender).Cells[iCol, iRow] do
  407. if CanEdit then Text := ASourSheet.Values[iCol - ABounds.Left, iRow - ABounds.Top];
  408. end;
  409. end;
  410. procedure TBillsCompileFrame.SetShowDesignQuantity(const Value: Boolean);
  411. begin
  412. FShowDesginQuantity := Value;
  413. stdBillsCompile.Column('DgnQuantity1').Visible := FShowDesginQuantity;
  414. stdBillsCompile.Column('DgnQuantity2').Visible := FShowDesginQuantity;
  415. stdBillsCompile.Column('DgnPrice').Visible := FShowDesginQuantity;
  416. end;
  417. procedure TBillsCompileFrame.zgBillsCompileKeyDown(Sender: TObject;
  418. var Key: Word; Shift: TShiftState);
  419. begin
  420. // For Inner Test
  421. if (ssCtrl in Shift) and (ssShift in Shift) and (ssAlt in Shift)
  422. and (Key in [73, 105]) // 'i', 'i'
  423. and (zgBillsCompile.CurCol = 1) then
  424. SetShowIDField(not FShowIDField);
  425. end;
  426. procedure TBillsCompileFrame.SetShowIDField(AValue: Boolean);
  427. begin
  428. FShowIDField := AValue;
  429. stdBillsCompile.Column('ID').Visible := AValue;
  430. stdBillsCompile.Column('ParentID').Visible := AValue;
  431. stdBillsCompile.Column('NextSiblingID').Visible := AValue;
  432. end;
  433. procedure TBillsCompileFrame.actnCheckAndClearExecute(Sender: TObject);
  434. begin
  435. ShowCheckAndClearForm(FBillsCompileData);
  436. end;
  437. procedure TBillsCompileFrame.actnModifiedDealBillsExecute(Sender: TObject);
  438. var
  439. DealBillsForm: TDealBillsForm;
  440. begin
  441. with TProjectData(FBillsCompileData.ProjectData) do
  442. DealBillsForm := TDealBillsForm.Create(DealBillsData);
  443. try
  444. DealBillsForm.ShowModal;
  445. finally
  446. DealBillsForm.Free;
  447. end;
  448. end;
  449. procedure TBillsCompileFrame.actnModifiedDealBillsUpdate(Sender: TObject);
  450. begin
  451. TAction(Sender).Enabled := TProjectData(FBillsCompileData.ProjectData).CanUnlockInfo;
  452. end;
  453. procedure TBillsCompileFrame.actnSetBillsBookmarkExecute(Sender: TObject);
  454. var
  455. Rec: TBillsRecord;
  456. begin
  457. Rec := TBillsRecord(stdBillsCompile.IDTree.Selected.Rec);
  458. if Rec.HasBookMark.AsBoolean then
  459. begin
  460. Rec.HasBookMark.AsBoolean := False;
  461. Rec.MarkMemo.AsString := '';
  462. end
  463. else
  464. Rec.HasBookMark.AsBoolean := True;
  465. TProjectData(FBillsCompileData.ProjectData).BillsBookmarkData.RefreshBillsBookmark;
  466. if Assigned(FOnAfterSetBookmark) then
  467. FOnAfterSetBookmark(Rec.HasBookMark.AsBoolean);
  468. zgBillsCompile.InvalidateRow(zgBillsCompile.CurRow);
  469. end;
  470. procedure TBillsCompileFrame.SetShowAlias(const Value: Boolean);
  471. begin
  472. FShowAlias := Value;
  473. stdBillsCompile.Column('Alias').Visible := FShowAlias;
  474. end;
  475. procedure TBillsCompileFrame.actnImportGclBillsToXmjUpdate(
  476. Sender: TObject);
  477. begin
  478. with stdBillsCompile.IDTree do
  479. TAction(Sender).Enabled := not Selected.HasChildren and (Selected.Rec.ValueByName('Code').AsString <> '');
  480. end;
  481. procedure TBillsCompileFrame.actnImportGclBillsToXmjExecute(
  482. Sender: TObject);
  483. var
  484. sFileName: string;
  485. Importor: TDEI_GclBills;
  486. begin
  487. if TProjectData(FBillsCompileData.ProjectData).CanInsertNormalBills then
  488. begin
  489. if SelectExcelFile(sFileName) then
  490. begin
  491. Importor := TDEI_GclBills.Create(TProjectData(FBillsCompileData.ProjectData));
  492. try
  493. Importor.ImportToXmj(sFileName, stdBillsCompile.IDTree.Selected.ID);
  494. finally
  495. Importor.Free;
  496. end;
  497. end;
  498. end
  499. else
  500. TipMessage('当前标段未解锁,如需使用此功能,请先解锁标段');
  501. end;
  502. procedure TBillsCompileFrame.ExpandNodeTo(ALevel: Integer);
  503. begin
  504. BeginExpandNode;
  505. try
  506. FBillsCompileData.ExpandNodeTo(ALevel);
  507. finally
  508. EndExpandNode;
  509. end;
  510. end;
  511. procedure TBillsCompileFrame.ExpandXmjNode;
  512. begin
  513. BeginExpandNode;
  514. try
  515. FBillsCompileData.ExpandXmjNode;
  516. finally
  517. EndExpandNode;
  518. end;
  519. end;
  520. procedure TBillsCompileFrame.BeginExpandNode;
  521. begin
  522. zgBillsCompile.BeginUpdate;
  523. zgBillsCompile.OnCellGetColor := nil;
  524. BeginUpdateWindow(zgBillsCompile.Handle);
  525. stdBillsCompile.DisableControl;
  526. end;
  527. procedure TBillsCompileFrame.EndExpandNode;
  528. begin
  529. stdBillsCompile.EnableControl;
  530. EndUpdateWindow(zgBillsCompile.Handle);
  531. zgBillsCompile.OnCellGetColor := zgBillsCompileCellGetColor;
  532. zgBillsCompile.EndUpdate;
  533. end;
  534. procedure TBillsCompileFrame.RefreshPhase_Stage;
  535. begin
  536. with TProjectData(FBillsCompileData.ProjectData) do
  537. begin
  538. ResetBaseDataReadOnly(BaseDataReadOnly);
  539. ResetAllowInsert(AllowInsert);
  540. end;
  541. end;
  542. procedure TBillsCompileFrame.ResetAllowInsert(AAllow: Boolean);
  543. begin
  544. if AAllow then
  545. stdBillsCompile.Options := stdBillsCompile.Options + [aoAllowInsert]
  546. else
  547. stdBillsCompile.Options := stdBillsCompile.Options - [aoAllowInsert];
  548. end;
  549. procedure TBillsCompileFrame.ResetBaseDataReadOnly(AReadOnly: Boolean);
  550. begin
  551. stdBillsCompile.Column('Code').ReadOnly := AReadOnly;
  552. stdBillsCompile.Column('B_Code').ReadOnly := AReadOnly;
  553. stdBillsCompile.Column('Name').ReadOnly := AReadOnly;
  554. stdBillsCompile.Column('Units').ReadOnly := AReadOnly;
  555. stdBillsCompile.Column('Price').ReadOnly := AReadOnly;
  556. stdBillsCompile.Column('DrawingCode').ReadOnly := AReadOnly;
  557. end;
  558. procedure TBillsCompileFrame.actnImportPlaneFxBillsToXmjExecute(
  559. Sender: TObject);
  560. var
  561. sFileName: string;
  562. Importor: TPlaneFxBillsExcelImport;
  563. begin
  564. if TProjectData(FBillsCompileData.ProjectData).CanInsertNormalBills then
  565. begin
  566. if SelectExcelFile(sFileName) then
  567. begin
  568. Importor := TPlaneFxBillsExcelImport.Create(TProjectData(FBillsCompileData.ProjectData));
  569. try
  570. Importor.ParentID := stdBillsCompile.IDTree.Selected.ID;
  571. Importor.ImportFile(sFileName);
  572. finally
  573. Importor.Free;
  574. end;
  575. end;
  576. end
  577. else
  578. TipMessage('当前标段未解锁,如需使用此功能,请先解锁标段');
  579. end;
  580. procedure TBillsCompileFrame.ExpandPegXmjNode;
  581. begin
  582. BeginExpandNode;
  583. try
  584. FBillsCompileData.ExpandPegXmjNode;
  585. finally
  586. EndExpandNode;
  587. end;
  588. end;
  589. procedure TBillsCompileFrame.ExpandMouseDown(AGridCell: TzjCell);
  590. procedure CommonExpand(vNode: TsdIDTreeNode);
  591. begin
  592. AGridCell.Grid.BeginUpdate;
  593. vNode.Expanded := not vNode.Expanded;
  594. AGridCell.Grid.EndUpdate;
  595. AGridCell.Grid.InvalidateView(AGridCell.ViewRect);
  596. end;
  597. procedure QuikExpand(vNode: TsdIDTreeNode);
  598. begin
  599. Screen.Cursor := crHourGlass;
  600. BeginExpandNode;
  601. try
  602. vNode.Expanded := not vNode.Expanded;
  603. finally
  604. EndExpandNode;
  605. Screen.Cursor := crDefault;
  606. end;
  607. end;
  608. var
  609. stnNode: TsdIDTreeNode;
  610. begin
  611. stnNode := TsdIDTreeCell(AGridCell).TreeNode;
  612. if stnNode.PosterityCount > 10000 then
  613. QuikExpand(stnNode)
  614. else
  615. CommonExpand(stnNode);
  616. end;
  617. procedure TBillsCompileFrame.zgBillsCompileCellTextChanged(Sender: TObject;
  618. Col, Row: Integer);
  619. begin
  620. if CheckExprsColumn or CheckMemoStrColumn then
  621. laEdtExprs.Text := zgBillsCompile.CurCell.EditText
  622. else
  623. laEdtExprs.Text := '';
  624. if CheckExprsColumn then
  625. begin
  626. with stdBillsCompile.DataView do
  627. if Assigned(Current) then
  628. laEdtExprs.ReadOnly := Current.ValueByName('LockedInfo').AsBoolean;
  629. end
  630. else if CheckMemoStrColumn then
  631. begin
  632. laEdtExprs.ReadOnly := False;
  633. end;
  634. end;
  635. function TBillsCompileFrame.CheckMemoStrColumn: Boolean;
  636. var
  637. iCol: Integer;
  638. begin
  639. iCol := zgBillsCompile.CurCol - zgBillsCompile.FixedColCount;
  640. Result := (iCol = stdBillsCompile.VisibleCol('MemoStr'));
  641. end;
  642. procedure TBillsCompileFrame.SetShowApprovalCode(const Value: Boolean);
  643. begin
  644. FShowApprovalCode := Value;
  645. stdBillsCompile.Column('ApprovalCode').Visible := FShowApprovalCode;
  646. end;
  647. end.