Есть в Axapte 3 SP6 class LedgerRRGOperationBalanceTotal_RU метод
X++:
public AmountMST calc()
{
AmountMST sumTmp, balanceAmountMST;
balanceAmountMST = 0;
if (m_PEriodType == LedgerRRGBalancePeriodType_RU::Incoming)
m_CalculateDate -= 1;
while select m_AccountList
outer join m_LedgerTrans
where m_LedgerTrans.TransDate <= m_CalculateDate &&
m_AccountList.AccountNum == m_LedgerTrans.AccountNum &&
m_LedgerTrans.PeriodCode == PeriodCode::Regular
{
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;
}
balanceAmountMST += (m_AccountList.ReverseSign ? (-1) : 1) * sumTmp;
}
}
return balanceAmountMST;
}
Как его можно оптимизировать? Ощутимо долго цикл пробегается по LedgerTrans, да при этом еще вызывает postLoad каждый раз.