Извратится-то можно, только по сравнению с прямым перебром Range любые способы не дают 100% гарантии верного ответа.
Ну, например, можно прочитать строку сформированного запроса и подсчитать количество неких последовательностей символов, которые будут соответствовать пустым условиям.
X++:
static void Job_QueryRangeEmpty(Args _args)
{
Query query;
QueryBuildDataSource qbds;
QueryBuildRange qbr;
int nextI,
qtyEmpty;
str strQuery,
strQueryExtract;
;
#localmacro.emptyValue1
"= )"
#endmacro
#localmacro.emptyValue2
"=)"
#endmacro
// Тестовый Query для проверки
query = new Query();
qbds = query.addDataSource(tablenum(InventTable));
// Одиночные условия
for (nextI = 1; nextI <= 1 ; nextI++)
{
qbr = qbds.addRange(fieldNum(InventTable, ItemId));
qbr.value(queryValue(''));
}
// Диапазон значений
qbr.value(queryRange('',''));
// Подсчет количества пустых условий
strQuery = query.dataSourceNo(1).tostring();
info(strQuery);
strQueryExtract = global::strReplace(strQuery,#emptyValue1,"");
qtyEmpty = (strLen(strQuery)-strLen(strQueryExtract)) / strLen(#emptyValue1);
strQueryExtract = global::strReplace(strQuery,#emptyValue2,"");
qtyEmpty += (strLen(strQuery)-strLen(strQueryExtract)) / strLen(#emptyValue2);
info(strFmt("пустых условий %1", qtyEmpty));
}
Хотя заведомо понятно, что подобный код будет работать только при определенных значениях Range.
По моему, проще написать универсальный код перебора всех Range во всех DataSource.