Поставил СП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;
}
И в чём ускорение? Самое узкое место - ручной перебор ВСЕХ проводок, так и осталось за бортом. Или я неправ и не туда смотрю?