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;
}