![]() |
#6 |
Роман Долгополов (RDOL)
|
указанный вами метод вызывается из \Data Dictionary\Tables\RAssetTable\Methods\acquisitionPriceFromPurchLine, а тот в свою очередь из \Classes\PurchFormLetter_Invoice\createParmLine
то есть на каждую строку закупки происходит расчет итогов по всей закупке. На хороших серверах для 1000 строчной закупки это секунд 30 на строку или около 8 часов пустого числодробления. Самое очевидное решение - закешировать purchTotals. "родного" purchTotals из purchFormLetter в момент работы этого кода нет, да и разбираться с возможными побочными эффектами не хочется, поэтому добавляем \Classes\PurchFormLetter_Invoice\classDeclaration X++: ... PurchTotals rAssetPurchTotals; PurchId rAssetPurchId; ... \Data Dictionary\Tables\RAssetTable\Methods\acquisitionPriceFromPurchLine X++: public server static RAssetAmount acquisitionPriceFromPurchLine(PurchLine _purchLine, PurchTotals _purchTotals = null) { PurchTotals purchTotals = _purchTotals; TaxPurch taxPurch; RAssetAmount acquisitionPrice; ; if (! purchTotals) { purchTotals = PurchTotals::newPurchTable(_purchLine.purchTable()); purchTotals.calc(); } taxPurch = purchTotals.tax(); acquisitionPrice = _purchLine.taxPcsPrice() + purchTotals.purchMarkup() / (_purchLine.QtyOrdered ? _purchLine.QtyOrdered : 1) + (taxPurch.taxInCostPrice(_purchLine.TableId,_purchLine.RecId) / (_purchLine.QtyOrdered ? _purchLine.QtyOrdered : 1)); acquisitionPrice = round(acquisitionPrice, RAssetParameters::find().AssetRound); if (_purchLine.CurrencyCode != CompanyInfo::standardCurrency()) { acquisitionPrice = Currency::curAmount2CurAmount(acquisitionPrice, _purchLine.CurrencyCode, CompanyInfo::standardCurrency()); } return acquisitionPrice; } X++: \Classes\PurchFormLetter_Invoice\createParmLine
....
if (! rAssetPurchTotals || rAssetPurchId != _purchLine.PurchId)
{
rAssetPurchTotals = PurchTotals::newPurchTable(_purchLine.purchTable());
rAssetPurchTotals.calc();
rAssetPurchId = _purchLine.PurchId;
}
localAcquisitionPrice = RAssetTable::acquisitionPriceFromPurchLine(_purchLine, rAssetPurchTotals);
... |
|
|
За это сообщение автора поблагодарили: sukhanchik (4), S.Kuskov (1), vazerdim (1). |
|
|