Цитата:
Сообщение от
S.Kuskov
В общем случае подцепить к имеющемуся query ещё один CustTable с типом связи exists join и наложить уже на него условие "КлиентАБВ". Затем сделав один раз queryRun.next() посмотреть вернулось ли что-нибудь.
К сожалению, это ничего не гарантирует. Если исходный запрос относительно сложен и имеет несколько таблиц-источников с "не линейной" схемой объединения, то подключение еще одного источника по Exists Join может привести к тому, что запросу "снесет крышу". Результат может оказаться парадоксальным.
В принципе, общая идея, заключающаяся в том, что нужно наложить еще один Range по этому полю - правильная. Проблема только в том, что этот Range должен подкючаться по "И", а если уже есть Range по этому же полю, скажем, настроенный пользователем, то подключение произойдет по "ИЛИ"
Именно для данного конкретного случая можно сделать "хитрый трюк". Дело в том, что определение того факта, что Range добавляется по уже существующему полю выполняется по Id поля. При этом, как правило, используется FieldId. Однако Axapta может идентифицировать поле как по FieldId, так и по ExtendedFieldId. Т.е. идентифицировать поле, как первый элемент массива.
Естесственно, что FieldId и ExtendedFieldId - это разные значения. Как следствие, построитель запросов интепретирует их как разные Range и выполняет объединение по "И".
Получается, примерно следующее
X++:
static void Job_Test(QueryRun queryRun)
{
Query queryFind;
QueryRun queryRunFind;
QueryBuildDataSource qbds;
QueryBuildRange qbr;
;
queryFind = new Query(queryRun.query().pack());
qbds = queryFind.dataSourceTable(tablenum(CustTable));
// Вот этот трюк
qbr = qbds.findRange(fieldnum(CustTable, accountNum));
if (qbr)
{
// Если Range уже есть, то создаю новый Range по ExdendendFieldId
qbr = qbds.addRange(fieldId2ext(fieldnum(CustTable, accountNum),1));
}
qbr.value('КлиентАБВ');
queryRunFind = new QueryRun(queryFind);
if (queryRunFind.next())
{
info("Есть такая запись");
}
}
Естесственно, этот трюк работает только для полей, которые массивами не являются. Для полей-массивов можно сделать подобное только для первого элемента массива.