VDSS020MF.cpp 60 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171
  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. nAxisY3 = vMonColumn31->Index;
  433. nEdColIdx = vMonColumn31->Index;
  434. nStColIdx = vMonColumnAvg->Index;//vMonColumn1->Index;
  435. break;
  436. case 2: pView = TvYear;
  437. nAxisY1 = vYearColumnNo->Index;
  438. nAxisY2 = vYearColumnLane->Index;
  439. nAxisY3 = TvYearColumn1->Index;
  440. nEdColIdx = vYearColumn12->Index;
  441. nStColIdx = vYearColumnAvg->Index;//vYearColumn1->Index;
  442. break;
  443. default: return;
  444. }
  445. /*
  446. * Chart draw
  447. */
  448. try
  449. {
  450. m_pFrmChart[PgQuery->ActivePageIndex]->Clear();
  451. if (pView->DataController->RecordCount == 0)
  452. {
  453. //ShowMessage("표출 할 데이터가 없습니다.");
  454. return;
  455. }
  456. m_pFrmChart[PgQuery->ActivePageIndex]->BeginDraw("", "", "");
  457. //m_pFrmChart[PgQuery->ActivePageIndex]->DrawChart4((TcxGridDBTableView *)pView, nAxisY1, nAxisY2, nStColIdx, nTotColIdx);
  458. m_pFrmChart[PgQuery->ActivePageIndex]->DrawChart6((TcxGridDBTableView *)pView, nAxisY1, nAxisY2, nAxisY3, nStColIdx, nEdColIdx, nTotColIdx);
  459. m_pFrmChart[PgQuery->ActivePageIndex]->EndDraw();
  460. }
  461. catch(...)
  462. {
  463. }
  464. }
  465. //---------------------------------------------------------------------------
  466. /*
  467. * 시간대별 일 통계 데이터 조회/출력
  468. * arguments
  469. *
  470. * return
  471. * void
  472. */
  473. void __fastcall TVDSS020M::DispDayStatistics()
  474. {
  475. String sQry;
  476. String sDD;
  477. String sFrom, sTo;
  478. String sTmp;
  479. int ii;
  480. sDD = DtDay->Date.FormatString("yyyyMMdd");
  481. sFrom = sDD + "000000";
  482. sTo = sDD + "235959";
  483. sQry =
  484. "SELECT LY.VDS_CTLR_NMBR, LY.VDS_CTLR_ID, LY.LCTN, LY.DTCT_NMBR, LY.ISTL_LANE, LY.VDS_DTCT_NM, \r\n"
  485. " LY.DTCT_TYPE, LY.DTCT_TYPE_NM, LX.TRFTYPE, LY.VDS_CTLR_NMBR || '.' || LY.LCTN AS NM, \r\n"
  486. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(TOTTFVL, 0, 0, TOTTFVL)) AS TOTTFVL, \r\n"
  487. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(AVGTFVL, 0, 0, AVGTFVL)) AS AVGTFVL, \r\n"
  488. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L00, NULL, 0, L00)) AS C00, \r\n"
  489. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L01, NULL, 0, L01)) AS C01, \r\n"
  490. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L02, NULL, 0, L02)) AS C02, \r\n"
  491. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L03, NULL, 0, L03)) AS C03, \r\n"
  492. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L04, NULL, 0, L04)) AS C04, \r\n"
  493. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L05, NULL, 0, L05)) AS C05, \r\n"
  494. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L06, NULL, 0, L06)) AS C06, \r\n"
  495. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L07, NULL, 0, L07)) AS C07, \r\n"
  496. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L08, NULL, 0, L08)) AS C08, \r\n"
  497. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L09, NULL, 0, L09)) AS C09, \r\n"
  498. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L10, NULL, 0, L10)) AS C10, \r\n"
  499. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L11, NULL, 0, L11)) AS C11, \r\n"
  500. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L12, NULL, 0, L12)) AS C12, \r\n"
  501. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L13, NULL, 0, L13)) AS C13, \r\n"
  502. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L14, NULL, 0, L14)) AS C14, \r\n"
  503. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L15, NULL, 0, L15)) AS C15, \r\n"
  504. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L16, NULL, 0, L16)) AS C16, \r\n"
  505. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L17, NULL, 0, L17)) AS C17, \r\n"
  506. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L18, NULL, 0, L18)) AS C18, \r\n"
  507. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L19, NULL, 0, L19)) AS C19, \r\n"
  508. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L20, NULL, 0, L20)) AS C20, \r\n"
  509. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L21, NULL, 0, L21)) AS C21, \r\n"
  510. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L22, NULL, 0, L22)) AS C22, \r\n"
  511. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L23, NULL, 0, L23)) AS C23 \r\n"
  512. " FROM ( \r\n"
  513. " SELECT GROUPING(DTCT_NMBR) AS GROUPING_DTCT_NMBR, \r\n"
  514. " GROUPING(ISTL_LANE) AS GROUPING_ISTL_LANE, \r\n"
  515. " GROUPING(TRFTYPE) AS GROUPING_TRFTYPE, \r\n"
  516. " CASE WHEN GROUPING(DTCT_NMBR ) = 1 THEN '검지기' ELSE DTCT_NMBR END AS GROUP_DTCT_NMBR, \r\n"
  517. " CASE WHEN GROUPING(ISTL_LANE) = 1 THEN '차로' ELSE ISTL_LANE END AS GROUP_ISTL_LANE, \r\n"
  518. " CASE WHEN GROUPING(TRFTYPE) = 1 THEN '소계' ELSE TRFTYPE END AS GROUP_TRFTYPE, \r\n"
  519. " DTCT_NMBR, ISTL_LANE, TRFTYPE, \r\n"
  520. " SUM(TFVL) TOTTFVL, \r\n"
  521. " ROUND(AVG(TFVL), 0) AVGTFVL, \r\n"
  522. " SUM(DECODE(STATHOUR, '00', TFVL)) AS L00, \r\n"
  523. " SUM(DECODE(STATHOUR, '01', TFVL)) AS L01, \r\n"
  524. " SUM(DECODE(STATHOUR, '02', TFVL)) AS L02, \r\n"
  525. " SUM(DECODE(STATHOUR, '03', TFVL)) AS L03, \r\n"
  526. " SUM(DECODE(STATHOUR, '04', TFVL)) AS L04, \r\n"
  527. " SUM(DECODE(STATHOUR, '05', TFVL)) AS L05, \r\n"
  528. " SUM(DECODE(STATHOUR, '06', TFVL)) AS L06, \r\n"
  529. " SUM(DECODE(STATHOUR, '07', TFVL)) AS L07, \r\n"
  530. " SUM(DECODE(STATHOUR, '08', TFVL)) AS L08, \r\n"
  531. " SUM(DECODE(STATHOUR, '09', TFVL)) AS L09, \r\n"
  532. " SUM(DECODE(STATHOUR, '10', TFVL)) AS L10, \r\n"
  533. " SUM(DECODE(STATHOUR, '11', TFVL)) AS L11, \r\n"
  534. " SUM(DECODE(STATHOUR, '12', TFVL)) AS L12, \r\n"
  535. " SUM(DECODE(STATHOUR, '13', TFVL)) AS L13, \r\n"
  536. " SUM(DECODE(STATHOUR, '14', TFVL)) AS L14, \r\n"
  537. " SUM(DECODE(STATHOUR, '15', TFVL)) AS L15, \r\n"
  538. " SUM(DECODE(STATHOUR, '16', TFVL)) AS L16, \r\n"
  539. " SUM(DECODE(STATHOUR, '17', TFVL)) AS L17, \r\n"
  540. " SUM(DECODE(STATHOUR, '18', TFVL)) AS L18, \r\n"
  541. " SUM(DECODE(STATHOUR, '19', TFVL)) AS L19, \r\n"
  542. " SUM(DECODE(STATHOUR, '20', TFVL)) AS L20, \r\n"
  543. " SUM(DECODE(STATHOUR, '21', TFVL)) AS L21, \r\n"
  544. " SUM(DECODE(STATHOUR, '22', TFVL)) AS L22, \r\n"
  545. " SUM(DECODE(STATHOUR, '23', TFVL)) AS L23 \r\n"
  546. " FROM ( \r\n"
  547. " SELECT TO_CHAR(Y.VDS_DTCT_NMBR) AS DTCT_NMBR, Y.VDS_DTCT_NM, \r\n"
  548. " TO_CHAR(Y.ISTL_LANE) AS ISTL_LANE, X.TRFTYPE, X.STATHOUR, X.TFVL \r\n"
  549. " FROM (SELECT /*+ INDEX(A PK_VDS_DTCT_HH_STAT) */ \r\n"
  550. " 'DTCT' AS TRFTYPE, \r\n"
  551. " A.VDS_DTCT_NMBR AS DTCT_NMBR, SUBSTR(A.STAT_DT, 9, 2) AS STATHOUR, \r\n"
  552. " A.TFVL AS TFVL \r\n"
  553. " FROM TB_VDS_DTCT_HH_STAT A \r\n"
  554. " WHERE 1=1 \r\n"
  555. " AND A.STAT_DT BETWEEN :p01 AND :p02 \r\n"
  556. " ) X, \r\n"
  557. " TB_VDS_DTCT Y \r\n"
  558. " WHERE 1=1 \r\n"
  559. " AND Y.DEL_YN = 'N' \r\n"
  560. " AND Y.VDS_DTCT_NMBR = X.DTCT_NMBR \r\n"
  561. " ) \r\n"
  562. " GROUP BY ROLLUP (DTCT_NMBR, ISTL_LANE, TRFTYPE) \r\n"
  563. " HAVING GROUPING(TRFTYPE) = 0 \r\n"
  564. " ) LX, \r\n"
  565. " ( \r\n"
  566. " SELECT A.VDS_CTLR_NMBR, A.VDS_CTLR_ID, A.VDS_NM AS LCTN, B.VDS_DTCT_NMBR AS DTCT_NMBR, \r\n"
  567. " B.ISTL_LANE, B.VDS_DTCT_NM, B.DTCT_TYPE, \r\n"
  568. " (SELECT CMMN_CD_KOR_NM \r\n"
  569. " FROM TB_CMMN_CD \r\n"
  570. " WHERE CMMN_CLSF_CD = 'DTT' \r\n"
  571. " AND CMMN_CD = B.DTCT_TYPE) AS DTCT_TYPE_NM \r\n"
  572. " FROM TB_VDS_CTLR A, \r\n"
  573. " TB_VDS_DTCT B \r\n"
  574. " WHERE 1=1 \r\n"
  575. " AND A.DEL_YN = 'N' \r\n"
  576. " AND B.DEL_YN = 'N' \r\n"
  577. " AND A.VDS_CTLR_NMBR = B.VDS_CTLR_NMBR \r\n"
  578. " ) LY \r\n"
  579. " WHERE LY.DTCT_NMBR = LX.DTCT_NMBR \r\n"
  580. //" WHERE LY.DTCT_NMBR = LX.DTCT_NMBR(+) \r\n"
  581. " ORDER BY LY.VDS_CTLR_NMBR, LY.DTCT_NMBR, LY.ISTL_LANE \r\n";
  582. //" ORDER BY LY.VDS_CTLR_NMBR, LY.DTCT_TYPE_NM, LY.ISTL_LANE, LY.DTCT_NMBR \r\n";
  583. try
  584. {
  585. ITSDb_SQLText(ADOD, sQry, false);
  586. ADOD->CursorType = ctOpenForwardOnly;
  587. ADOD->LockType = ltReadOnly;
  588. ITSDb_SQLBind(ADOD, "p01", sFrom);
  589. ITSDb_SQLBind(ADOD, "p02", sTo);
  590. ITSDb_SQLOpen(ADOD);
  591. ShowRecordCount(ADOD->RecordCount);
  592. }
  593. catch(EDatabaseError &E)
  594. {
  595. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  596. DBERRORMSG(Caption, String(E.ClassName()), E.Message, sQry);
  597. throw Exception(String(E.ClassName()) + E.Message);
  598. }
  599. catch(Exception &e)
  600. {
  601. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  602. DBERRORMSG(Caption, String(e.ClassName()), e.Message, sQry);
  603. throw Exception(String(e.ClassName()) + e.Message);
  604. }
  605. }
  606. //---------------------------------------------------------------------------
  607. /*
  608. * 일별 월 통계 데이터 조회/출력
  609. * arguments
  610. *
  611. * return
  612. * void
  613. */
  614. void __fastcall TVDSS020M::DispMonthStatistics()
  615. {
  616. String sQry = "";
  617. String sMM;
  618. String sFrom, sTo;
  619. String sTmp;
  620. int ii;
  621. sMM = DtMon->Date.FormatString("yyyyMM");
  622. sFrom = sMM + "01000000";
  623. sTo = sMM + "31235959";
  624. String sStTm = DtStTime->Time.FormatString("hhnn");
  625. String sEdTm = DtEdTime->Time.FormatString("hhnn");
  626. sQry =
  627. "SELECT LY.VDS_CTLR_NMBR, LY.VDS_CTLR_ID, LY.LCTN, LY.DTCT_NMBR, LY.ISTL_LANE, LY.VDS_DTCT_NM, \r\n"
  628. " LY.DTCT_TYPE, LY.DTCT_TYPE_NM, LX.TRFTYPE, LY.VDS_CTLR_NMBR || '.' || LY.LCTN AS NM, \r\n"
  629. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(TOTTFVL, 0, 0, TOTTFVL)) AS TOTTFVL, \r\n"
  630. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(AVGTFVL, 0, 0, AVGTFVL)) AS AVGTFVLX, \r\n"
  631. " DECODE(NVL(L01,0)+NVL(L02,0)+NVL(L03,0)+NVL(L04,0)+NVL(L05,0)+NVL(L06,0)+NVL(L07,0)+ \r\n"
  632. " NVL(L08,0)+NVL(L09,0)+NVL(L10,0)+NVL(L11,0)+NVL(L12,0)+NVL(L13,0)+NVL(L14,0)+ \r\n"
  633. " NVL(L15,0)+NVL(L16,0)+NVL(L17,0)+NVL(L18,0)+NVL(L19,0)+NVL(L20,0)+NVL(L21,0)+ \r\n"
  634. " NVL(L22,0)+NVL(L23,0)+NVL(L24,0)+NVL(L25,0)+NVL(L26,0)+NVL(L27,0)+NVL(L28,0)+ \r\n"
  635. " NVL(L29,0)+NVL(L30,0)+NVL(L31,0), 0, 0, \r\n"
  636. " ROUND( \r\n"
  637. " (NVL(L01,0)+NVL(L02,0)+NVL(L03,0)+NVL(L04,0)+NVL(L05,0)+NVL(L06,0)+NVL(L07,0)+ \r\n"
  638. " NVL(L08,0)+NVL(L09,0)+NVL(L10,0)+NVL(L11,0)+NVL(L12,0)+NVL(L13,0)+NVL(L14,0)+ \r\n"
  639. " NVL(L15,0)+NVL(L16,0)+NVL(L17,0)+NVL(L18,0)+NVL(L19,0)+NVL(L20,0)+NVL(L21,0)+ \r\n"
  640. " NVL(L22,0)+NVL(L23,0)+NVL(L24,0)+NVL(L25,0)+NVL(L26,0)+NVL(L27,0)+NVL(L28,0)+ \r\n"
  641. " NVL(L29,0)+NVL(L30,0)+NVL(L31,0)) / \r\n"
  642. " (DECODE(L01,NULL,0,1)+DECODE(L02,NULL,0,1)+DECODE(L03,NULL,0,1)+ \r\n"
  643. " DECODE(L04,NULL,0,1)+DECODE(L05,NULL,0,1)+DECODE(L06,NULL,0,1)+ \r\n"
  644. " DECODE(L07,NULL,0,1)+DECODE(L08,NULL,0,1)+DECODE(L09,NULL,0,1)+ \r\n"
  645. " DECODE(L10,NULL,0,1)+DECODE(L11,NULL,0,1)+DECODE(L12,NULL,0,1)+ \r\n"
  646. " DECODE(L13,NULL,0,1)+DECODE(L14,NULL,0,1)+DECODE(L15,NULL,0,1)+ \r\n"
  647. " DECODE(L16,NULL,0,1)+DECODE(L17,NULL,0,1)+DECODE(L18,NULL,0,1)+ \r\n"
  648. " DECODE(L19,NULL,0,1)+DECODE(L20,NULL,0,1)+DECODE(L21,NULL,0,1)+ \r\n"
  649. " DECODE(L22,NULL,0,1)+DECODE(L23,NULL,0,1)+DECODE(L24,NULL,0,1)+ \r\n"
  650. " DECODE(L25,NULL,0,1)+DECODE(L26,NULL,0,1)+DECODE(L27,NULL,0,1)+ \r\n"
  651. " DECODE(L28,NULL,0,1)+DECODE(L29,NULL,0,1)+DECODE(L30,NULL,0,1)+ \r\n"
  652. " DECODE(L31,NULL,0,1)), 0)) AS AVGTFVL, \r\n"
  653. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L01, NULL, 0, L01)) AS C01, \r\n"
  654. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L02, NULL, 0, L02)) AS C02, \r\n"
  655. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L03, NULL, 0, L03)) AS C03, \r\n"
  656. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L04, NULL, 0, L04)) AS C04, \r\n"
  657. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L05, NULL, 0, L05)) AS C05, \r\n"
  658. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L06, NULL, 0, L06)) AS C06, \r\n"
  659. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L07, NULL, 0, L07)) AS C07, \r\n"
  660. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L08, NULL, 0, L08)) AS C08, \r\n"
  661. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L09, NULL, 0, L09)) AS C09, \r\n"
  662. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L10, NULL, 0, L10)) AS C10, \r\n"
  663. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L11, NULL, 0, L11)) AS C11, \r\n"
  664. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L12, NULL, 0, L12)) AS C12, \r\n"
  665. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L13, NULL, 0, L13)) AS C13, \r\n"
  666. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L14, NULL, 0, L14)) AS C14, \r\n"
  667. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L15, NULL, 0, L15)) AS C15, \r\n"
  668. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L16, NULL, 0, L16)) AS C16, \r\n"
  669. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L17, NULL, 0, L17)) AS C17, \r\n"
  670. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L18, NULL, 0, L18)) AS C18, \r\n"
  671. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L19, NULL, 0, L19)) AS C19, \r\n"
  672. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L20, NULL, 0, L20)) AS C20, \r\n"
  673. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L21, NULL, 0, L21)) AS C21, \r\n"
  674. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L22, NULL, 0, L22)) AS C22, \r\n"
  675. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L23, NULL, 0, L23)) AS C23, \r\n"
  676. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L24, NULL, 0, L24)) AS C24, \r\n"
  677. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L25, NULL, 0, L25)) AS C25, \r\n"
  678. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L26, NULL, 0, L26)) AS C26, \r\n"
  679. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L27, NULL, 0, L27)) AS C27, \r\n"
  680. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L28, NULL, 0, L28)) AS C28, \r\n"
  681. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L29, NULL, 0, L29)) AS C29, \r\n"
  682. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L30, NULL, 0, L30)) AS C30, \r\n"
  683. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L31, NULL, 0, L31)) AS C31 \r\n"
  684. " FROM ( \r\n"
  685. " SELECT GROUPING(DTCT_NMBR) AS GROUPING_DTCT_NMBR, \r\n"
  686. " GROUPING(ISTL_LANE) AS GROUPING_ISTL_LANE, \r\n"
  687. " GROUPING(TRFTYPE) AS GROUPING_TRFTYPE, \r\n"
  688. " CASE WHEN GROUPING(DTCT_NMBR ) = 1 THEN '검지기' ELSE DTCT_NMBR END AS GROUP_DTCT_NMBR, \r\n"
  689. " CASE WHEN GROUPING(ISTL_LANE) = 1 THEN '차로' ELSE ISTL_LANE END AS GROUP_ISTL_LANE, \r\n"
  690. " CASE WHEN GROUPING(TRFTYPE) = 1 THEN '소계' ELSE TRFTYPE END AS GROUP_TRFTYPE, \r\n"
  691. " DTCT_NMBR, ISTL_LANE, TRFTYPE, \r\n"
  692. " SUM(TFVL) TOTTFVL, \r\n"
  693. " ROUND(AVG(TFVL), 0) AVGTFVL, \r\n"
  694. " SUM(DECODE(STATDAY, '01', TFVL)) AS L01, \r\n"
  695. " SUM(DECODE(STATDAY, '02', TFVL)) AS L02, \r\n"
  696. " SUM(DECODE(STATDAY, '03', TFVL)) AS L03, \r\n"
  697. " SUM(DECODE(STATDAY, '04', TFVL)) AS L04, \r\n"
  698. " SUM(DECODE(STATDAY, '05', TFVL)) AS L05, \r\n"
  699. " SUM(DECODE(STATDAY, '06', TFVL)) AS L06, \r\n"
  700. " SUM(DECODE(STATDAY, '07', TFVL)) AS L07, \r\n"
  701. " SUM(DECODE(STATDAY, '08', TFVL)) AS L08, \r\n"
  702. " SUM(DECODE(STATDAY, '09', TFVL)) AS L09, \r\n"
  703. " SUM(DECODE(STATDAY, '10', TFVL)) AS L10, \r\n"
  704. " SUM(DECODE(STATDAY, '11', TFVL)) AS L11, \r\n"
  705. " SUM(DECODE(STATDAY, '12', TFVL)) AS L12, \r\n"
  706. " SUM(DECODE(STATDAY, '13', TFVL)) AS L13, \r\n"
  707. " SUM(DECODE(STATDAY, '14', TFVL)) AS L14, \r\n"
  708. " SUM(DECODE(STATDAY, '15', TFVL)) AS L15, \r\n"
  709. " SUM(DECODE(STATDAY, '16', TFVL)) AS L16, \r\n"
  710. " SUM(DECODE(STATDAY, '17', TFVL)) AS L17, \r\n"
  711. " SUM(DECODE(STATDAY, '18', TFVL)) AS L18, \r\n"
  712. " SUM(DECODE(STATDAY, '19', TFVL)) AS L19, \r\n"
  713. " SUM(DECODE(STATDAY, '20', TFVL)) AS L20, \r\n"
  714. " SUM(DECODE(STATDAY, '21', TFVL)) AS L21, \r\n"
  715. " SUM(DECODE(STATDAY, '22', TFVL)) AS L22, \r\n"
  716. " SUM(DECODE(STATDAY, '23', TFVL)) AS L23, \r\n"
  717. " SUM(DECODE(STATDAY, '24', TFVL)) AS L24, \r\n"
  718. " SUM(DECODE(STATDAY, '25', TFVL)) AS L25, \r\n"
  719. " SUM(DECODE(STATDAY, '26', TFVL)) AS L26, \r\n"
  720. " SUM(DECODE(STATDAY, '27', TFVL)) AS L27, \r\n"
  721. " SUM(DECODE(STATDAY, '28', TFVL)) AS L28, \r\n"
  722. " SUM(DECODE(STATDAY, '29', TFVL)) AS L29, \r\n"
  723. " SUM(DECODE(STATDAY, '30', TFVL)) AS L30, \r\n"
  724. " SUM(DECODE(STATDAY, '31', TFVL)) AS L31 \r\n"
  725. " FROM ( \r\n"
  726. " SELECT TO_CHAR(Y.VDS_DTCT_NMBR) AS DTCT_NMBR, Y.VDS_DTCT_NM, \r\n"
  727. " TO_CHAR(Y.ISTL_LANE) AS ISTL_LANE, X.TRFTYPE, X.STATDAY, X.TFVL \r\n"
  728. " FROM (SELECT /*+ INDEX(A PK_VDS_DTCT_HH_STAT) */ \r\n"
  729. " 'DTCT' AS TRFTYPE, \r\n"
  730. " A.VDS_DTCT_NMBR AS VDS_DTCT_NMBR, SUBSTR(A.STAT_DT, 7, 2) AS STATDAY, \r\n"
  731. " A.TFVL AS TFVL \r\n"
  732. " FROM TB_VDS_DTCT_HH_STAT A \r\n"
  733. " WHERE 1=1 \r\n"
  734. " AND A.STAT_DT BETWEEN :p01 AND :p02 \r\n"
  735. " AND SUBSTR(A.STAT_DT, 9, 4) BETWEEN :p03 AND :p04 \r\n"
  736. " ) X, \r\n"
  737. " TB_VDS_DTCT Y \r\n"
  738. " WHERE 1=1 \r\n"
  739. " AND Y.DEL_YN = 'N' \r\n"
  740. " AND Y.VDS_DTCT_NMBR = X.VDS_DTCT_NMBR \r\n"
  741. " ) \r\n"
  742. " GROUP BY ROLLUP (DTCT_NMBR, ISTL_LANE, TRFTYPE) \r\n"
  743. " HAVING GROUPING(TRFTYPE) = 0 \r\n"
  744. " ) LX, \r\n"
  745. " ( \r\n"
  746. " SELECT A.VDS_CTLR_NMBR, A.VDS_CTLR_ID, A.VDS_NM AS LCTN, B.VDS_DTCT_NMBR AS DTCT_NMBR, \r\n"
  747. " B.ISTL_LANE, B.VDS_DTCT_NM, B.DTCT_TYPE, \r\n"
  748. " (SELECT CMMN_CD_KOR_NM \r\n"
  749. " FROM TB_CMMN_CD \r\n"
  750. " WHERE CMMN_CLSF_CD = 'ACD' \r\n"
  751. " AND CMMN_CD = B.DTCT_TYPE) AS DTCT_TYPE_NM \r\n"
  752. " FROM TB_VDS_CTLR A, \r\n"
  753. " TB_VDS_DTCT B \r\n"
  754. " WHERE 1=1 \r\n"
  755. " AND A.DEL_YN = 'N' \r\n"
  756. " AND B.DEL_YN = 'N' \r\n"
  757. " AND A.VDS_CTLR_NMBR = B.VDS_CTLR_NMBR \r\n"
  758. " ) LY \r\n"
  759. " WHERE LY.DTCT_NMBR = LX.DTCT_NMBR \r\n"
  760. //" WHERE LY.DTCT_NMBR = LX.DTCT_NMBR(+) \r\n"
  761. " ORDER BY LY.VDS_CTLR_NMBR, LY.DTCT_NMBR, LY.ISTL_LANE \r\n";
  762. //" ORDER BY LY.VDS_CTLR_NMBR, LY.DTCT_TYPE_NM, LY.ISTL_LANE, LY.DTCT_NMBR \r\n";
  763. try
  764. {
  765. ITSDb_SQLText(ADOM, sQry, false);
  766. ADOM->CursorType = ctOpenForwardOnly;
  767. ADOM->LockType = ltReadOnly;
  768. ITSDb_SQLBind(ADOM, "p01", sFrom);
  769. ITSDb_SQLBind(ADOM, "p02", sTo);
  770. ITSDb_SQLBind(ADOM, "p03", sStTm);
  771. ITSDb_SQLBind(ADOM, "p04", sEdTm);
  772. ITSDb_SQLOpen(ADOM);
  773. ShowRecordCount(ADOM->RecordCount);
  774. }
  775. catch(EDatabaseError &E)
  776. {
  777. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  778. DBERRORMSG(Caption, String(E.ClassName()), E.Message, sQry);
  779. throw Exception(String(E.ClassName()) + E.Message);
  780. }
  781. catch(Exception &e)
  782. {
  783. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  784. DBERRORMSG(Caption, String(e.ClassName()), e.Message, sQry);
  785. throw Exception(String(e.ClassName()) + e.Message);
  786. }
  787. }
  788. //---------------------------------------------------------------------------
  789. /*
  790. * 월별 년 통계 데이터 조회/출력
  791. * arguments
  792. *
  793. * return
  794. * void
  795. */
  796. void __fastcall TVDSS020M::DispYearStatistics()
  797. {
  798. String sQry = "";
  799. String sMM;
  800. String sFrom, sTo;
  801. String sTmp;
  802. int ii;
  803. sMM = DtYear->Date.FormatString("yyyy");
  804. sFrom = sMM + "01000000";
  805. sTo = sMM + "12000000";
  806. sQry =
  807. "SELECT LY.VDS_CTLR_NMBR, LY.VDS_CTLR_ID, LY.LCTN, LY.DTCT_NMBR, LY.ISTL_LANE, LY.VDS_DTCT_NM, \r\n"
  808. " LY.DTCT_TYPE, LY.DTCT_TYPE_NM, LX.TRFTYPE, LY.VDS_CTLR_NMBR || '.' || LY.LCTN AS NM, \r\n"
  809. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(TOTTFVL, 0, 0, TOTTFVL)) AS TOTTFVL, \r\n"
  810. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(AVGTFVL, 0, 0, AVGTFVL)) AS AVGTFVLX, \r\n"
  811. " DECODE(NVL(L01,0)+NVL(L02,0)+NVL(L03,0)+NVL(L04,0)+NVL(L05,0)+NVL(L06,0)+NVL(L07,0)+ \r\n"
  812. " NVL(L08,0)+NVL(L09,0)+NVL(L10,0)+NVL(L11,0)+NVL(L12,0), 0, 0, \r\n"
  813. " ROUND( \r\n"
  814. " (NVL(L01,0)+NVL(L02,0)+NVL(L03,0)+NVL(L04,0)+NVL(L05,0)+NVL(L06,0)+NVL(L07,0)+ \r\n"
  815. " NVL(L08,0)+NVL(L09,0)+NVL(L10,0)+NVL(L11,0)+NVL(L12,0)) / \r\n"
  816. " (DECODE(L01,NULL,0,1)+DECODE(L02,NULL,0,1)+DECODE(L03,NULL,0,1)+ \r\n"
  817. " DECODE(L04,NULL,0,1)+DECODE(L05,NULL,0,1)+DECODE(L06,NULL,0,1)+ \r\n"
  818. " DECODE(L07,NULL,0,1)+DECODE(L08,NULL,0,1)+DECODE(L09,NULL,0,1)+ \r\n"
  819. " DECODE(L10,NULL,0,1)+DECODE(L11,NULL,0,1)+DECODE(L12,NULL,0,1)), 0)) AS AVGTFVL, \r\n"
  820. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L01, NULL, 0, L01)) AS C01, \r\n"
  821. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L02, NULL, 0, L02)) AS C02, \r\n"
  822. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L03, NULL, 0, L03)) AS C03, \r\n"
  823. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L04, NULL, 0, L04)) AS C04, \r\n"
  824. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L05, NULL, 0, L05)) AS C05, \r\n"
  825. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L06, NULL, 0, L06)) AS C06, \r\n"
  826. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L07, NULL, 0, L07)) AS C07, \r\n"
  827. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L08, NULL, 0, L08)) AS C08, \r\n"
  828. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L09, NULL, 0, L09)) AS C09, \r\n"
  829. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L10, NULL, 0, L10)) AS C10, \r\n"
  830. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L11, NULL, 0, L11)) AS C11, \r\n"
  831. " DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L12, NULL, 0, L12)) AS C12 \r\n"
  832. " FROM ( \r\n"
  833. " SELECT GROUPING(DTCT_NMBR) AS GROUPING_DTCT_NMBR, \r\n"
  834. " GROUPING(ISTL_LANE) AS GROUPING_ISTL_LANE, \r\n"
  835. " GROUPING(TRFTYPE) AS GROUPING_TRFTYPE, \r\n"
  836. " CASE WHEN GROUPING(DTCT_NMBR ) = 1 THEN '검지기' ELSE DTCT_NMBR END AS GROUP_DTCT_NMBR, \r\n"
  837. " CASE WHEN GROUPING(ISTL_LANE) = 1 THEN '차로' ELSE ISTL_LANE END AS GROUP_ISTL_LANE, \r\n"
  838. " CASE WHEN GROUPING(TRFTYPE) = 1 THEN '소계' ELSE TRFTYPE END AS GROUP_TRFTYPE, \r\n"
  839. " DTCT_NMBR, ISTL_LANE, TRFTYPE, \r\n"
  840. " SUM(TFVL) TOTTFVL, \r\n"
  841. " ROUND(AVG(TFVL), 0) AVGTFVL, \r\n"
  842. " SUM(DECODE(STATDAY, '01', TFVL)) AS L01, \r\n"
  843. " SUM(DECODE(STATDAY, '02', TFVL)) AS L02, \r\n"
  844. " SUM(DECODE(STATDAY, '03', TFVL)) AS L03, \r\n"
  845. " SUM(DECODE(STATDAY, '04', TFVL)) AS L04, \r\n"
  846. " SUM(DECODE(STATDAY, '05', TFVL)) AS L05, \r\n"
  847. " SUM(DECODE(STATDAY, '06', TFVL)) AS L06, \r\n"
  848. " SUM(DECODE(STATDAY, '07', TFVL)) AS L07, \r\n"
  849. " SUM(DECODE(STATDAY, '08', TFVL)) AS L08, \r\n"
  850. " SUM(DECODE(STATDAY, '09', TFVL)) AS L09, \r\n"
  851. " SUM(DECODE(STATDAY, '10', TFVL)) AS L10, \r\n"
  852. " SUM(DECODE(STATDAY, '11', TFVL)) AS L11, \r\n"
  853. " SUM(DECODE(STATDAY, '12', TFVL)) AS L12 \r\n"
  854. " FROM ( \r\n"
  855. " SELECT TO_CHAR(Y.VDS_DTCT_NMBR) AS DTCT_NMBR, Y.VDS_DTCT_NM, \r\n"
  856. " TO_CHAR(Y.ISTL_LANE) AS ISTL_LANE, X.TRFTYPE, X.STATDAY, X.TFVL \r\n"
  857. " FROM (SELECT /*+ INDEX(A PK_VDS_DTCT_MN_STAT) */ \r\n"
  858. " 'DTCT' AS TRFTYPE, \r\n"
  859. " A.VDS_DTCT_NMBR AS VDS_DTCT_NMBR, SUBSTR(A.STAT_DT, 5, 2) AS STATDAY, \r\n"
  860. " A.TFVL AS TFVL \r\n"
  861. " FROM TB_VDS_DTCT_MN_STAT A \r\n"
  862. " WHERE 1=1 \r\n"
  863. " AND A.STAT_DT BETWEEN :p01 AND :p02 \r\n"
  864. " ) X, \r\n"
  865. " TB_VDS_DTCT Y \r\n"
  866. " WHERE 1=1 \r\n"
  867. " AND Y.DEL_YN = 'N' \r\n"
  868. " AND Y.VDS_DTCT_NMBR = X.VDS_DTCT_NMBR \r\n"
  869. " ) \r\n"
  870. " GROUP BY ROLLUP (DTCT_NMBR, ISTL_LANE, TRFTYPE) \r\n"
  871. " HAVING GROUPING(TRFTYPE) = 0 \r\n"
  872. " ) LX, \r\n"
  873. " ( \r\n"
  874. " SELECT A.VDS_CTLR_NMBR, A.VDS_CTLR_ID, A.VDS_NM AS LCTN, B.VDS_DTCT_NMBR AS DTCT_NMBR, \r\n"
  875. " B.ISTL_LANE, B.VDS_DTCT_NM, B.DTCT_TYPE, \r\n"
  876. " (SELECT CMMN_CD_KOR_NM \r\n"
  877. " FROM TB_CMMN_CD \r\n"
  878. " WHERE CMMN_CLSF_CD = 'ACD' \r\n"
  879. " AND CMMN_CD = B.DTCT_TYPE) AS DTCT_TYPE_NM \r\n"
  880. " FROM TB_VDS_CTLR A, \r\n"
  881. " TB_VDS_DTCT B \r\n"
  882. " WHERE 1=1 \r\n"
  883. " AND A.DEL_YN = 'N' \r\n"
  884. " AND B.DEL_YN = 'N' \r\n"
  885. " AND A.VDS_CTLR_NMBR = B.VDS_CTLR_NMBR \r\n"
  886. " ) LY \r\n"
  887. " WHERE LY.DTCT_NMBR = LX.DTCT_NMBR \r\n"
  888. " ORDER BY LY.VDS_CTLR_NMBR, LY.DTCT_NMBR, LY.ISTL_LANE \r\n";
  889. try
  890. {
  891. ITSDb_SQLText(ADOY, sQry, false);
  892. ADOY->CursorType = ctOpenForwardOnly;
  893. ADOY->LockType = ltReadOnly;
  894. ITSDb_SQLBind(ADOY, "p01", sFrom);
  895. ITSDb_SQLBind(ADOY, "p02", sTo);
  896. ITSDb_SQLOpen(ADOY);
  897. ShowRecordCount(ADOY->RecordCount);
  898. }
  899. catch(EDatabaseError &E)
  900. {
  901. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  902. DBERRORMSG(Caption, String(E.ClassName()), E.Message, sQry);
  903. throw Exception(String(E.ClassName()) + E.Message);
  904. }
  905. catch(Exception &e)
  906. {
  907. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  908. DBERRORMSG(Caption, String(e.ClassName()), e.Message, sQry);
  909. throw Exception(String(e.ClassName()) + e.Message);
  910. }
  911. }
  912. //---------------------------------------------------------------------------
  913. void __fastcall TVDSS020M::ShowRecordCount(int nRecCnt)
  914. {
  915. //
  916. }
  917. //---------------------------------------------------------------------------
  918. void __fastcall TVDSS020M::BtnCloseClick(TObject *Sender)
  919. {
  920. Close();
  921. }
  922. //---------------------------------------------------------------------------
  923. void __fastcall TVDSS020M::vDayColumnCustomDrawCell(TcxCustomGridTableView *Sender, TcxCanvas *ACanvas, TcxGridTableDataCellViewInfo *AViewInfo,
  924. bool &ADone)
  925. {
  926. TColor tColor = ACanvas->Brush->Color;
  927. try
  928. {
  929. if (!VarIsNull(AViewInfo->Value))
  930. {
  931. int sSpd = AViewInfo->Value;
  932. if (sSpd == NULL || sSpd == 0)// || sSpd == "-")
  933. {
  934. tColor = clFuchsia;
  935. }
  936. }
  937. else
  938. {
  939. tColor = clFuchsia;
  940. }
  941. ACanvas->Font->Color = clBlack;
  942. ACanvas->SetBrushColor(tColor);
  943. }
  944. catch(...)
  945. {
  946. }
  947. }
  948. //---------------------------------------------------------------------------
  949. void __fastcall TVDSS020M::FormClose(TObject *Sender, TCloseAction &Action)
  950. {
  951. CommClose();
  952. VDSS020M = NULL;
  953. Action = caFree;
  954. }
  955. //---------------------------------------------------------------------------
  956. void __fastcall TVDSS020M::ChkExpandClick(TObject *Sender)
  957. {
  958. CMM_ExpandCollapseChk(TvDay, ChkExpand->Checked);
  959. }
  960. //---------------------------------------------------------------------------
  961. void __fastcall TVDSS020M::ChkExpand2Click(TObject *Sender)
  962. {
  963. CMM_ExpandCollapseChk(TvMon, ChkExpand2->Checked);
  964. }
  965. //---------------------------------------------------------------------------
  966. void __fastcall TVDSS020M::ChkExpand3Click(TObject *Sender)
  967. {
  968. CMM_ExpandCollapseChk(TvYear, ChkExpand3->Checked);
  969. }
  970. //---------------------------------------------------------------------------
  971. void __fastcall TVDSS020M::TvDayTcxGridDBDataControllerTcxDataSummaryFooterSummaryItems0GetText(TcxDataSummaryItem *Sender,
  972. const Variant &AValue, bool AIsFooter, UnicodeString &AText)
  973. {
  974. AText = "합계";
  975. }
  976. //---------------------------------------------------------------------------
  977. void __fastcall TVDSS020M::TvDayTcxGridDBDataControllerTcxDataSummaryDefaultGroupSummaryItems0GetText(TcxDataSummaryItem *Sender,
  978. const Variant &AValue, bool AIsFooter, UnicodeString &AText)
  979. {
  980. AText = "소계";
  981. }
  982. //---------------------------------------------------------------------------
  983. void __fastcall TVDSS020M::TvMonTcxGridDBDataControllerTcxDataSummaryFooterSummaryItems0GetText(TcxDataSummaryItem *Sender,
  984. const Variant &AValue, bool AIsFooter, UnicodeString &AText)
  985. {
  986. AText = "합계";
  987. }
  988. //---------------------------------------------------------------------------
  989. void __fastcall TVDSS020M::TvMonTcxGridDBDataControllerTcxDataSummaryDefaultGroupSummaryItems0GetText(TcxDataSummaryItem *Sender,
  990. const Variant &AValue, bool AIsFooter, UnicodeString &AText)
  991. {
  992. AText = "소계";
  993. }
  994. //---------------------------------------------------------------------------
  995. void __fastcall TVDSS020M::TvYearTcxGridDBDataControllerTcxDataSummaryFooterSummaryItems0GetText(TcxDataSummaryItem *Sender,
  996. const Variant &AValue, bool AIsFooter, UnicodeString &AText)
  997. {
  998. AText = "합계";
  999. }
  1000. //---------------------------------------------------------------------------
  1001. void __fastcall TVDSS020M::TvYearTcxGridDBDataControllerTcxDataSummaryDefaultGroupSummaryItems0GetText(TcxDataSummaryItem *Sender,
  1002. const Variant &AValue, bool AIsFooter, UnicodeString &AText)
  1003. {
  1004. AText = "소계";
  1005. }
  1006. //---------------------------------------------------------------------------
  1007. void __fastcall TVDSS020M::TvListDataControllerSummaryFooterSummaryItemsSummary(TcxDataSummaryItems *ASender, TcxSummaryEventArguments &Arguments,
  1008. TcxSummaryEventOutArguments &OutArguments)
  1009. {
  1010. CMM_SetSummaryItemKind(Arguments, OutArguments, 2, false, false);
  1011. }
  1012. //---------------------------------------------------------------------------
  1013. void __fastcall TVDSS020M::TvListDataControllerSummaryDefaultGroupSummaryItemsSummary(TcxDataSummaryItems *ASender, TcxSummaryEventArguments &Arguments,
  1014. TcxSummaryEventOutArguments &OutArguments)
  1015. {
  1016. CMM_SetSummaryItemKind(Arguments, OutArguments, 1, false, false);
  1017. }
  1018. //---------------------------------------------------------------------------
  1019. void __fastcall TVDSS020M::TvDayDataControllerSummaryDefaultGroupSummaryItemsSummary(TcxDataSummaryItems *ASender, TcxSummaryEventArguments &Arguments,
  1020. TcxSummaryEventOutArguments &OutArguments)
  1021. {
  1022. APP_SetSummaryItemKind(Arguments, OutArguments, 1, false, false);
  1023. }
  1024. //---------------------------------------------------------------------------
  1025. void __fastcall TVDSS020M::TvMonDataControllerSummaryDefaultGroupSummaryItemsSummary(TcxDataSummaryItems *ASender, TcxSummaryEventArguments &Arguments,
  1026. TcxSummaryEventOutArguments &OutArguments)
  1027. {
  1028. APP_SetSummaryItemKind(Arguments, OutArguments, 1, false, false);
  1029. }
  1030. //---------------------------------------------------------------------------
  1031. void __fastcall TVDSS020M::TvYearDataControllerSummaryDefaultGroupSummaryItemsSummary(TcxDataSummaryItems *ASender, TcxSummaryEventArguments &Arguments,
  1032. TcxSummaryEventOutArguments &OutArguments)
  1033. {
  1034. APP_SetSummaryItemKind(Arguments, OutArguments, 1, false, false);
  1035. }
  1036. //---------------------------------------------------------------------------
  1037. void __fastcall TVDSS020M::TvDayDataControllerSummaryFooterSummaryItemsSummary(TcxDataSummaryItems *ASender, TcxSummaryEventArguments &Arguments,
  1038. TcxSummaryEventOutArguments &OutArguments)
  1039. {
  1040. APP_SetSummaryItemKind(Arguments, OutArguments, 2, false, false);
  1041. }
  1042. //---------------------------------------------------------------------------
  1043. void __fastcall TVDSS020M::TvMonDataControllerSummaryFooterSummaryItemsSummary(TcxDataSummaryItems *ASender, TcxSummaryEventArguments &Arguments,
  1044. TcxSummaryEventOutArguments &OutArguments)
  1045. {
  1046. APP_SetSummaryItemKind(Arguments, OutArguments, 2, false, false);
  1047. }
  1048. //---------------------------------------------------------------------------
  1049. void __fastcall TVDSS020M::TvYearDataControllerSummaryFooterSummaryItemsSummary(TcxDataSummaryItems *ASender, TcxSummaryEventArguments &Arguments,
  1050. TcxSummaryEventOutArguments &OutArguments)
  1051. {
  1052. APP_SetSummaryItemKind(Arguments, OutArguments, 2, false, false);
  1053. }
  1054. //---------------------------------------------------------------------------