MainFrm.pas 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098
  1. unit MainFrm;
  2. interface
  3. uses
  4. // Uses Units Please Try This Category
  5. // View
  6. ProjectManagerFme, ProjectFme, ProjectPropertiesFrm, OptionFrm, AboutFrm,
  7. AuthFrm,
  8. // Model & Data & Data Control ...
  9. ProjectData, SupportUnit, Globals, ZhAPI, ExcelImport, ConditionalDefines,
  10. // Controls & Delphi Default ... (Almost By Add Controls)
  11. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  12. Dialogs, cxGraphics, JimPages, ComCtrls, dxStatusBar, cxControls, JimTabs,
  13. dxBar, ImgList, UtilMethods, ZjDbaActns, ActnList, XPStyleActnCtrls, ActnMan,
  14. dxBarExtItems, sdDB, ExtCtrls, jpeg, StdCtrls, CslLabel, pngimage;
  15. type
  16. TMainForm = class(TForm)
  17. dxBarManager: TdxBarManager;
  18. Images: TImageList;
  19. dxsiFile: TdxBarSubItem;
  20. jtsProjects: TJimTabSet;
  21. dxStatusBar: TdxStatusBar;
  22. dxStatusBarContainer2: TdxStatusBarContainerControl;
  23. ProgressBar: TProgressBar;
  24. jpsMain: TJimPages;
  25. jpsMainProjectsManager: TJimPage;
  26. jpsMainProjects: TJimPage;
  27. jpsProjects: TJimPages;
  28. dxsiEdit: TdxBarSubItem;
  29. dxsiHelp: TdxBarSubItem;
  30. dxbtnCopy: TdxBarButton;
  31. dxbtnPaste: TdxBarButton;
  32. dxbtnCut: TdxBarButton;
  33. dxbtnInsert: TdxBarButton;
  34. dxbtnDelete: TdxBarButton;
  35. dxbtnUpMove: TdxBarButton;
  36. dxbtnDownMove: TdxBarButton;
  37. dxbtnUpLevel: TdxBarButton;
  38. dxbtnDownLevel: TdxBarButton;
  39. dxbtnAuthorizeDog: TdxBarButton;
  40. dxbtnAbout: TdxBarButton;
  41. dxbtnNewProject: TdxBarButton;
  42. dxbtnOpenProject: TdxBarButton;
  43. dxbtnDeleteProject: TdxBarButton;
  44. ActionManager1: TActionManager;
  45. ZjDbaInsert: TZjDbaInsert;
  46. ZjDbaDelete: TZjDbaDelete;
  47. ZjDbaUpMove: TZjDbaUpMove;
  48. ZjDbaDownMove: TZjDbaDownMove;
  49. ZjTreeDbaUpLevel: TZjTreeDbaUpLevel;
  50. ZjTreeDbaDownLevel: TZjTreeDbaDownLevel;
  51. ZjGridCopy: TZjGridCopy;
  52. ZjGridPaste: TZjGridPaste;
  53. ZjGridCut: TZjGridCut;
  54. ZjGridRemapedPaste: TZjGridRemapedPaste;
  55. dxpmTabSet: TdxBarPopupMenu;
  56. dxbtnCloseProject: TdxBarButton;
  57. actnCloseProject: TAction;
  58. dxbtnNewPhase: TdxBarButton;
  59. dxbtnCalculateLedger: TdxBarButton;
  60. actnNewPhase: TAction;
  61. dxbtnProjectProperties: TdxBarButton;
  62. actnProjectProperties: TAction;
  63. dxbtnSaveProject: TdxBarButton;
  64. actnSaveProject: TAction;
  65. dxbtnRemapedPaste: TdxBarButton;
  66. dxbtnImportExcel: TdxBarButton;
  67. actnImportExcel: TAction;
  68. dxbtnNewAudit: TdxBarButton;
  69. dxbtnCopyBillsBlock: TdxBarButton;
  70. actnNewAudit: TAction;
  71. dxbtnFinalAudit: TdxBarButton;
  72. dxbtnSubmitProject: TdxBarButton;
  73. dxbtnReceiveProject: TdxBarButton;
  74. dxbtnReplyProject: TdxBarButton;
  75. dxbtnAcceptProject: TdxBarButton;
  76. dxbtnCalculateAll: TdxBarButton;
  77. dxbtnNewSubProject: TdxBarButton;
  78. dxbtnNewTender: TdxBarButton;
  79. dxbtnOptions: TdxBarButton;
  80. actnOptions: TAction;
  81. dxbtnCalculatePhasePay: TdxBarButton;
  82. actnSubmit: TAction;
  83. actnReply: TAction;
  84. dxbtnSubmit: TdxBarButton;
  85. dxbtnReply: TdxBarButton;
  86. dxbtnFirstLevel: TdxBarButton;
  87. dxbtnSecondLevel: TdxBarButton;
  88. dxbtnThirdLevel: TdxBarButton;
  89. dxbtnFourthLevel: TdxBarButton;
  90. dxbtnFifthLevel: TdxBarButton;
  91. dxbtnAllLevel: TdxBarButton;
  92. dxbtnAllXmj: TdxBarButton;
  93. dxbtnExportGridToExcel: TdxBarButton;
  94. dxbtnRefresh: TdxBarButton;
  95. dxbtnUnlockInfo: TdxBarButton;
  96. actnUnlockInfo: TAction;
  97. dxUser: TdxBarSubItem;
  98. pnlUser: TPanel;
  99. lblAccount: TLabel;
  100. lblCompany: TLabel;
  101. lblRole: TLabel;
  102. dxLoginCloud: TdxBarButton;
  103. dxManageAccount: TdxBarButton;
  104. pnl1: TPanel;
  105. imgUserImage: TImage;
  106. lblMail: TLabel;
  107. dxUserContainer: TdxBarControlContainerItem;
  108. dxbtnBatchAddChild: TdxBarButton;
  109. dxbtnBatchAddNext: TdxBarButton;
  110. dxbtnReorderChildrenCode: TdxBarButton;
  111. dxbtnImportBillsPrice: TdxBarButton;
  112. dxsiImportExcel: TdxBarSubItem;
  113. dxbtnImportDealBills: TdxBarButton;
  114. actnImportBillsPrice: TAction;
  115. actnImportDealBills: TAction;
  116. dxbtnBatchReplaceBillsInfo: TdxBarButton;
  117. tAutoSave: TTimer;
  118. dxsiExportExcel: TdxBarSubItem;
  119. dxbtnExportExcel: TdxBarButton;
  120. actnExportExcel: TAction;
  121. dxbtnCurPhase: TdxBarButton;
  122. dxSync: TdxBarButton;
  123. dxbtnBatchWritePos_Reason: TdxBarButton;
  124. dxbtnExportCloudTenderFile: TdxBarButton;
  125. actnExportCloudTenderFile: TAction;
  126. dxtbnImportCloudTenderFile: TdxBarButton;
  127. actnImportCloudTenderFile: TAction;
  128. dxbtnCheckAndClear: TdxBarButton;
  129. dxbtnModifyDealBills: TdxBarButton;
  130. dxbtnLocateBills: TdxBarButton;
  131. dxbtnOpenBackupFolder: TdxBarButton;
  132. dxbtnSetBookmark: TdxBarButton;
  133. dxbtnExportFxBillsExcel: TdxBarButton;
  134. actnExportFxBillsExcel: TAction;
  135. dxseBatchInsert: TdxBarSpinEdit;
  136. actnBatchInsert: TAction;
  137. dxbtnRename: TdxBarButton;
  138. dxbtnImportGclBillsToXmj: TdxBarButton;
  139. dxbtnChangeDealBillsMode: TdxBarButton;
  140. dxsiExpandTo: TdxBarSubItem;
  141. dxbtnLocateBookmark: TdxBarButton;
  142. dxbtnImportPlaneFxBillsToXmj: TdxBarButton;
  143. dxbtnAllPeg: TdxBarButton;
  144. dxsiData: TdxBarSubItem;
  145. dxbtnTenderPartition: TdxBarButton;
  146. dxbtnSetDealPayPlan: TdxBarButton;
  147. dxbtnAddDetailGLs: TdxBarButton;
  148. dxbtnCopyDetailGls: TdxBarButton;
  149. dxbtnApplyToSameBills: TdxBarButton;
  150. dxbtnCalculatePriceMargin: TdxBarButton;
  151. dxbtnFxZJJL: TdxBarButton;
  152. dxbtnGclZJJL: TdxBarButton;
  153. dxbtnInsertCol: TdxBarButton;
  154. dxbtnHidden: TdxBarButton;
  155. dxbtnCancelHidden: TdxBarButton;
  156. dxbtnImportDmf: TdxBarButton;
  157. actnImportDmf: TAction;
  158. dxbtnCanCalc: TdxBarButton;
  159. dxbtnWithoutCalcCurPay: TdxBarButton;
  160. dxbtnSignOnline: TdxBarButton;
  161. dxbtnExportTpExcel: TdxBarButton;
  162. dxbtnHelpCenter: TdxBarButton;
  163. dxbtnLocateMeasureBills: TdxBarButton;
  164. dxbtnGuest: TdxBarButton;
  165. dxbtnLocateZJJL: TdxBarButton;
  166. dxbtnEpure: TdxBarButton;
  167. dxbtnLocateCompileBills: TdxBarButton;
  168. dxbtnGclGatherZJJL: TdxBarButton;
  169. dxbtnExportSumBaseFile: TdxBarButton;
  170. actnExportSumBaseFile: TAction;
  171. dxbtnGatherSubTender: TdxBarButton;
  172. dxbtnExportTenderError: TdxBarButton;
  173. dxbtnExportAllError: TdxBarButton;
  174. dxbtnExportStgResultExcel: TdxBarButton;
  175. dxbtnExportStgResult: TdxBarButton;
  176. dxbtnImportSubTenderGather: TdxBarButton;
  177. actnImportSubTenderGather: TAction;
  178. dxbtnExportBillsJson: TdxBarButton;
  179. actnExportBillsJson: TAction;
  180. dxbtnExportBillsPosExcelData: TdxBarButton;
  181. actnExportBillsPosExcelData: TAction;
  182. dxbtnDeleteRow: TdxBarButton;
  183. dxbtnInsertRow: TdxBarButton;
  184. dxsiGatherSub: TdxBarSubItem;
  185. dxbtnGatherSubTenderGcl: TdxBarButton;
  186. dxsiImportSubTenderGather: TdxBarSubItem;
  187. dxbtnImportSubTenderGatherGcl: TdxBarButton;
  188. actnImportSubTenderGatherGcl: TAction;
  189. actnImportSubTenderGatherGclExcel: TAction;
  190. dxbtnImportSubTenderGatherExcel: TdxBarButton;
  191. dxbtnExportStdJson: TdxBarButton;
  192. ilstLarge: TImageList;
  193. ilstSmall: TImageList;
  194. ilstExpend: TImageList;
  195. dxbtnImportPhaseData: TdxBarButton;
  196. actnImportPhaseData: TAction;
  197. dxbtnRepairMainData: TdxBarButton;
  198. actnRepairMainData: TAction;
  199. dxbtnExportPosBillsExcel: TdxBarButton;
  200. actnExportPosBillsExcel: TAction;
  201. procedure FormCreate(Sender: TObject);
  202. procedure FormDestroy(Sender: TObject);
  203. procedure jtsProjectsChange(Sender: TObject; NewTab: Integer;
  204. var AllowChange: Boolean);
  205. procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  206. procedure jtsProjectsMouseDown(Sender: TObject; Button: TMouseButton;
  207. Shift: TShiftState; X, Y: Integer);
  208. procedure actnCloseProjectExecute(Sender: TObject);
  209. procedure actnCloseProjectUpdate(Sender: TObject);
  210. procedure actnNewPhaseExecute(Sender: TObject);
  211. procedure actnProjectPropertiesUpdate(Sender: TObject);
  212. procedure actnProjectPropertiesExecute(Sender: TObject);
  213. procedure actnSaveProjectExecute(Sender: TObject);
  214. procedure actnNewAuditExecute(Sender: TObject);
  215. procedure actnNewPhaseUpdate(Sender: TObject);
  216. procedure actnOptionsExecute(Sender: TObject);
  217. procedure actnImportExcelExecute(Sender: TObject);
  218. procedure actnReplyExecute(Sender: TObject);
  219. procedure actnSubmitExecute(Sender: TObject);
  220. procedure dxBarManagerShowToolbarsPopup(Sender: TdxBarManager;
  221. PopupItemLinks: TdxBarItemLinks);
  222. procedure actnSubmitUpdate(Sender: TObject);
  223. procedure actnImportExcelUpdate(Sender: TObject);
  224. procedure actnUnlockInfoUpdate(Sender: TObject);
  225. procedure actnUnlockInfoExecute(Sender: TObject);
  226. procedure dxbtnAboutClick(Sender: TObject);
  227. procedure dxLoginCloudClick(Sender: TObject);
  228. procedure dxManageAccountClick(Sender: TObject);
  229. procedure dxbtnAuthorizeDogClick(Sender: TObject);
  230. procedure actnImportBillsPriceExecute(Sender: TObject);
  231. procedure actnImportDealBillsExecute(Sender: TObject);
  232. procedure tAutoSaveTimer(Sender: TObject);
  233. procedure actnExportExcelExecute(Sender: TObject);
  234. procedure dxSyncClick(Sender: TObject);
  235. procedure actnExportCloudTenderFileExecute(Sender: TObject);
  236. procedure actnExportCloudTenderFileUpdate(Sender: TObject);
  237. procedure actnImportCloudTenderFileExecute(Sender: TObject);
  238. procedure actnImportCloudTenderFileUpdate(Sender: TObject);
  239. procedure actnExportFxBillsExcelExecute(Sender: TObject);
  240. procedure dxseBatchInsertKeyDown(Sender: TObject; var Key: Word;
  241. Shift: TShiftState);
  242. procedure actnReplyUpdate(Sender: TObject);
  243. procedure dxbtnTenderPartitionClick(Sender: TObject);
  244. procedure actnImportDmfExecute(Sender: TObject);
  245. procedure dxbtnHelpCenterClick(Sender: TObject);
  246. procedure actnExportSumBaseFileExecute(Sender: TObject);
  247. procedure dxbtnGatherSubTenderClick(Sender: TObject);
  248. procedure actnImportSubTenderGatherExecute(Sender: TObject);
  249. procedure actnImportSubTenderGatherUpdate(Sender: TObject);
  250. procedure actnExportBillsJsonExecute(Sender: TObject);
  251. procedure actnExportBillsJsonUpdate(Sender: TObject);
  252. procedure actnExportBillsPosExcelDataExecute(Sender: TObject);
  253. procedure dxbtnGatherSubTenderGclClick(Sender: TObject);
  254. procedure actnImportSubTenderGatherGclExecute(Sender: TObject);
  255. procedure actnImportSubTenderGatherGclExcelExecute(Sender: TObject);
  256. procedure actnImportPhaseDataUpdate(Sender: TObject);
  257. procedure actnImportPhaseDataExecute(Sender: TObject);
  258. procedure actnRepairMainDataUpdate(Sender: TObject);
  259. procedure actnRepairMainDataExecute(Sender: TObject);
  260. procedure actnExportPosBillsExcelExecute(Sender: TObject);
  261. private
  262. FProjectManagerFrame: TProjectManagerFrame;
  263. FProjectFrames: TList;
  264. procedure UpdateProgressBar(APosition: Integer);
  265. procedure UpdateProgressHint(const AHint: string);
  266. function CreateProjectView(ARec: TsdDataRecord): TProjectFrame;
  267. procedure LocateProjectView(AIndex: Integer);
  268. procedure DeleteProjectView(AIndex: Integer);
  269. procedure ResetProcessView(AIndex: Integer);
  270. procedure ChangeLeftSideGlobalView(AIndex: Integer);
  271. function GetCurProjectFrame: TProjectFrame;
  272. procedure OnError(ASender: TObject; AE: Exception);
  273. procedure ResetAutoSave;
  274. public
  275. procedure UpdateProgress(APos: Integer; const AHint: string);
  276. procedure LocateProject(AProjectID: Integer);
  277. function HasOpened(AProjectID: Integer): Boolean;
  278. function OpenProject(ARec: TsdDataRecord): TProjectFrame;
  279. property CurProjectFrame: TProjectFrame read GetCurProjectFrame;
  280. property ProjectManagerFrame: TProjectManagerFrame read FProjectManagerFrame;
  281. end;
  282. var
  283. MainForm: TMainForm;
  284. implementation
  285. uses
  286. ProjectProperty, ConstUnit, PHPWebDm, Math, ShellAPI,
  287. FindUserFrm, ImportExcelHintFrm, ConfigDoc, ExportExcel,
  288. ProjectCommands, BillsCompileDm, tpMainFrm,
  289. DealBillsExcelImport, ExcelImport_Bills, DetailExcelImport,
  290. stgGatherControl, stgSelectFileFrm, stgGclGatherControl, stgGclSelectFileFrm;
  291. {$R *.dfm}
  292. {$R MeasureIcons.RES}
  293. procedure TMainForm.FormCreate(Sender: TObject);
  294. procedure CreateProjectManagerFrame;
  295. begin
  296. FProjectManagerFrame := TProjectManagerFrame.Create(nil);
  297. AlignControl(FProjectManagerFrame, jpsMainProjectsManager, alClient);
  298. end;
  299. procedure SetHintFont;
  300. begin
  301. if G_IsCloud then
  302. begin
  303. Screen.HintFont.Size := 11;
  304. Screen.HintFont.Name := 'Microsoft YaHei';
  305. end
  306. else
  307. begin
  308. Screen.HintFont.Name := 'SmartSimSun';
  309. Screen.HintFont.Size := 9;
  310. end;
  311. end;
  312. function GetSoftName: string;
  313. begin
  314. if _ModuleType = mtCompile then
  315. Result := '纵横公路工程0号台账软件'
  316. else if _ModuleType = mtAll then
  317. Result := '纵横公路工程结算决算计量一体化软件';
  318. end;
  319. function GetVersionName: string;
  320. begin
  321. Result := '';
  322. if _IsGuangDong then
  323. Result := Result + '广东';
  324. if _ModuleType = mtAll then
  325. begin
  326. if _IsDebugView then
  327. Result := 'Debug'
  328. else if G_IsTest then
  329. Result := '测试'
  330. else if G_IsCloud then
  331. Result := Result + '云'
  332. else if _IsEncrypt then
  333. Result := Result + '专业'
  334. else
  335. Result := Result + '学习';
  336. end;
  337. if Result <> '' then
  338. Result := Result + '版';
  339. end;
  340. procedure InitialForVersions;
  341. var
  342. sPic: string;
  343. begin
  344. if G_IsCloud then
  345. begin
  346. dxbtnNewProject.Visible := ivNever;
  347. dxbtnNewSubProject.Visible := ivNever;
  348. dxbtnReceiveProject.Visible := ivNever;
  349. dxbtnNewPhase.Visible := ivNever;
  350. dxUser.Visible := ivAlways;
  351. dxUser.Caption := PHPWeb.RealName;
  352. lblAccount.Caption := PHPWeb.RealName;
  353. lblMail.Caption := Format('(%s)', [PHPWeb.Account]);
  354. if Trim(PHPWeb.Company) <> '' then
  355. lblCompany.Caption := PHPWeb.Company
  356. else
  357. lblCompany.Caption := '我的单位';
  358. if Trim(PHPWeb.Role) <> '' then
  359. lblRole.Caption := PHPWeb.Role
  360. else
  361. lblRole.Caption := '我的职称';
  362. // 每次登录都下载到本地,再从本地读入显示。以保证图片实时更新。
  363. sPic := PHPWeb.UserPath + '0_' + IntToStr(PHPWeb.UserID) + '.jpg';
  364. if PHPWeb.DownFile(PHPWeb.UserImageURL, sPic) then
  365. if FileExists(sPic) then
  366. imgUserImage.Picture.LoadFromFile(sPic);
  367. end
  368. else
  369. begin
  370. dxUser.Visible := ivNever;
  371. dxbtnReceiveProject.Visible := ivAlways;
  372. end;
  373. MainForm.Caption := GetSoftName + GetVersionName;
  374. end;
  375. begin
  376. CreateProjectManagerFrame;
  377. FProjectFrames := TList.Create;
  378. InitialForVersions;
  379. SetHintFont;
  380. ResetAutoSave;
  381. end;
  382. procedure TMainForm.UpdateProgress(APos: Integer; const AHint: string);
  383. begin
  384. UpdateProgressBar(APos);
  385. UpdateProgressHint(AHint);
  386. Application.ProcessMessages;
  387. end;
  388. procedure TMainForm.UpdateProgressBar(APosition: Integer);
  389. begin
  390. if APosition < ProgressBar.Max then
  391. ProgressBar.Position := APosition
  392. else
  393. ProgressBar.Position := ProgressBar.Min;
  394. end;
  395. procedure TMainForm.UpdateProgressHint(const AHint: string);
  396. begin
  397. dxStatusBar.Panels[0].Text := AHint;
  398. end;
  399. procedure TMainForm.FormDestroy(Sender: TObject);
  400. begin
  401. ClearObjects(FProjectFrames);
  402. FProjectFrames.Free;
  403. FProjectManagerFrame.Free;
  404. if DirectoryExists(GetAppTempPath) then
  405. DeleteFileOrFolder(GetAppTempPath);
  406. end;
  407. function TMainForm.OpenProject(ARec: TsdDataRecord): TProjectFrame;
  408. begin
  409. if not HasOpened(ARec.ValueByName('ID').AsInteger) then
  410. Result := CreateProjectView(ARec)
  411. else
  412. begin
  413. LocateProject(ARec.ValueByName('ID').AsInteger);
  414. Result := CurProjectFrame;
  415. end;
  416. end;
  417. function TMainForm.HasOpened(AProjectID: Integer): Boolean;
  418. begin
  419. Result := OpenProjectManager.ProjectIndex(AProjectID) <> -1;
  420. end;
  421. procedure TMainForm.LocateProject(AProjectID: Integer);
  422. begin
  423. jtsProjects.TabIndex := OpenProjectManager.ProjectIndex(AProjectID) + 1;
  424. if jpsMain.ActivePage <> jpsMainProjects then
  425. jpsMain.ActivePage := jpsMainProjects;
  426. end;
  427. function TMainForm.CreateProjectView(ARec: TsdDataRecord): TProjectFrame;
  428. function CreateNewProjectPage: TJimPage;
  429. begin
  430. Result := TJimPage.Create(jpsProjects);
  431. Result.Pages := jpsProjects;
  432. jpsProjects.ActivePage := Result;
  433. end;
  434. function CreateNewProjectTab(const ATabName: string; APage: TJimPage): Integer;
  435. begin
  436. Result := jtsProjects.Tabs.AddObject(ATabName, APage);
  437. jtsProjects.TabIndex := Result;
  438. end;
  439. function CreateProjectFrame(AProjectData: TProjectData; APage: TJimPage): TProjectFrame;
  440. var
  441. ProjectFrame: TProjectFrame;
  442. begin
  443. //AProjectData.IsGuest := FProjectManagerFrame.IsGuest;
  444. ProjectFrame := TProjectFrame.Create(AProjectData);
  445. FProjectFrames.Add(ProjectFrame);
  446. ProjectFrame.Parent := APage;
  447. ProjectFrame.Align := alClient;
  448. Result := ProjectFrame;
  449. end;
  450. var
  451. jimPage: TJimPage;
  452. begin
  453. jpsMain.ActivePage := jpsMainProjects;
  454. jimPage := CreateNewProjectPage;
  455. CreateNewProjectTab(ARec.ValueByName('Name').AsString, jimPage);
  456. Result := CreateProjectFrame(OpenProjectManager.Open(ARec), jimPage);
  457. ProjectManager.AddOpenTenderBackup(ARec.ValueByName('ID').AsInteger);
  458. end;
  459. procedure TMainForm.jtsProjectsChange(Sender: TObject; NewTab: Integer;
  460. var AllowChange: Boolean);
  461. begin
  462. LocateProjectView(NewTab - 1);
  463. ResetProcessView(NewTab);
  464. end;
  465. procedure TMainForm.LocateProjectView(AIndex: Integer);
  466. begin
  467. if AIndex >= 0 then
  468. begin
  469. jpsMain.ActivePage := jpsMainProjects;
  470. jpsProjects.ActivePage := TJimPage(jtsProjects.Tabs.Objects[AIndex + 1]);
  471. OpenProjectManager.CurProjectIndex := AIndex;
  472. ChangeLeftSideGlobalView(AIndex);
  473. end
  474. else
  475. jpsMain.ActivePage := jpsMainProjectsManager;
  476. end;
  477. procedure TMainForm.ChangeLeftSideGlobalView(AIndex: Integer);
  478. begin
  479. if (AIndex >= 0) and (AIndex < FProjectFrames.Count) then
  480. TProjectFrame(FProjectFrames[AIndex]).ResetAssistantView;
  481. end;
  482. procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  483. begin
  484. try
  485. OpenProjectManager.SaveAll;
  486. except
  487. end;
  488. end;
  489. procedure TMainForm.jtsProjectsMouseDown(Sender: TObject;
  490. Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  491. begin
  492. if (Button = mbRight) and (jtsProjects.TabIndex > 0) then
  493. dxpmTabSet.PopupFromCursorPos;
  494. end;
  495. procedure TMainForm.actnCloseProjectExecute(Sender: TObject);
  496. begin
  497. OpenProjectManager.CurProjectData.SaveAndCheck;
  498. DeleteProjectView(jtsProjects.TabIndex - 1);
  499. LocateProjectView(jtsProjects.TabIndex - 1);
  500. ResetProcessView(jtsProjects.TabIndex);
  501. end;
  502. procedure TMainForm.actnCloseProjectUpdate(Sender: TObject);
  503. begin
  504. TAction(Sender).Enabled := jtsProjects.Tabs.Count > 1;
  505. end;
  506. procedure TMainForm.DeleteProjectView(AIndex: Integer);
  507. begin
  508. TProjectFrame(FProjectFrames[AIndex]).Free;
  509. FProjectFrames.Delete(AIndex);
  510. OpenProjectManager.Delete(AIndex);
  511. jpsProjects.Pages.Delete(AIndex);
  512. jtsProjects.Tabs.Delete(AIndex + 1);
  513. end;
  514. procedure TMainForm.actnNewPhaseExecute(Sender: TObject);
  515. begin
  516. TProjectFrame(FProjectFrames[jtsProjects.TabIndex - 1]).CreateNewPhase;
  517. end;
  518. procedure TMainForm.actnProjectPropertiesUpdate(Sender: TObject);
  519. begin
  520. TAction(Sender).Enabled := jtsProjects.TabIndex > 0;
  521. end;
  522. procedure TMainForm.actnProjectPropertiesExecute(Sender: TObject);
  523. begin
  524. ModifyProjectProperties(TProjectFrame(FProjectFrames[jtsProjects.TabIndex - 1]));
  525. end;
  526. procedure TMainForm.actnSaveProjectExecute(Sender: TObject);
  527. begin
  528. OpenProjectManager.CurProjectData.SaveAndCheck;
  529. end;
  530. procedure TMainForm.actnNewAuditExecute(Sender: TObject);
  531. begin
  532. TProjectFrame(FProjectFrames[jtsProjects.TabIndex - 1]).CreateNewAudit;
  533. end;
  534. procedure TMainForm.actnNewPhaseUpdate(Sender: TObject);
  535. begin
  536. TAction(Sender).Enabled := (jtsProjects.Tabs.Count > 1) and Assigned(CurProjectFrame);
  537. if TAction(Sender).Enabled then
  538. with CurProjectFrame.ProjectData do
  539. TAction(Sender).Enabled := TAction(Sender).Enabled and (ProjProperties.AuditStatus = -1);
  540. end;
  541. function TMainForm.GetCurProjectFrame: TProjectFrame;
  542. begin
  543. if jtsProjects.TabIndex > 0 then
  544. Result := TProjectFrame(FProjectFrames[jtsProjects.TabIndex - 1])
  545. else
  546. Result := nil;
  547. end;
  548. procedure TMainForm.actnOptionsExecute(Sender: TObject);
  549. begin
  550. ModifiedOptions;
  551. ResetAutoSave;
  552. end;
  553. procedure TMainForm.actnImportExcelExecute(Sender: TObject);
  554. var
  555. sFileName: string;
  556. Importor: Tdei_CustomBills;
  557. bWithLevelCode, bWithoutGclBills: Boolean;
  558. begin
  559. if HintAndImportTypeSelect(bWithLevelCode, bWithoutGclBills) then
  560. begin
  561. if SelectExcelFile(sFileName) then
  562. begin
  563. Importor := Tdei_CustomBills.Create(CurProjectFrame.ProjectData);
  564. try
  565. Importor.ImportFile(sFileName, bWithLevelCode, bWithoutGclBills);
  566. finally
  567. Importor.Free;
  568. end;
  569. end;
  570. end;
  571. end;
  572. procedure TMainForm.ResetProcessView(AIndex: Integer);
  573. begin
  574. dxBarManager.Bars[2].Visible := AIndex > 0;
  575. if G_IsCloud then
  576. dxBarManager.Bars[2].Visible := False;
  577. end;
  578. procedure TMainForm.actnReplyExecute(Sender: TObject); // 批复
  579. begin
  580. if not CurProjectFrame.CheckCanReport then Exit;
  581. Screen.Cursor := crHourGlass;
  582. try
  583. CurProjectFrame.ProjectData.SaveAndCheck;
  584. {$O-}
  585. // 失败后重复一次
  586. if not CurProjectFrame.ProjectData.ReplyProject then
  587. begin
  588. if not CurProjectFrame.ProjectData.ReplyProject then
  589. ErrorMessage('批复项目失败!');
  590. end;
  591. {$O+}
  592. finally
  593. Screen.Cursor := crDefault;
  594. end;
  595. end;
  596. procedure TMainForm.actnSubmitExecute(Sender: TObject); // 上报
  597. begin
  598. if not CurProjectFrame.CheckCanReport then Exit;
  599. Screen.Cursor := crHourGlass;
  600. try
  601. CurProjectFrame.ProjectData.SaveAndCheck;
  602. {$O-}
  603. // 失败后重复一次
  604. if not CurProjectFrame.ProjectData.SubmitProject then
  605. begin
  606. if not CurProjectFrame.ProjectData.SubmitProject then
  607. ErrorMessage('上报项目失败!');
  608. end;
  609. {$O+}
  610. finally
  611. Screen.Cursor := crDefault;
  612. end;
  613. end;
  614. procedure TMainForm.dxBarManagerShowToolbarsPopup(Sender: TdxBarManager;
  615. PopupItemLinks: TdxBarItemLinks);
  616. begin
  617. // 取消菜单栏右键菜单
  618. PopupItemLinks.Clear;
  619. end;
  620. procedure TMainForm.actnSubmitUpdate(Sender: TObject);
  621. begin
  622. with CurProjectFrame.ProjectData do
  623. TAction(Sender).Enabled := (ProjProperties.PhaseCount > 0) and
  624. ((ProjProperties.AuditStatus >= 0) and (ProjProperties.AuditStatus < iMaxStageCount-1));
  625. end;
  626. procedure TMainForm.actnImportExcelUpdate(Sender: TObject);
  627. begin
  628. TAction(Sender).Enabled := (jtsProjects.Tabs.Count > 1) and Assigned(CurProjectFrame);
  629. if TAction(Sender).Enabled then
  630. with CurProjectFrame.ProjectData do
  631. TAction(Sender).Enabled := TAction(Sender).Enabled and (PhaseIndex < 1);
  632. end;
  633. procedure TMainForm.actnUnlockInfoUpdate(Sender: TObject);
  634. begin
  635. TAction(Sender).Enabled := (jtsProjects.Tabs.Count > 1) and Assigned(CurProjectFrame);
  636. end;
  637. procedure TMainForm.actnUnlockInfoExecute(Sender: TObject);
  638. begin
  639. CurProjectFrame.UnLockData;
  640. end;
  641. procedure TMainForm.dxbtnAboutClick(Sender: TObject);
  642. begin
  643. ShowAboutForm;
  644. end;
  645. procedure TMainForm.dxLoginCloudClick(Sender: TObject);
  646. begin
  647. ShellExecute(Application.Handle, nil, PChar(PHPWeb.LoginCloudURL), nil, nil, SW_SHOWNORMAL);
  648. end;
  649. procedure TMainForm.dxManageAccountClick(Sender: TObject);
  650. begin
  651. ShellExecute(Application.Handle, nil, PChar(PHPWeb.PassportURL), nil, nil, SW_SHOWNORMAL);
  652. end;
  653. procedure TMainForm.dxbtnAuthorizeDogClick(Sender: TObject);
  654. begin
  655. Authorize;
  656. end;
  657. procedure TMainForm.actnImportBillsPriceExecute(Sender: TObject);
  658. var
  659. sFileName: string;
  660. Importor: TBillsPriceExcelImport;
  661. begin
  662. if SelectExcelFile(sFileName) then
  663. begin
  664. Importor := TBillsPriceExcelImport.Create(CurProjectFrame.ProjectData);
  665. try
  666. Importor.ImportFile(sFileName);
  667. finally
  668. Importor.Free;
  669. end;
  670. end;
  671. end;
  672. procedure TMainForm.actnImportDealBillsExecute(Sender: TObject);
  673. var
  674. sFileName: string;
  675. Importor: TDealBillsExcelImport;
  676. begin
  677. if SelectExcelFile(sFileName) then
  678. begin
  679. Importor := TDealBillsExcelImport.Create(CurProjectFrame.ProjectData);
  680. try
  681. Importor.ImportFile(sFileName);
  682. finally
  683. Importor.Free;
  684. end;
  685. end;
  686. end;
  687. procedure TMainForm.tAutoSaveTimer(Sender: TObject);
  688. begin
  689. Screen.Cursor := crHourGlass;
  690. try
  691. OpenProjectManager.SaveAll;
  692. finally
  693. screen.Cursor := crDefault;
  694. end;
  695. end;
  696. procedure TMainForm.ResetAutoSave;
  697. begin
  698. with SupportManager.ConfigInfo do
  699. begin
  700. tAutoSave.Interval := AutoSaveInterval * 60 * 1000;
  701. tAutoSave.Enabled := AutoSave;
  702. end;
  703. end;
  704. procedure TMainForm.actnExportExcelExecute(Sender: TObject);
  705. var
  706. sFileName: string;
  707. Exportor: TIDTreeExcelExportor;
  708. begin
  709. if SaveExcelFile(sFileName) then
  710. begin
  711. Exportor := TIDTreeExcelExportor.Create;
  712. try
  713. if SupportManager.ConfigInfo.ExcelWithMis then
  714. Exportor.DefineCol(@ciLedgerWithMis, Length(ciLedgerWithMis))
  715. else
  716. Exportor.DefineCol(@ciLedger, Length(ciLedger));
  717. Exportor.HasLevelCode := True;
  718. Exportor.ExportToFile(CurProjectFrame.ProjectData.BillsCompileData.BillsCompileTree, sFileName);
  719. finally
  720. Exportor.Free;
  721. end;
  722. end;
  723. end;
  724. procedure TMainForm.dxSyncClick(Sender: TObject);
  725. begin
  726. Screen.Cursor := crHourGlass;
  727. try
  728. FProjectManagerFrame.DoBatchReceiveAllOnline;
  729. finally
  730. Screen.Cursor := crDefault;
  731. end;
  732. end;
  733. procedure TMainForm.actnExportCloudTenderFileExecute(Sender: TObject);
  734. var
  735. sFileName: string;
  736. Exportor: TTenderExport;
  737. Rec: TsdDataRecord;
  738. begin
  739. // 导出前先保存
  740. CurProjectFrame.ProjectData.SaveAndCheck;
  741. // 导出云版专用
  742. sFileName := SupportManager.ConfigInfo.OutputPath + CurProjectFrame.ProjectData.ProjectName + '.ctf';
  743. if SaveFile(sFileName, '.ctf') then
  744. begin
  745. if FileExists(sFileName) and not QuestMessage(Format('存在同名文件“%s”,是否替换?', [ExtractFileName(sFileName)])) then
  746. Exit;
  747. Screen.Cursor := crHourGlass;
  748. try
  749. Rec := ProjectManagerFrame.Rec(CurProjectFrame.ProjectData.ProjectID);
  750. Exportor := TTenderExport.Create(Rec, sFileName);
  751. try
  752. Exportor.Execute;
  753. finally
  754. Exportor.Free;
  755. end;
  756. finally
  757. Screen.Cursor := crDefault;
  758. end;
  759. end;
  760. end;
  761. procedure TMainForm.actnExportCloudTenderFileUpdate(Sender: TObject);
  762. begin
  763. // 仅打开的项目可以导出云版专用格式,且该项目没有进行计量
  764. TAction(Sender).Enabled := (jtsProjects.Tabs.Count > 1) and Assigned(CurProjectFrame);
  765. if TAction(Sender).Enabled then
  766. TAction(Sender).Enabled := CurProjectFrame.ProjectData.ProjProperties.PhaseCount = 0;
  767. end;
  768. procedure TMainForm.actnImportCloudTenderFileExecute(Sender: TObject);
  769. var
  770. sFileName: string;
  771. begin
  772. if SelectFile(sFileName, '.ctf') then
  773. begin
  774. CurProjectFrame.ProjectData.ImportCloudTenderFile(sFileName);
  775. CurProjectFrame.RefreshColumnDisplay;
  776. end;
  777. end;
  778. procedure TMainForm.actnImportCloudTenderFileUpdate(Sender: TObject);
  779. begin
  780. TAction(Sender).Enabled := (jtsProjects.Tabs.Count > 1) and Assigned(CurProjectFrame);
  781. if TAction(Sender).Enabled then
  782. TAction(Sender).Enabled := CurProjectFrame.ProjectData.ProjProperties.PhaseCount = 0;
  783. end;
  784. procedure TMainForm.actnExportFxBillsExcelExecute(Sender: TObject);
  785. var
  786. sFileName: string;
  787. Exportor: TIDTreeExcelExportor;
  788. begin
  789. if SaveExcelFile(sFileName) then
  790. begin
  791. Exportor := TIDTreeExcelExportor.Create;
  792. try
  793. if SupportManager.ConfigInfo.ExcelWithMis then
  794. Exportor.DefineCol(@ciFxBillsWithMis, Length(ciFxBillsWithMis))
  795. else
  796. Exportor.DefineCol(@ciFxBills, Length(ciFxBills));
  797. Exportor.ExportToFile(CurProjectFrame.ProjectData.BillsCompileData.BillsCompileTree, sFileName);
  798. finally
  799. Exportor.Free;
  800. end;
  801. end;
  802. end;
  803. procedure TMainForm.dxseBatchInsertKeyDown(Sender: TObject; var Key: Word;
  804. Shift: TShiftState);
  805. var
  806. i: Integer;
  807. begin
  808. if Key = 13 then
  809. begin
  810. for i := 1 to dxseBatchInsert.IntValue do
  811. ZjDbaInsert.ExecuteTarget(CurProjectFrame.BillsCompileFrame.zgBillsCompile);
  812. end;
  813. end;
  814. procedure TMainForm.actnReplyUpdate(Sender: TObject);
  815. begin
  816. with CurProjectFrame.ProjectData do
  817. TAction(Sender).Enabled := (ProjProperties.PhaseCount > 0);
  818. end;
  819. procedure TMainForm.dxbtnTenderPartitionClick(Sender: TObject);
  820. begin
  821. PartTendersModel;
  822. end;
  823. procedure TMainForm.actnImportDmfExecute(Sender: TObject);
  824. var
  825. sFileName: string;
  826. begin
  827. if SelectFile(sFileName, '.dmf') then
  828. CurProjectFrame.ProjectData.ImportDmfFile(sFileName);
  829. end;
  830. procedure TMainForm.dxbtnHelpCenterClick(Sender: TObject);
  831. const
  832. sHelpUrl = 'http://help.smartcost.com.cn/hc/';
  833. begin
  834. ShellExecute(Application.Handle, nil, PChar(sHelpUrl), nil, nil, SW_SHOWNORMAL);
  835. end;
  836. procedure TMainForm.OnError(ASender: TObject; AE: Exception);
  837. begin
  838. MeasureLog.AppendLogTo(AE.Message);
  839. end;
  840. procedure TMainForm.actnExportSumBaseFileExecute(Sender: TObject);
  841. var
  842. sFileName: string;
  843. Exportor: TTenderExport;
  844. Rec: TsdDataRecord;
  845. begin
  846. // 导出前先保存
  847. CurProjectFrame.ProjectData.SaveAndCheck;
  848. // 导出云版专用
  849. sFileName := SupportManager.ConfigInfo.OutputPath + CurProjectFrame.ProjectData.ProjectName + '.sbf';
  850. if SaveFile(sFileName, '.sbf') then
  851. begin
  852. if FileExists(sFileName) and not QuestMessage(Format('存在同名文件“%s”,是否替换?', [ExtractFileName(sFileName)])) then
  853. Exit;
  854. Screen.Cursor := crHourGlass;
  855. try
  856. Rec := ProjectManagerFrame.Rec(CurProjectFrame.ProjectData.ProjectID);
  857. Exportor := TTenderExport.Create(Rec, sFileName);
  858. try
  859. Exportor.Execute;
  860. finally
  861. Exportor.Free;
  862. end;
  863. finally
  864. Screen.Cursor := crDefault;
  865. end;
  866. end;
  867. end;
  868. procedure TMainForm.dxbtnGatherSubTenderClick(Sender: TObject);
  869. var
  870. gc: TstgGatherControl;
  871. begin
  872. gc := TstgGatherControl.Create;
  873. Screen.Cursor := crHourGlass;
  874. try
  875. if SelectFileForSubTenderGather(gc) then
  876. gc.Gather;
  877. finally
  878. gc.Free;
  879. Screen.Cursor := crDefault;
  880. end;
  881. end;
  882. procedure TMainForm.actnImportSubTenderGatherExecute(Sender: TObject);
  883. var
  884. sFileName: string;
  885. begin
  886. if CurProjectFrame.ProjectData.ProjProperties.PhaseCount = 0 then
  887. WarningMessage('未开始计量,请在开始计量后再导入分包汇总数据。')
  888. else if CurProjectFrame.ProjectData.StageDataReadOnly then
  889. WarningMessage('当前正在查看数据非最新数据,请切换至最新一期再导入分包汇总数据。')
  890. else if QuestMessage('导入将清空标段本期所有计量数据(合同计量),确定继续?') and SelectFile(sFileName, '.sgf') then
  891. CurProjectFrame.ProjectData.ImportSubTenderGather(sFileName);
  892. end;
  893. procedure TMainForm.actnImportSubTenderGatherUpdate(Sender: TObject);
  894. begin
  895. TAction(Sender).Enabled := (jtsProjects.Tabs.Count > 1) and Assigned(CurProjectFrame)
  896. and (CurProjectFrame.ProjectData.PhaseData.StageCount <= 1);
  897. end;
  898. procedure TMainForm.actnExportBillsJsonExecute(Sender: TObject);
  899. var
  900. sFileName: string;
  901. begin
  902. if SaveFile(sFileName, '.json') then
  903. CurProjectFrame.ProjectData.BillsCompileData.RecursiveExportBillsJson(sFileName);
  904. end;
  905. procedure TMainForm.actnExportBillsJsonUpdate(Sender: TObject);
  906. begin
  907. TAction(Sender).Visible := True;//_IsDebugView;
  908. TAction(Sender).Enabled := jtsProjects.Tabs.Count > 1;
  909. end;
  910. procedure TMainForm.actnExportBillsPosExcelDataExecute(Sender: TObject);
  911. var
  912. sFileName: string;
  913. Exportor: TBillsPosExcelExportor;
  914. begin
  915. if SaveExcelFile(sFileName) then
  916. begin
  917. Exportor := TBillsPosExcelExportor.Create;
  918. try
  919. Exportor.ExportToFile(CurProjectFrame.ProjectData.BillsCompileData.BillsCompileTree, sFileName);
  920. finally
  921. Exportor.Free;
  922. end;
  923. end;
  924. end;
  925. procedure TMainForm.dxbtnGatherSubTenderGclClick(Sender: TObject);
  926. var
  927. gc: TstgGclGatherControl;
  928. begin
  929. gc := TstgGclGatherControl.Create;
  930. Screen.Cursor := crHourGlass;
  931. try
  932. if SelectFileForSubTenderGclGather(gc) then
  933. gc.Gather;
  934. finally
  935. gc.Free;
  936. Screen.Cursor := crDefault;
  937. end;
  938. end;
  939. procedure TMainForm.actnImportSubTenderGatherGclExecute(Sender: TObject);
  940. var
  941. sFileName: string;
  942. begin
  943. if CurProjectFrame.ProjectData.ProjProperties.PhaseCount = 0 then
  944. WarningMessage('未开始计量,请在开始计量后再导入分包汇总数据。')
  945. else if CurProjectFrame.ProjectData.StageDataReadOnly then
  946. WarningMessage('当前正在查看数据非最新数据,请切换至最新一期再导入分包汇总数据。')
  947. else if QuestMessage('导入将清空标段本期所有计量数据(合同计量),确定继续?') and SelectFile(sFileName, '.sgfg') then
  948. CurProjectFrame.ProjectData.ImportSubTenderGatherGcl(sFileName);
  949. end;
  950. procedure TMainForm.actnImportSubTenderGatherGclExcelExecute(
  951. Sender: TObject);
  952. var
  953. sFileName: string;
  954. begin
  955. if CurProjectFrame.ProjectData.ProjProperties.PhaseCount = 0 then
  956. WarningMessage('未开始计量,请在开始计量后再导入分包汇总数据。')
  957. else if CurProjectFrame.ProjectData.StageDataReadOnly then
  958. WarningMessage('当前正在查看数据非最新数据,请切换至最新一期再导入分包汇总数据。')
  959. else if QuestMessage('导入将清空标段本期所有计量数据(合同计量),确定继续?') and SelectExcelFile(sFileName) then
  960. CurProjectFrame.ProjectData.ImportSubTenderGatherGclExcel(sFileName);
  961. end;
  962. procedure TMainForm.actnImportPhaseDataUpdate(Sender: TObject);
  963. begin
  964. TAction(Sender).Visible := _IsDebugView;
  965. end;
  966. procedure TMainForm.actnImportPhaseDataExecute(Sender: TObject);
  967. var
  968. sFileName: string;
  969. begin
  970. if QuestMessage('导入计量数据,请确认前后标段一致,并在新增清单前导入,对于本期新增清单,导入数据可能有误,导入后请检查。') and SelectFile(sFileName, 'mtf') then
  971. CurProjectFrame.ProjectData.ImportPhaseData(sFileName);
  972. end;
  973. procedure TMainForm.actnRepairMainDataUpdate(Sender: TObject);
  974. begin
  975. TAction(Sender).Visible := _IsDebugView and Assigned(CurProjectFrame);
  976. end;
  977. procedure TMainForm.actnRepairMainDataExecute(Sender: TObject);
  978. begin
  979. CurProjectFrame.ProjectData.repairMainData;
  980. end;
  981. procedure TMainForm.actnExportPosBillsExcelExecute(Sender: TObject);
  982. var
  983. sFileName: string;
  984. Exportor: TPosBillsExcelExportor;
  985. begin
  986. if SaveExcelFile(sFileName) then
  987. begin
  988. Exportor := TPosBillsExcelExportor.Create;
  989. try
  990. Exportor.ExportToFile(CurProjectFrame.ProjectData.BillsCompileData.BillsCompileTree, sFileName);
  991. finally
  992. Exportor.Free;
  993. end;
  994. end;
  995. end;
  996. end.