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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.05.2004, 13:59   #1  
diviza is offline
diviza
Участник
 
6 / 10 (1) +
Регистрация: 05.08.2003
? addRange; AND vs OR
...
qbr = qbds.addRange(FieldNum(InventTrans, StatusReceipt));
qbr.value(enum2str(StatusReceipt::Purchased));

qbr = qbds.addRange(FieldNum(InventTrans, StatusIssue));
qbr.value(enum2str(StatusIssue::Sold));

Аксапта формирует запрос так
...((StatusReceipt = Закуплено) AND (StatusIssue = Продано))

А мне надо сделать не AND, а OR!
Неужели это невозможно?
Старый 25.05.2004, 14:09   #2  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Developer's Guide -> Creating queries -> Query basics -> Organization of queries -> Ranges
Старый 25.05.2004, 14:22   #3  
diviza is offline
diviza
Участник
 
6 / 10 (1) +
Регистрация: 05.08.2003
Посмотрел в Developer's Guide -> Creating queries -> Query basics -> Organization of queries -> Ranges, там ответа на мой вопрос нет.
Так значит невозможно?
Старый 25.05.2004, 14:22   #4  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
http://axapta.mazzy.ru/hints/search/
в конце
Старый 25.05.2004, 14:29   #5  
diviza is offline
diviza
Участник
 
6 / 10 (1) +
Регистрация: 05.08.2003
Насколько я понимаю на http://axapta.mazzy.ru/hints/search/
рассматривается случай когда добавляется несколько Range на одно
поле в таблице.

А в моем вопросе добавляются два Range на разные поля.
Старый 25.05.2004, 14:46   #6  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Изначально опубликовано diviza
А в моем вопросе добавляются два Range на разные поля.
Виноват, проглядел..

Тогда Best Practices -> Shared standards -> X++ standards -> Query programming -> Advanced query range value expressions

Старый 25.05.2004, 15:25   #7  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Изначально опубликовано diviza
А в моем вопросе добавляются два Range на разные поля.
А вы попробуйте
Старый 26.05.2004, 08:04   #8  
diviza is offline
diviza
Участник
 
6 / 10 (1) +
Регистрация: 05.08.2003
Цитата:
Изначально опубликовано mazzy

А вы попробуйте
Попробовал такой вариант:
...
qbr = qbds.addRange(FieldNum(InventTrans, StatusReceipt));
qbr.value(strfmt("%1 || %2 = %3",
enum2str(StatusReceipt::Purchased),
FieldStr(InventTrans, StatusIssue),
enum2str(StatusIssue::Sold)));
...
// вместо || ставил и OR

В отладчике получаю:
... ((StatusReceipt = Закуплено || StatusIssue = Продано)) ...

При мониторинге запросов SQL получаю в лог файле:
... AND (B.STATUSRECEIPT=255) ...

Естественно, это не тот результат который я хотел получить.
Где же ошибка?
Старый 26.05.2004, 10:18   #9  
dn is offline
dn
Участник
Самостоятельные клиенты AX
 
486 / 159 (6) ++++++
Регистрация: 26.03.2003
Адрес: Москва
Внимательнее читаем Best Practice (в совете Сергея, это также процитировано).
Цитата:
In x++ you can use for example int2str to convert an enumerated value to the suitable numeric format.
Т.е. вместо
PHP код:
enum2str(StatusReceipt::Purchased
нужно использовать
PHP код:
int2str(StatusReceipt::Purchased
p.s. И вместо || не нужно использовать or. Это бесполезно.
Старый 26.05.2004, 10:42   #10  
diviza is offline
diviza
Участник
 
6 / 10 (1) +
Регистрация: 05.08.2003
Цитата:
Изначально опубликовано dn
... вместо enum2str(StatusReceipt::Purchased) нужно использовать int2str(StatusReceipt::Purchased)
Пробую вариант
PHP код:
qbr qbds.addRange(FieldNum(InventTransStatusReceipt));
    
qbr.value(strfmt("%1 || %2 = %3",
            
int2str(StatusReceipt::Purchased),
            
FieldStr(InventTransStatusIssue),
            
int2str(StatusIssue::Sold))); 
Теперь в отладчике получаю:
... ((StatusReceipt = 1 || StatusIssue = 1)) ...

При мониторинге запросов SQL опять получаю в лог файле:
... AND (B.STATUSRECEIPT=255) ... С тем же результатом
Старый 26.05.2004, 10:54   #11  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Чувствую, пора вмешаться
PHP код:
    qbr.value(strfmt("((%1 = %2) || (%3 = %4))",
            
FieldStr(InventTransStatusReceipt),
            
int2str(StatusReceipt::Purchased),
            
FieldStr(InventTransStatusIssue),
            
int2str(StatusIssue::Sold))); 
Старый 26.05.2004, 11:05   #12  
dn is offline
dn
Участник
Самостоятельные клиенты AX
 
486 / 159 (6) ++++++
Регистрация: 26.03.2003
Адрес: Москва
Откройте всё-таки на досуге Best Practice. Там много чего полезного. И даже примеры есть...

PHP код:
strfmt("((%1 == %2)||(%3 == %4))",
FieldStr(InventTransStatusReceipt),
int2str(StatusReceipt::Purchased),
FieldStr(InventTransStatusIssue),
int2str(StatusIssue::Sold)) 
Старый 26.05.2004, 11:28   #13  
diviza is offline
diviza
Участник
 
6 / 10 (1) +
Регистрация: 05.08.2003
Всем спасибо! Получилось.

p.s.
Что интересно, что верно как "=" (см. ответ Wamr), так и "==" (см. ответ dn).
Ранее я пробовал такой вариант "(%1 == %2)||(%3 == %4)", но почему-то не догадался поставить внешнюю пару скобок.
Старый 26.05.2004, 13:03   #14  
lexx is offline
lexx
Участник
Аватар для lexx
 
20 / 10 (1) +
Регистрация: 03.02.2004
Адрес: Moscow
А как быть если требуется like?
вариант "((%1 like %2)||(%3 like %4))"
как и сказано в
http://axapta.mazzy.ru/hints/search/
не работает
 


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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 15:14.