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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 20.04.2006, 14:13   #1  
Lemming is offline
Lemming
Участник
Аватар для Lemming
 
1,144 / 343 (14) ++++++
Регистрация: 20.04.2004
Адрес: Москва, Чайнатаун в Люблино
Записей в блоге: 10
? Сложный Query: непонятки с Enum-ами
Цель, создать вот такой вот Query
Код:
while select ledgerJournalTrans
        where ledgerJournalTrans.TransDate == todayDate
           && ledgerJournalTrans.AccountType == LedgerJournalACType::Cust
    exists join ledgerJournalTransLink
        where (ledgerJournalTransLink.Voucher     == ledgerJournalTrans.Voucher
               && ledgerJournalTransLink.TransDate   == ledgerJournalTrans.TransDate
              )&& 
               (ledgerJournalTransLink.AccountType == LedgerJournalACType::Bank ||
               (ledgerJournalTransLink.AccountType == LedgerJournalACType::Cust
                && ledgerJournalTransLink.OffsetAccountType == LedgerJournalACType::Bank))
{...}
Делаю:
Код:
value = strfmt('((%1 == "%2") || ((%3 == "%4") && (%5 == "%6")))',
                    fieldId2name(TableNum(LedgerJournalTrans), fieldNum(LedgerJournalTrans, AccountType)),
                    queryValue(LedgerJournalACType::Bank),
                    fieldId2name(TableNum(LedgerJournalTrans), fieldNum(LedgerJournalTrans, AccountType)),
                    queryValue(LedgerJournalACType::Cust),
                    fieldId2name(TableNum(LedgerJournalTrans), fieldNum(LedgerJournalTrans, OffsetAccountType)),
                    queryValue(LedgerJournalACType::Bank));

    linkedQbds.addRange(fieldNum(LedgerJournalTrans, DataAreaId)).value(value);
С точки зрения синтаксиса, на сервер запрос отправляется, как раз такой, какой нужен, но вот беда. Индексы Enum-ов какие то бредовые
Код:
...
((B.ACCOUNTTYPE=193) OR ((B.ACCOUNTTYPE=202) AND (B.OFFSETACCOUNTTYPE=193))))
...
Что делать не ясно, мысли кончились. Если вместо queryValue(LedgerJournalACType::Bank) написать queryValue(6) на сервер уходит запрос с другими индексами Enum-ов, но не менее бредовыми. Может кто сталкивался и составлял "хитрые запросы" с участием Enum- полей? А то уже не ясно, что делать дальше
Старый 20.04.2006, 14:20   #2  
dn is offline
dn
Участник
Самостоятельные клиенты AX
 
486 / 159 (6) ++++++
Регистрация: 26.03.2003
Адрес: Москва
Цитата:
Сообщение от Lemming
Цель, создать вот такой вот Query
Что делать не ясно, мысли кончились. Если вместо queryValue(LedgerJournalACType::Bank) написать queryValue(6) на сервер уходит запрос с другими индексами Enum-ов, но не менее бредовыми. Может кто сталкивался и составлял "хитрые запросы" с участием Enum- полей? А то уже не ясно, что делать дальше
Вопрос из серии FAQ.
Решение: вместо queryValue() используй int2str().
Старый 20.04.2006, 14:28   #3  
Lemming is offline
Lemming
Участник
Аватар для Lemming
 
1,144 / 343 (14) ++++++
Регистрация: 20.04.2004
Адрес: Москва, Чайнатаун в Люблино
Записей в блоге: 10
:(
Цитата:
Сообщение от dn
Вопрос из серии FAQ.
Решение: вместо queryValue() используй int2str().
Код:
AND ((B.ACCOUNTTYPE=193) OR ((B.ACCOUNTTYPE=49) AND (B.OFFSETACCOUNTTYPE=54))))
Вопрос остается открытым
Старый 20.04.2006, 14:37   #4  
Lemming is offline
Lemming
Участник
Аватар для Lemming
 
1,144 / 343 (14) ++++++
Регистрация: 20.04.2004
Адрес: Москва, Чайнатаун в Люблино
Записей в блоге: 10
Thumbs up
Цитата:
Сообщение от dn
Вопрос из серии FAQ.
Решение: вместо queryValue() используй int2str().

Вопрос снят! Надо вместо queryValue() использовать any2str();
Старый 20.04.2006, 14:41   #5  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
По поводо Int2str - уберите двойные кавычки из условия
__________________
Axapta v.3.0 sp5 kr2
Старый 20.04.2006, 14:44   #6  
Lemming is offline
Lemming
Участник
Аватар для Lemming
 
1,144 / 343 (14) ++++++
Регистрация: 20.04.2004
Адрес: Москва, Чайнатаун в Люблино
Записей в блоге: 10
Цитата:
Сообщение от AndyD
По поводо Int2str - уберите двойные кавычки из условия
thx

Действительно, перед тем как поставить any2str убрал кавычки, все работает и с any... и с int...
Старый 20.04.2006, 15:00   #7  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Вот что пишется в хелпе поводу any2str().
Цитата:
Useful output is only guaranteed for input type str.
У меня рантайм еррор вылетае при попытке подсунить этой функции данных любого типа, кроме str
__________________
Axapta v.3.0 sp5 kr2
Старый 20.04.2006, 15:04   #8  
dn is offline
dn
Участник
Самостоятельные клиенты AX
 
486 / 159 (6) ++++++
Регистрация: 26.03.2003
Адрес: Москва
я бы не рекомендовал использовать any2str, это такая функция от которой непонятно чего ожидать
Старый 20.04.2006, 15:22   #9  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Кстати, можно использовать Base Enum непосредственно в тексте запроса, т.е
X++:
value = strfmt('((%1 == LedgerJournalACType::Bank) || ' +
    '((%2 == LedgerJournalACType::Cust) && (%3 == LedgerJournalACType::Bank)))',
                    fieldId2name(TableNum(LedgerJournalTrans), fieldNum(LedgerJournalTrans, AccountType)),
                    fieldId2name(TableNum(LedgerJournalTrans), fieldNum(LedgerJournalTrans, AccountType)),
                    fieldId2name(TableNum(LedgerJournalTrans), fieldNum(LedgerJournalTrans, OffsetAccountType)));
__________________
Axapta v.3.0 sp5 kr2
Старый 20.04.2006, 15:37   #10  
Lemming is offline
Lemming
Участник
Аватар для Lemming
 
1,144 / 343 (14) ++++++
Регистрация: 20.04.2004
Адрес: Москва, Чайнатаун в Люблино
Записей в блоге: 10
Cool
Народ, дико извиняюсь, все в спешке , с any2int тоже работает! any2str - действительно вылетела с ошибкой.

AndyD, dn - спасибо!
Теги
запрос (query), ax3.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Dynamics AX: QueryRun and Query Objects - Binding operation failed to allocate buffer space Blog bot DAX Blogs 0 03.04.2009 08:05
palleagermark: Sample union query from AX 2009 Blog bot DAX Blogs 0 11.07.2008 20:05
Dynamics AX Geek: Using query() Blog bot DAX Blogs 0 28.10.2006 16:40
Проблема с составлением Query axaLearner DAX: Программирование 10 01.12.2005 15:00
Фильтрация по полю Enum в Query Cooper DAX: Программирование 8 04.07.2004 09:21

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

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

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