|
20.04.2006, 14:13 | #1 |
Участник
|
Сложный 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); Код: ... ((B.ACCOUNTTYPE=193) OR ((B.ACCOUNTTYPE=202) AND (B.OFFSETACCOUNTTYPE=193)))) ... |
|
20.04.2006, 14:20 | #2 |
Участник
|
Цитата:
Сообщение от Lemming
Цель, создать вот такой вот Query
Что делать не ясно, мысли кончились. Если вместо queryValue(LedgerJournalACType::Bank) написать queryValue(6) на сервер уходит запрос с другими индексами Enum-ов, но не менее бредовыми. Может кто сталкивался и составлял "хитрые запросы" с участием Enum- полей? А то уже не ясно, что делать дальше Решение: вместо queryValue() используй int2str(). |
|
20.04.2006, 14:28 | #3 |
Участник
|
Цитата:
Сообщение от dn
Вопрос из серии FAQ.
Решение: вместо queryValue() используй int2str(). Код: AND ((B.ACCOUNTTYPE=193) OR ((B.ACCOUNTTYPE=49) AND (B.OFFSETACCOUNTTYPE=54)))) |
|
20.04.2006, 14:37 | #4 |
Участник
|
Цитата:
Сообщение от dn
Вопрос из серии FAQ.
Решение: вместо queryValue() используй int2str(). Вопрос снят! Надо вместо queryValue() использовать any2str(); |
|
20.04.2006, 14:41 | #5 |
Участник
|
По поводо Int2str - уберите двойные кавычки из условия
__________________
Axapta v.3.0 sp5 kr2 |
|
20.04.2006, 14:44 | #6 |
Участник
|
Цитата:
Сообщение от AndyD
По поводо Int2str - уберите двойные кавычки из условия
Действительно, перед тем как поставить any2str убрал кавычки, все работает и с any... и с int... |
|
20.04.2006, 15:04 | #7 |
Участник
|
я бы не рекомендовал использовать any2str, это такая функция от которой непонятно чего ожидать
|
|
20.04.2006, 15:00 | #8 |
Участник
|
Вот что пишется в хелпе поводу any2str().
Цитата:
Useful output is only guaranteed for input type str.
__________________
Axapta v.3.0 sp5 kr2 |
|
20.04.2006, 15:22 | #9 |
Участник
|
Кстати, можно использовать 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 |
Участник
|
Народ, дико извиняюсь, все в спешке , с any2int тоже работает! any2str - действительно вылетела с ошибкой.
AndyD, dn - спасибо! |
|