|
29.11.2011, 11:26 | #1 |
Участник
|
Поковырял еще тему с оптимизацией
см. еще axdaily: SQL temporary tables in AX 2012 Оказалось, что нелинейность прячется не в классе Tax а при прописывании налогов в строки документа. Например для класса PurchFormLetter_Invoice в методе writeTaxAmount_W есть код X++: invoiceTrans.initFromTaxWorkTrans_RU(this.tmpTaxWorkTrans(vendInvoiceJour.RecId),
tablenum(PurchLine),
0,
invoiceTrans.InventTransId); Получается что мы перебираем N строк накладной и на каждой строке копируем времянку через while select { buffer.insert() } т.е. тоже выполняем N шагов. Итого сложность алгоритма N^2 - квадратичная. Исправить можно например так : X++: protected void writeTaxAmount_W() { VendInvoiceTrans invoiceTrans; CRSEFeatures_W features = CompanyInfo::features_W(); TmpTaxWorkTrans GRD_locTmpTaxWorkTrans; //+GRD_R4719_SpeedUpFormLetter_pkoz, pkoz, 24.11.2011 if (features != CRSEFeatures_W::PL && features != CRSEFeatures_W::RU) return; if (! TaxParameters::find().TaxSpecifyLine) return; // GRD_R4719_SpeedUpFormLetter_pkoz, pkoz, 24.11.2011 --> GRD_locTmpTaxWorkTrans = this.tmpTaxWorkTrans(vendInvoiceJour.RecId); // GRD_R4719_SpeedUpFormLetter_pkoz, pkoz, 24.11.2011 <-- while select forupdate invoiceTrans index hint InvoiceIdx where invoiceTrans.PurchID == vendInvoiceJour.PurchId && invoiceTrans.InvoiceId == vendInvoiceJour.InvoiceId && invoiceTrans.InvoiceDate == vendInvoiceJour.InvoiceDate && invoiceTrans.InternalInvoiceId == vendInvoiceJour.InternalInvoiceId && invoiceTrans.NumberSequenceGroup == vendInvoiceJour.NumberSequenceGroup { invoiceTrans.initFromTaxWorkTrans_RU( // GRD_R4719_SpeedUpFormLetter_pkoz, pkoz, 24.11.2011 --> //this.tmpTaxWorkTrans(vendInvoiceJour.RecId), GRD_locTmpTaxWorkTrans, // GRD_R4719_SpeedUpFormLetter_pkoz, pkoz, 24.11.2011 <-- tablenum(PurchLine), 0, invoiceTrans.InventTransId); invoiceTrans.doUpdate(); } } На документах из 1000 строк экономия времени составила примерно 10 минут. Для документов из 100 строк не замерял, но думаю что немного. Интересно что эта ошибка тянется еще с Ax 3.0 |
|
|
За это сообщение автора поблагодарили: lev (5), gl00mie (10), someOne (6). |
29.11.2011, 13:04 | #2 |
Участник
|
Цитата:
SalesFormLetter_Invoice все то же самое. Ужас какой то... Надеюсь "Локализаторы" обратят внимание и исправят в новых версиях! Для тех кто работает с большим количеством строк в заказах или закупках эта оптимизация будет очень полезна. |
|
Теги |
faq, tax, налоги, оптимизация, производительность |
|
Похожие темы | ||||
Тема | Ответов | |||
Вызов метода базового класса | 15 | |||
jerry-dynamics: tax codes | 0 | |||
Вызов класса из другого класса | 9 | |||
передача курсора в два класса | 3 | |||
Запустить метод класса | 2 |
|