PageRenderTime 67ms CodeModel.GetById 25ms app.highlight 16ms RepoModel.GetById 12ms app.codeStats 1ms

/jf/PHPReportMaker/Templates/phprpt50.zip/Script/rpt-summary.php

http://tinkerportal.googlecode.com/
PHP | 2035 lines | 1719 code | 154 blank | 162 comment | 119 complexity | d708bc1fd888b9956df307bf9e4b6eb3 MD5 | raw file

Large files files are truncated, but you can click here to view the full file

   1<!--##session phpconfig##-->
   2<!--##
   3	nSearchFlds = 0 ' number of search fields
   4
   5	' Group Fields variables
   6	Dim arrGrpFlds
   7	sGroupFldNames = SYSTEMFUNCTIONS.GroupByFieldNames ' List of Group Field Names
   8	If sGroupFldNames = "" Then
   9		nGrps = 0
  10	Else
  11		arrGrps = split(sGroupFldNames, vbCrLf)
  12		nGrps = UBound(arrGrps)+1 ' Number of Group Fields
  13		' Group field array
  14		Redim arrGrpFlds(10,nGrps-1)
  15		For i = 0 to nGrps-1
  16			Set FIELD = TABLE.Fields(arrGrps(i))
  17			sFldVar = FIELD.FldVar
  18			' Get first group field name and type
  19			If i = 0 Then
  20				sFirstGrpFldName = FIELD.FldName
  21				sFirstGrpFldParm = FIELD.FldParm
  22				sFirstGrpFldObj = sTblVar & "->" & sFirstGrpFldParm
  23				sFirstGrpFldSql = ew_FieldSqlName(FIELD)
  24				sFirstGrpFldGroupByType = FIELD.FldGroupByType
  25				sFirstGrpFldGroupByInterval = FIELD.FldGroupByInterval
  26				sFirstGrpDbGrpSql = ew_DbGrpSql(sFirstGrpFldGroupByType, sFirstGrpFldGroupByInterval)
  27				SetupFldVar()
  28			End If
  29			arrGrpFlds(0,i) = FIELD.FldName ' field name
  30			arrGrpFlds(1,i) = FIELD.FldVar ' field variable
  31			arrGrpFlds(2,i) = FIELD.FldCaption ' field caption
  32			If FIELD.FldType = 201 Or FIELD.FldType = 203 Then ' memo field
  33				arrGrpFlds(3,i) = False ' skip popup filter if memo field
  34			Else
  35				arrGrpFlds(3,i) = IsPopupFilter(FIELD) ' generate popup filter
  36			End If
  37			If IsPopupFilter(FIELD) Then nSearchFlds = nSearchFlds + 1
  38			arrGrpFlds(4,i) = FIELD.FldFilterName ' Popup filter name
  39			arrGrpFlds(5,i) = FIELD.FldType ' field type
  40			If FIELD.FldUseRange Then ' field use range
  41				arrGrpFlds(6,i) = "true"
  42			Else
  43				arrGrpFlds(6,i) = "false"
  44			End If
  45			arrGrpFlds(7,i) = FIELD.FldGroupByShowSummary ' show summary required
  46			arrGrpFlds(8,i) = FIELD.FldGroupByType ' field grouping type
  47			arrGrpFlds(9,i) = FIELD.FldGroupByInterval ' field grouping interval
  48			arrGrpFlds(10,i) = ew_DbGrpSql(FIELD.FldGroupByType, FIELD.FldGroupByInterval) ' field grouping sql
  49		Next
  50	End If
  51
  52	' Detail Fields variables
  53	Dim arrDtlFlds, arrSmry
  54	Redim arrDtlFlds(6,0)
  55	Redim arrSmry(3,1)
  56	arrSmry(0,0) = "Sum": arrSmry(1,0) = "Avg": arrSmry(2,0) = "Min": arrSmry(3,0) = "Max"
  57	arrSmry(0,1) = False: arrSmry(1,1) = False: arrSmry(2,1) = False: arrSmry(3,1) = False
  58	nDtls = 0
  59	For i = 1 to TABLE.Fields.Count
  60		Set FIELD = TABLE.Fields.Seq(i)
  61		If FIELD.FldList And FIELD.FldGroupBy <= 0 And FIELD.FldGenerate Then
  62			Redim Preserve arrDtlFlds(6,nDtls)
  63			Redim Preserve arrSmry(3,nDtls+2)
  64			arrDtlFlds(0,nDtls) = FIELD.FldName ' field name
  65			arrDtlFlds(1,nDtls) = FIELD.FldVar ' field variable
  66			arrDtlFlds(2,nDtls) = FIELD.FldCaption ' field caption
  67			If FIELD.FldType = 201 Or FIELD.FldType = 203 Then ' memo field
  68				arrDtlFlds(3,nDtls) = False ' skip popup filter if memo field
  69			Else
  70				arrDtlFlds(3,nDtls) = IsPopupFilter(FIELD) ' generate popup filter
  71			End If
  72			If IsPopupFilter(FIELD) Then nSearchFlds = nSearchFlds + 1
  73			arrDtlFlds(4,nDtls) = FIELD.FldFilterName ' Popup filter name
  74			arrDtlFlds(5,nDtls) = FIELD.FldType ' field type
  75			If FIELD.FldUseRange Then ' field use range
  76				arrDtlFlds(6,nDtls) = "true"
  77			Else
  78				arrDtlFlds(6,nDtls) = "false"
  79			End If
  80			arrSmry(0,nDtls+2) = FIELD.FldRptAggSum ' agg sum
  81			arrSmry(0,1) = arrSmry(0,1) Or arrSmry(0,nDtls+2)
  82			arrSmry(1,nDtls+2) = FIELD.FldRptAggAvg ' agg avg
  83			arrSmry(1,1) = arrSmry(1,1) Or arrSmry(1,nDtls+2)
  84			arrSmry(2,nDtls+2) = FIELD.FldRptAggMin ' agg min
  85			arrSmry(2,1) = arrSmry(2,1) Or arrSmry(2,nDtls+2)
  86			arrSmry(3,nDtls+2) = FIELD.FldRptAggMax ' agg max
  87			arrSmry(3,1) = arrSmry(3,1) Or arrSmry(3,nDtls+2)
  88			nDtls = nDtls + 1
  89		End If
  90	Next
  91
  92	bHasSummaryFields = (arrSmry(0,1) Or arrSmry(1,1) Or arrSmry(2,1) Or arrSmry(3,1))
  93	bShowDetails = TABLE.TblRptShowDetails
  94	If nGrps <= 0 And Not (bHasSummaryFields And (TABLE.TblRptShowPageTotal Or TABLE.TblRptShowGrandTotal)) Then bShowDetails = True
  95	If Not bShowDetails And bHasSummaryFields Then
  96		bShowSummaryView = TABLE.TblRptShowSummaryView ' Use summary view
  97	Else
  98		bShowSummaryView = False
  99	End If
 100
 101	' Remove grouping fields without show summary
 102	If bShowSummaryView Then
 103		Dim nGrps2, arrGrpFlds2
 104		nGrps2 = nGrps
 105		arrGrpFlds2 = arrGrpFlds
 106		For i = nGrps2-1 to 0 Step -1
 107			If Not arrGrpFlds(7,i) Then ' Show summary not enabled for last group
 108				If i = nGrps-1 Then
 109					nGrps = nGrps - 1
 110				Else
 111					nGrps = 0 ' Incorrect setting, show detail/summary instead
 112				End If
 113				If nGrps > 0 Then
 114					ReDim Preserve arrGrpFlds(UBound(arrGrpFlds,1),nGrps-1)
 115				Else
 116					arrGrpFlds = arrGrpFlds2
 117					nGrps = nGrps2
 118					bShowDetails = True
 119					bShowSummaryView = False
 120					Exit For
 121				End If
 122			End If
 123		Next
 124	End If
 125
 126	' Calculate slot size
 127	If bShowSummaryView Then
 128		nSlots = nGrps
 129		For i = 2 to UBound(arrSmry,2)
 130			For j = 0 to UBound(arrSmry,1)
 131				If arrSmry(j,i) Then nSlots = nSlots + 1
 132			Next
 133		Next
 134	Else
 135		nSlots = nGrps + nDtls
 136	End If
 137
 138	bShowYearSelection = False ' Crosstab only
 139##-->
 140<!--##/session##-->
 141
 142
 143<?php
 144<!--##session phpmain##-->
 145
 146	// Initialize common variables
 147	var $ExportOptions; // Export options
 148
 149	// Paging variables
 150	var $RecCount = 0; // Record count
 151	var $StartGrp = 0; // Start group
 152	var $StopGrp = 0; // Stop group
 153	var $TotalGrps = 0; // Total groups
 154	var $GrpCount = 0; // Group count
 155	var $DisplayGrps = <!--##=iGrpPerPage##-->; // Groups per page
 156	var $GrpRange = 10;
 157
 158	var $Sort = "";
 159	var $Filter = "";
 160	var $UserIDFilter = "";
 161
 162	// Clear field for ext filter
 163	var $ClearExtFilter = "";
 164	var $FilterApplied;
 165
 166	var $ShowFirstHeader;
 167
 168	var $Cnt, $Col, $Val, $Smry, $Mn, $Mx, $GrandSmry, $GrandMn, $GrandMx;
 169	var $TotCount;
 170
 171	//
 172	// Page main
 173	//
 174	function Page_Main() {
 175		global $<!--##=sTblVar##-->;
 176		global $rs;
 177		global $rsgrp;
 178	<!--## If bTableHasUserIDFld Then ##-->
 179		global $Security;
 180	<!--## End If ##-->
 181		global $gsFormError;
 182
 183	<!--## If bTableHasUserIDFld Then ##-->
 184		// Set up User ID
 185		$this->UserIDFilter = $<!--##=sTblVar##-->->GetUserIDFilter();
 186		$this->Filter = $this->UserIDFilter;
 187	<!--## End If ##-->
 188
 189		// Aggregate variables
 190		// 1st dimension = no of groups (level 0 used for grand total)
 191		// 2nd dimension = no of fields
 192		$nDtls = <!--##=nDtls+1##-->;
 193		$nGrps = <!--##=nGrps+1##-->;
 194		$this->Val =& ewrpt_InitArray($nDtls, 0);
 195		$this->Cnt =& ewrpt_Init2DArray($nGrps, $nDtls, 0);
 196		$this->Smry =& ewrpt_Init2DArray($nGrps, $nDtls, 0);
 197		$this->Mn =& ewrpt_Init2DArray($nGrps, $nDtls, NULL);
 198		$this->Mx =& ewrpt_Init2DArray($nGrps, $nDtls, NULL);
 199		$this->GrandSmry =& ewrpt_InitArray($nDtls, 0);
 200		$this->GrandMn =& ewrpt_InitArray($nDtls, NULL);
 201		$this->GrandMx =& ewrpt_InitArray($nDtls, NULL);
 202
 203		// Set up if accumulation required
 204	<!--##
 205		accum = "FALSE" ' first column not used
 206		For i = 0 to nDtls-1
 207			If arrSmry(0,i+2) Or arrSmry(1,i+2) Or _
 208				arrSmry(2,i+2) Or arrSmry(3,i+2) Then
 209				accum = accum & ", TRUE"
 210			Else
 211				accum = accum & ", FALSE"
 212			End If
 213		Next
 214	##-->
 215		$this->Col = array(<!--##=accum##-->);
 216
 217	<!--## If sGrpPerPageList <> "" Then ##-->
 218		// Set up groups per page dynamically
 219		$this->SetUpDisplayGrps();
 220	<!--## End If ##-->
 221
 222	<!--## If nGrps > 0 Then ##-->
 223	<!--##
 224		' Group popup & selection values
 225		For i = 0 to nGrps-1
 226			bGenFilter = arrGrpFlds(3,i)
 227			If bGenFilter Then
 228				sFldVar = arrGrpFlds(1,i)
 229				SetupFldVar()
 230	##-->
 231		$<!--##=sFldObj##-->->SelectionList = "";
 232		$<!--##=sFldObj##-->->DefaultSelectionList = "";
 233		$<!--##=sFldObj##-->->ValueList = "";
 234	<!--##
 235			End If
 236		Next
 237	##-->
 238	<!--## End If ##-->
 239
 240	<!--##
 241		' Detail popup & selection values
 242		For i = 0 to nDtls-1
 243			bGenFilter = arrDtlFlds(3,i)
 244			If bGenFilter Then
 245				sFldVar = arrDtlFlds(1,i)
 246				SetupFldVar()
 247	##-->
 248		$<!--##=sFldObj##-->->SelectionList = "";
 249		$<!--##=sFldObj##-->->DefaultSelectionList = "";
 250		$<!--##=sFldObj##-->->ValueList = "";
 251	<!--##
 252			End If
 253		Next
 254	##-->
 255
 256	<!--## If bReportExtFilter Or nSearchFlds > 0 Then ##-->
 257		// Load default filter values
 258		$this->LoadDefaultFilters();
 259	<!--## End If ##-->
 260
 261	<!--## If SYSTEMFUNCTIONS.ServerScriptExist("Table","Filters_Load") Then ##-->
 262		// Load custom filters
 263		$<!--##=sTblVar##-->->Filters_Load();
 264	<!--## End If ##-->
 265
 266		// Set up popup filter
 267		$this->SetupPopup();
 268
 269		// Extended filter
 270		$sExtendedFilter = "";
 271
 272	<!--## If bReportExtFilter Then ##-->
 273		// Get dropdown values
 274		$this->GetExtendedFilterValues();
 275
 276		// Build extended filter
 277		$sExtendedFilter = $this->GetExtendedFilter();
 278		if ($sExtendedFilter <> "") {
 279			if ($this->Filter <> "")
 280  				$this->Filter = "($this->Filter) AND ($sExtendedFilter)";
 281			else
 282				$this->Filter = $sExtendedFilter;
 283		}
 284	<!--## End If ##-->
 285
 286		// Build popup filter
 287		$sPopupFilter = $this->GetPopupFilter();
 288		//ewrpt_SetDebugMsg("popup filter: " . $sPopupFilter);
 289		if ($sPopupFilter <> "") {
 290			if ($this->Filter <> "")
 291				$this->Filter = "($this->Filter) AND ($sPopupFilter)";
 292			else
 293				$this->Filter = $sPopupFilter;
 294		}
 295
 296	<!--## If bReportExtFilter Or nSearchFlds > 0 Then ##-->
 297		// Check if filter applied
 298		$this->FilterApplied = $this->CheckFilter();
 299	<!--## Else ##-->
 300		// No filter
 301		$this->FilterApplied = FALSE;
 302	<!--## End If ##-->
 303
 304	<!--## If TABLE.TblShowBlankListPage Then ##-->
 305		// Requires search criteria
 306		if ($this->Filter == $this->UserIDFilter || $gsFormError != "")
 307			$this->Filter = "0=101";
 308	<!--## End If ##-->
 309
 310		$this->ExportOptions->GetItem("resetfilter")->Visible = $this->FilterApplied;
 311
 312		// Get sort
 313		$this->Sort = $this->GetSort();
 314
 315	<!--## If nGrps > 0 Then ##-->
 316		// Get total group count
 317		$sGrpSort = ewrpt_UpdateSortFields($<!--##=sTblVar##-->->SqlOrderByGroup(), $this->Sort, 2); // Get grouping field only
 318		$sSql = ewrpt_BuildReportSql($<!--##=sTblVar##-->->SqlSelectGroup(), $<!--##=sTblVar##-->->SqlWhere(), $<!--##=sTblVar##-->->SqlGroupBy(), $<!--##=sTblVar##-->->SqlHaving(), $<!--##=sTblVar##-->->SqlOrderByGroup(), $this->Filter, $sGrpSort);
 319		$this->TotalGrps = $this->GetGrpCnt($sSql);
 320	<!--## Else ##-->
 321		// Get total count
 322		$sSql = ewrpt_BuildReportSql($<!--##=sTblVar##-->->SqlSelect(), $<!--##=sTblVar##-->->SqlWhere(), $<!--##=sTblVar##-->->SqlGroupBy(), $<!--##=sTblVar##-->->SqlHaving(), $<!--##=sTblVar##-->->SqlOrderBy(), $this->Filter, $this->Sort);
 323		$this->TotalGrps = $this->GetCnt($sSql);
 324	<!--## End If ##-->
 325
 326		if ($this->DisplayGrps <= 0) // Display all groups
 327			$this->DisplayGrps = $this->TotalGrps;
 328		$this->StartGrp = 1;
 329
 330		// Show header
 331		$this->ShowFirstHeader = ($this->TotalGrps > 0);
 332		//$this->ShowFirstHeader = TRUE; // Uncomment to always show header
 333
 334		// Set up start position if not export all
 335		if ($<!--##=sTblVar##-->->ExportAll && $<!--##=sTblVar##-->->Export <> "")
 336		    $this->DisplayGrps = $this->TotalGrps;
 337		else
 338			$this->SetUpStartGroup(); 
 339
 340		// Hide all options if export
 341		if ($<!--##=sTblVar##-->->Export <> "") {
 342			$this->ExportOptions->HideAllOptions();
 343		}
 344
 345	<!--## If nGrps > 0 Then ##-->
 346		// Get current page groups
 347		$rsgrp = $this->GetGrpRs($sSql, $this->StartGrp, $this->DisplayGrps);
 348
 349		// Init detail recordset
 350		$rs = NULL;
 351	<!--## Else ##-->
 352		// Get current page records
 353		$rs = $this->GetRs($sSql, $this->StartGrp, $this->DisplayGrps);
 354	<!--## End If ##-->
 355
 356	}
 357
 358<!--##/session##-->
 359?>
 360
 361
 362<!--##session report_content##-->
 363<!--##=sChartExpStart##-->
 364<!--##include rpt-chartcommon-ext.php/chart_js_ext##-->
 365<!--##=sChartExpEnd##-->
 366<!--##=sExpStart##-->
 367<div id="ewrpt_PopupFilter"><div class="bd"></div></div>
 368<script src="<!--##=ew_FolderPath("_js")##-->/ewrptpop.js" type="text/javascript"></script>
 369<script type="text/javascript">
 370// popup fields
 371<!--##
 372For i = 0 to nGrps-1
 373	bGenFilter = arrGrpFlds(3,i)
 374	If bGenFilter Then
 375		sFldVar = arrGrpFlds(1,i)
 376		SetupFldVar()
 377		If arrGrpFlds(8,i) <> "" And arrGrpFlds(8,i) <> "n" Then ' grouping required
 378##-->
 379<?php $jsdata = ewrpt_GetJsData($<!--##=sFldObj##-->, EWRPT_DATATYPE_NONE); ?>
 380<!--##
 381		Else
 382##-->
 383<?php $jsdata = ewrpt_GetJsData($<!--##=sFldObj##-->, $<!--##=sFldObj##-->->FldType); ?>
 384<!--##
 385		End If
 386##-->
 387ewrpt_CreatePopup("<!--##=sSessionFldVar##-->", [<?php echo $jsdata ?>]);
 388<!--##
 389	End If
 390Next
 391
 392For i = 0 to nDtls-1
 393	bGenFilter = arrDtlFlds(3,i)
 394	If bGenFilter Then
 395		sFldVar = arrDtlFlds(1,i)
 396		SetupFldVar()
 397##-->
 398<?php $jsdata = ewrpt_GetJsData($<!--##=sFldObj##-->, $<!--##=sFldObj##-->->FldType); ?>
 399ewrpt_CreatePopup("<!--##=sSessionFldVar##-->", [<?php echo $jsdata ?>]);
 400<!--##
 401	End If
 402Next
 403##-->
 404</script>
 405<!--##=sExpEnd##-->
 406
 407<!--##=sChartExpStart##-->
 408<!-- Table Container (Begin) -->
 409<table id="ewContainer" cellspacing="0" cellpadding="0" border="0">
 410
 411<!-- Top Container (Begin) -->
 412<tr><td colspan="3"><div id="ewTop" class="phpreportmaker">
 413<!-- top slot -->
 414<a name="top"></a>
 415<!--##=sChartExpEnd##-->
 416
 417<p class="phpreportmaker ewTitle"><?php echo $<!--##=sTblVar##-->->TableCaption() ?>
 418&nbsp;&nbsp;<?php $<!--##=sPageObj##-->->ExportOptions->Render("body"); ?></p>
 419
 420<!--##include rpt-phpcommon.php/header-message##-->
 421<!--##include rpt-phpcommon.php/common-message##-->
 422
 423<!--## If Not bShowReport And Not bShowChart Then ##-->
 424<p class="ewMessage"><!--##@NoReportOrCharts##--></p>
 425<!--## End If ##-->
 426<br /><br />
 427
 428<!--##=sChartExpStart##-->
 429<!--##
 430' Generate charts (on top)
 431For i = 1 to TABLE.Charts.Count
 432	Set CHART = TABLE.Charts.Seq(i)
 433	If IsShowChart(CHART) And CHART.ChartPosition = 1 Then
 434		sChartVar = CHART.ChartVar
 435		sChartId = sChartVar
 436		If PROJ.OutputNameLCase Then sChartId = LCase(sChartId)
 437##-->
 438<a name="cht_<!--##=sChartId##-->"></a>
 439<div id="div_<!--##=sTblVar##-->_<!--##=sChartVar##-->"></div>
 440<!--##include rpt-chartcommon.php/chart_common##-->
 441<!--##include rpt-chartcommon-ext.php/chart_common_ext##-->
 442<!--##include rpt-chartcommon.php/chart_config##-->
 443<!--##include rpt-chartcommon-ext.php/chart_config_ext##-->
 444<!--##include rpt-chartcommon.php/chart_content##-->
 445<br /><br />
 446<!--##
 447	End If
 448Next
 449##-->
 450
 451</div></td></tr>
 452<!-- Top Container (End) -->
 453<tr>
 454
 455	<!-- Left Container (Begin) -->
 456<!--##
 457CurCellPadding = ""
 458If ew_ChartCount(2) > 0 Then CurCellPadding = " class=""ewPadding"""
 459##-->
 460	<td style="vertical-align: top;"<!--##=CurCellPadding##-->><div id="ewLeft" class="phpreportmaker">
 461	<!-- Left slot -->
 462
 463<!--##
 464' Generate charts (on left)
 465For i = 1 to TABLE.Charts.Count
 466	Set CHART = TABLE.Charts.Seq(i)
 467	If IsShowChart(CHART) And CHART.ChartPosition = 2 Then
 468		sChartVar = CHART.ChartVar
 469		sChartId = sChartVar
 470		If PROJ.OutputNameLCase Then sChartId = LCase(sChartId)
 471##-->
 472<a name="cht_<!--##=sChartId##-->"></a>
 473<div id="div_<!--##=sTblVar##-->_<!--##=sChartVar##-->"></div>
 474<!--##include rpt-chartcommon.php/chart_common##-->
 475<!--##include rpt-chartcommon-ext.php/chart_common_ext##-->
 476<!--##include rpt-chartcommon.php/chart_config##-->
 477<!--##include rpt-chartcommon-ext.php/chart_config_ext##-->
 478<!--##include rpt-chartcommon.php/chart_content##-->
 479<br /><br />
 480<!--##
 481	End If
 482Next
 483##-->
 484	</div></td>
 485	<!-- Left Container (End) -->
 486
 487	<!-- Center Container - Report (Begin) -->
 488<!--##
 489CurCellPadding = ""
 490If bShowReport Then CurCellPadding = " class=""ewPadding"""
 491##-->
 492	<td style="vertical-align: top;"<!--##=CurCellPadding##-->><div id="ewCenter" class="phpreportmaker">
 493	<!-- center slot -->
 494<!--##=sChartExpEnd##-->
 495
 496<!--## If bShowReport Then ##-->
 497<!-- summary report starts -->
 498<!--##=sSkipPdfExpStart##-->
 499<div id="report_summary">
 500
 501<!--##include rpt-extfilter.php/report_extfilter_html##-->
 502
 503<table class="ewGrid" cellspacing="0"><tr>
 504	<td class="ewGridContent">
 505<!--##=sSkipPdfExpEnd##-->
 506
 507<!--## If bTopPageLink Then ##-->
 508<!--##=sExpStart##-->
 509<div class="ewGridUpperPanel">
 510<!--##include rpt-pager.php/phppager##-->
 511</div>
 512<!--##=sExpEnd##-->
 513<!--## End If ##-->
 514
 515<!-- Report Grid (Begin) -->
 516<!--##=sSkipPdfExpStart##-->
 517<div class="ewGridMiddlePanel">
 518<!--##=sSkipPdfExpEnd##-->
 519
 520<table class="<?php echo $<!--##=sPageObj##-->->ReportTableClass ?>" cellspacing="0">
 521
 522<?php
 523// Set the last group to display if not export all
 524if ($<!--##=sTblVar##-->->ExportAll && $<!--##=sTblVar##-->->Export <> "") {
 525	$<!--##=sPageObj##-->->StopGrp = $<!--##=sPageObj##-->->TotalGrps;
 526} else {
 527	$<!--##=sPageObj##-->->StopGrp = $<!--##=sPageObj##-->->StartGrp + $<!--##=sPageObj##-->->DisplayGrps - 1;
 528}
 529
 530// Stop group <= total number of groups
 531if (intval($<!--##=sPageObj##-->->StopGrp) > intval($<!--##=sPageObj##-->->TotalGrps))
 532	$<!--##=sPageObj##-->->StopGrp = $<!--##=sPageObj##-->->TotalGrps;
 533
 534$<!--##=sPageObj##-->->RecCount = 0;
 535
 536// Get first row
 537if ($<!--##=sPageObj##-->->TotalGrps > 0) {
 538<!--## If nGrps > 0 Then ##-->
 539	$<!--##=sPageObj##-->->GetGrpRow(1);
 540<!--## Else ##-->
 541	$<!--##=sPageObj##-->->GetRow(1);
 542<!--## End If ##-->
 543	$<!--##=sPageObj##-->->GrpCount = 1;
 544}
 545
 546<!--## If nGrps > 0 Then ##-->
 547while (($rsgrp && !$rsgrp->EOF && $<!--##=sPageObj##-->->GrpCount <= $<!--##=sPageObj##-->->DisplayGrps) || $<!--##=sPageObj##-->->ShowFirstHeader) {
 548<!--## Else ##-->
 549while (($rs && !$rs->EOF && $<!--##=sPageObj##-->->GrpCount <= $<!--##=sPageObj##-->->DisplayGrps) || $<!--##=sPageObj##-->->ShowFirstHeader) {
 550<!--## End If ##-->
 551
 552	// Show header
 553	if ($<!--##=sPageObj##-->->ShowFirstHeader) {
 554?>
 555	<thead>
 556	<tr>
 557	<!--##
 558		For i = 0 to nGrps-1
 559			lvl = i + 1
 560			sFldName = arrGrpFlds(0,i)
 561			sFldVar = arrGrpFlds(1,i)
 562			SetupFldVar()
 563			bGenFilter = arrGrpFlds(3,i)
 564			sUseRange = arrGrpFlds(6,i)
 565			Set FIELD = TABLE.Fields(sFldName)
 566			sTDStyle = FieldTD_Header(FIELD)
 567			sJsSort = " class=""ewPointer"" onmousedown=""ewrpt_Sort(event,'<?php echo $" & sTblVar & "->SortUrl($"& sFldObj & ") ?>'," & iSortType & ");"""
 568	##-->
 569<td class="ewTableHeader">
 570<?php if ($<!--##=sTblVar##-->->Export <> "") { ?>
 571<?php echo $<!--##=sFldObj##-->->FldCaption() ?>
 572<?php } else { ?>
 573	<table cellspacing="0" class="ewTableHeaderBtn"<!--##=sTDStyle##-->><tr>
 574<?php if ($<!--##=sTblVar##-->->SortUrl($<!--##=sFldObj##-->) == "") { ?>
 575		<td style="vertical-align: bottom;"><?php echo $<!--##=sFldObj##-->->FldCaption() ?></td>
 576<?php } else { ?>
 577		<td<!--##=sJsSort##-->><?php echo $<!--##=sFldObj##-->->FldCaption() ?></td><td style="width: 10px;">
 578		<?php if ($<!--##=sFldObj##-->->getSort() == "ASC") { ?><img src="<!--##=ew_FolderPath("_images")##-->/sortup.gif" width="10" height="9" border="0"><?php } elseif ($<!--##=sFldObj##-->->getSort() == "DESC") { ?><img src="<!--##=ew_FolderPath("_images")##-->/sortdown.gif" width="10" height="9" border="0"><?php } ?></td>
 579<?php } ?>
 580	<!--## If bGenFilter Then ##-->
 581		<td style="width: 20px;" align="right"><a href="#" onclick="ewrpt_ShowPopup(this.name, '<!--##=sSessionFldVar##-->', <!--##=sUseRange##-->, '<?php echo $<!--##=sFldObj##-->->RangeFrom; ?>', '<?php echo $<!--##=sFldObj##-->->RangeTo; ?>');return false;" name="<!--##=sFldVar##--><?php echo $<!--##=sPageObj##-->->Cnt[0][0]; ?>" id="<!--##=sFldVar##--><?php echo $<!--##=sPageObj##-->->Cnt[0][0]; ?>"><img src="<!--##=ew_FolderPath("_images")##-->/popup.gif" width="15" height="14" border="0" alt="<!--##@Filter##-->"></a></td>
 582	<!--## End If ##-->
 583	</tr></table>
 584<?php } ?>
 585</td>
 586	<!--##
 587		Next
 588	##-->
 589
 590<!--## If bShowSummaryView Then ' Summary view ##-->
 591
 592	<!--##
 593		For i = 2 to UBound(arrSmry,2)
 594			For j = 0 to UBound(arrSmry,1)
 595				If arrSmry(j,i) Then
 596					sSrcFldName = arrDtlFlds(0,i-2)
 597					sSrcFldVar = arrDtlFlds(1,i-2)
 598					sSrcFldParm = Mid(sSrcFldVar,3)
 599					sSrcFldObj = sTblVar & "->" & sSrcFldParm
 600					sSummaryType = arrSmry(j,0)
 601	##-->
 602<td class="ewTableHeader"><?php echo $<!--##=sSrcFldObj##-->->FldCaption() ?> (<!--##=SummaryCaption(sSummaryType)##-->)</td>
 603	<!--##
 604				End If
 605			Next
 606		Next
 607	##-->
 608
 609<!--## Else ' Detail view ##-->
 610
 611	<!--##
 612		For i = 0 to nDtls-1
 613			sFldName = arrDtlFlds(0,i)
 614			sFldVar = arrDtlFlds(1,i)
 615			SetupFldVar()
 616			bGenFilter = arrDtlFlds(3,i)
 617			sUseRange = arrDtlFlds(6,i)
 618			Set FIELD = TABLE.Fields(sFldName)
 619			sTDStyle = FieldTD_Header(FIELD)
 620			sJsSort = " class=""ewPointer"" onmousedown=""ewrpt_Sort(event,'<?php echo $" & sTblVar & "->SortUrl($"& sFldObj & ") ?>'," & iSortType & ");"""
 621	##-->
 622<td class="ewTableHeader">
 623<?php if ($<!--##=sTblVar##-->->Export <> "") { ?>
 624<?php echo $<!--##=sFldObj##-->->FldCaption() ?>
 625<?php } else { ?>
 626	<table cellspacing="0" class="ewTableHeaderBtn"<!--##=sTDStyle##-->><tr>
 627<?php if ($<!--##=sTblVar##-->->SortUrl($<!--##=sFldObj##-->) == "") { ?>
 628		<td style="vertical-align: bottom;"><?php echo $<!--##=sFldObj##-->->FldCaption() ?></td>
 629<?php } else { ?>
 630		<td<!--##=sJsSort##-->><?php echo $<!--##=sFldObj##-->->FldCaption() ?></td><td style="width: 10px;">
 631		<?php if ($<!--##=sFldObj##-->->getSort() == "ASC") { ?><img src="<!--##=ew_FolderPath("_images")##-->/sortup.gif" width="10" height="9" border="0"><?php } elseif ($<!--##=sFldObj##-->->getSort() == "DESC") { ?><img src="<!--##=ew_FolderPath("_images")##-->/sortdown.gif" width="10" height="9" border="0"><?php } ?></td>
 632<?php } ?>
 633	<!--## If bGenFilter Then ##-->
 634		<td style="width: 20px;" align="right"><a href="#" onclick="ewrpt_ShowPopup(this.name, '<!--##=sSessionFldVar##-->', <!--##=sUseRange##-->, '<?php echo $<!--##=sFldObj##-->->RangeFrom; ?>', '<?php echo $<!--##=sFldObj##-->->RangeTo; ?>');return false;" name="<!--##=sFldVar##--><?php echo $<!--##=sPageObj##-->->Cnt[0][0]; ?>" id="<!--##=sFldVar##--><?php echo $<!--##=sPageObj##-->->Cnt[0][0]; ?>"><img src="<!--##=ew_FolderPath("_images")##-->/popup.gif" width="15" height="14" border="0" alt="<!--##@Filter##-->"></a></td>
 635	<!--## End If ##-->
 636	</tr></table>
 637<?php } ?>
 638</td>
 639	<!--##
 640		Next
 641	##-->
 642
 643<!--## End If ' End Summary/Detail View ##-->
 644
 645	</tr>
 646	</thead>
 647	<tbody>
 648<?php
 649		$<!--##=sPageObj##-->->ShowFirstHeader = FALSE;
 650	}
 651
 652<!--## If nGrps = 0 Then ##-->
 653	$<!--##=sPageObj##-->->RecCount++;
 654<!--## Else ##-->
 655	// Build detail SQL
 656	$sWhere = ewrpt_DetailFilterSQL($<!--##=sFirstGrpFldObj##-->, $<!--##=sTblVar##-->->SqlFirstGroupField(), $<!--##=sFirstGrpFldObj##-->->GroupValue());
 657	if ($<!--##=sPageObj##-->->Filter != "")
 658		$sWhere = "($<!--##=sPageObj##-->->Filter) AND ($sWhere)";
 659	$sSql = ewrpt_BuildReportSql($<!--##=sTblVar##-->->SqlSelect(), $<!--##=sTblVar##-->->SqlWhere(), $<!--##=sTblVar##-->->SqlGroupBy(), $<!--##=sTblVar##-->->SqlHaving(), $<!--##=sTblVar##-->->SqlOrderBy(), $sWhere, $<!--##=sPageObj##-->->Sort);
 660	$rs = $conn->Execute($sSql);
 661	$rsdtlcnt = ($rs) ? $rs->RecordCount() : 0;
 662	if ($rsdtlcnt > 0)
 663		$<!--##=sPageObj##-->->GetRow(1);
 664	while ($rs && !$rs->EOF) { // Loop detail records
 665		$<!--##=sPageObj##-->->RecCount++;
 666<!--## End If ##-->
 667
 668		// Render detail row
 669		$<!--##=sTblVar##-->->ResetCSS();
 670		$<!--##=sTblVar##-->->RowType = EWRPT_ROWTYPE_DETAIL;
 671		$<!--##=sPageObj##-->->RenderRow();
 672?>
 673
 674<!--## If bShowDetails Then ' Show details ##-->
 675
 676	<tr<?php echo $<!--##=sTblVar##-->->RowAttributes(); ?>>
 677<!--##
 678	For i = 0 to nGrps-1
 679		lvl = i + 1
 680		sFldName = arrGrpFlds(0,i)
 681		sFldVar = arrGrpFlds(1,i)
 682		SetupFldVar()
 683		Set FIELD = TABLE.Fields(sFldName)
 684##-->
 685		<td<?php echo $<!--##=sFldObj##-->->CellAttributes(); ?>><!--##=SYSTEMFUNCTIONS.FieldGroupView##--></td>
 686<!--##
 687	Next
 688	
 689	For i = 0 to nDtls-1
 690		sFldName = arrDtlFlds(0,i)
 691		sFldVar = arrDtlFlds(1,i)
 692		SetupFldVar()
 693		Set FIELD = TABLE.Fields(sFldName)
 694##-->
 695		<td<?php echo $<!--##=sFldObj##-->->CellAttributes() ?>><!--##=SYSTEMFUNCTIONS.FieldView##--></td>
 696<!--##
 697	Next
 698##-->
 699	</tr>
 700
 701<!--## End If ' End show detail ##-->
 702
 703<?php
 704		// Accumulate page summary
 705		$<!--##=sPageObj##-->->AccumulateSummary();
 706
 707		// Get next record
 708		$<!--##=sPageObj##-->->GetRow(2);
 709
 710<!--## If nGrps <= 0 Then ##-->
 711	$<!--##=sPageObj##-->->GrpCount++;
 712<!--## Else ##-->
 713		// Show Footers
 714?>
 715<!--##
 716	For i = nGrps-1 to 0 Step -1
 717		lvl = i + 1
 718		If lvl = 1 Then
 719##-->
 720<?php
 721	} // End detail records loop
 722?>
 723<!--##
 724		End If
 725		If arrGrpFlds(7,i) Then ' show summary required
 726			Set FIELD = TABLE.Fields(arrGrpFlds(0,i))
 727			sFldVar = arrGrpFlds(1,i)
 728			SetupFldVar()
 729			sSummary = "ewrpt_DisplayGroupValue($" & sFldObj & ", $" & sFldObj & "->GroupValue())"
 730##-->
 731<?php
 732	<!--## If lvl > 1 Then ##-->
 733		if ($<!--##=sPageObj##-->->ChkLvlBreak(<!--##=lvl##-->)) {
 734	<!--## End If ##-->
 735?>
 736
 737<!--## If bShowSummaryView Then ' Summary view ##-->
 738
 739<?php
 740<!--##
 741		For x = 2 to UBound(arrSmry,2)
 742			k = x-1
 743			sFldName = arrDtlFlds(0,k-1)
 744			Set FIELD = TABLE.Fields(sFldName)
 745			sFldVar = arrDtlFlds(1,k-1)
 746			SetupFldVar()
 747##-->
 748			$<!--##=sFldObj##-->->Count = $<!--##=sPageObj##-->->Cnt[<!--##=lvl##-->][<!--##=k##-->];
 749<!--##
 750			For j = 0 to UBound(arrSmry,1)
 751				If arrSmry(j,x) Then
 752##-->
 753<!--## If j = 0 Then ' SUM ##-->
 754			$<!--##=sFldObj##-->->SumValue = $<!--##=sPageObj##-->->Smry[<!--##=lvl##-->][<!--##=k##-->]; // Load SUM
 755<!--## ElseIf j = 1 Then ' AVG ##-->
 756			$<!--##=sFldObj##-->->AvgValue = ($<!--##=sFldObj##-->->Count > 0) ? $<!--##=sPageObj##-->->Smry[<!--##=lvl##-->][<!--##=k##-->]/$<!--##=sFldObj##-->->Count : 0; // Load AVG
 757<!--## ElseIf j = 2 Then ' MIN ##-->
 758			$<!--##=sFldObj##-->->MinValue = $<!--##=sPageObj##-->->Mn[<!--##=lvl##-->][<!--##=k##-->]; // Load MIN
 759<!--## ElseIf j = 3 Then ' MAX ##-->
 760			$<!--##=sFldObj##-->->MaxValue = $<!--##=sPageObj##-->->Mx[<!--##=lvl##-->][<!--##=k##-->]; // Load MAX
 761<!--## End If ##-->
 762<!--##
 763				End If
 764			Next
 765		Next
 766##-->
 767			$<!--##=sTblVar##-->->ResetCSS();
 768			$<!--##=sTblVar##-->->RowType = EWRPT_ROWTYPE_TOTAL;
 769			$<!--##=sTblVar##-->->RowTotalType = EWRPT_ROWTOTAL_GROUP;
 770			$<!--##=sTblVar##-->->RowTotalSubType = EWRPT_ROWTOTAL_FOOTER;
 771			$<!--##=sTblVar##-->->RowGroupLevel = <!--##=lvl##-->;
 772			$<!--##=sPageObj##-->->RenderRow();
 773?>
 774	<tr<?php echo $<!--##=sTblVar##-->->RowAttributes(); ?>>
 775	<!--##
 776		sSmryGrpFldParm = Mid(arrGrpFlds(1,lvl-1),3)
 777		sSmryGrpFldObj = sTblVar & "->" & sSmryGrpFldParm
 778		For x = 0 to nGrps-1
 779			sFldName = arrGrpFlds(0,x)
 780			Set FIELD = TABLE.Fields(sFldName)
 781			sGrpFldParm = Mid(arrGrpFlds(1,x),3)
 782			sGrpFldObj = sTblVar & "->" & sGrpFldParm
 783			If x = lvl-1 Then
 784	##-->
 785		<td<?php echo $<!--##=sGrpFldObj##-->->CellAttributes() ?>><!--##=SYSTEMFUNCTIONS.FieldGroupView##-->&nbsp;(<?php echo ewrpt_FormatNumber($<!--##=sPageObj##-->->Cnt[<!--##=lvl##-->][0],0,-2,-2,-2); ?><!--##@RptDtlRec##-->)</td>
 786	<!--##
 787			ElseIf x < lvl Then
 788	##-->
 789		<td<?php echo $<!--##=sGrpFldObj##-->->CellAttributes() ?>><!--##=SYSTEMFUNCTIONS.FieldSummaryGroupView##--></td>
 790	<!--##
 791			Else
 792	##-->
 793		<td<?php echo $<!--##=sSmryGrpFldObj##-->->CellAttributes() ?>>&nbsp;</td>
 794	<!--##
 795			End If
 796		Next
 797
 798		For x = 2 to UBound(arrSmry,2)
 799			sFldName = arrDtlFlds(0,x-2)
 800			Set FIELD = TABLE.Fields(sFldName)
 801			sFldVar = arrDtlFlds(1,x-2)
 802			SetupFldVar()
 803			For j = 0 to UBound(arrSmry,1)
 804				If arrSmry(j,x) Then
 805	##-->
 806		<td<?php echo $<!--##=sFldObj##-->->CellAttributes() ?>><!--##=SYSTEMFUNCTIONS.FieldSummaryView(arrSmry(j,0))##--></td>
 807	<!--##
 808				End If
 809			Next
 810		Next
 811	##-->
 812	</tr>
 813
 814<!--## Else ' Detail view ##-->
 815
 816<?php
 817			$<!--##=sTblVar##-->->ResetCSS();
 818			$<!--##=sTblVar##-->->RowType = EWRPT_ROWTYPE_TOTAL;
 819			$<!--##=sTblVar##-->->RowTotalType = EWRPT_ROWTOTAL_GROUP;
 820			$<!--##=sTblVar##-->->RowTotalSubType = EWRPT_ROWTOTAL_FOOTER;
 821			$<!--##=sTblVar##-->->RowGroupLevel = <!--##=lvl##-->;
 822			$<!--##=sPageObj##-->->RenderRow();
 823?>
 824
 825	<tr<?php echo $<!--##=sTblVar##-->->RowAttributes(); ?>>
 826<!--##
 827		For j = 0 to i-1
 828			sGrpFldParm = Mid(arrGrpFlds(1,j),3)
 829			sGrpFldObj = sTblVar & "->" & sGrpFldParm
 830##-->
 831<!--## If bShowDetails Then ##-->
 832		<td<?php echo $<!--##=sGrpFldObj##-->->CellAttributes() ?>>&nbsp;</td>
 833<!--## Else ##-->
 834		<td<?php echo $<!--##=sGrpFldObj##-->->CellAttributes() ?>><?php echo $<!--##=sGrpFldObj##-->->GroupSummaryViewValue; ?></td>
 835<!--## End If ##-->
 836<!--##
 837		Next
 838##-->
 839		<td colspan="<!--##=nSlots-i##-->"<?php echo $<!--##=sFldObj##-->->CellAttributes() ?>><!--##@RptSumHead##--> <?php echo $<!--##=sFldObj##-->->FldCaption() ?>: <?php echo $<!--##=sFldObj##-->->GroupViewValue; ?> (<?php echo ewrpt_FormatNumber($<!--##=sPageObj##-->->Cnt[<!--##=lvl##-->][0],0,-2,-2,-2); ?><!--##@RptDtlRec##-->)</td></tr>
 840
 841<!--##
 842		For j = 0 to UBound(arrSmry,1)
 843			If arrSmry(j,1) Then
 844##-->
 845<?php
 846			$<!--##=sTblVar##-->->ResetCSS();
 847<!--##
 848				For k = 1 to nDtls
 849					If arrSmry(j,k+1) Then
 850						sFldName = arrDtlFlds(0,k-1)
 851						Set FIELD = TABLE.Fields(sFldName)
 852						sFldVar = arrDtlFlds(1,k-1)
 853						SetupFldVar()
 854##-->
 855			$<!--##=sFldObj##-->->Count = $<!--##=sPageObj##-->->Cnt[<!--##=lvl##-->][<!--##=k##-->];
 856<!--## If j = 0 Then ' SUM ##-->
 857			$<!--##=sFldObj##-->->SumValue = $<!--##=sPageObj##-->->Smry[<!--##=lvl##-->][<!--##=k##-->]; // Load SUM
 858<!--## ElseIf j = 1 Then ' AVG ##-->
 859			$<!--##=sFldObj##-->->AvgValue = ($<!--##=sFldObj##-->->Count > 0)? $<!--##=sPageObj##-->->Smry[<!--##=lvl##-->][<!--##=k##-->]/$<!--##=sFldObj##-->->Count : 0; // Load AVG
 860<!--## ElseIf j = 2 Then ' MIN ##-->
 861			$<!--##=sFldObj##-->->MinValue = $<!--##=sPageObj##-->->Mn[<!--##=lvl##-->][<!--##=k##-->]; // Load MIN
 862<!--## ElseIf j = 3 Then ' MAX ##-->
 863			$<!--##=sFldObj##-->->MaxValue = $<!--##=sPageObj##-->->Mx[<!--##=lvl##-->][<!--##=k##-->]; // Load MAX
 864<!--## End If ##-->
 865<!--##
 866					End If
 867				Next
 868##-->
 869			$<!--##=sTblVar##-->->RowTotalSubType = EWRPT_ROWTOTAL_<!--##=UCase(arrSmry(j,0))##-->;
 870			$<!--##=sPageObj##-->->RenderRow();
 871?>
 872	<tr<?php echo $<!--##=sTblVar##-->->RowAttributes(); ?>>
 873<!--##
 874				For k = 0 to i-1
 875					sGrpFldParm = Mid(arrGrpFlds(1,k),3)
 876					sGrpFldObj = sTblVar & "->" & sGrpFldParm
 877##-->
 878		<td<?php echo $<!--##=sGrpFldObj##-->->CellAttributes() ?>>&nbsp;</td>
 879<!--##
 880				Next
 881				sGrpFldParm = Mid(arrGrpFlds(1,i),3)
 882				sGrpFldObj = sTblVar & "->" & sGrpFldParm
 883##-->
 884		<td colspan="<!--##=nGrps-i##-->"<?php echo $<!--##=sGrpFldObj##-->->CellAttributes() ?>><!--##=SummaryCaption(arrSmry(j,0))##--></td>
 885<!--##
 886				For k = 1 to nDtls
 887					sFldName = arrDtlFlds(0,k-1)
 888					sFldVar = arrDtlFlds(1,k-1)
 889					SetupFldVar()
 890					If arrSmry(j,k+1) Then
 891						Set FIELD = TABLE.Fields(sFldName)
 892##-->
 893		<td<?php echo $<!--##=sFldObj##-->->CellAttributes() ?>><!--##=SYSTEMFUNCTIONS.FieldSummaryView(arrSmry(j,0))##--></td>
 894<!--##
 895					Else
 896##-->
 897		<td<?php echo $<!--##=sGrpFldObj##-->->CellAttributes() ?>>&nbsp;</td>
 898<!--##
 899					End If
 900				Next
 901##-->
 902	</tr>
 903
 904<!--##
 905			End If
 906		Next
 907##-->	
 908
 909<!--## End If ' End Summary/Detail view ##-->
 910
 911<?php
 912			// Reset level <!--##=lvl##--> summary
 913			$<!--##=sPageObj##-->->ResetLevelSummary(<!--##=lvl##-->);
 914
 915	<!--## If lvl > 1 Then ' v3 ##-->
 916		} // End check level check
 917	<!--## End If ' v3 ##-->
 918
 919?>
 920<!--##
 921		End If
 922	Next
 923##-->
 924<?php
 925
 926<!--## If nGrps > 0 Then ##-->
 927	// Next group
 928	$<!--##=sPageObj##-->->GetGrpRow(2);
 929	$<!--##=sPageObj##-->->GrpCount++;
 930<!--## End If ##-->
 931
 932<!--## End If ##-->
 933
 934} // End while
 935
 936?>
 937	</tbody>
 938	<tfoot>
 939<!--## If TABLE.TblRptShowPageTotal Then ##-->
 940<?php if (intval(@$<!--##=sPageObj##-->->Cnt[0][<!--##=nDtls##-->]) > 0) { ?>
 941<?php
 942	$<!--##=sTblVar##-->->ResetCSS();
 943	$<!--##=sTblVar##-->->RowType = EWRPT_ROWTYPE_TOTAL;
 944	$<!--##=sTblVar##-->->RowTotalType = EWRPT_ROWTOTAL_PAGE;
 945	$<!--##=sTblVar##-->->RowTotalSubType = EWRPT_ROWTOTAL_FOOTER;
 946	$<!--##=sTblVar##-->->RowAttrs["class"] = "ewRptPageSummary";
 947	$<!--##=sPageObj##-->->RenderRow();
 948?>
 949
 950<!--## If bShowSummaryView Then ' Summary view ##-->
 951
 952<?php
 953<!--##
 954		For i = 2 to UBound(arrSmry,2)
 955			k = i-1
 956			sFldName = arrDtlFlds(0,k-1)
 957			Set FIELD = TABLE.Fields(sFldName)
 958			sFldVar = arrDtlFlds(1,k-1)
 959			SetupFldVar()
 960##-->
 961	$<!--##=sFldObj##-->->Count = $<!--##=sPageObj##-->->Cnt[0][<!--##=k##-->];
 962<!--##
 963			For j = 0 to UBound(arrSmry,1)
 964				If arrSmry(j,i) Then
 965##-->
 966<!--## If j = 0 Then ' SUM ##-->
 967	$<!--##=sFldObj##-->->SumValue = $<!--##=sPageObj##-->->Smry[0][<!--##=k##-->]; // Load SUM
 968<!--## ElseIf j = 1 Then ' AVG ##-->
 969	$<!--##=sFldObj##-->->AvgValue = ($<!--##=sFldObj##-->->Count > 0) ? $<!--##=sPageObj##-->->Smry[0][<!--##=k##-->]/$<!--##=sFldObj##-->->Count : 0; // Load AVG
 970<!--## ElseIf j = 2 Then ' MIN ##-->
 971	$<!--##=sFldObj##-->->MinValue = $<!--##=sPageObj##-->->Mn[0][<!--##=k##-->]; // Load MIN
 972<!--## ElseIf j = 3 Then ' MAX ##-->
 973	$<!--##=sFldObj##-->->MaxValue = $<!--##=sPageObj##-->->Mx[0][<!--##=k##-->]; // Load MAX
 974<!--## End If ##-->
 975<!--##
 976				End If
 977			Next
 978		Next
 979##-->
 980	$<!--##=sTblVar##-->->ResetCSS();
 981	$<!--##=sTblVar##-->->RowType = EWRPT_ROWTYPE_TOTAL;
 982	$<!--##=sTblVar##-->->RowTotalType = EWRPT_ROWTOTAL_PAGE;
 983	$<!--##=sTblVar##-->->RowTotalSubType = EWRPT_ROWTOTAL_FOOTER;
 984	$<!--##=sTblVar##-->->RowAttrs["class"] = "ewRptPageSummary";
 985	$<!--##=sPageObj##-->->RenderRow();
 986?>
 987	<tr<?php echo $<!--##=sTblVar##-->->RowAttributes(); ?>>
 988	<!--##
 989		For i = 0 to nGrps-1
 990			If i = 0 Then
 991	##-->
 992		<td><!--##@RptPageTotal##--> (<?php echo ewrpt_FormatNumber($<!--##=sPageObj##-->->Cnt[0][<!--##=nDtls##-->],0,-2,-2,-2); ?><!--##@RptDtlRec##-->)</td>
 993	<!--##
 994			Else
 995	##-->
 996		<td>&nbsp;</td>
 997	<!--##
 998			End If
 999		Next
1000
1001		For i = 2 to UBound(arrSmry,2)
1002			sFldName = arrDtlFlds(0,i-2)
1003			Set FIELD = TABLE.Fields(sFldName)
1004			sFldVar = arrDtlFlds(1,i-2)
1005			SetupFldVar()
1006			For j = 0 to UBound(arrSmry,1)
1007				If arrSmry(j,i) Then
1008	##-->
1009		<td<?php echo $<!--##=sFldObj##-->->CellAttributes() ?>><!--##=SYSTEMFUNCTIONS.FieldSummaryView(arrSmry(j,0))##--></td>
1010	<!--##
1011				End If
1012			Next
1013		Next
1014	##-->
1015	</tr>
1016
1017<!--## Else ' Detail view ##-->
1018
1019	<tr<?php echo $<!--##=sTblVar##-->->RowAttributes(); ?>><td colspan="<!--##=nSlots##-->"><!--##@RptPageTotal##--> (<?php echo ewrpt_FormatNumber($<!--##=sPageObj##-->->Cnt[0][<!--##=nDtls##-->],0,-2,-2,-2); ?><!--##@RptDtlRec##-->)</td></tr>
1020
1021	<!--##
1022	For j = 0 to UBound(arrSmry,1)
1023		If arrSmry(j,1) Then
1024	##-->
1025<?php
1026	$<!--##=sTblVar##-->->ResetCSS();
1027<!--##
1028		For k = 1 to nDtls
1029			If arrSmry(j,k+1) Then
1030				sFldName = arrDtlFlds(0,k-1)
1031				Set FIELD = TABLE.Fields(sFldName)
1032				sFldVar = arrDtlFlds(1,k-1)
1033				SetupFldVar()
1034##-->
1035	$<!--##=sFldObj##-->->Count = $<!--##=sPageObj##-->->Cnt[0][<!--##=k##-->];
1036<!--## If j = 0 Then ' SUM ##-->
1037	$<!--##=sFldObj##-->->SumValue = $<!--##=sPageObj##-->->Smry[0][<!--##=k##-->]; // Load SUM
1038<!--## ElseIf j = 1 Then ' AVG ##-->
1039	$<!--##=sFldObj##-->->AvgValue = ($<!--##=sFldObj##-->->Count > 0) ? $<!--##=sPageObj##-->->Smry[0][<!--##=k##-->]/$<!--##=sFldObj##-->->Count : 0; // Load AVG
1040<!--## ElseIf j = 2 Then ' MIN ##-->
1041	$<!--##=sFldObj##-->->MinValue = $<!--##=sPageObj##-->->Mn[0][<!--##=k##-->]; // Load MIN
1042<!--## ElseIf j = 3 Then ' MAX ##-->
1043	$<!--##=sFldObj##-->->MaxValue = $<!--##=sPageObj##-->->Mx[0][<!--##=k##-->]; // Load MAX
1044<!--## End If ##-->
1045	$<!--##=sTblVar##-->->RowTotalSubType = EWRPT_ROWTOTAL_<!--##=UCase(arrSmry(j,0))##-->;
1046<!--##
1047			End If
1048		Next
1049##-->
1050	$<!--##=sTblVar##-->->RowAttrs["class"] = "ewRptPageSummary";
1051	$<!--##=sPageObj##-->->RenderRow();
1052?>
1053	<tr<?php echo $<!--##=sTblVar##-->->RowAttributes(); ?>>
1054	<!--##
1055		If nGrps > 0 Then
1056	##-->
1057		<td colspan="<!--##=nGrps##-->" class="ewRptGrpAggregate"><!--##=SummaryCaption(arrSmry(j,0))##--></td>
1058	<!--##
1059		End If
1060	##-->
1061
1062	<!--##
1063		For k = 1 to nDtls
1064			sFldName = arrDtlFlds(0,k-1)
1065			sFldVar = arrDtlFlds(1,k-1)
1066			SetupFldVar()
1067			If arrSmry(j,k+1) Then
1068				Set FIELD = TABLE.Fields(sFldName)
1069				If nGrps = 0 Then
1070					sSmryCaption = SummaryCaption(arrSmry(j,0))
1071				Else
1072					sSmryCaption = ""
1073				End If
1074				If sSmryCaption <> "" Then sSmryCaption = sSmryCaption & "<?php echo $ReportLanguage->Phrase(""RptSeparator""); ?>"
1075	##-->
1076		<td<?php echo $<!--##=sFldObj##-->->CellAttributes() ?>><!--##=sSmryCaption##--><!--##=SYSTEMFUNCTIONS.FieldSummaryView(arrSmry(j,0))##--></td>
1077	<!--##
1078			Else
1079	##-->
1080		<td<?php echo $<!--##=sFldObj##-->->CellAttributes() ?>>&nbsp;</td>
1081	<!--##
1082			End If
1083		Next
1084	##-->
1085	</tr>
1086	<!--##
1087		End If
1088	Next
1089	##-->
1090
1091<!--## End If ' End Summary/Detail view ##-->
1092
1093	<!-- tr class="ewRptPageSummary"><td colspan="<!--##=nSlots##-->"><span class="phpreportmaker">&nbsp;<br /></span></td></tr -->
1094<?php } ?>
1095<!--## End If ##-->
1096<!--## If TABLE.TblRptShowGrandTotal Then ##-->
1097<?php
1098if ($<!--##=sPageObj##-->->TotalGrps > 0) {
1099	$<!--##=sTblVar##-->->ResetCSS();
1100	$<!--##=sTblVar##-->->RowType = EWRPT_ROWTYPE_TOTAL;
1101	$<!--##=sTblVar##-->->RowTotalType = EWRPT_ROWTOTAL_GRAND;
1102	$<!--##=sTblVar##-->->RowTotalSubType = EWRPT_ROWTOTAL_FOOTER;
1103	$<!--##=sTblVar##-->->RowAttrs["class"] = "ewRptGrandSummary";
1104	$<!--##=sPageObj##-->->RenderRow();
1105?>
1106
1107	<!-- tr><td colspan="<!--##=nSlots##-->"><span class="phpreportmaker">&nbsp;<br /></span></td></tr -->
1108
1109<!--## If bShowSummaryView Then ' Summary view ##-->
1110
1111<?php
1112<!--##
1113		For i = 2 to UBound(arrSmry,2)
1114			k = i-1
1115			sFldName = arrDtlFlds(0,k-1)
1116			Set FIELD = TABLE.Fields(sFldName)
1117			sFldVar = arrDtlFlds(1,k-1)
1118			SetupFldVar()
1119##-->
1120	$<!--##=sFldObj##-->->Count = $<!--##=sPageObj##-->->TotCount;
1121<!--##
1122			For j = 0 to UBound(arrSmry,1)
1123				If arrSmry(j,i) Then
1124##-->
1125<!--## If j = 0 Then ' SUM ##-->
1126	$<!--##=sFldObj##-->->SumValue = $<!--##=sPageObj##-->->GrandSmry[<!--##=k##-->]; // Load SUM
1127<!--## ElseIf j = 1 Then ' AVG ##-->
1128	$<!--##=sFldObj##-->->AvgValue = ($<!--##=sFldObj##-->->Count > 0) ? $<!--##=sPageObj##-->->GrandSmry[<!--##=k##-->]/$<!--##=sFldObj##-->->Count : 0; // Load AVG
1129<!--## ElseIf j = 2 Then ' MIN ##-->
1130	$<!--##=sFldObj##-->->MinValue = $<!--##=sPageObj##-->->GrandMn[<!--##=k##-->]; // Load MIN
1131<!--## ElseIf j = 3 Then ' MAX ##-->
1132	$<!--##=sFldObj##-->->MaxValue = $<!--##=sPageObj##-->->GrandMx[<!--##=k##-->]; // Load MAX
1133<!--## End If ##-->
1134<!--##
1135				End If
1136			Next
1137		Next
1138##-->
1139	$<!--##=sTblVar##-->->ResetCSS();
1140	$<!--##=sTblVar##-->->RowType = EWRPT_ROWTYPE_TOTAL;
1141	$<!--##=sTblVar##-->->RowTotalType = EWRPT_ROWTOTAL_GRAND;
1142	$<!--##=sTblVar##-->->RowTotalSubType = EWRPT_ROWTOTAL_FOOTER;
1143	$<!--##=sTblVar##-->->RowAttrs["class"] = "ewRptGrandSummary";
1144	$<!--##=sPageObj##-->->RenderRow();
1145?>
1146	<tr<?php echo $<!--##=sTblVar##-->->RowAttributes(); ?>>
1147	<!--##
1148		For i = 0 to nGrps-1
1149			If i = 0 Then
1150	##-->
1151		<td><!--##@RptGrandTotal##--> (<?php echo ewrpt_FormatNumber($<!--##=sPageObj##-->->TotCount,0,-2,-2,-2); ?><!--##@RptDtlRec##-->)</td>
1152	<!--##
1153			Else
1154	##-->
1155		<td>&nbsp;</td>
1156	<!--##
1157			End If
1158		Next
1159
1160		For i = 2 to UBound(arrSmry,2)
1161			sFldName = arrDtlFlds(0,i-2)
1162			Set FIELD = TABLE.Fields(sFldName)
1163			sFldVar = arrDtlFlds(1,i-2)
1164			SetupFldVar()
1165			For j = 0 to UBound(arrSmry,1)
1166				If arrSmry(j,i) Then
1167	##-->
1168		<td<?php echo $<!--##=sFldObj##-->->CellAttributes() ?>><!--##=SYSTEMFUNCTIONS.FieldSummaryView(arrSmry(j,0))##--></td>
1169	<!--##
1170				End If
1171			Next
1172		Next
1173	##-->
1174	</tr>
1175
1176<!--## Else ' Detail view ##-->
1177
1178	<tr<?php echo $<!--##=sTblVar##-->->RowAttributes(); ?>><td colspan="<!--##=nSlots##-->"><!--##@RptGrandTotal##--> (<?php echo ewrpt_FormatNumber($<!--##=sPageObj##-->->TotCount,0,-2,-2,-2); ?><!--##@RptDtlRec##-->)</td></tr>
1179
1180	<!--##
1181	For j = 0 to UBound(arrSmry,1)
1182		If arrSmry(j,1) Then
1183	##-->
1184<?php
1185	$<!--##=sTblVar##-->->ResetCSS();
1186<!--##
1187		For k = 1 to nDtls
1188			If arrSmry(j,k+1) Then
1189				sFldName = arrDtlFlds(0,k-1)
1190				Set FIELD = TABLE.Fields(sFldName)
1191				sFldVar = arrDtlFlds(1,k-1)
1192				SetupFldVar()
1193##-->
1194	$<!--##=sFldObj##-->->Count = $<!--##=sPageObj##-->->TotCount;
1195<!--## If j = 0 Then ' SUM ##-->
1196	$<!--##=sFldObj##-->->SumValue = $<!--##=sPageObj##-->->GrandSmry[<!--##=k##-->]; // Load SUM
1197<!--## ElseIf j = 1 Then ' AVG ##-->
1198	$<!--##=sFldObj##-->->AvgValue = ($<!--##=sFldObj##-->->Count > 0) ? $<!--##=sPageObj##-->->GrandSmry[<!--##=k##-->]/$<!--##=sFldObj##-->->Count : 0; // Load AVG
1199<!--## ElseIf j = 2 Then ' MIN ##-->
1200	$<!--##=sFldObj##-->->MinValue = $<!--##=sPageObj##-->->GrandMn[<!--##=k##-->]; // Load MIN
1201<!--## ElseIf j = 3 Then ' MAX ##-->
1202	$<!--##=sFldObj##-->->MaxValue = $<!--##=sPageObj##-->->GrandMx[<!--##=k##-->]; // Load MAX
1203<!--## End If ##-->
1204	$<!--##=sTblVar##-->->RowTotalSubType = EWRPT_ROWTOTAL_<!--##=UCase(arrSmry(j,0))##-->;
1205<!--##
1206			End If
1207		Next
1208##-->
1209	$<!--##=sTblVar##-->->RowAttrs["class"] = "ewRptGrandSummary";
1210	$<!--##=sPageObj##-->->RenderRow();
1211?>
1212	<tr<?php echo $<!--##=sTblVar##-->->RowAttributes(); ?>>
1213	<!--##
1214		If nGrps > 0 Then
1215	##-->
1216		<td colspan="<!--##=nGrps##-->" class="ewRptGrpAggregate"><!--##=SummaryCaption(arrSmry(j,0))##--></td>
1217	<!--##
1218		End If
1219	##-->
1220	<!--##
1221		For k = 1 to nDtls
1222			sFldName = arrDtlFlds(0,k-1)
1223			sFldVar = arrDtlFlds(1,k-1)
1224			SetupFldVar()
1225			If arrSmry(j,k+1) Then
1226				Set FIELD = TABLE.Fields(sFldName)
1227				If nGrps = 0 Then
1228					sSmryCaption = SummaryCaption(arrSmry(j,0))
1229				Else
1230					sSmryCaption = ""
1231				End If
1232				If sSmryCaption <> "" Then sSmryCaption = sSmryCaption & "<?php echo $ReportLanguage->Phrase(""RptSeparator""); ?>"
1233	##-->
1234		<td<?php echo $<!--##=sFldObj##-->->CellAttributes() ?>><!--##=sSmryCaption##--><!--##=SYSTEMFUNCTIONS.FieldSummaryView(arrSmry(j,0))##--></td>
1235	<!--##
1236			Else
1237	##-->
1238		<td<?php echo $<!--##=sFldObj##-->->CellAttributes() ?>>&nbsp;</td>
1239	<!--##
1240			End If
1241		Next
1242	##-->
1243	</tr>
1244	<!--##
1245		End If
1246	Next
1247	##-->	
1248
1249<!--## End If ' End Summary/Detail view ##-->
1250
1251<?php } ?>
1252<!--## End If ##-->
1253	</tfoot>
1254</table>
1255<!--##=sSkipPdfExpStart##-->
1256</div>
1257<!--##=sSkipPdfExpEnd##-->
1258
1259<!--## If bBottomPageLink Then ##-->
1260	<!--## If bTopPageLink Then ##-->
1261<?php if ($<!--##=sPageObj##-->->TotalGrps > 0) { ?>
1262	<!--## End If ##-->
1263<!--##=sExpStart##-->
1264<div class="ewGridLowerPanel">
1265<!--##include rpt-pager.php/phppager##-->
1266</div>
1267<!--##=sExpEnd##-->
1268	<!--## If bTopPageLink Then ##-->
1269<?php } ?>
1270	<!--## End If ##-->
1271<!--## End If ##-->
1272
1273<!--##=sSkipPdfExpStart##-->
1274</td></tr></table>
1275</div>
1276<!--##=sSkipPdfExpEnd##-->
1277<!-- Summary Report Ends -->
1278
1279<!--## End If ' End Show Report ##-->
1280
1281<!--##=sChartExpStart##-->
1282	</div><br /></td>
1283	<!-- Center Container - Report (End) -->
1284
1285	<!-- Right Container (Begin) -->
1286<!--##
1287CurCellPadding = ""
1288If ew_ChartCount(3) > 0 Then CurCellPadding = " class=""ewPadding"""
1289##-->
1290	<td style="vertical-align: top;"<!--##=CurCellPadding##-->><div id="ewRight" class="phpreportmaker">
1291	<!-- Right slot -->
1292<!--##
1293' Generate charts (on right)
1294For i = 1 to TABLE.Charts.Count
1295	Set CHART = TABLE.Charts.Seq(i)
1296	If IsShowChart(CHART) And CHART.ChartPosition = 3 Then
1297		sChartVar = CHART.ChartVar
1298		sChartId = sChartVar
1299		If PROJ.OutputNameLCase Then sChartId = LCase(sChartId)
1300##-->
1301<a name="cht_<!--##=sChartId##-->"></a>
1302<div id="div_<!--##=sTblVar##-->_<!--##=sChartVar##-->"></div>
1303<!--##include rpt-chartcommon.php/chart_common##-->
1304<!--##include rpt-chartcommon-ext.php/chart_common_ext##-->
1305<!--##include rpt-chartcommon.php/chart_config##-->
1306<!--##include rpt-chartcommon-ext.php/chart_config_ext##-->
1307<!--##include rpt-chartcommon.php/chart_content##-->
1308<br /><br />
1309<!--##
1310	End If
1311Next
1312##-->
1313	</div></td>
1314	<!-- Right Container (End) -->
1315</tr>
1316
1317<!-- Bottom Container (Begin) -->
1318<!--##
1319CurCellPadding = ""
1320If ew_ChartCount(4) > 0 Then CurCellPadding = " class=""ewPadding"""
1321##-->
1322<tr><td colspan="3"<!--##=CurCellPadding##-->><div id="ewBottom" class="phpreportmaker">
1323	<!-- Bottom slot -->
1324<!--##
1325' Generate charts (on bottom)
1326For i = 1 to TABLE.Charts.Count
1327	Set CHART = TABLE.Charts.Seq(i)
1328	If IsShowChart(CHART) And CHART.ChartPosition = 4 Then
1329		sChartVar = CHART.ChartVar
1330		sChartId = sChartVar
1331		If PROJ.OutputNameLCase Then sChartId = LCase(sChartId)
1332##-->
1333<a name="cht_<!--##=sChartId##-->"></a>
1334<div id="div_<!--##=sTblVar##-->_<!--##=sChartVar##-->"></div>
1335<!--##include rpt-chartcommon.php/chart_common##-->
1336<!--##include rpt-chartcommon-ext.php/chart_common_ext##-->
1337<!--##include rpt-chartcommon.php/chart_config##-->
1338<!--##include rpt-chartcommon-ext.php/chart_config_ext##-->
1339<!--##include rpt-chartcommon.php/chart_content##-->
1340<!--##=sChartSkipEmailExpStart##-->
1341<a href="#top"><!--##@Top##--></a>
1342<!--##=sChartSkipEmailExpEnd##-->
1343<br /><br />
1344<!--##
1345	End If
1346Next
1347##-->
1348	</div><br /></td></tr>
1349<!-- Bottom Container (End) -->
1350
1351</table>
1352<!-- Table Container (End) -->
1353<!--##=sChartExpEnd##-->
1354
1355<!--##include rpt-phpcommon.php/footer-message##-->
1356<?php
1357// Close recordsets
1358if ($rsgrp) $rsgrp->Close();
1359if ($rs) $rs->Close();
1360?>
1361<!--##/session##-->
1362
1363
1364<?php
1365<!--##session phpfunction##-->
1366
1367	<!--## If nGrps > 0 Then ##-->
1368	// Check level break
1369	function ChkLvlBreak($lvl) {
1370		global $<!--##=sTblVar##-->;
1371		switch ($lvl) {
1372	<!--##
1373	For i = 0 to nGrps-1
1374		sFldVar = arrGrpFlds(1,i)
1375		SetupFldVar()
1376		If i > 0 Then
1377			sChk = " || $this->ChkLvlBreak(" & i & "); // Recurse upper level"
1378		Else
1379			sChk = ";"
1380		End If
1381		fld = "$" & sFldObj & "->CurrentValue"
1382		oldfld = "$" & sFldObj & "->OldValue"
1383		grpfld = "$" & sFldObj & "->GroupValue()"
1384		grpoldfld = "$" & sFldObj & "->GroupOldValue()"
1385	##-->
1386			case <!--##=i+1##-->:
1387				return (is_null(<!--##=fld##-->) && !is_null(<!--##=oldfld##-->)) ||
1388					(!is_null(<!--##=fld##-->) && is_null(<!--##=oldfld##-->)) ||
1389					(<!--##=grpfld##--> <> <!--##=grpoldfld##-->)<!--##=sChk##-->
1390	<!--##
1391	Next
1392	##-->
1393		}
1394	}
1395	<!--## End If ##-->
1396
1397	// Accummulate summary
1398	function AccumulateSummary() {
1399		$cntx = count($this->Smry);
1400		for ($ix = 0; $ix < $cntx; $ix++) {
1401			$cnty = count($this->Smry[$ix]);
1402			for ($iy = 1; $iy < $cnty; $iy++) {
1403				$this->Cnt[$ix][$iy]++;
1404				if ($this->Col[$iy]) {
1405					$valwrk = $this->Val[$iy];
1406					if (is_null($valwrk) || !is_numeric($valwrk)) {
1407						// skip
1408					} else {
1409						$this->Smry[$ix][$iy] += $valwrk;
1410						if (is_null($this->Mn[$ix][$iy])) {
1411							$this->Mn[$ix][$iy] = $valwrk;
1412							$this->Mx[$ix][$iy] = $valwrk;
1413						} else {
1414							if ($this->Mn[$ix][$iy] > $valwrk) $this->Mn[$ix][$iy] = $valwrk;
1415							if ($this->Mx[$ix][$iy] < $valwrk) $this->Mx[$ix][$iy] = $valwrk;
1416						}
1417					}
1418				}
1419			}
1420		}
1421		$cntx = count($this->Smry);
1422		for ($ix = 1; $ix < $cntx; $ix++) {
1423			$this->Cnt[$ix][0]++;
1424		}
1425	}
1426
1427	// Reset level summary
1428	function ResetLevelSummary($lvl) {
1429		// Clear summary values
1430		$cntx = count($this->Smry);
1431		for ($ix = $lvl; $ix < $cntx; $ix++) {
1432			$cnty = count($this->Smry[$ix]);
1433			for ($iy = 1; $iy < $cnty; $iy++) {
1434				$this->Cnt[$ix][$iy] = 0;
1435				if ($this->Col[$iy]) {
1436					$this->Smry[$ix][$iy] = 0;
1437					$this->Mn[$ix][$iy] = NULL;
1438					$this->Mx[$ix][$iy] = NULL;
1439				}
1440			}
1441		}
1442		$cntx = count($this->Smry);
1443		for ($ix = $lvl; $ix < $cntx; $ix++) {
1444			$this->Cnt[$ix][0] = 0;
1445		}
1446
1447		// Reset record count
1448		$this->RecCount = 0;
1449
1450	}
1451
1452	// Accummulate grand summary
1453	function AccumulateGrandSummary() {
1454		$this->Cnt[0][0]++;
1455		$cntgs = count($this->GrandSmry);
1456		for ($iy = 1; $iy < $cntgs; $iy++) {
1457			if ($this->Col[$iy]) {
1458				$valwrk = $this->Val[$iy];
1459				if (is_null($valwrk) || !is_numeric($valwrk)) {
1460					// skip
1461				} else {
1462					$this->GrandSmry[$iy] += $valwrk;
1463					if (is_null($this->GrandMn[$iy])) {
1464						$this->GrandMn[$iy] = $valwrk;
1465						$this->GrandMx[$iy] = $valwrk;
1466					} else {
1467						if ($this->GrandMn[$iy] > $valwrk) $this->GrandMn[$iy] = $valwrk;
1468						if ($this->GrandMx[$iy] < $valwrk) $this->GrandMx[$iy] = $valwrk;
1469					}
1470				}
1471			}
1472		}
1473	}
1474
1475<!--## If nGrps > 0 Then ##-->
1476	// Get group count
1477	function GetGrpCnt($sql) {
1478		global $conn;
1479		global $<!--##=sTblVar##-->;
1480
1481		$rsgrpcnt = $conn->Execute($sql);
1482
1483		$grpcnt = ($rsgrpcnt) ? $rsgrpcnt->RecordCount() : 0;
1484
1485		if ($rsgrpcnt) $rsgrpcnt->Close();
1486		return $grpcnt;
1487	}
1488
1489	// Get group rs
1490	function GetGrpRs($sql, $start, $grps) {
1491		global $conn;
1492		global $<!--##=sTblVar##-->;
1493
1494		$wrksql = $sql;
1495	<!--## If bDBMySql Or bDBPostgreSql Then ##-->
1496		if ($start > 0 && $grps > -1)
1497		<!--## If bDBMySql Then ##-->
1498			$wrksql .= " LIMIT " . ($start-1) . ", " . ($grps);
1499		<!--## ElseIf bDBPostgreSql Then ##-->
1500			$wrksql .= " LIMIT " . ($grps) . " OFFSET " . ($start-1);
1501		<!--## End If ##-->
1502	<!--## End If ##-->
1503
1504		$rswrk = $conn->Execute($wrksql);
1505
1506	<!--## If Not (bDBMySql Or bDBPostgreSql) Then ##-->
1507		if ($start > 1)
1508			$rswrk->Move($start - 1);
1509	<!--## End If ##-->
1510
1511		return $rswrk;
1512	}
1513
1514	// Get group row values
1515	function GetGrpRow($opt) {
1516		global $rsgrp;
1517		global $<!--##=sTblVar##-->;
1518
1519		if (!$rsgrp)
1520			return;
1521
1522		if ($opt == 1) { // Get first group
1523			//$rsgrp->MoveFirst(); // NOTE: no need to move position
1524			$<!--##=sFirstGrpFldObj##-->->setDbValue(""); // Init first value
1525		} else { // Get next group
1526			$rsgrp->MoveNext();
1527		}
1528
1529		if (!$rsgrp->EOF)
1530			$<!--##=sFirstGrpFldObj##-->->setDbValue($rsgrp->fields[0]);
1531
1532		if ($rsgrp->EOF) {
1533			$<!--##=sFirstGrpFldObj##-->->setDbValue("");
1534		}
1535
1536	}
1537
1538<!--## Else ##-->
1539
1540	// Get count
1541	function GetCnt($sql) {
1542		global $conn;
1543		$rscnt = $conn->Execute($sql);
1544		$cnt = ($rscnt) ? $rscnt->RecordCount() : 0;
1545		if ($rscnt) $rscnt->Close();
1546		return $cnt;
1547	}
1548
1549	// Get rs
1550	function GetRs($sql, $start, $grps) {
1551		global $conn;
1552		$wrksql = $sql;
1553	<!--## If bDBMySql Or bDBPostgreSql Then ##-->
1554		if ($start > 0 && $grps > -1)
1555		<!--## If bDBMySql Then ##-->
1556			$wrksql .= " LIMIT " . ($start-1) . ", " . ($grps);
1557		<!--## ElseIf bDBPostgreSql Then ##-->
1558			$wrksql .= " LIMIT " . ($grps) . " OFFSET " . ($start-1);
1559

Large files files are truncated, but you can click here to view the full file