AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Функционал
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 03.10.2012, 08:16   #1  
vazerdim is offline
vazerdim
Участник
 
77 / 40 (2) +++
Регистрация: 06.09.2008
Тормозит разноска Заказа на Покупку с ОС
Добрый день!

При разноске большого заказа на Покупку с ОС, сильно тормозит система.
Причина в классе:
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;
}
Может кто уже оптимизировал данный код? При вызове метода calc снова идет перебор всех строк заказа.

DAX 2009 RU5, SQL 2008 R2
Старый 03.10.2012, 11:48   #2  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
я бы не советовал лазить туда с оптимизацией
Старый 03.10.2012, 18:35   #3  
vazerdim is offline
vazerdim
Участник
 
77 / 40 (2) +++
Регистрация: 06.09.2008
Просто трудно объяснить руководству почему система за такие деньги не может разнести заказ в 1000 строк.
Старый 03.10.2012, 19:11   #4  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
А у вас реально в ТОРГ-12 от поставщика 1000 строк?
__________________
Ivanhoe as is..
Старый 03.10.2012, 19:18   #5  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,319 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от vazerdim Посмотреть сообщение
Просто трудно объяснить руководству почему система за такие деньги не может разнести заказ в 1000 строк.
А Вы пробовали делать разноску в пакетном режиме? В пакете все это весьма шустро работает даже несмотря на возможность дополнительной оптимизации
__________________
Возможно сделать все. Вопрос времени
Старый 24.10.2012, 21:38   #6  
db is offline
db
Роман Долгополов (RDOL)
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
 
393 / 692 (24) +++++++
Регистрация: 01.04.2004
Адрес: Москва
указанный вами метод вызывается из \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);
...
Весь код из 2009 SP1 RU8
За это сообщение автора поблагодарили: sukhanchik (4), S.Kuskov (1), vazerdim (1).
Старый 24.10.2012, 22:04   #7  
Pustik is offline
Pustik
Участник
 
807 / 372 (14) ++++++
Регистрация: 04.06.2004
руки не доходят до RFQ, также есть проблема с тормозами
__________________
-Ты в гномиков веришь?
-Нет.
-А они в тебя верят, смотри, не подведи их.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
AX 4.0 Заказ на продажу на основании заказа на покупку Бигудь DAX: Функционал 13 20.11.2024 17:12
Программная разноска накладной для заказа на покупку на основе отборочной накладной. alexkrut DAX: Программирование 16 19.07.2013 08:25
Программное создание заказа на покупку niksen DAX: Программирование 14 29.07.2011 10:14
DAX 4.0 Покупка ОС через ЗАКАЗ НА ПОКУПКУ IntoTheRain DAX: Функционал 12 11.03.2010 22:32
3.0, Модуль: ОС, операция: Разноска строк журнала ОС (с предварит просм проводок) MagisterLudi DAX: Функционал 2 07.10.2003 18:55

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 18:07.