|  03.10.2012, 08:16 | #1 | 
| Участник | Тормозит разноска Заказа на Покупку с ОС 
			
			Добрый день! При разноске большого заказа на Покупку с ОС, сильно тормозит система. Причина в классе: PurchCalcTax_Purch \ calcTax X++: TaxAmountCur calcTax(PurchTotals    _purchTotals)
{
    TaxPurch        taxPurch;
    AmountCur       amountCur;
    ;
    purchTotals         = _purchTotals;
    taxPurch            = new TaxPurch(this);
    amountCur           = taxPurch.calc(); // Тормозит здесь
    this.tax(taxPurch);
    return amountCur;
}DAX 2009 RU5, SQL 2008 R2 | 
|  | 
|  03.10.2012, 11:48 | #2 | 
| Программатор | 
			
			я бы не советовал лазить туда с оптимизацией    | 
|  | 
|  03.10.2012, 18:35 | #3 | 
| Участник | 
			
			Просто трудно объяснить руководству почему система за такие деньги не может разнести заказ в 1000 строк.
		 | 
|  | 
|  03.10.2012, 19:11 | #4 | 
| Участник | 
			
			А у вас реально в ТОРГ-12 от поставщика 1000 строк?    
				__________________ Ivanhoe as is.. | 
|  | 
|  03.10.2012, 19:18 | #5 | 
| Administrator | 
			
			А Вы пробовали делать разноску в пакетном режиме? В пакете все это весьма шустро работает даже несмотря на возможность дополнительной оптимизации
		 
				__________________ Возможно сделать все. Вопрос времени | 
|  | 
|  24.10.2012, 21:38 | #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). | |
|  24.10.2012, 22:04 | #7 | 
| Участник | 
			
			руки не доходят до RFQ, также есть проблема с тормозами
		 
				__________________ -Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. | 
|  | 
|  | 
| 
 |