Показать сообщение отдельно
Старый 02.11.2005, 07:40   #5  
tumev is offline
tumev
Участник
 
30 / 10 (1) +
Регистрация: 12.09.2005
2 AndyD релейшен есть (его не может не быть )
2 Андре добавить индекс на поле ... программно?
Метод fetch отчёта:
Код:
 public boolean fetch()
{
	QueryRun				subQueryRun;
	InventDim			 subInventDim;
	boolean				 rangeNotViewed;
	QueryRun				qRun;
	;
	rangeNotViewed = this.checkRangesNotViewed();
	qRun = new QueryRun(query);
	while (qRun.next())
	{
		InventSum = qRun.get(tableNum(InventSum));
		InventDim = qRun.get(tableNum(InventDim));
		if (rangeNotViewed)
		{
			inventSumDateValueReportDim = null;
			subQueryRun = this.subQueryRun(InventSum, InventDim);
			while (subQueryRun.next())
			{
				subInventDim = subQueryRun.get(tableNum(InventDim));
				if (! inventSumDateValueReportDim)
				{
					inventSumDateValueReportDim = InventSumDateValueReportDim::newParameters(
						inventDimReport.parmPerDate(),
						inventSum.ItemId,
						subInventDim,
						inventDimReport.parmInventDimParm()
						);
				}
				else
				{
					inventSumDateValueReportDim.parmInventDim(subInventDim);
					inventSumDateValueReportDim.init();
				}
			}
		}
		else
		{
			inventSumDateValueReportDim = InventSumDateValueReportDim::newParameters(
				inventDimReport.parmPerDate(),
				inventSum.ItemId,
				inventDim,
				inventDimReport.parmInventDimParm()
				);
		}
		if (this.printLine() && inventSumDateValueReportDim)
		{
			this.send(InventSum);
			this.send(InventDim);
		}
	}
	return true;
}
Как понимаю если и вставлять индекс на поле, то где-нибудь здесь.
Хотя есть ещё метод subQueryRun, но он работает для каждой строки (думаю этот метод не подходит).
Вот код этого метода:
Код:
queryRun subQueryRun(InventSum _inventSum,
					 InventDim _inventDim)
{
	QueryRun				subQueryRun;
	QueryBuildDataSource	subQbdsDim;
	QueryBuildDataSource	subQbdsSum;
	QueryBuildRange		 rangeItemId;
	Counter				 h;
	FieldId				 x,y;
	;
	subQbdsDim = subQuery.dataSourceTable(tableNum(InventDim));
	subQbdsSum = subQuery.dataSourceTable(tableNum(InventSum));
	for (h=1; h<=subQbdsDim.rangeCount(); h++)
	{
		y = fieldName2Id(tableNum(InventDim),subQbdsDim.range(h).name());
		x = InventDim::dim2dimParm(y);
		if (conFind(subFieldList,y))
		{
			if (subQbdsDim.range(h))
			{
				subQbdsDim.addSortField(y);
				subQbdsDim.orderMode(OrderMode::GroupBy);
			}
			if (_inventDim.(y))
				subQbdsDim.range(h).value(_inventDim.(y));
			else
			if ( inventDimReport.parmInventDimParm().(x) && !_inventDim.(y) && !subQbdsDim.range(h).value())
				subQbdsDim.range(h).value(SysQuery::valueEmptyString());
		}
	}
	rangeItemId = subQbdsSum.findRange(fieldNum(InventSum,ItemId));
	if (! rangeItemId)
		subQbdsSum.addRange(fieldNum(InventSum,ItemId));
	rangeItemId.value(strfmt('"%1"',_inventSum.ItemId));
	subQueryRun = new QueryRun(subQuery);
	return subQueryRun;
}