AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 02.07.2015, 09:54   #1  
АртемМелихов is offline
АртемМелихов
Участник
Аватар для АртемМелихов
 
120 / 10 (1) +
Регистрация: 18.12.2013
Адрес: Samara
QueryRange условие через И по одному полю?
Добрый день, задался вопросом - можно ли в query сделать условие по одному полю через И?
П.С. Судя по всему меня не понимают. если я напишу "001....009,002", то выпадет очень много записей, точнее все от 001 до 009, ибо два условия ("001..009" и "002") соединяются через или. А есть ли возможность объединить через и? Спасибо!

Последний раз редактировалось АртемМелихов; 02.07.2015 в 10:22.
Старый 02.07.2015, 10:07   #2  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,874 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
В ADDLink соединение по "ИЛИ"
http://www.axaptapedia.com/Expressions_in_query_ranges

там же есть про "И"

А вообще это базовые вещи. Документацию посмотрите по программированию в X++.
Старый 02.07.2015, 10:17   #3  
АртемМелихов is offline
АртемМелихов
Участник
Аватар для АртемМелихов
 
120 / 10 (1) +
Регистрация: 18.12.2013
Адрес: Samara
Цитата:
Сообщение от Logger Посмотреть сообщение
В ADDLink соединение по "ИЛИ"
http://www.axaptapedia.com/Expressions_in_query_ranges

там же есть про "И"

А вообще это базовые вещи. Документацию посмотрите по программированию в X++.
Извините, но я вас не понял. При чем здесь Link, если я говорю о одном поле, в одной таблице?
Старый 02.07.2015, 10:19   #4  
Товарищ ♂uatr is offline
Товарищ ♂uatr
Участник
Аватар для Товарищ ♂uatr
MCBMSS
 
268 / 814 (28) +++++++
Регистрация: 23.10.2012
Цитата:
Сообщение от АртемМелихов Посмотреть сообщение
можно ли в query сделать условие по одному полю через И?
Несколько раз делайте addRange
Из ссылок предоставленных выше:
Filter on array fields
X++:
queryBuildRange.value(strFmt('((%1.%2 == "%4") || (%1.%3 == "%5"))'
Соответственно вместо или можно добавить оператор и

Последний раз редактировалось Товарищ ♂uatr; 02.07.2015 в 10:23.
За это сообщение автора поблагодарили: АртемМелихов (1).
Старый 02.07.2015, 10:22   #5  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,874 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от АртемМелихов Посмотреть сообщение
Извините, но я вас не понял. При чем здесь Link, если я говорю о одном поле, в одной таблице?
Накидал ссылок где обсуждаются Query
Посмотрите лучше вторую она более информативна. Можно попробовать синтаксис ExtendedQuery. Там хорошо получится.

Последний раз редактировалось Logger; 02.07.2015 в 11:38.
За это сообщение автора поблагодарили: АртемМелихов (1).
Старый 02.07.2015, 10:28   #6  
Товарищ ♂uatr is offline
Товарищ ♂uatr
Участник
Аватар для Товарищ ♂uatr
MCBMSS
 
268 / 814 (28) +++++++
Регистрация: 23.10.2012
Цитата:
Сообщение от АртемМелихов Посмотреть сообщение
если я напишу "001....009,002", то выпадет очень много записей, точнее все от 001 до 009, ибо два условия ("001..009" и "002") соединяются через или. А есть ли возможность объединить через и?
Насколько верна постановка задачи.
Разве 1 значение в поле может единовременно быть верным для двух различных фиксированных (не like) условий? (тем не менее, решение изложено выше)
Старый 02.07.2015, 10:36   #7  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Ещё вот так можно Not Like в Query (трюк с адресацией на тоже самое поле но по немного другому номеру при помощи fieldId2Ext)
или с использованием дополнительного джойна Как в range на одно и тоже контейнерное поле поставить условие: "исключ." && like

Последний раз редактировалось S.Kuskov; 02.07.2015 в 10:53.
За это сообщение автора поблагодарили: АртемМелихов (1).
Старый 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) - то чего вы и добиваетесь. Главный минус - громоздкость запроса (если нужно несколько таких "И", придется делать несколько джойнов).
__________________
Старый 02.07.2015, 16:53   #9  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,874 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от Ruff Посмотреть сообщение
Судя по постановке, речь идет о том, что одно из условий накладывается программно, а второе - прилетает от пользователя? Если так, то пользовательский фильтр может сам оказаться довольно сложным (типа "001..009, 100..109, 777*"). В этом случае формировать запрос через ExtendedQuery - муторно, IMHO.
Если задача ставится именно так то ExtendedQuery как раз в тему.
Ставим наш программный фильтр на какое нить поле, скрытое от пользователя, например на tableId. А пользователь ставит свои фильтры. Получается пересечение.

Примеры на скриншотах - Использован номенклатурный справочник. Только вместо поля TableId использовано поле с наименованием.
Миниатюры
Нажмите на изображение для увеличения
Название: Pic1.png
Просмотров: 378
Размер:	25.6 Кб
ID:	9314   Нажмите на изображение для увеличения
Название: Pic2.png
Просмотров: 494
Размер:	23.9 Кб
ID:	9315  

За это сообщение автора поблагодарили: Ruff (2).
Теги
query

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Взаимодействие с Excel через .NET (семейство классов SysExcel) gl00mie DAX: Программирование 102 11.08.2022 17:09
QueryRange и QueryFilter [AX2012] iCloud DAX: Программирование 7 10.07.2014 00:12
Условие запуска документооборота по контейнерному полю Maximin DAX: Функционал 1 11.04.2013 12:15
Ошибка с подключением через ODBC + глюк с работой через connection Corel DAX: Программирование 8 17.05.2012 11:58
Можно ли в одном select`e получить maxof и minof по одному полю? ArturK DAX: Программирование 2 28.04.2004 12:28

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 10:08.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.