Цитата:
Сообщение от
lev
...(но это не всегда возможно из-за определения какое условие подставлять И или ИЛИ. если писать в одном range, тогда в запросе будет условие И, а если в нескольких, то ИЛИ. и на эти грабли наступал

).
забыл добавить главный нюанс! так работает при добавлении отрицания в условие запроса, т.е. "!" или SysQuery::valueNot().
вот джобик для наглядности:
X++:
Query query;
QueryBuildDataSource qbds;
QueryBuildRange qbr;
InventTable inventTable;
str filter;
int i;
;
// вариант №1 создаем один range и в него через запятую записываем условие -->
query = new Query();
qbds = query.addDataSource(tableNum(InventTable));
qbr = qbds.addRange(fieldNum(InventTable, ItemId));
while select inventTable
{
i++;
if (filter != '')
filter += ', ';
filter += '!' + inventTable.ItemId;
if (i == 3)
break;
}
qbr.value(filter);
info('1-ый вариант -->');
info(query.dataSourceTable(tableNum(InventTable)).toString());
info('1-ый вариант <--');
// <--------------------------------------------------------------------------
i = 0;
// вариант №2 для каждой номенклатуры добавляем range -->
query = new Query();
qbds = query.addDataSource(tableNum(InventTable));
while select inventTable
{
i++;
qbds.addRange(fieldNum(InventTable, ItemId)).value(SysQuery::valueNot(inventTable.ItemId));
if (i == 3)
break;
}
info('2-ой вариант -->');
info(query.dataSourceTable(tableNum(InventTable)).toString());
info('2-ой вариант <--');
// <-----------------------------------------------------