01.12.2010, 14:49 | #1 |
Участник
|
AX2009. Код для падения сервера
Странно, но факт. Этот код при выполнении вызывает падение АОS.
Код: static void Job1(Args _args) { RHRMOrderTable rHRMOrderTable; RHRMOrderTrans rHRMOrderTrans; AZT_OrderTransEmpl OrderTrans; ; select orderTrans order by EmplName where rHRMOrderTable.RecId == orderTrans.OrderTableRecId && (!rHRMOrderTrans || rHRMOrderTrans.RecId == orderTrans.RecId); } В Ах4 отчеты с подобным запросом работали на ура. |
|
01.12.2010, 15:17 | #2 |
Участник
|
В третьей версии Аксапты подобный запрос так же как в AX 4 отрабатывает без ошибки, но мне кажется, что запрет использования табличной переменной в условии запроса(where...) без указания конкретного поля в AX 2009 вполне логичным и правильным. Скорее всего, этот нюанс в пятой версии Аксапты был устранен.
А вообще запрос, по-моему, не очень корректный, т.к. табличная переменая rHRMOrderTrans в любом случае окажется пустой. Возможно так было бы правильней: X++: select orderTrans join rHRMOrderTable where rHRMOrderTable.RecId == orderTrans.OrderTableRecId outer join rHRMOrderTrans where rHRMOrderTrans.RecId == orderTrans.RecId;
__________________
С уважением, Александр. Последний раз редактировалось samolalex; 01.12.2010 в 15:42. |
|
01.12.2010, 15:27 | #3 |
Участник
|
|
|
01.12.2010, 15:30 | #4 |
Участник
|
Цитата:
Цитата:
Если можно, то чем этот код отличается от приведенного выше? Точно такое же условие.
__________________
С уважением, Александр. Последний раз редактировалось samolalex; 01.12.2010 в 15:37. |
|
01.12.2010, 15:39 | #5 |
Участник
|
Но ведь табличная переменная не используется в запросе, следовательно ничем не отличается от любой другой переменной. Такое выражение сначала преобразуется в true или false (в данном случае false) и после этого подставится в запрос. По крайне мере в 3.0 так. Про переменную, которая используется в запрос, насколько я понял, речи не идет.
|
|
01.12.2010, 15:42 | #6 |
Ищущий знания...
|
вообще на форуме уже обсуждался вопрос про использование неявного преобразования (не могу найти ссылку ), и в частности про условие существования записи в таблице.
Т.е. использование синтаксиса : X++: if (inventTrans) X++: if (inventTrans.RecId != 0) X++: if (inventTrans.RecId != 0) X++: where (rHRMOrderTrans.RecId == 0 || rHRMOrderTrans.RecId == orderTrans.RecId)
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
01.12.2010, 15:50 | #7 |
Участник
|
Цитата:
Сообщение от Lucky13
Но ведь табличная переменная не используется в запросе, следовательно ничем не отличается от любой другой переменной. Такое выражение сначала преобразуется в true или false (в данном случае false) и после этого подставится в запрос. По крайне мере в 3.0 так. Про переменную, которая используется в запрос, насколько я понял, речи не идет.
А по поводу Ax2009 было сделано предположение об устранении возможности использования табличной переменной в условии запроса без указания конкретного поля.
__________________
С уважением, Александр. Последний раз редактировалось samolalex; 01.12.2010 в 15:56. |
|
01.12.2010, 15:57 | #8 |
Ищущий знания...
|
нашел ссылку на тему Проверка на RecId
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
01.12.2010, 15:59 | #9 |
Участник
|
2 lev. Это понятно, но такая ситуация редкость и она не приводит к падению AOS, здесь же показано, что код гарантировано приведет к падению AOS. Нехорошо как-то
|
|
01.12.2010, 16:02 | #10 |
Ищущий знания...
|
Про то что АОС просто падает, да не хорошо, уж лучше бы такой код просто не компилился
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
01.12.2010, 16:06 | #11 |
Участник
|
|
|
01.12.2010, 16:13 | #12 |
Участник
|
Цитата:
Интересно узнать, как данный запрос выполняется у других участников в AX2009.
__________________
С уважением, Александр. |
|
01.12.2010, 17:33 | #13 |
Banned
|
Теоретики... Неужели больше заняться нечем?
|
|
01.12.2010, 21:04 | #14 |
Участник
|
|
|
02.12.2010, 01:53 | #15 |
Banned
|
Зачем мучать себя и Microsoft вещами, для которых есть явный workaround? Лучше сконцентрировать внимание на функционале, том, что реально волнует клиентов. К тому же, мы в компании такой SQL просто не пишем. В голову не приходит.
|
|
|
За это сообщение автора поблагодарили: S.Kuskov (2). |
02.12.2010, 08:26 | #16 |
Участник
|
Ну соглашусь, что бага не очень критичная.
Но меня всегда напрягало падение Аксапты, особенно аоса. Таких ошибок не должно быть по определению. |
|
|
За это сообщение автора поблагодарили: player (1). |
02.12.2010, 10:12 | #17 |
MCP
|
А на какой версии Ax2009 падает? Какая версия ядра? В последних обновлениях это вроде исправлено, по крайней мере 3 месяца мне мой когллега точно таким же способом демонстрировал несовершенство версии моего непропатченного ядра и стандартного приложения У меня падало, у него стоял AOS со всеми обновлениями - работало.
|
|
02.12.2010, 19:28 | #18 |
Участник
|
Ключевое слово в исходном сообщении было : Падение AOS
|
|
03.12.2010, 00:38 | #19 |
Участник
|
Вообще-то именно этот вариант заваливания именно этой версии АОСа уже обсуждался - см. Как завалить AOS AX 2009
|
|
03.12.2010, 16:38 | #20 |
Участник
|
Цитата:
Сообщение от gl00mie
Вообще-то именно этот вариант заваливания именно этой версии АОСа уже обсуждался - см. Как завалить AOS AX 2009
Или когда будет исправлено |
|