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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.11.2010, 10:36   #1  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Цитата:
Сообщение от lev Посмотреть сообщение
эээ, а почему не сделать проще? вот так например:
Я понимаю, что salesLine.InventTransId по хорошему должен быть непустым, но правильнее сделать все-таки вот так:
X++:
void SelectNextSample(salesID _salesID, inventtransID _inventTransID = '')
{    
    salesLine salesLine;    
    ;        

    while select salesLine 
             where salesLine.SalesId           == _salesID           && 
                      // (salesLine.InventTransId ==  _inventTransID || _inventTransID == '')   
                      (_inventTransID == '' || salesLine.InventTransId ==  _inventTransID)    
    {        
        info(salesLine.ItemId);
    }
}
А пример у автора, конечно, ужасен.
За это сообщение автора поблагодарили: lev (1).
Старый 16.11.2010, 11:03   #2  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от oip Посмотреть сообщение
Я понимаю, что salesLine.InventTransId по хорошему должен быть непустым, но правильнее сделать все-таки вот так: ...
А пример у автора, конечно, ужасен.
с замечанием согласен.
когда писал пример не заострил внимание на логическом построении условия с inventTransId. Конечно лучше вначале проверить заполнена ли переменная с критерием, а потом уже проверить соответствие этой переменной с полем в таблице.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 16.11.2010, 11:36   #3  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,452 / 1792 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от oip Посмотреть сообщение
но правильнее сделать все-таки вот так:
Вообще по хорошему вычисление выражения (_inventTransID == '') должно быть выполнено оптимизатором до цикла. И на SQL-сервер должен уйти следующий запрос, который в свою очередь должен быть в итоге соптимизирован до простейшего запроса.

Код:
select salesLine 
where 
    salesLine.SalesId           == _salesID           && 
    (salesLine.InventTransId ==  _inventTransID || true)
Код:
// Оптимизируем
select salesLine 
where 
    salesLine.SalesId == _salesID && true
Код:
// Ещё раз оптимизируем
select salesLine 
where 
    salesLine.SalesId == _salesID
Но это всё в теории. Происходят ли подобные оптимизации на самом деле? Было бы логично
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Preston.Larimer: Item import from CSV file made easy (Kinda) Blog bot DAX Blogs 3 15.11.2010 12:26
Preston.Larimer: Workflow setup error on Event Log name Blog bot DAX Blogs 0 14.11.2010 10:18
Microsoft Dynamics CRM Team Blog: Marketing with Dynamic List Blog bot Dynamics CRM: Blogs 0 09.11.2010 19:05
Microsoft Dynamics CRM Team Blog: Dynamic Export to Excel feature – How to protect data over the wire Blog bot Dynamics CRM: Blogs 0 27.01.2009 10:05
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

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

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

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