0. Тему бы раздел "Программирование"
1. Какой SQL используете?
2. Посмотреть бы ещё на кверю GroupFinancLedgerJournalTrans, возможно туда можно подцепить JournalNum, тогда от одного цикла можно было бы избавиться - это самый злой момент.
X++:
(while select RecId, budget, JournalNum, Voucher, AccountNum, AmountCurCredit from ledgerTrans
where ledgerTrans.RecId == qLedgerTrans.RecId
join JournalNum, Posted, JournalType from ledgerTable
index hint PostedJournalNumIdx
where ledgerTable.JournalNum == ledgerTrans.JournalNum &&
ledgerTable.Posted == NoYes::Yes)
А так, что можно попробовать безболезненно:
3. "join ... from ledgerTable" заменить на "exists join ... from ledgerTable"
4. Заменить индекс OffsetVoucherIdx на TransIndex
X++:
while select OffsetTransVoucher, AccountNum, OffsetRecid, TransRecId, SettleAmountCur from custSettlement
index hint TransIndex //orig: index hint OffsetVoucherIdx
//where custSettlement.OffsetTransVoucher == ledgerTrans.Voucher &&
// custSettlement.AccountNum == ledgerTrans.AccountNum &&
where custSettlement.TransRecId == custTrans.RecId &&
custSettlement.AccountNum == custTrans.AccountNum &&
custSettlement.CanBeReversed == NoYes::Yes