Показать сообщение отдельно
Старый 03.08.2007, 11:29   #23  
Михаил Андреев is offline
Михаил Андреев
Участник
Компания АМАНД
Лучший по профессии 2009
 
1,300 / 239 (10) ++++++
Регистрация: 09.11.2001
Адрес: Химки, Московская область
16033 - Russian report generator performance was improved
Поставил СП2. Как ставил - предмет отдельного опуса, учитывая, что у меня Windows XP Home Edition.
Прочитал, что ускорена работа российского генератора отчётов. Открываю метод класса
LedgerRRGOperationTurnoverCorrCredit_RU:
X++:
public AmountMST calc()
{
    AmountMST sumTmp, corrTotal =0;

    while select m_AccountList
    {
        while select m_OffsetAccountList
        {
            while select AmountMST, AmountMSTSecond, TransType, OperationsTax, Correct, Dimension from m_LedgerTrans
                where m_LedgerTrans.AccountNum == m_AccountList.AccountNum                     &&
                      m_LedgerTrans.PeriodCode == PeriodCode::Regular                          &&
                      m_LedgerTrans.TransDate  >= m_CalculateDateFrom                          &&
                      m_LedgerTrans.TransDate  <= m_CalculateDateTo                            &&
                      m_LedgerTrans.Crediting  == NoYes::Yes                                   &&
                      m_LedgerTrans.BondBatch_RU                                               &&
                      m_LedgerTrans.BondBatchTrans_RU

            exists join m_OffsetLedgerTrans
                where m_OffsetLedgerTrans.AccountNum        == m_OffsetAccountList.AccountNum  &&
                      m_OffsetLedgerTrans.PeriodCode        == PeriodCode::Regular             &&
                      m_OffsetLedgerTrans.TransDate         == m_LedgerTrans.TransDate         &&
                      m_OffsetLedgerTrans.Voucher           == m_LedgerTrans.Voucher           &&
                      m_OffsetLedgerTrans.Crediting         ==  NoYes::No                      &&
                      m_OffsetLedgerTrans.BondBatch_RU      == m_LedgerTrans.BondBatch_RU      &&
                      m_OffsetLedgerTrans.BondBatchTrans_RU == m_LedgerTrans.BondBatchTrans_RU &&
                      m_OffsetLedgerTrans.RecId             !=  m_LedgerTrans.RecId
            {
                if (this.checkTransaction(m_LedgerTrans.TransType,
                                          m_LedgerTrans.OperationsTax,
                                          m_LedgerTrans.Correct,
                                          m_LedgerTrans.Dimension,
                                          ''))
                {
                    if (m_currencyForCalc == LedgerRRGCurrencyForCalc_RU::AmountMST)
                    {
                        sumTmp = m_LedgerTrans.AmountMST;
                    }
                    else
                    {
                        sumTmp = m_LedgerTrans.AmountMSTSecond;
                    }
                    corrTotal += (m_AccountList.ReverseSign ? (-1) : 1) * sumTmp;
                }
            }
        }
    }

    return -corrTotal;
}
И в чём ускорение? Самое узкое место - ручной перебор ВСЕХ проводок, так и осталось за бортом. Или я неправ и не туда смотрю?
__________________
Михаил Андреев
https://www.amand.ru