Проверка предельного количества Range в Query
X++:
static void Job_QueryRangeLimit(Args _args)
{
Query query;
QueryRun queryRun;
QueryBuildDataSource qbds;
QueryBuildRange qbr;
int nextI;
;
query = new Query();
qbds = query.addDataSource(tablenum(InventTable));
for (nextI = 1; nextI <= 476 ; nextI++)
{
qbr = qbds.addRange(fieldNum(InventTable, ItemId));
qbr.value(queryValue('1'));
}
queryRun = new QueryRun(query);
queryRun.next();
}
Axapta 2.5 SP3.
476 условий - берет, а 477 - ошибка "Некоторая часть инструкции SQL имеет слишком глубокую вложенность. Перепишите запрос или разбейте его на запросы меньшего размера."
Так что, все зависит от количества ограничивающих значений. Если в пределах нескольких десятков, то можно и через Range. А вот если больше, то может быть имеет смысл сделать обратное - найти значения которые надо не исключать, а наоборот, которые допустимы.
Использование временной таблице в запросе по любому физически означает вложенный цикл. Просто, при включении таблицы в запрос этот цикл выполняется не явно.