|  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 Или когда будет исправлено | 
|  |