VDSS020MF.cpp 60 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #include "ITSSkinF.h"
  4. #include "ITSUtilF.h"
  5. #include "ITSDbF.h"
  6. #include "AppGlobalF.h"
  7. #include "ITSLangTransF.h"
  8. #include "ITS_OPLibF.h"
  9. #pragma hdrstop
  10. #include "VDSS020MF.h"
  11. //---------------------------------------------------------------------------
  12. #pragma package(smart_init)
  13. #pragma link "cxButtons"
  14. #pragma link "cxClasses"
  15. #pragma link "cxContainer"
  16. #pragma link "cxControls"
  17. #pragma link "cxCustomData"
  18. #pragma link "cxData"
  19. #pragma link "cxDataStorage"
  20. #pragma link "cxDBData"
  21. #pragma link "cxEdit"
  22. #pragma link "cxFilter"
  23. #pragma link "cxGraphics"
  24. #pragma link "cxGrid"
  25. #pragma link "cxGridBandedTableView"
  26. #pragma link "cxGridCustomTableView"
  27. #pragma link "cxGridCustomView"
  28. #pragma link "cxGridDBBandedTableView"
  29. #pragma link "cxGridLevel"
  30. #pragma link "cxGridTableView"
  31. #pragma link "cxLabel"
  32. #pragma link "cxLookAndFeelPainters"
  33. #pragma link "cxLookAndFeels"
  34. #pragma link "cxPC"
  35. #pragma link "cxPCdxBarPopupMenu"
  36. #pragma link "cxSpinEdit"
  37. #pragma link "cxSplitter"
  38. #pragma link "cxStyles"
  39. #pragma link "cxTextEdit"
  40. #pragma link "dxSkinBlack"
  41. #pragma link "dxSkinBlue"
  42. #pragma link "dxSkinsCore"
  43. #pragma link "dxSkinscxPCPainter"
  44. #pragma link "cxCheckBox"
  45. #pragma link "dxSkinMcSkin"
  46. #pragma resource "*.dfm"
  47. TVDSS020M *VDSS020M = NULL;
  48. //---------------------------------------------------------------------------
  49. __fastcall TVDSS020M::TVDSS020M(TComponent* Owner)
  50. : TForm(Owner)
  51. {
  52. LangTrans->Translate(this, ITSDb_GetConnection());
  53. ITSSkin_Load(this);
  54. LoadLocalSkin();
  55. CMM_LoadForm(g_sFormsDir, this);
  56. FTitle = Caption;//"VDS-검지기 교통량 통계";
  57. LoadConfig();
  58. m_sLinkLevel = "1";
  59. MyItsAtrdManager = new TItsAtrdManager();
  60. //MyItsAtrdManager->LoadFromDb();
  61. //MyItsAtrdManager->LoadAtrdLength();
  62. }
  63. //---------------------------------------------------------------------------
  64. void __fastcall TVDSS020M::LoadConfig()
  65. {
  66. m_sFooterRight = "";//GetConfigValue("APPLICATION", "REPORTRIGHT", "");
  67. }
  68. //---------------------------------------------------------------------------
  69. void __fastcall TVDSS020M::LoadLocalSkin()
  70. {
  71. /*
  72. * 스킨 변경
  73. */
  74. PgQuery->ParentColor = true;
  75. TsDay->ParentColor = true;
  76. TsMon->ParentColor = true;
  77. TsYear->ParentColor = true;
  78. }
  79. //---------------------------------------------------------------------------
  80. void __fastcall TVDSS020M::FormCreate(TObject *Sender)
  81. {
  82. for (int ii = 0; ii < MAX_CHART; ii++)
  83. {
  84. m_pFrmChart[ii] = new TPlugInChart(this);
  85. switch(ii)
  86. {
  87. case 0:
  88. m_pFrmChart[ii]->Parent = PnlDayGraph;
  89. m_pFrmChart[ii]->SetChartInfo("", "시간", "교통량");
  90. break;
  91. case 1:
  92. m_pFrmChart[ii]->Parent = PnlMonGraph;
  93. m_pFrmChart[ii]->SetChartInfo("", "일", "교통량");
  94. break;
  95. case 2:
  96. m_pFrmChart[ii]->Parent = PnlYearGraph;
  97. m_pFrmChart[ii]->SetChartInfo("", "월", "교통량");
  98. break;
  99. }
  100. m_pFrmChart[ii]->Show();
  101. }
  102. PgList->HideTabs = true;
  103. }
  104. //---------------------------------------------------------------------------
  105. void __fastcall TVDSS020M::FormShow(TObject *Sender)
  106. {
  107. PgList->ActivePageIndex = 0;
  108. PgQuery->ActivePageIndex= 0;
  109. //DMMain->InsertListHeaderMenuItem(CxDay, (TcxGridDBTableView*)TvDay);
  110. // form 초기화
  111. FormInit();
  112. }
  113. //---------------------------------------------------------------------------
  114. void __fastcall TVDSS020M::FormInit()
  115. {
  116. DtDay->Date = IncHour(Now(), -24);
  117. DtMon->Date = StartOfTheMonth(IncHour(Now(), -24*30));
  118. DtYear->Date = IncHour(Now(), -24);
  119. DtStTime->Time = StrToDateTime("00:00");
  120. DtEdTime->Time = StrToDateTime("23:59");
  121. ADOD->Connection = ITSDb_GetConnection();
  122. ADOM->Connection = ITSDb_GetConnection();
  123. ADOY->Connection = ITSDb_GetConnection();
  124. TvDay->DataController->DataSource = DSD;
  125. TvMon->DataController->DataSource = DSM;
  126. TvYear->DataController->DataSource = DSY;
  127. //FillStatComboBox(CbStatCfg, "IST0810M");
  128. }
  129. //---------------------------------------------------------------------------
  130. void __fastcall TVDSS020M::CommClose()
  131. {
  132. try
  133. {
  134. CMM_SaveForm(g_sFormsDir, this);
  135. //DeleteStatComboBox(CbStatCfg);
  136. TvDay->BeginUpdate();
  137. ADOD->Close();
  138. TvDay->EndUpdate();
  139. TvMon->BeginUpdate();
  140. ADOM->Close();
  141. TvMon->EndUpdate();
  142. TvYear->BeginUpdate();
  143. ADOY->Close();
  144. TvYear->EndUpdate();
  145. if (MyItsAtrdManager)
  146. {
  147. delete MyItsAtrdManager;
  148. MyItsAtrdManager = NULL;
  149. }
  150. }
  151. catch(...)
  152. {
  153. }
  154. }
  155. //---------------------------------------------------------------------------
  156. void __fastcall TVDSS020M::TmrRefreshTimer(TObject *Sender)
  157. {
  158. TmrRefresh->Enabled = false;
  159. }
  160. //---------------------------------------------------------------------------
  161. void __fastcall TVDSS020M::PgQueryChange(TObject *Sender)
  162. {
  163. //Tab Change
  164. PgList->ActivePageIndex = PgQuery->ActivePageIndex;
  165. switch(PgQuery->ActivePageIndex)
  166. {
  167. case 0: DtDay->SetFocus(); break;
  168. case 1: DtMon->SetFocus(); break;
  169. case 2: DtYear->SetFocus(); break;
  170. default: break;
  171. }
  172. }
  173. //---------------------------------------------------------------------------
  174. void __fastcall TVDSS020M::BtnGraphClick(TObject *Sender)
  175. {
  176. // 차트를 다른 창에서 보여줘야 할 경우 Frm1121100_1F.cpp 내 소스 참조
  177. }
  178. //---------------------------------------------------------------------------
  179. void __fastcall TVDSS020M::BtnPrintClick(TObject *Sender)
  180. {
  181. TcxGrid *pGrid = NULL;
  182. TcxGridDBBandedTableView *pView = NULL;
  183. TLabel *LblQry= NULL;
  184. String sTitle;
  185. switch(PgQuery->ActivePageIndex)
  186. {
  187. case 0: pGrid = CxDay; pView = TvDay;
  188. LblQry = LblQryTm;
  189. break;
  190. case 1: pGrid = CxMon; pView = TvMon;
  191. LblQry = LblQryDay;
  192. break;
  193. case 2: pGrid = CxYear; pView = TvYear;
  194. LblQry = LblQryYear;
  195. break;
  196. default: return;
  197. }
  198. sTitle = LblRptTitle->Caption + "\r\n" + LblQry->Caption;
  199. if (pView->DataController->RecordCount == 0)
  200. {
  201. ShowMessage(FrmLang->lblPrintNoData->Caption);//"인쇄 할 데이터가 없습니다.");
  202. return;
  203. }
  204. //ComponentPrinterLink->OptionsView->Footers = true;
  205. //ComponentPrinterLink->OptionsView->GroupFooters = true;
  206. //ComponentPrinterLink->OptionsSize->AutoWidth = true;
  207. //CMM_PrintList(pGrid, sTitle, m_sFooterRight);
  208. pView->DataController->FocusedRecordIndex = 0;
  209. }
  210. //---------------------------------------------------------------------------
  211. void __fastcall TVDSS020M::BtnExlSaveClick(TObject *Sender)
  212. {
  213. TcxGrid *pGrid = NULL;
  214. TcxGridDBBandedTableView *pView = NULL;
  215. TLabel *LblQry= NULL;
  216. String sTitle;
  217. switch(PgQuery->ActivePageIndex)
  218. {
  219. case 0: pGrid = CxDay; pView = TvDay;
  220. LblQry = LblQryTm;
  221. break;
  222. case 1: pGrid = CxMon; pView = TvMon;
  223. LblQry = LblQryDay;
  224. break;
  225. case 2: pGrid = CxYear; pView = TvYear;
  226. LblQry = LblQryYear;
  227. break;
  228. default: return;
  229. }
  230. sTitle = LblRptTitle->Caption + LblQry->Caption;
  231. if (pView->DataController->RecordCount == 0)
  232. {
  233. ShowMessage(FrmLang->lblSaveNoData->Caption);//"저장 할 데이터가 없습니다.");
  234. return;
  235. }
  236. CMM_ExportToExcelFile(sTitle, pGrid, pView, this);
  237. }
  238. //---------------------------------------------------------------------------
  239. void __fastcall TVDSS020M::BtnSearchClick(TObject *Sender)
  240. {
  241. Application->ProcessMessages();
  242. TSqlCursor sqlCrs((TControl*)BtnSearch);
  243. m_sLinkLevel = CbLinkLevel->Text;
  244. Application->ProcessMessages();
  245. RefreshData();
  246. }
  247. //---------------------------------------------------------------------------
  248. void __fastcall TVDSS020M::RefreshData()
  249. {
  250. TcxGridDBBandedTableView *pView = NULL;
  251. TLabel *LblQry= NULL;
  252. TLabel *LblRecords= NULL;
  253. WORD nYear, nMonth, nDay, nHour, nMin, nSec, nMSec;
  254. int nDispCols;
  255. String sBandText = "";
  256. String sMsgTitle, sMsgString;
  257. TDateTimePicker *DtQryTm;
  258. int nStYear, nEdYear;
  259. switch(PgQuery->ActivePageIndex)
  260. {
  261. case 0:
  262. pView = TvDay;
  263. DtQryTm = DtDay;
  264. LblQry = LblQryTm;
  265. LblRecords = LblRecordsTm;
  266. sBandText = "(" + DtDay->Date.FormatString("yyyy년 mm월 dd일") + ")";
  267. nDispCols = 24;
  268. if (StartOfTheDay(Now()) <= DtDay->DateTime)
  269. {
  270. DecodeTime(Now(), nHour, nMin, nSec, nMSec);
  271. if (nMin > 5) nDispCols = nHour;
  272. else nDispCols = nHour-1;
  273. }
  274. break;
  275. case 1:
  276. pView = TvMon;
  277. DtQryTm = DtMon;
  278. LblQry = LblQryDay;
  279. LblRecords = LblRecordsDay;
  280. sBandText = "(" + DtMon->Date.FormatString("yyyy년 mm월") + ")";
  281. nDispCols = ITSUtil_GetMonthLastDay(AnsiString(DtMon->Date.FormatString("yyyymm")).c_str());
  282. if (StartOfTheDay(Now()) <= EndOfTheMonth(DtMon->DateTime))
  283. {
  284. DecodeDate(Now(), nYear, nMonth, nDay);
  285. if (nDay < nDispCols) nDispCols = nDay-1;
  286. }
  287. {
  288. String sStDateTime = DtStTime->Time.FormatString("hhnn");
  289. String sEdDateTime = DtEdTime->Time.FormatString("hhnn");
  290. if (sStDateTime > sEdDateTime)
  291. {
  292. Application->MessageBox(FrmLang->lblQryDtErr->Caption.c_str(),//L"검색 시작시각이 검색 종료시각 보다 큽니다.",
  293. FTitle.c_str(), MB_OK|MB_ICONWARNING|MB_APPLMODAL);
  294. return;
  295. }
  296. }
  297. break;
  298. case 2:
  299. pView = TvYear;
  300. DtQryTm = DtYear;
  301. LblQry = LblQryYear;
  302. LblRecords = LblRecordsYear;
  303. sBandText = "(" + DtYear->Date.FormatString("yyyy년") + ")";
  304. nDispCols = 12;
  305. if (Now().FormatString("yyyy") == DtYear->DateTime.FormatString("yyyy"))
  306. {
  307. DecodeDate(Now(), nYear, nMonth, nDay);
  308. nDispCols = nMonth;
  309. }
  310. break;
  311. default: return;
  312. }
  313. if (!pView) return;
  314. if (DtQryTm->DateTime.FormatString("yyyymmdd").ToInt() > Now().FormatString("yyyymmdd").ToInt())
  315. {
  316. Application->MessageBox(FrmLang->lblCnfmStatTm->Caption.c_str(),//L"통계검색 시각 정보를 확인하세요.",
  317. FTitle.c_str(), MB_OK|MB_ICONWARNING|MB_APPLMODAL);
  318. MessageDlg(sMsgString.c_str(), mtInformation, TMsgDlgButtons() << mbOK, NULL);
  319. DtQryTm->SetFocus();
  320. nDispCols = 0; /* 리턴하지 않는 경우 모든 컬럼을 숨긴다. */
  321. return;
  322. }
  323. LblQry->Caption = sBandText;
  324. CMM_ShowListColumn(pView, nDispCols);
  325. TWaitCursor crs;
  326. try
  327. {
  328. pView->BeginUpdate();
  329. switch(PgQuery->ActivePageIndex)
  330. {
  331. case 0: DispDayStatistics(); break;
  332. case 1: DispMonthStatistics(); break;
  333. case 2: DispYearStatistics(); break;
  334. default: return;
  335. }
  336. }
  337. __finally
  338. {
  339. pView->EndUpdate();
  340. //pView->ApplyBestFit(NULL, false, false);
  341. LblRecords->Caption = FormatFloat("##,##0", pView->DataController->RecordCount) + FrmLang->lblEA->Caption;//" 건";
  342. String sEnd = FrmLang->lblQrySel->Caption + " [" + LblRecords->Caption + "]";//"데이터 " + LblRecords->Caption + " 이 조회 되었습니다.";
  343. Application->MessageBox(sEnd.c_str(),
  344. FrmLang->lblQryEnd->Caption.c_str(),//L"데이터 조회 완료",
  345. MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  346. }
  347. #if 1
  348. switch(PgQuery->ActivePageIndex)
  349. {
  350. case 0: CMM_ExpandCollapseChk(TvDay, true); break;
  351. case 1: CMM_ExpandCollapseChk(TvMon, true); break;
  352. case 2: CMM_ExpandCollapseChk(TvYear, true); break;
  353. }
  354. #endif
  355. DrawChart(sBandText);
  356. #if 1
  357. switch(PgQuery->ActivePageIndex)
  358. {
  359. case 0: CMM_ExpandCollapseChk(TvDay, false); break;
  360. case 1: CMM_ExpandCollapseChk(TvMon, false); break;
  361. case 2: CMM_ExpandCollapseChk(TvYear, false); break;
  362. }
  363. #endif
  364. #if 0
  365. ShowMessage(String(TvDay->DataController->Groups->DataController->DataRowCount));
  366. int nRows = TvDay->ViewData->RecordCount;
  367. for (int ii = 0; ii < nRows; ii++)
  368. {
  369. TcxCustomGridRow* ARow = TvDay->ViewData->Rows[ii];
  370. #if 0
  371. String sTitle1, sTitle2;
  372. if (TvDay->Columns[nAxisY1]->Visible && !VarIsNull(ARow->Values[nAxisY1]))
  373. {
  374. sTitle1 = ARow->Values[nAxisY1];
  375. }
  376. if (TvDay->Columns[nAxisY2]->Visible && !VarIsNull(ARow->Values[nAxisY2]))
  377. {
  378. sTitle2 = ARow->Values[nAxisY2];
  379. }
  380. if (sTitle1 == sTitle2)
  381. {
  382. //그룹핑했을 경우 그룹핑한 컬럼 제외
  383. //continue;
  384. }
  385. #endif
  386. if (!ARow->IsData)
  387. {
  388. TcxDataSummaryItems *AItems;
  389. PVariant AValues;
  390. TcxGridGroupRow* AGroup = (TcxGridGroupRow*)TvDay->ViewData->Rows[ii];
  391. AGroup->GetGroupSummaryInfo(AItems, AValues);
  392. int x = AItems->Count;
  393. int y = 0;
  394. for (int jj = 0; jj < x; jj++)
  395. {
  396. y = AValues[jj].VInteger;
  397. //Memo1->Lines->Add(String(jj) + ": " + String(y));
  398. }
  399. }
  400. }
  401. TcxDataSummaryItem *pItem;
  402. TcxDataSummary *pSummary = TvDay->DataController->Summary;
  403. //ShowMessage(String(pSummary->DefaultGroupSummaryItems->Count));
  404. for (int ii = 0; ii < pSummary->DefaultGroupSummaryItems->Count; ii++)
  405. {
  406. //pSummary->DefaultGroupSummaryItems->Items[ii]->
  407. }
  408. #endif
  409. }
  410. //---------------------------------------------------------------------------
  411. void __fastcall TVDSS020M::DrawChart(String sTitle)
  412. {
  413. TcxGridDBBandedTableView *pView = NULL;
  414. String sAxisX, sAxisY;
  415. int nAxisY1, nAxisY2, nAxisY3, nStColIdx, nEdColIdx, nTotColIdx;
  416. nAxisY3 = 0;
  417. nEdColIdx = 0;
  418. nTotColIdx = -1;
  419. switch(PgQuery->ActivePageIndex)
  420. {
  421. case 0: pView = TvDay;
  422. nAxisY1 = vDayColumnNo->Index;
  423. nAxisY2 = vDayColumnLane->Index;
  424. nAxisY3 = Col00->Index;
  425. nEdColIdx = Col23->Index;
  426. nStColIdx = vDayColumnAvg->Index;//vDayColumn1->Index;
  427. break;
  428. case 1: pView = TvMon;
  429. nAxisY1 = vMonColumnNo->Index;
  430. nAxisY2 = vMonColumnLane->Index;
  431. nAxisY3 = TvMonColumn1->Index;
  432. nEdColIdx = vMonColumn31->Index;
  433. nStColIdx = vMonColumnAvg->Index;//vMonColumn1->Index;
  434. break;
  435. case 2: pView = TvYear;
  436. nAxisY1 = vYearColumnNo->Index;
  437. nAxisY2 = vYearColumnLane->Index;
  438. nAxisY3 = TvYearColumn1->Index;
  439. nEdColIdx = vYearColumn12->Index;
  440. nStColIdx = vYearColumnAvg->Index;//vYearColumn1->Index;
  441. break;
  442. default: return;
  443. }
  444. /*
  445. * Chart draw
  446. */
  447. try
  448. {
  449. m_pFrmChart[PgQuery->ActivePageIndex]->Clear();
  450. if (pView->DataController->RecordCount == 0)
  451. {
  452. //ShowMessage("표출 할 데이터가 없습니다.");
  453. return;
  454. }
  455. m_pFrmChart[PgQuery->ActivePageIndex]->BeginDraw("", "", "");
  456. //m_pFrmChart[PgQuery->ActivePageIndex]->DrawChart4((TcxGridDBTableView *)pView, nAxisY1, nAxisY2, nStColIdx, nTotColIdx);
  457. m_pFrmChart[PgQuery->ActivePageIndex]->DrawChart6((TcxGridDBTableView *)pView, nAxisY1, nAxisY2, nAxisY3, nStColIdx, nEdColIdx, nTotColIdx);
  458. m_pFrmChart[PgQuery->ActivePageIndex]->EndDraw();
  459. }
  460. catch(...)
  461. {
  462. }
  463. }
  464. //---------------------------------------------------------------------------
  465. /*
  466. * 시간대별 일 통계 데이터 조회/출력
  467. * arguments
  468. *
  469. * return
  470. * void
  471. */
  472. void __fastcall TVDSS020M::DispDayStatistics()
  473. {
  474. String sQry;
  475. String sDD;
  476. String sFrom, sTo;
  477. String sTmp;
  478. int ii;
  479. sDD = DtDay->Date.FormatString("yyyyMMdd");
  480. sFrom = sDD + "000000";
  481. sTo = sDD + "235959";
  482. sQry =
  483. "SELECT LY.VDS_CTLR_NMBR, LY.VDS_CTLR_ID, LY.LCTN, LY.DTCT_NMBR, LY.ISTL_LANE, LY.VDS_DTCT_NM, \r\n"
  484. " LY.DTCT_TYPE, LY.DTCT_TYPE_NM, LX.TRFTYPE, LY.VDS_CTLR_NMBR || '.' || LY.LCTN AS NM, \r\n"
  485. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(TOTTFVL, 0, 0, TOTTFVL)) AS TOTTFVL, \r\n"
  486. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(AVGTFVL, 0, 0, AVGTFVL)) AS AVGTFVL, \r\n"
  487. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L00, NULL, 0, L00)) AS C00, \r\n"
  488. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L01, NULL, 0, L01)) AS C01, \r\n"
  489. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L02, NULL, 0, L02)) AS C02, \r\n"
  490. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L03, NULL, 0, L03)) AS C03, \r\n"
  491. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L04, NULL, 0, L04)) AS C04, \r\n"
  492. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L05, NULL, 0, L05)) AS C05, \r\n"
  493. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L06, NULL, 0, L06)) AS C06, \r\n"
  494. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L07, NULL, 0, L07)) AS C07, \r\n"
  495. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L08, NULL, 0, L08)) AS C08, \r\n"
  496. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L09, NULL, 0, L09)) AS C09, \r\n"
  497. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L10, NULL, 0, L10)) AS C10, \r\n"
  498. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L11, NULL, 0, L11)) AS C11, \r\n"
  499. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L12, NULL, 0, L12)) AS C12, \r\n"
  500. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L13, NULL, 0, L13)) AS C13, \r\n"
  501. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L14, NULL, 0, L14)) AS C14, \r\n"
  502. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L15, NULL, 0, L15)) AS C15, \r\n"
  503. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L16, NULL, 0, L16)) AS C16, \r\n"
  504. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L17, NULL, 0, L17)) AS C17, \r\n"
  505. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L18, NULL, 0, L18)) AS C18, \r\n"
  506. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L19, NULL, 0, L19)) AS C19, \r\n"
  507. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L20, NULL, 0, L20)) AS C20, \r\n"
  508. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L21, NULL, 0, L21)) AS C21, \r\n"
  509. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L22, NULL, 0, L22)) AS C22, \r\n"
  510. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L23, NULL, 0, L23)) AS C23 \r\n"
  511. " FROM ( \r\n"
  512. " SELECT GROUPING(DTCT_NMBR) AS GROUPING_DTCT_NMBR, \r\n"
  513. " GROUPING(ISTL_LANE) AS GROUPING_ISTL_LANE, \r\n"
  514. " GROUPING(TRFTYPE) AS GROUPING_TRFTYPE, \r\n"
  515. " CASE WHEN GROUPING(DTCT_NMBR ) = 1 THEN '검지기' ELSE DTCT_NMBR END AS GROUP_DTCT_NMBR, \r\n"
  516. " CASE WHEN GROUPING(ISTL_LANE) = 1 THEN '차로' ELSE ISTL_LANE END AS GROUP_ISTL_LANE, \r\n"
  517. " CASE WHEN GROUPING(TRFTYPE) = 1 THEN '소계' ELSE TRFTYPE END AS GROUP_TRFTYPE, \r\n"
  518. " DTCT_NMBR, ISTL_LANE, TRFTYPE, \r\n"
  519. " SUM(TFVL) TOTTFVL, \r\n"
  520. " ROUND(AVG(TFVL), 0) AVGTFVL, \r\n"
  521. " SUM(DECODE(STATHOUR, '00', TFVL)) AS L00, \r\n"
  522. " SUM(DECODE(STATHOUR, '01', TFVL)) AS L01, \r\n"
  523. " SUM(DECODE(STATHOUR, '02', TFVL)) AS L02, \r\n"
  524. " SUM(DECODE(STATHOUR, '03', TFVL)) AS L03, \r\n"
  525. " SUM(DECODE(STATHOUR, '04', TFVL)) AS L04, \r\n"
  526. " SUM(DECODE(STATHOUR, '05', TFVL)) AS L05, \r\n"
  527. " SUM(DECODE(STATHOUR, '06', TFVL)) AS L06, \r\n"
  528. " SUM(DECODE(STATHOUR, '07', TFVL)) AS L07, \r\n"
  529. " SUM(DECODE(STATHOUR, '08', TFVL)) AS L08, \r\n"
  530. " SUM(DECODE(STATHOUR, '09', TFVL)) AS L09, \r\n"
  531. " SUM(DECODE(STATHOUR, '10', TFVL)) AS L10, \r\n"
  532. " SUM(DECODE(STATHOUR, '11', TFVL)) AS L11, \r\n"
  533. " SUM(DECODE(STATHOUR, '12', TFVL)) AS L12, \r\n"
  534. " SUM(DECODE(STATHOUR, '13', TFVL)) AS L13, \r\n"
  535. " SUM(DECODE(STATHOUR, '14', TFVL)) AS L14, \r\n"
  536. " SUM(DECODE(STATHOUR, '15', TFVL)) AS L15, \r\n"
  537. " SUM(DECODE(STATHOUR, '16', TFVL)) AS L16, \r\n"
  538. " SUM(DECODE(STATHOUR, '17', TFVL)) AS L17, \r\n"
  539. " SUM(DECODE(STATHOUR, '18', TFVL)) AS L18, \r\n"
  540. " SUM(DECODE(STATHOUR, '19', TFVL)) AS L19, \r\n"
  541. " SUM(DECODE(STATHOUR, '20', TFVL)) AS L20, \r\n"
  542. " SUM(DECODE(STATHOUR, '21', TFVL)) AS L21, \r\n"
  543. " SUM(DECODE(STATHOUR, '22', TFVL)) AS L22, \r\n"
  544. " SUM(DECODE(STATHOUR, '23', TFVL)) AS L23 \r\n"
  545. " FROM ( \r\n"
  546. " SELECT TO_CHAR(Y.VDS_DTCT_NMBR) AS DTCT_NMBR, Y.VDS_DTCT_NM, \r\n"
  547. " TO_CHAR(Y.ISTL_LANE) AS ISTL_LANE, X.TRFTYPE, X.STATHOUR, X.TFVL \r\n"
  548. " FROM (SELECT /*+ INDEX(A PK_VDS_DTCT_HH_STAT) */ \r\n"
  549. " 'DTCT' AS TRFTYPE, \r\n"
  550. " A.VDS_DTCT_NMBR AS DTCT_NMBR, SUBSTR(A.STAT_DT, 9, 2) AS STATHOUR, \r\n"
  551. " A.TFVL AS TFVL \r\n"
  552. " FROM TB_VDS_DTCT_HH_STAT A \r\n"
  553. " WHERE 1=1 \r\n"
  554. " AND A.STAT_DT BETWEEN :p01 AND :p02 \r\n"
  555. " ) X, \r\n"
  556. " TB_VDS_DTCT Y \r\n"
  557. " WHERE 1=1 \r\n"
  558. " AND Y.DEL_YN = 'N' \r\n"
  559. " AND Y.VDS_DTCT_NMBR = X.DTCT_NMBR \r\n"
  560. " ) \r\n"
  561. " GROUP BY ROLLUP (DTCT_NMBR, ISTL_LANE, TRFTYPE) \r\n"
  562. " HAVING GROUPING(TRFTYPE) = 0 \r\n"
  563. " ) LX, \r\n"
  564. " ( \r\n"
  565. " SELECT A.VDS_CTLR_NMBR, A.VDS_CTLR_ID, A.VDS_NM AS LCTN, B.VDS_DTCT_NMBR AS DTCT_NMBR, \r\n"
  566. " B.ISTL_LANE, B.VDS_DTCT_NM, B.DTCT_TYPE, \r\n"
  567. " (SELECT CMMN_CD_KOR_NM \r\n"
  568. " FROM TB_CMMN_CD \r\n"
  569. " WHERE CMMN_CLSF_CD = 'DTT' \r\n"
  570. " AND CMMN_CD = B.DTCT_TYPE) AS DTCT_TYPE_NM \r\n"
  571. " FROM TB_VDS_CTLR A, \r\n"
  572. " TB_VDS_DTCT B \r\n"
  573. " WHERE 1=1 \r\n"
  574. " AND A.DEL_YN = 'N' \r\n"
  575. " AND B.DEL_YN = 'N' \r\n"
  576. " AND A.VDS_CTLR_NMBR = B.VDS_CTLR_NMBR \r\n"
  577. " ) LY \r\n"
  578. " WHERE LY.DTCT_NMBR = LX.DTCT_NMBR \r\n"
  579. //" WHERE LY.DTCT_NMBR = LX.DTCT_NMBR(+) \r\n"
  580. " ORDER BY LY.VDS_CTLR_NMBR, LY.DTCT_NMBR, LY.ISTL_LANE \r\n";
  581. //" ORDER BY LY.VDS_CTLR_NMBR, LY.DTCT_TYPE_NM, LY.ISTL_LANE, LY.DTCT_NMBR \r\n";
  582. try
  583. {
  584. ITSDb_SQLText(ADOD, sQry, false);
  585. ADOD->CursorType = ctOpenForwardOnly;
  586. ADOD->LockType = ltReadOnly;
  587. ITSDb_SQLBind(ADOD, "p01", sFrom);
  588. ITSDb_SQLBind(ADOD, "p02", sTo);
  589. ITSDb_SQLOpen(ADOD);
  590. ShowRecordCount(ADOD->RecordCount);
  591. }
  592. catch(EDatabaseError &E)
  593. {
  594. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  595. DBERRORMSG(Caption, String(E.ClassName()), E.Message, sQry);
  596. throw Exception(String(E.ClassName()) + E.Message);
  597. }
  598. catch(Exception &e)
  599. {
  600. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  601. DBERRORMSG(Caption, String(e.ClassName()), e.Message, sQry);
  602. throw Exception(String(e.ClassName()) + e.Message);
  603. }
  604. }
  605. //---------------------------------------------------------------------------
  606. /*
  607. * 일별 월 통계 데이터 조회/출력
  608. * arguments
  609. *
  610. * return
  611. * void
  612. */
  613. void __fastcall TVDSS020M::DispMonthStatistics()
  614. {
  615. String sQry = "";
  616. String sMM;
  617. String sFrom, sTo;
  618. String sTmp;
  619. int ii;
  620. sMM = DtMon->Date.FormatString("yyyyMM");
  621. sFrom = sMM + "01000000";
  622. sTo = sMM + "31235959";
  623. String sStTm = DtStTime->Time.FormatString("hhnn");
  624. String sEdTm = DtEdTime->Time.FormatString("hhnn");
  625. sQry =
  626. "SELECT LY.VDS_CTLR_NMBR, LY.VDS_CTLR_ID, LY.LCTN, LY.DTCT_NMBR, LY.ISTL_LANE, LY.VDS_DTCT_NM, \r\n"
  627. " LY.DTCT_TYPE, LY.DTCT_TYPE_NM, LX.TRFTYPE, LY.VDS_CTLR_NMBR || '.' || LY.LCTN AS NM, \r\n"
  628. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(TOTTFVL, 0, 0, TOTTFVL)) AS TOTTFVL, \r\n"
  629. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(AVGTFVL, 0, 0, AVGTFVL)) AS AVGTFVLX, \r\n"
  630. " DECODE(NVL(L01,0)+NVL(L02,0)+NVL(L03,0)+NVL(L04,0)+NVL(L05,0)+NVL(L06,0)+NVL(L07,0)+ \r\n"
  631. " NVL(L08,0)+NVL(L09,0)+NVL(L10,0)+NVL(L11,0)+NVL(L12,0)+NVL(L13,0)+NVL(L14,0)+ \r\n"
  632. " NVL(L15,0)+NVL(L16,0)+NVL(L17,0)+NVL(L18,0)+NVL(L19,0)+NVL(L20,0)+NVL(L21,0)+ \r\n"
  633. " NVL(L22,0)+NVL(L23,0)+NVL(L24,0)+NVL(L25,0)+NVL(L26,0)+NVL(L27,0)+NVL(L28,0)+ \r\n"
  634. " NVL(L29,0)+NVL(L30,0)+NVL(L31,0), 0, 0, \r\n"
  635. " ROUND( \r\n"
  636. " (NVL(L01,0)+NVL(L02,0)+NVL(L03,0)+NVL(L04,0)+NVL(L05,0)+NVL(L06,0)+NVL(L07,0)+ \r\n"
  637. " NVL(L08,0)+NVL(L09,0)+NVL(L10,0)+NVL(L11,0)+NVL(L12,0)+NVL(L13,0)+NVL(L14,0)+ \r\n"
  638. " NVL(L15,0)+NVL(L16,0)+NVL(L17,0)+NVL(L18,0)+NVL(L19,0)+NVL(L20,0)+NVL(L21,0)+ \r\n"
  639. " NVL(L22,0)+NVL(L23,0)+NVL(L24,0)+NVL(L25,0)+NVL(L26,0)+NVL(L27,0)+NVL(L28,0)+ \r\n"
  640. " NVL(L29,0)+NVL(L30,0)+NVL(L31,0)) / \r\n"
  641. " (DECODE(L01,NULL,0,1)+DECODE(L02,NULL,0,1)+DECODE(L03,NULL,0,1)+ \r\n"
  642. " DECODE(L04,NULL,0,1)+DECODE(L05,NULL,0,1)+DECODE(L06,NULL,0,1)+ \r\n"
  643. " DECODE(L07,NULL,0,1)+DECODE(L08,NULL,0,1)+DECODE(L09,NULL,0,1)+ \r\n"
  644. " DECODE(L10,NULL,0,1)+DECODE(L11,NULL,0,1)+DECODE(L12,NULL,0,1)+ \r\n"
  645. " DECODE(L13,NULL,0,1)+DECODE(L14,NULL,0,1)+DECODE(L15,NULL,0,1)+ \r\n"
  646. " DECODE(L16,NULL,0,1)+DECODE(L17,NULL,0,1)+DECODE(L18,NULL,0,1)+ \r\n"
  647. " DECODE(L19,NULL,0,1)+DECODE(L20,NULL,0,1)+DECODE(L21,NULL,0,1)+ \r\n"
  648. " DECODE(L22,NULL,0,1)+DECODE(L23,NULL,0,1)+DECODE(L24,NULL,0,1)+ \r\n"
  649. " DECODE(L25,NULL,0,1)+DECODE(L26,NULL,0,1)+DECODE(L27,NULL,0,1)+ \r\n"
  650. " DECODE(L28,NULL,0,1)+DECODE(L29,NULL,0,1)+DECODE(L30,NULL,0,1)+ \r\n"
  651. " DECODE(L31,NULL,0,1)), 0)) AS AVGTFVL, \r\n"
  652. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L01, NULL, 0, L01)) AS C01, \r\n"
  653. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L02, NULL, 0, L02)) AS C02, \r\n"
  654. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L03, NULL, 0, L03)) AS C03, \r\n"
  655. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L04, NULL, 0, L04)) AS C04, \r\n"
  656. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L05, NULL, 0, L05)) AS C05, \r\n"
  657. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L06, NULL, 0, L06)) AS C06, \r\n"
  658. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L07, NULL, 0, L07)) AS C07, \r\n"
  659. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L08, NULL, 0, L08)) AS C08, \r\n"
  660. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L09, NULL, 0, L09)) AS C09, \r\n"
  661. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L10, NULL, 0, L10)) AS C10, \r\n"
  662. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L11, NULL, 0, L11)) AS C11, \r\n"
  663. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L12, NULL, 0, L12)) AS C12, \r\n"
  664. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L13, NULL, 0, L13)) AS C13, \r\n"
  665. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L14, NULL, 0, L14)) AS C14, \r\n"
  666. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L15, NULL, 0, L15)) AS C15, \r\n"
  667. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L16, NULL, 0, L16)) AS C16, \r\n"
  668. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L17, NULL, 0, L17)) AS C17, \r\n"
  669. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L18, NULL, 0, L18)) AS C18, \r\n"
  670. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L19, NULL, 0, L19)) AS C19, \r\n"
  671. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L20, NULL, 0, L20)) AS C20, \r\n"
  672. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L21, NULL, 0, L21)) AS C21, \r\n"
  673. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L22, NULL, 0, L22)) AS C22, \r\n"
  674. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L23, NULL, 0, L23)) AS C23, \r\n"
  675. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L24, NULL, 0, L24)) AS C24, \r\n"
  676. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L25, NULL, 0, L25)) AS C25, \r\n"
  677. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L26, NULL, 0, L26)) AS C26, \r\n"
  678. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L27, NULL, 0, L27)) AS C27, \r\n"
  679. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L28, NULL, 0, L28)) AS C28, \r\n"
  680. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L29, NULL, 0, L29)) AS C29, \r\n"
  681. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L30, NULL, 0, L30)) AS C30, \r\n"
  682. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L31, NULL, 0, L31)) AS C31 \r\n"
  683. " FROM ( \r\n"
  684. " SELECT GROUPING(DTCT_NMBR) AS GROUPING_DTCT_NMBR, \r\n"
  685. " GROUPING(ISTL_LANE) AS GROUPING_ISTL_LANE, \r\n"
  686. " GROUPING(TRFTYPE) AS GROUPING_TRFTYPE, \r\n"
  687. " CASE WHEN GROUPING(DTCT_NMBR ) = 1 THEN '검지기' ELSE DTCT_NMBR END AS GROUP_DTCT_NMBR, \r\n"
  688. " CASE WHEN GROUPING(ISTL_LANE) = 1 THEN '차로' ELSE ISTL_LANE END AS GROUP_ISTL_LANE, \r\n"
  689. " CASE WHEN GROUPING(TRFTYPE) = 1 THEN '소계' ELSE TRFTYPE END AS GROUP_TRFTYPE, \r\n"
  690. " DTCT_NMBR, ISTL_LANE, TRFTYPE, \r\n"
  691. " SUM(TFVL) TOTTFVL, \r\n"
  692. " ROUND(AVG(TFVL), 0) AVGTFVL, \r\n"
  693. " SUM(DECODE(STATDAY, '01', TFVL)) AS L01, \r\n"
  694. " SUM(DECODE(STATDAY, '02', TFVL)) AS L02, \r\n"
  695. " SUM(DECODE(STATDAY, '03', TFVL)) AS L03, \r\n"
  696. " SUM(DECODE(STATDAY, '04', TFVL)) AS L04, \r\n"
  697. " SUM(DECODE(STATDAY, '05', TFVL)) AS L05, \r\n"
  698. " SUM(DECODE(STATDAY, '06', TFVL)) AS L06, \r\n"
  699. " SUM(DECODE(STATDAY, '07', TFVL)) AS L07, \r\n"
  700. " SUM(DECODE(STATDAY, '08', TFVL)) AS L08, \r\n"
  701. " SUM(DECODE(STATDAY, '09', TFVL)) AS L09, \r\n"
  702. " SUM(DECODE(STATDAY, '10', TFVL)) AS L10, \r\n"
  703. " SUM(DECODE(STATDAY, '11', TFVL)) AS L11, \r\n"
  704. " SUM(DECODE(STATDAY, '12', TFVL)) AS L12, \r\n"
  705. " SUM(DECODE(STATDAY, '13', TFVL)) AS L13, \r\n"
  706. " SUM(DECODE(STATDAY, '14', TFVL)) AS L14, \r\n"
  707. " SUM(DECODE(STATDAY, '15', TFVL)) AS L15, \r\n"
  708. " SUM(DECODE(STATDAY, '16', TFVL)) AS L16, \r\n"
  709. " SUM(DECODE(STATDAY, '17', TFVL)) AS L17, \r\n"
  710. " SUM(DECODE(STATDAY, '18', TFVL)) AS L18, \r\n"
  711. " SUM(DECODE(STATDAY, '19', TFVL)) AS L19, \r\n"
  712. " SUM(DECODE(STATDAY, '20', TFVL)) AS L20, \r\n"
  713. " SUM(DECODE(STATDAY, '21', TFVL)) AS L21, \r\n"
  714. " SUM(DECODE(STATDAY, '22', TFVL)) AS L22, \r\n"
  715. " SUM(DECODE(STATDAY, '23', TFVL)) AS L23, \r\n"
  716. " SUM(DECODE(STATDAY, '24', TFVL)) AS L24, \r\n"
  717. " SUM(DECODE(STATDAY, '25', TFVL)) AS L25, \r\n"
  718. " SUM(DECODE(STATDAY, '26', TFVL)) AS L26, \r\n"
  719. " SUM(DECODE(STATDAY, '27', TFVL)) AS L27, \r\n"
  720. " SUM(DECODE(STATDAY, '28', TFVL)) AS L28, \r\n"
  721. " SUM(DECODE(STATDAY, '29', TFVL)) AS L29, \r\n"
  722. " SUM(DECODE(STATDAY, '30', TFVL)) AS L30, \r\n"
  723. " SUM(DECODE(STATDAY, '31', TFVL)) AS L31 \r\n"
  724. " FROM ( \r\n"
  725. " SELECT TO_CHAR(Y.VDS_DTCT_NMBR) AS DTCT_NMBR, Y.VDS_DTCT_NM, \r\n"
  726. " TO_CHAR(Y.ISTL_LANE) AS ISTL_LANE, X.TRFTYPE, X.STATDAY, X.TFVL \r\n"
  727. " FROM (SELECT /*+ INDEX(A PK_VDS_DTCT_HH_STAT) */ \r\n"
  728. " 'DTCT' AS TRFTYPE, \r\n"
  729. " A.VDS_DTCT_NMBR AS VDS_DTCT_NMBR, SUBSTR(A.STAT_DT, 7, 2) AS STATDAY, \r\n"
  730. " A.TFVL AS TFVL \r\n"
  731. " FROM TB_VDS_DTCT_HH_STAT A \r\n"
  732. " WHERE 1=1 \r\n"
  733. " AND A.STAT_DT BETWEEN :p01 AND :p02 \r\n"
  734. " AND SUBSTR(A.STAT_DT, 9, 4) BETWEEN :p03 AND :p04 \r\n"
  735. " ) X, \r\n"
  736. " TB_VDS_DTCT Y \r\n"
  737. " WHERE 1=1 \r\n"
  738. " AND Y.DEL_YN = 'N' \r\n"
  739. " AND Y.VDS_DTCT_NMBR = X.VDS_DTCT_NMBR \r\n"
  740. " ) \r\n"
  741. " GROUP BY ROLLUP (DTCT_NMBR, ISTL_LANE, TRFTYPE) \r\n"
  742. " HAVING GROUPING(TRFTYPE) = 0 \r\n"
  743. " ) LX, \r\n"
  744. " ( \r\n"
  745. " SELECT A.VDS_CTLR_NMBR, A.VDS_CTLR_ID, A.VDS_NM AS LCTN, B.VDS_DTCT_NMBR AS DTCT_NMBR, \r\n"
  746. " B.ISTL_LANE, B.VDS_DTCT_NM, B.DTCT_TYPE, \r\n"
  747. " (SELECT CMMN_CD_KOR_NM \r\n"
  748. " FROM TB_CMMN_CD \r\n"
  749. " WHERE CMMN_CLSF_CD = 'ACD' \r\n"
  750. " AND CMMN_CD = B.DTCT_TYPE) AS DTCT_TYPE_NM \r\n"
  751. " FROM TB_VDS_CTLR A, \r\n"
  752. " TB_VDS_DTCT B \r\n"
  753. " WHERE 1=1 \r\n"
  754. " AND A.DEL_YN = 'N' \r\n"
  755. " AND B.DEL_YN = 'N' \r\n"
  756. " AND A.VDS_CTLR_NMBR = B.VDS_CTLR_NMBR \r\n"
  757. " ) LY \r\n"
  758. " WHERE LY.DTCT_NMBR = LX.DTCT_NMBR \r\n"
  759. //" WHERE LY.DTCT_NMBR = LX.DTCT_NMBR(+) \r\n"
  760. " ORDER BY LY.VDS_CTLR_NMBR, LY.DTCT_NMBR, LY.ISTL_LANE \r\n";
  761. //" ORDER BY LY.VDS_CTLR_NMBR, LY.DTCT_TYPE_NM, LY.ISTL_LANE, LY.DTCT_NMBR \r\n";
  762. try
  763. {
  764. ITSDb_SQLText(ADOM, sQry, false);
  765. ADOM->CursorType = ctOpenForwardOnly;
  766. ADOM->LockType = ltReadOnly;
  767. ITSDb_SQLBind(ADOM, "p01", sFrom);
  768. ITSDb_SQLBind(ADOM, "p02", sTo);
  769. ITSDb_SQLBind(ADOM, "p03", sStTm);
  770. ITSDb_SQLBind(ADOM, "p04", sEdTm);
  771. ITSDb_SQLOpen(ADOM);
  772. ShowRecordCount(ADOM->RecordCount);
  773. }
  774. catch(EDatabaseError &E)
  775. {
  776. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  777. DBERRORMSG(Caption, String(E.ClassName()), E.Message, sQry);
  778. throw Exception(String(E.ClassName()) + E.Message);
  779. }
  780. catch(Exception &e)
  781. {
  782. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  783. DBERRORMSG(Caption, String(e.ClassName()), e.Message, sQry);
  784. throw Exception(String(e.ClassName()) + e.Message);
  785. }
  786. }
  787. //---------------------------------------------------------------------------
  788. /*
  789. * 월별 년 통계 데이터 조회/출력
  790. * arguments
  791. *
  792. * return
  793. * void
  794. */
  795. void __fastcall TVDSS020M::DispYearStatistics()
  796. {
  797. String sQry = "";
  798. String sMM;
  799. String sFrom, sTo;
  800. String sTmp;
  801. int ii;
  802. sMM = DtYear->Date.FormatString("yyyy");
  803. sFrom = sMM + "01000000";
  804. sTo = sMM + "12000000";
  805. sQry =
  806. "SELECT LY.VDS_CTLR_NMBR, LY.VDS_CTLR_ID, LY.LCTN, LY.DTCT_NMBR, LY.ISTL_LANE, LY.VDS_DTCT_NM, \r\n"
  807. " LY.DTCT_TYPE, LY.DTCT_TYPE_NM, LX.TRFTYPE, LY.VDS_CTLR_NMBR || '.' || LY.LCTN AS NM, \r\n"
  808. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(TOTTFVL, 0, 0, TOTTFVL)) AS TOTTFVL, \r\n"
  809. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(AVGTFVL, 0, 0, AVGTFVL)) AS AVGTFVLX, \r\n"
  810. " DECODE(NVL(L01,0)+NVL(L02,0)+NVL(L03,0)+NVL(L04,0)+NVL(L05,0)+NVL(L06,0)+NVL(L07,0)+ \r\n"
  811. " NVL(L08,0)+NVL(L09,0)+NVL(L10,0)+NVL(L11,0)+NVL(L12,0), 0, 0, \r\n"
  812. " ROUND( \r\n"
  813. " (NVL(L01,0)+NVL(L02,0)+NVL(L03,0)+NVL(L04,0)+NVL(L05,0)+NVL(L06,0)+NVL(L07,0)+ \r\n"
  814. " NVL(L08,0)+NVL(L09,0)+NVL(L10,0)+NVL(L11,0)+NVL(L12,0)) / \r\n"
  815. " (DECODE(L01,NULL,0,1)+DECODE(L02,NULL,0,1)+DECODE(L03,NULL,0,1)+ \r\n"
  816. " DECODE(L04,NULL,0,1)+DECODE(L05,NULL,0,1)+DECODE(L06,NULL,0,1)+ \r\n"
  817. " DECODE(L07,NULL,0,1)+DECODE(L08,NULL,0,1)+DECODE(L09,NULL,0,1)+ \r\n"
  818. " DECODE(L10,NULL,0,1)+DECODE(L11,NULL,0,1)+DECODE(L12,NULL,0,1)), 0)) AS AVGTFVL, \r\n"
  819. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L01, NULL, 0, L01)) AS C01, \r\n"
  820. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L02, NULL, 0, L02)) AS C02, \r\n"
  821. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L03, NULL, 0, L03)) AS C03, \r\n"
  822. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L04, NULL, 0, L04)) AS C04, \r\n"
  823. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L05, NULL, 0, L05)) AS C05, \r\n"
  824. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L06, NULL, 0, L06)) AS C06, \r\n"
  825. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L07, NULL, 0, L07)) AS C07, \r\n"
  826. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L08, NULL, 0, L08)) AS C08, \r\n"
  827. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L09, NULL, 0, L09)) AS C09, \r\n"
  828. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L10, NULL, 0, L10)) AS C10, \r\n"
  829. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L11, NULL, 0, L11)) AS C11, \r\n"
  830. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L12, NULL, 0, L12)) AS C12 \r\n"
  831. " FROM ( \r\n"
  832. " SELECT GROUPING(DTCT_NMBR) AS GROUPING_DTCT_NMBR, \r\n"
  833. " GROUPING(ISTL_LANE) AS GROUPING_ISTL_LANE, \r\n"
  834. " GROUPING(TRFTYPE) AS GROUPING_TRFTYPE, \r\n"
  835. " CASE WHEN GROUPING(DTCT_NMBR ) = 1 THEN '검지기' ELSE DTCT_NMBR END AS GROUP_DTCT_NMBR, \r\n"
  836. " CASE WHEN GROUPING(ISTL_LANE) = 1 THEN '차로' ELSE ISTL_LANE END AS GROUP_ISTL_LANE, \r\n"
  837. " CASE WHEN GROUPING(TRFTYPE) = 1 THEN '소계' ELSE TRFTYPE END AS GROUP_TRFTYPE, \r\n"
  838. " DTCT_NMBR, ISTL_LANE, TRFTYPE, \r\n"
  839. " SUM(TFVL) TOTTFVL, \r\n"
  840. " ROUND(AVG(TFVL), 0) AVGTFVL, \r\n"
  841. " SUM(DECODE(STATDAY, '01', TFVL)) AS L01, \r\n"
  842. " SUM(DECODE(STATDAY, '02', TFVL)) AS L02, \r\n"
  843. " SUM(DECODE(STATDAY, '03', TFVL)) AS L03, \r\n"
  844. " SUM(DECODE(STATDAY, '04', TFVL)) AS L04, \r\n"
  845. " SUM(DECODE(STATDAY, '05', TFVL)) AS L05, \r\n"
  846. " SUM(DECODE(STATDAY, '06', TFVL)) AS L06, \r\n"
  847. " SUM(DECODE(STATDAY, '07', TFVL)) AS L07, \r\n"
  848. " SUM(DECODE(STATDAY, '08', TFVL)) AS L08, \r\n"
  849. " SUM(DECODE(STATDAY, '09', TFVL)) AS L09, \r\n"
  850. " SUM(DECODE(STATDAY, '10', TFVL)) AS L10, \r\n"
  851. " SUM(DECODE(STATDAY, '11', TFVL)) AS L11, \r\n"
  852. " SUM(DECODE(STATDAY, '12', TFVL)) AS L12 \r\n"
  853. " FROM ( \r\n"
  854. " SELECT TO_CHAR(Y.VDS_DTCT_NMBR) AS DTCT_NMBR, Y.VDS_DTCT_NM, \r\n"
  855. " TO_CHAR(Y.ISTL_LANE) AS ISTL_LANE, X.TRFTYPE, X.STATDAY, X.TFVL \r\n"
  856. " FROM (SELECT /*+ INDEX(A PK_VDS_DTCT_MN_STAT) */ \r\n"
  857. " 'DTCT' AS TRFTYPE, \r\n"
  858. " A.VDS_DTCT_NMBR AS VDS_DTCT_NMBR, SUBSTR(A.STAT_DT, 5, 2) AS STATDAY, \r\n"
  859. " A.TFVL AS TFVL \r\n"
  860. " FROM TB_VDS_DTCT_MN_STAT A \r\n"
  861. " WHERE 1=1 \r\n"
  862. " AND A.STAT_DT BETWEEN :p01 AND :p02 \r\n"
  863. " ) X, \r\n"
  864. " TB_VDS_DTCT Y \r\n"
  865. " WHERE 1=1 \r\n"
  866. " AND Y.DEL_YN = 'N' \r\n"
  867. " AND Y.VDS_DTCT_NMBR = X.VDS_DTCT_NMBR \r\n"
  868. " ) \r\n"
  869. " GROUP BY ROLLUP (DTCT_NMBR, ISTL_LANE, TRFTYPE) \r\n"
  870. " HAVING GROUPING(TRFTYPE) = 0 \r\n"
  871. " ) LX, \r\n"
  872. " ( \r\n"
  873. " SELECT A.VDS_CTLR_NMBR, A.VDS_CTLR_ID, A.VDS_NM AS LCTN, B.VDS_DTCT_NMBR AS DTCT_NMBR, \r\n"
  874. " B.ISTL_LANE, B.VDS_DTCT_NM, B.DTCT_TYPE, \r\n"
  875. " (SELECT CMMN_CD_KOR_NM \r\n"
  876. " FROM TB_CMMN_CD \r\n"
  877. " WHERE CMMN_CLSF_CD = 'ACD' \r\n"
  878. " AND CMMN_CD = B.DTCT_TYPE) AS DTCT_TYPE_NM \r\n"
  879. " FROM TB_VDS_CTLR A, \r\n"
  880. " TB_VDS_DTCT B \r\n"
  881. " WHERE 1=1 \r\n"
  882. " AND A.DEL_YN = 'N' \r\n"
  883. " AND B.DEL_YN = 'N' \r\n"
  884. " AND A.VDS_CTLR_NMBR = B.VDS_CTLR_NMBR \r\n"
  885. " ) LY \r\n"
  886. " WHERE LY.DTCT_NMBR = LX.DTCT_NMBR \r\n"
  887. " ORDER BY LY.VDS_CTLR_NMBR, LY.DTCT_NMBR, LY.ISTL_LANE \r\n";
  888. try
  889. {
  890. ITSDb_SQLText(ADOY, sQry, false);
  891. ADOY->CursorType = ctOpenForwardOnly;
  892. ADOY->LockType = ltReadOnly;
  893. ITSDb_SQLBind(ADOY, "p01", sFrom);
  894. ITSDb_SQLBind(ADOY, "p02", sTo);
  895. ITSDb_SQLOpen(ADOY);
  896. ShowRecordCount(ADOY->RecordCount);
  897. }
  898. catch(EDatabaseError &E)
  899. {
  900. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  901. DBERRORMSG(Caption, String(E.ClassName()), E.Message, sQry);
  902. throw Exception(String(E.ClassName()) + E.Message);
  903. }
  904. catch(Exception &e)
  905. {
  906. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  907. DBERRORMSG(Caption, String(e.ClassName()), e.Message, sQry);
  908. throw Exception(String(e.ClassName()) + e.Message);
  909. }
  910. }
  911. //---------------------------------------------------------------------------
  912. void __fastcall TVDSS020M::ShowRecordCount(int nRecCnt)
  913. {
  914. //
  915. }
  916. //---------------------------------------------------------------------------
  917. void __fastcall TVDSS020M::BtnCloseClick(TObject *Sender)
  918. {
  919. Close();
  920. }
  921. //---------------------------------------------------------------------------
  922. void __fastcall TVDSS020M::vDayColumnCustomDrawCell(TcxCustomGridTableView *Sender, TcxCanvas *ACanvas, TcxGridTableDataCellViewInfo *AViewInfo,
  923. bool &ADone)
  924. {
  925. TColor tColor = ACanvas->Brush->Color;
  926. try
  927. {
  928. if (!VarIsNull(AViewInfo->Value))
  929. {
  930. int sSpd = AViewInfo->Value;
  931. if (sSpd == NULL || sSpd == 0)// || sSpd == "-")
  932. {
  933. tColor = clFuchsia;
  934. }
  935. }
  936. else
  937. {
  938. tColor = clFuchsia;
  939. }
  940. ACanvas->Font->Color = clBlack;
  941. ACanvas->SetBrushColor(tColor);
  942. }
  943. catch(...)
  944. {
  945. }
  946. }
  947. //---------------------------------------------------------------------------
  948. void __fastcall TVDSS020M::FormClose(TObject *Sender, TCloseAction &Action)
  949. {
  950. CommClose();
  951. VDSS020M = NULL;
  952. Action = caFree;
  953. }
  954. //---------------------------------------------------------------------------
  955. void __fastcall TVDSS020M::ChkExpandClick(TObject *Sender)
  956. {
  957. CMM_ExpandCollapseChk(TvDay, ChkExpand->Checked);
  958. }
  959. //---------------------------------------------------------------------------
  960. void __fastcall TVDSS020M::ChkExpand2Click(TObject *Sender)
  961. {
  962. CMM_ExpandCollapseChk(TvMon, ChkExpand2->Checked);
  963. }
  964. //---------------------------------------------------------------------------
  965. void __fastcall TVDSS020M::ChkExpand3Click(TObject *Sender)
  966. {
  967. CMM_ExpandCollapseChk(TvYear, ChkExpand3->Checked);
  968. }
  969. //---------------------------------------------------------------------------
  970. void __fastcall TVDSS020M::TvDayTcxGridDBDataControllerTcxDataSummaryFooterSummaryItems0GetText(TcxDataSummaryItem *Sender,
  971. const Variant &AValue, bool AIsFooter, UnicodeString &AText)
  972. {
  973. AText = "합계";
  974. }
  975. //---------------------------------------------------------------------------
  976. void __fastcall TVDSS020M::TvDayTcxGridDBDataControllerTcxDataSummaryDefaultGroupSummaryItems0GetText(TcxDataSummaryItem *Sender,
  977. const Variant &AValue, bool AIsFooter, UnicodeString &AText)
  978. {
  979. AText = "소계";
  980. }
  981. //---------------------------------------------------------------------------
  982. void __fastcall TVDSS020M::TvMonTcxGridDBDataControllerTcxDataSummaryFooterSummaryItems0GetText(TcxDataSummaryItem *Sender,
  983. const Variant &AValue, bool AIsFooter, UnicodeString &AText)
  984. {
  985. AText = "합계";
  986. }
  987. //---------------------------------------------------------------------------
  988. void __fastcall TVDSS020M::TvMonTcxGridDBDataControllerTcxDataSummaryDefaultGroupSummaryItems0GetText(TcxDataSummaryItem *Sender,
  989. const Variant &AValue, bool AIsFooter, UnicodeString &AText)
  990. {
  991. AText = "소계";
  992. }
  993. //---------------------------------------------------------------------------
  994. void __fastcall TVDSS020M::TvYearTcxGridDBDataControllerTcxDataSummaryFooterSummaryItems0GetText(TcxDataSummaryItem *Sender,
  995. const Variant &AValue, bool AIsFooter, UnicodeString &AText)
  996. {
  997. AText = "합계";
  998. }
  999. //---------------------------------------------------------------------------
  1000. void __fastcall TVDSS020M::TvYearTcxGridDBDataControllerTcxDataSummaryDefaultGroupSummaryItems0GetText(TcxDataSummaryItem *Sender,
  1001. const Variant &AValue, bool AIsFooter, UnicodeString &AText)
  1002. {
  1003. AText = "소계";
  1004. }
  1005. //---------------------------------------------------------------------------
  1006. void __fastcall TVDSS020M::TvListDataControllerSummaryFooterSummaryItemsSummary(TcxDataSummaryItems *ASender, TcxSummaryEventArguments &Arguments,
  1007. TcxSummaryEventOutArguments &OutArguments)
  1008. {
  1009. CMM_SetSummaryItemKind(Arguments, OutArguments, 2, false, false);
  1010. }
  1011. //---------------------------------------------------------------------------
  1012. void __fastcall TVDSS020M::TvListDataControllerSummaryDefaultGroupSummaryItemsSummary(TcxDataSummaryItems *ASender, TcxSummaryEventArguments &Arguments,
  1013. TcxSummaryEventOutArguments &OutArguments)
  1014. {
  1015. CMM_SetSummaryItemKind(Arguments, OutArguments, 1, false, false);
  1016. }
  1017. //---------------------------------------------------------------------------
  1018. void __fastcall TVDSS020M::TvDayDataControllerSummaryDefaultGroupSummaryItemsSummary(TcxDataSummaryItems *ASender, TcxSummaryEventArguments &Arguments,
  1019. TcxSummaryEventOutArguments &OutArguments)
  1020. {
  1021. APP_SetSummaryItemKind(Arguments, OutArguments, 1, false, false);
  1022. }
  1023. //---------------------------------------------------------------------------
  1024. void __fastcall TVDSS020M::TvMonDataControllerSummaryDefaultGroupSummaryItemsSummary(TcxDataSummaryItems *ASender, TcxSummaryEventArguments &Arguments,
  1025. TcxSummaryEventOutArguments &OutArguments)
  1026. {
  1027. APP_SetSummaryItemKind(Arguments, OutArguments, 1, false, false);
  1028. }
  1029. //---------------------------------------------------------------------------
  1030. void __fastcall TVDSS020M::TvYearDataControllerSummaryDefaultGroupSummaryItemsSummary(TcxDataSummaryItems *ASender, TcxSummaryEventArguments &Arguments,
  1031. TcxSummaryEventOutArguments &OutArguments)
  1032. {
  1033. APP_SetSummaryItemKind(Arguments, OutArguments, 1, false, false);
  1034. }
  1035. //---------------------------------------------------------------------------
  1036. void __fastcall TVDSS020M::TvDayDataControllerSummaryFooterSummaryItemsSummary(TcxDataSummaryItems *ASender, TcxSummaryEventArguments &Arguments,
  1037. TcxSummaryEventOutArguments &OutArguments)
  1038. {
  1039. APP_SetSummaryItemKind(Arguments, OutArguments, 2, false, false);
  1040. }
  1041. //---------------------------------------------------------------------------
  1042. void __fastcall TVDSS020M::TvMonDataControllerSummaryFooterSummaryItemsSummary(TcxDataSummaryItems *ASender, TcxSummaryEventArguments &Arguments,
  1043. TcxSummaryEventOutArguments &OutArguments)
  1044. {
  1045. APP_SetSummaryItemKind(Arguments, OutArguments, 2, false, false);
  1046. }
  1047. //---------------------------------------------------------------------------
  1048. void __fastcall TVDSS020M::TvYearDataControllerSummaryFooterSummaryItemsSummary(TcxDataSummaryItems *ASender, TcxSummaryEventArguments &Arguments,
  1049. TcxSummaryEventOutArguments &OutArguments)
  1050. {
  1051. APP_SetSummaryItemKind(Arguments, OutArguments, 2, false, false);
  1052. }
  1053. //---------------------------------------------------------------------------