Показать сообщение отдельно
Старый 02.07.2015, 15:05   #8  
Ruff is offline
Ruff
Дмитрий Ерин
Аватар для Ruff
1C
 
475 / 396 (14) ++++++
Регистрация: 18.09.2003
Адрес: Тула
Цитата:
Сообщение от АртемМелихов Посмотреть сообщение
Судя по всему меня не понимают. если я напишу "001....009,002", то выпадет очень много записей, точнее все от 001 до 009, ибо два условия ("001..009" и "002") соединяются через или. А есть ли возможность объединить через и? Спасибо!
Судя по постановке, речь идет о том, что одно из условий накладывается программно, а второе - прилетает от пользователя? Если так, то пользовательский фильтр может сам оказаться довольно сложным (типа "001..009, 100..109, 777*"). В этом случае формировать запрос через ExtendedQuery - муторно, IMHO. Проще приджойнить таблицу саму к себе по ExistsJoin и наложить разные условия на разные DS.
Пример:
X++:
    mainQbds = query.addDataSource(tablenum(InventTable));
    mainQbds.addRange(fieldnum(InventTable, ItemId)).value("001..009, 002");

    filterQbds = mainQbds.addDataSource(tablenum(InventTable));
    filterQbds.relations(true);
    filterQbds.joinMode(JoinMode::ExistsJoin);
    filterQbds.addRange(fieldnum(InventTable, ItemId)).value("007..020, 006");
В итоге получится "пересечение множеств" (006, 007, 008, 009) - то чего вы и добиваетесь. Главный минус - громоздкость запроса (если нужно несколько таких "И", придется делать несколько джойнов).
__________________