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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 10.11.2013, 01:48   #1  
Andy-k is offline
Andy-k
Участник
Аватар для Andy-k
 
23 / 10 (1) +
Регистрация: 29.08.2012
Адрес: Москва
Query одно условие по разным полям
Добрый день! Помогите новичку разобраться.

Есть таблица, назовем ее просто Table, среди полей которой есть несколько полей типа Дата. назовем их Date1, Date2, Date3

Мне надо построить Query который отберет из нее записи указанного диапазона дат, при том что дата начала или дата конца может быть и не указана.

В общем что-то типа этого:
if (fromDate || toDate)
qbds.addRange(fieldnum(Table, Date1)).value(SysQuery::range(fromDate, toDate));

Но чуть позже мне потребовалось строить хитрое условие, при котором я должен выбирать запись, если значение Date1(если оно там есть) попадает в указанный диапазон (fromDate, toDate), а если там(в Date1) значения нет, то проверить входит ли в указанный диапазон Date2, если оно заполнено.

То есть, если заполнено Date1 проверить на вхождение его в диапазон, а если там значения нет, проверить на то же самое поле Date2.

Последний раз редактировалось Andy-k; 10.11.2013 в 02:13.
Старый 10.11.2013, 08:07   #2  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
558 / 249 (10) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
How to use Complex Query Ranges in Dynamics AX
__________________
// no comments
За это сообщение автора поблагодарили: Andy-k (1).
Старый 11.11.2013, 08:11   #3  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,201 / 1578 (59) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
http://www.axaptapedia.com/Expressions_in_query_ranges
За это сообщение автора поблагодарили: Andy-k (1).
Старый 11.11.2013, 13:01   #4  
user_ax is offline
user_ax
Участник
Аватар для user_ax
 
593 / 37 (3) +++
Регистрация: 07.10.2012
Адрес: ZP
Цитата:
Очень часто помогала эта ссылка. ТС, там есть и ваш вариант проблемы
Старый 11.11.2013, 19:28   #5  
Andy-k is offline
Andy-k
Участник
Аватар для Andy-k
 
23 / 10 (1) +
Регистрация: 29.08.2012
Адрес: Москва
Ребят, спасибо! После прочтения я понял, как мне этого не хватало до этого
Старый 28.01.2014, 17:50   #6  
DAX13 is offline
DAX13
Участник
 
10 / 10 (1) +
Регистрация: 31.03.2010
вопрос по запросу
Подскажите, пожалуйста, такой синтаксис работает на MS DAX 4.0 ?

queryBuildRange.value(strFmt('((ItemType == %1) || (ItemId == "%2"))', any2int(ItemType::Service), queryValue("Item1")));

У меня ошибку выдает:
Ошибка расширенного диапазона запроса: Синтаксическая ошибка рядом с 24.

Может я что-то делаю не так? Цель запроса: отобрать основной договор и все подчиненные.

X++:
static void Job7(Args _args)
{
    Query                  query = new Query();
    QueryBuildDatasource   qbds  = query.addDataSource(tableNum(RContractTable));
    QueryBuildRange        qbr;
    QueryRun               qr;
    RContractTable         contractTable;
    ;

    qbr = qbds.addRange(fieldnum(RContractTable, RContractAccount));
    qbr = qbds.addRange(fieldnum(RContractTable, ML_RContractParentAccount));
    qbr.value(strFmt('((RContractAccount == %1) || (ML_RContractParentAccount == "%2"))',   "Дог0001", "Дог0001"));

    qr = new QueryRun(query);
 
    while (qr.next())
    {
        contractTable = qr.get(tableNum(RContractTable));
    }
}
Старый 28.01.2014, 17:59   #7  
michel1971 is offline
michel1971
Участник
 
64 / 54 (2) ++++
Регистрация: 14.01.2011
а вот так
X++:
qbr.value(strFmt('((RContractAccount == "%1") || (ML_RContractParentAccount == "%2"))',   "Дог0001", "Дог0001"));
Старый 28.01.2014, 18:47   #8  
DAX13 is offline
DAX13
Участник
 
10 / 10 (1) +
Регистрация: 31.03.2010
Цитата:
Сообщение от michel1971 Посмотреть сообщение
а вот так
X++:
qbr.value(strFmt('((RContractAccount == "%1") || (ML_RContractParentAccount == "%2"))',   "Дог0001", "Дог0001"));
Не понял, что Вы этим хотите сказать. Такой код у меня не работает. Выдает ошибку.
Возможно, проблема скрыта в этих строчках:
qbr = qbds.addRange(fieldnum(RContractTable, RContractAccount));
qbr = qbds.addRange(fieldnum(RContractTable, ML_RContractParentAccount));

Но не пойму как по другому связать QueryBuildRange и QueryBuildDatasource.

Последний раз редактировалось DAX13; 28.01.2014 в 18:56.
Старый 28.01.2014, 18:51   #9  
michel1971 is offline
michel1971
Участник
 
64 / 54 (2) ++++
Регистрация: 14.01.2011
Цитата:
Сообщение от DAX13 Посмотреть сообщение
Не понял, что Вы этим хотите сказать. Такой код у меня не работает. Выдает ошибку.
если не видите отличий, то просто скопируйте
За это сообщение автора поблагодарили: DAX13 (1).
Старый 29.01.2014, 07:22   #10  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
558 / 249 (10) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
В первом случае у вас нет двойных кавычек, а должны быть
X++:
'((RContractAccount == "%1")...'
__________________
// no comments
За это сообщение автора поблагодарили: DAX13 (1).
Старый 29.01.2014, 14:59   #11  
Cardagant is offline
Cardagant
Участник
 
315 / 53 (2) ++++
Регистрация: 11.10.2011
В дополнение, видел рекомендации на форуме и в статьях (да и в ссылках выше это проиллюстрировано), что комплексные критерии лучше создавать на основе полей, которые обычно наименнее задействованых при запросах к этой таблице из бизнес-логики. Например, DataAreaId, TableId, реже, RecId.

В одной из статей выше сказано:
"The range is then added, using the DataAreaId field on each table. Any field can be used, but using an unusual one such as DataAreaId helps remind a casual reader of the code that it's not a normal range."

Последний раз редактировалось Cardagant; 29.01.2014 в 15:49.
Теги
query

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
условие с датой в Query romanja DAX: Программирование 5 07.04.2011 10:25
Как прикрутить в query условие vale15 DAX: Программирование 1 11.09.2007 11:00
Как в range на одно и тоже контейнерное поле поставить условие: "исключ." && like Pustik DAX: Программирование 15 03.07.2004 11:54
Фильтр в Query по двум полям ArturK DAX: Программирование 1 15.03.2004 13:17
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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