Цитата:
Сообщение от
Elenka
данная функция возвравращает ссылку на ранее созданый range, но в Value пусто, хотя там должно быть accountNum=Значение1, поскольку первоначально фильтр по этому полю был наложен. Далее как Вы и говорите пишу qbr.Value(SysQuery::value("Значение1")) либо просто qbr.Value("Значение1"). В результате получаю в where запроса (accountNum = значение1 Or accountNum= значение1)
Проблема в том, что первоначально у вас было два ranges: один пустой, а второй - "Значение1" (вы проверяли _query.xml()?). Когда вы делали clearRange, удалялся пустой range, а "Значение1" оставалось. После этого вы добавляли еще один range "Значение1", вот и получали в where запроса "(accountNum = значение1 Or accountNum= значение1)";
Следующий код это иллюстрирует:
X++:
static void JobTest(Args _args)
{
Query q = new Query();
QueryBuildDataSource qbds = q.addDataSource(tablenum(VendTrans));
;
qbds.addRange(fieldNum(VendTrans,AccountNum));
qbds.addRange(fieldNum(VendTrans,AccountNum)).value('Test1');
info(q.xml());
qbds.clearRange(fieldnum(VendTrans,AccountNum));
qbds.addRange(fieldNum(VendTrans,AccountNum)).value('Test2');
info(qbds.toString());
}
Конечный запрос выглядит так:
"SELECT * FROM VendTrans WHERE ((AccountNum = N'Test1') OR (AccountNum = N'Test2'))"