Показать сообщение отдельно
Старый 17.01.2011, 14:29   #32  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,715 / 1204 (44) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от AvrDen Посмотреть сообщение
Изменили код Classes\SalesFormLetter\postUpdate

В результате получили обработку заказа на 2500 строк 10 минут, вместо 20 минут.
Не корректная модификация. Это будет работать только в том случае, если в пределах отобранных salesParmLine будут только записи с одинаковым значением OrigSalesId. Если окажется что есть несколько значений OrigSalesId, то код будет не корректным.

Необходимо сохранить salesIdPrev, например в SET (он автоматически отбросит дубли в момент записи), а потом сканировать полученный SET, чтобы перебрать все SalesId.

X++:
Set   setSalesId = new Set(types::String);
SetIterator   si;
;

// Перебор salesParmLine
recordListSalesParmLine.first(salesParmLine);
while (salesParmLine)
{
    (...)
    salesIdPrev = salesParmLine.OrigSalesId;
    setSalesId.add(salesIdPrev);
    (...)
}    // while (salesParmLine)


// Перебор salesTable на которые есть ссылка в salesParmLine
si = new SetIterator(setSalesId)
while (si.more())
{
    salesIdPrev = si.value();
    salesTable = SalesTable::find(salesIdPrev, true)
    (...)
    si.next();
}    // while (si.more())

(...)