Показать сообщение отдельно
Старый 30.03.2010, 17:42   #10  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от mazzy Посмотреть сообщение
Поэтому запрос, полностью аналогичный вашему, в Аксапте должен быть таким:
Хорошенько подумав, можно и этот запрос (с сортировкой по коду договора) сильно соптимизировать:
X++:
static void Job11(Args _args)
{
    VendTrans       VendTrans;
    VendTable       VendTable;

    while select sum(AmountMST), sum(SettleAmountMST) from VendTrans
        group by RContractCode, RContractAccount, AccountNum
        where VendTrans.amountCur != VendTrans.settleAmountCur
    {
        VendTable = VendTable::find(VendTrans.AccountNum);
        info(strfmt("%1 %2 %3 %4", VendTable.AccountNum, VendTable.Name,VendTrans.RContractAccount,VendTrans.RContractCode));
    }

}
Другое дело, что в VendTrans нет индекса по RContractCode...
Но это уже совсем другая история, связанная с полным отсутствием оптимизации локального функционала...

===========
и если этот запрос делается внутри транзакции, то при отсутствии индекса по RContractCode может быть стоит VendTable внести в сам запрос, а не использовать метод find... Но это уже нужно смотреть в конкретный код и в план запроса...
__________________
полезное на axForum, github, vk, coub.

Последний раз редактировалось mazzy; 30.03.2010 в 18:00. Причина: здесь уже может быть стоит сделать join с VendTable...