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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 01.12.2010, 14:49   #1  
kia is offline
kia
Участник
 
96 / 19 (1) ++
Регистрация: 07.10.2008
Адрес: Харьков
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);
}
Связано с отсутствием в selecte поля таблицы rHRMOrderTrans. Наример: RecId
В Ах4 отчеты с подобным запросом работали на ура.
Старый 01.12.2010, 15:17   #2  
samolalex is offline
samolalex
Участник
Аватар для samolalex
Самостоятельные клиенты AX
 
259 / 107 (4) +++++
Регистрация: 18.06.2010
Адрес: Москва
В третьей версии Аксапты подобный запрос так же как в 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  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Цитата:
Сообщение от samolalex Посмотреть сообщение
Скорее всего, этот нюанс в пятой версии Аксапты был устранен.
А что в AX2009 вот так писать нельзя:

X++:
if (inventTrans)
{
...
}
Если можно, то чем этот код отличается от приведенного выше? Точно такое же условие.
Старый 01.12.2010, 15:30   #4  
samolalex is offline
samolalex
Участник
Аватар для samolalex
Самостоятельные клиенты AX
 
259 / 107 (4) +++++
Регистрация: 18.06.2010
Адрес: Москва
Цитата:
Сообщение от Lucky13 Посмотреть сообщение
А что в AX2009 вот так писать нельзя:

X++:
if (inventTrans)
{
...
}
Если можно, то чем этот код отличается от приведенного выше? Точно такое же условие.
Я имел ввиду использование табличной переменной внутри запроса в условии (where...).

Цитата:
Если можно, то чем этот код отличается от приведенного выше? Точно такое же условие.
Он (код, который я написал в моем предыдущем сообщении) отличается тем, что в условии запроса не используется табличная переменная без указания поля, что может не вызвать ошибки в Ax2009.
__________________
С уважением, Александр.

Последний раз редактировалось samolalex; 01.12.2010 в 15:37.
Старый 01.12.2010, 15:39   #5  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Цитата:
Сообщение от samolalex Посмотреть сообщение
Он отличается тем, что в условии запроса не используется табличная переменая без указания поля, что может не вызвать ошибки в Ax2009.
Но ведь табличная переменная не используется в запросе, следовательно ничем не отличается от любой другой переменной. Такое выражение сначала преобразуется в true или false (в данном случае false) и после этого подставится в запрос. По крайне мере в 3.0 так. Про переменную, которая используется в запрос, насколько я понял, речи не идет.
Старый 01.12.2010, 15:42   #6  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
вообще на форуме уже обсуждался вопрос про использование неявного преобразования (не могу найти ссылку ), и в частности про условие существования записи в таблице.
Т.е. использование синтаксиса :
X++:
if (inventTrans)
или

X++:
if (inventTrans.RecId != 0)
связано это с тем, что определенное отрицательное значение RecId дает значение false, поэтому неявное преобразование приведет к тому что запись на самом деле есть, а условие не отработает. Поэтому необходимо всегда использовать вариант:
X++:
if (inventTrans.RecId != 0)
ну или в Вашем случае
X++:
where (rHRMOrderTrans.RecId == 0 || rHRMOrderTrans.RecId == orderTrans.RecId)
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 01.12.2010, 15:50   #7  
samolalex is offline
samolalex
Участник
Аватар для samolalex
Самостоятельные клиенты AX
 
259 / 107 (4) +++++
Регистрация: 18.06.2010
Адрес: Москва
Цитата:
Сообщение от Lucky13 Посмотреть сообщение
Но ведь табличная переменная не используется в запросе, следовательно ничем не отличается от любой другой переменной. Такое выражение сначала преобразуется в true или false (в данном случае false) и после этого подставится в запрос. По крайне мере в 3.0 так. Про переменную, которая используется в запрос, насколько я понял, речи не идет.
Табличная переменная используется в условии запроса. Под запросом я имею ввиду всю кодовую конструкцию после select, включая совокупность выражений после where.
А по поводу Ax2009 было сделано предположение об устранении возможности использования табличной переменной в условии запроса без указания конкретного поля.
__________________
С уважением, Александр.

