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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.07.2010, 11:17   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
1.
Понимает. Отлично понимает "два join".
Цитата:
Сообщение от Roman N. Krivov Посмотреть сообщение
Вот что я делаю:
....
Как это можно вылечить?
Неправильно делаете.
Уж сколько раз твердилось: перестаньте программировать запросы с нуля.
накидайте в AOT, а в коде используйте
myQuery = new Query(querystr(myAOTQuery));

если честно, то по-моему, в коде полная фигня написана.
но разбираться ни сил, ни желания.

Поэтому совет: прежде чем жаловаться "не понимает", сначала проверьте по AOT.

2.
не понимает "два exists join".
об этом писалось на форуме. неоднократно. и способы решения приводились. ищите.

вкратце: не используйте exists join без необходимости. не надо с его помощью эмулировать left join.

3.
в аксапте есть режим кэширования. разберитесь с ним. ОБЯЗАТЕЛЬНО!
из-за кэширования зачастую лучше писать не один суперзапрос, а простой запрос и несколько вложенных.

Кроме того, помните о том, что Аксапта очень активно использует кэширование планов запросов на SQL.
Поэтому лучше писать простые и единообразные запросы.

В частности у вас, скорее всего, возможно лучше написать код, работающий по следующей схеме:

X++:
while select salesTable
    join salesLine
    where salesLine.SalesId == salesTable.SalesId
{
    ...
    CustTable = CustTable::find(...);
    ...
}
4. (опционально)
здесь неоднократно говорилось о влиянии порядка условий в запросе на производительность.
некоторые считают это мифом.
некоторые, как я, считают порядок условий - важной вещью.

я бы поредомендовал все-таки во всем коде придерживаться единого порядка в условиях.
условие сначала по CustTable, потом по SalesID, потом по InventQtyReserv... это что-то уникальное, наверняка, нигде не закэшированное. мало того, этот уникальный запрос может выкинуть из кэша что-нибудь нужное и достаточно часто используемое.

пишите единообразно.

5. (возможная причина ошибки)
Кроме того, условие ">0" в критериях записывается по другому "0..".

===============
В общем, сначала набросайте запрос мышкой в AOT.
Проверьте.
Уж потом, если захочется, ваяйте ваш код по созданию запроса и по закату солнца вручную.
__________________
полезное на axForum, github, vk, coub.
Теги
join, query, как правильно

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Dynamics AX: QueryRun and Query Objects - Binding operation failed to allocate buffer space Blog bot DAX Blogs 0 03.04.2009 08:05
Простой QueryRun не работает miklenew DAX: Программирование 13 20.01.2009 14:17
OZKA's DAX Journal: Join между временной и постоянной таблицей через QueryRun. Blog bot DAX Blogs 12 14.01.2009 17:34
Воскрешение мумии ... или давно забытая история про два Outer Join Saber DAX: Программирование 3 28.11.2007 17:12
Глюки в Query с разными типами Join (в т.ч. NonExistsJoin) к одной таблице gl00mie DAX: Программирование 10 14.02.2007 13:22

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

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

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