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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.06.2007, 08:32   #1  
3oppo is offline
3oppo
Участник
Аватар для 3oppo
 
222 / 32 (2) +++
Регистрация: 30.06.2005
Цитата:
Сообщение от glibs Посмотреть сообщение
Попробовал написать джоб похожий (на стандартной функциональности только). Select один при декларировании курсора. Дольше идут вызовы управления курсором.

Либо вы чего-то не договариваете...
.

Вот метод полностью:

X++:
protected Map initRasset01Map()
{
    Map             _ret          = new Map(Types::String, Types::Date);
    Set             _account01Set = this.initAccount01Set();
    RAssetTable     _rassetTable;
    RAssetTrans     _rassetTrans;
    LedgerTrans     _ledgerTrans;
    int             i, ip4, ip2, ip3;

    while select _rassetTable
       index RAssetNumIdx
        where _rassetTable.VGP_PropertyTax          == NoYes::Yes
    join firstonly _rassetTrans
        index TransTypeIdx
        where _rassetTrans.AccountNum               == _rassetTable.AccountNum          &&
              _rassetTrans.AssetTransType           == RAssetTransType::Acquisition     &&   
              _rassetTrans.TransDate                <= reportDateEnd
    join firstonly _ledgerTrans
        index VGP_LedgerLinkIdx
        where _ledgerTrans.VGP_LedgerLinkId         == _rassetTrans.VGP_LedgerLinkId    &&
              _ledgerTrans.VGP_LedgerLinkModuleRef  == VGP_LedgerLinkModuleRef::RAsset  &&   //ОС
              _ledgerTrans.Voucher                  == _rassetTrans.Voucher             &&
              _ledgerTrans.TransDate                == _rassetTrans.TransDate

    {
        i++;
        if (_account01Set.in(_ledgerTrans.AccountNum))
        {
            _ret.insert(_rassetTable.AccountNum, this.getDisposalDate(_rassetTable.AccountNum));
        }
    }

//    box::info( int2str(i) );

    return _ret;
}
Ставлю точку останова в начале метода и в конце, и между 2ми этими точками включаю монитор.
Переписал на прямой запрос в той же функции, выполняется вместо 26 минут - 30 секунд.


Цитата:
Сообщение от glibs Посмотреть сообщение
А какой вид у вас имеют все 4837 запроса? Они абсолютно одинаковы?

Посмотрел генерируемые запросы, вроде одинаковые вот такого вида:

SELECT A.TRANSDATE,A.RECID,A.VGP_LEDGERLINKID FROM RASSETTRANS A(INDEX(I_16077RASSETDATEIDX)) WHERE ((DATAAREAID=?) AND (((ACCOUNTNUM=?) AND (TRANSDATE<?)) AND ((((ASSETTRANSTYPE=?) OR (ASSETTRANSTYPE=?)) OR (ASSETTRANSTYPE=?)) OR (ASSETTRANSTYPE=?)))) OPTION(FAST 2)

внутри проскакивают 2-3 другого вида но непонятно к чему они относятся.

Цитата:
Сообщение от glibs Посмотреть сообщение
Может у вас сам метод столько раз вызывается? Тогда не удивлюсь насчет 25 мин.
Старый 25.06.2007, 09:25   #2  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2476 (88) +++++++++
Регистрация: 20.08.2005
Цитата:
Сообщение от 3oppo Посмотреть сообщение
Вот метод полностью:
...
Посмотрел генерируемые запросы, вроде одинаковые вот такого вида:

SELECT A.TRANSDATE,A.RECID,A.VGP_LEDGERLINKID FROM RASSETTRANS A(INDEX(I_16077RASSETDATEIDX)) WHERE ((DATAAREAID=?) AND (((ACCOUNTNUM=?) AND (TRANSDATE<?)) AND ((((ASSETTRANSTYPE=?) OR (ASSETTRANSTYPE=?)) OR (ASSETTRANSTYPE=?)) OR (ASSETTRANSTYPE=?)))) OPTION(FAST 2)

внутри проскакивают 2-3 другого вида но непонятно к чему они относятся.
По-моему, этот запрос не имеет отношнения к приведенному в коде (возможно, формируется в методе getDisposalDate()?).
Здесь идет связка по OR для нескольких условий для ASSETTRANSTYPE, а в коде x++ - по одному.

Попробуйте оставить только выборку и цикл по ней и посмотрите на результат запроса.
__________________
Axapta v.3.0 sp5 kr2
Теги
производительность, запрос (query), ax3.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Не отрабатывает запрос EXISTS JOIN Paul_ST DAX: База знаний и проекты 8 21.03.2008 17:21
запрос с 4 таблицами. Загадка с Join Андрей К. DAX: Программирование 7 19.09.2007 17:12
Почему на форме "Пользовательские настройки", когда я перехожу в нее из формы, отсутствует закладка "Запрос"? Hans DAX: Администрирование 0 05.07.2007 13:52
2 join-а + CasheLookup = EntireTable vallys DAX: Программирование 1 10.03.2006 13:20
можно ли сделать с помощью join следующий запрос: SergAY DAX: Программирование 1 29.07.2003 11:39

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 06:26.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.