Последний раз редактировалось samolalex; 01.12.2010 в 15:56.
Старый 01.12.2010, 15:57   #8  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
нашел ссылку на тему Проверка на RecId
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 01.12.2010, 15:59   #9  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
2 lev. Это понятно, но такая ситуация редкость и она не приводит к падению AOS, здесь же показано, что код гарантировано приведет к падению AOS. Нехорошо как-то
Старый 01.12.2010, 16:02   #10  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от Lucky13 Посмотреть сообщение
2 lev. Это понятно, но такая ситуация редкость и она не приводит к падению AOS, здесь же показано, что код гарантировано приведет к падению AOS. Нехорошо как-то
Про то что АОС просто падает, да не хорошо, уж лучше бы такой код просто не компилился
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 01.12.2010, 16:06   #11  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Цитата:
Сообщение от samolalex Посмотреть сообщение
А по поводу Ax2009 было сделано предположение об устранении возможности использования табличной переменной в условии запроса без указания конкретного поля.
При устранении возможности было бы неплохо ошибку выдавать, а не AOS валить
Старый 01.12.2010, 16:13   #12  
samolalex is offline
samolalex
Участник
Аватар для samolalex
Самостоятельные клиенты AX
 
259 / 107 (4) +++++
Регистрация: 18.06.2010
Адрес: Москва
Цитата:
Сообщение от Lucky13 Посмотреть сообщение
При устранении возможности было бы неплохо ошибку выдавать, а не AOS валить
Не спорю.

Интересно узнать, как данный запрос выполняется у других участников в AX2009.
__________________
С уважением, Александр.
Старый 01.12.2010, 17:33   #13  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Теоретики... Неужели больше заняться нечем?
Старый 01.12.2010, 21:04   #14  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,940 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от EVGL Посмотреть сообщение
Теоретики... Неужели больше заняться нечем?
Ну к чему это ? Людям интересно.

Лучше бы взял да зарегал багу.
Старый 02.12.2010, 01:53   #15  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Зачем мучать себя и Microsoft вещами, для которых есть явный workaround? Лучше сконцентрировать внимание на функционале, том, что реально волнует клиентов. К тому же, мы в компании такой SQL просто не пишем. В голову не приходит.
За это сообщение автора поблагодарили: S.Kuskov (2).
Старый 02.12.2010, 08:26   #16  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,940 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Ну соглашусь, что бага не очень критичная.
Но меня всегда напрягало падение Аксапты, особенно аоса. Таких ошибок не должно быть по определению.
За это сообщение автора поблагодарили: player (1).
Старый 02.12.2010, 10:12   #17  
kornix is offline
kornix
MCP
MCBMSS
Злыдни
Ex AND Project
 
414 / 146 (5) +++++
Регистрация: 24.02.2009
Адрес: Санкт-Петербург
А на какой версии Ax2009 падает? Какая версия ядра? В последних обновлениях это вроде исправлено, по крайней мере 3 месяца мне мой когллега точно таким же способом демонстрировал несовершенство версии моего непропатченного ядра и стандартного приложения У меня падало, у него стоял AOS со всеми обновлениями - работало.
Старый 02.12.2010, 19:28   #18  
kia is offline
kia
Участник
 
96 / 19 (1) ++
Регистрация: 07.10.2008
Адрес: Харьков
Цитата:
Сообщение от kornix Посмотреть сообщение
А на какой версии Ax2009 падает? Какая версия ядра?
Ключевое слово в исходном сообщении было : Падение AOS
Изображения
 
Старый 03.12.2010, 00:38   #19  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Вообще-то именно этот вариант заваливания именно этой версии АОСа уже обсуждался - см. Как завалить AOS AX 2009
Старый 03.12.2010, 16:38   #20  
kia is offline
kia
Участник
 
96 / 19 (1) ++
Регистрация: 07.10.2008
Адрес: Харьков
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Вообще-то именно этот вариант заваливания именно этой версии АОСа уже обсуждался - см. Как завалить AOS AX 2009
А где-то обсуждалось в какой версии это уже исправлено?
Или когда будет исправлено
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
ax2009: как добавить строчку в "Конфигурация сервера"? mazzy DAX: Администрирование 1 21.08.2010 14:37
Shekhar: Dynamics AX2009 : Standalone Installation on Vista with Role centres and workflow. Blog bot DAX Blogs 0 30.03.2010 15:05
ax2009 & SSRS kitty DAX: Программирование 6 02.04.2009 10:38
AX2009 и AX4.0 совместимый код. Как? Alex_KD DAX: Программирование 6 08.05.2008 01:10
Ошибка "необходимо заполнить 'основной код сотрудника' " alpin DAX: Функционал 2 04.12.2003 16:28

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

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

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