Что-то типа такого (в контейнере conDimensions хранятся номера нужных аналитик):
X++:
void start()
{
this.action(this.initQuery(), 1);
}
Query initQuery()
{
Query q = new Query();
QueryBuildDataSource qbds;
qbds = q.addDataSource(tablenum(LedgerTrans));
qbds.orderMode(OrderMode::GroupBy);
return q;
}
void action(Query _q, int _idx, SysDimension _sysDim, SysDim _dimValue)
{
QueryRun qr = new QueryRun(this.initQuery());
LedgerTrans ledgerTrans;
SysDImension sysDimGroup;
sysDimGroup = conPeek(conDimensions, _idx);
qr.query().dataSourceTable(tablenum(LedgerTrans)).addSortField(fieldId2Ext(fieldnum(LedgerTrans, Dimension), sysDimGroup + 1));
qr.query().dataSourceTable(tablenum(LedgerTrans)).addRange(fieldId2Ext(fieldnum(LedgerTrans, Dimension), _sysDim + 1)).value(queryValue(_dimValue));
while (qr.next())
{
ledgerTrans = qr.get(tablenum(LedgerTrans));
....doSomething....
if (_idx <= conLen(conDimensions))
{
this.action(qr.query(), _idx + 1, sysDimGroup, ledgerTrans.Dimension[sysDimGroup + 1]);
}
}
}