VDSS020MF.cpp 47 KB

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