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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 09.02.2022, 12:11   #41  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Masel Посмотреть сообщение
Это не дублирование, вы просто получите вторую ссылку на тот же экземпляр таблицы.
вы ошибаетесь


Цитата:
Сообщение от Masel Посмотреть сообщение
Я если честно не понимаю просто эту идею, что это даст.
доступ к приватной переменной map
и возможность напрямую использовать методы этого map, вместо публичного интерфейса.

В общем, я понял.
Спасибо, что предложили решение, которое реально увеличивает производительность.
__________________
полезное на axForum, github, vk, coub.
Старый 09.02.2022, 18:16   #42  
Masel is offline
Masel
Участник
 
39 / 537 (18) +++++++
Регистрация: 19.09.2007
Цитата:
Сообщение от mazzy Посмотреть сообщение
вы ошибаетесь
Да нет, вроде не ошибаюсь. Такой джоб у меня выдает 2 записи и в 2012 и в d365. Два курсора по одной таблице. Вставляете в любой, получаете записи в обоих курсорах.

X++:
    TmpFrmVirtual tmp1, tmp2;
    
    tmp1.clear();
    tmp1.ItemId = 'item1';
    tmp1.insert();
    
    tmp2.setTmpData(tmp1);
    
    tmp2.clear();
    tmp2.ItemId = 'item2';
    tmp2.insert();    
   
    select count(RecId) from tmp1;
    info(strFmt("%1", tmp1.recId));
За это сообщение автора поблагодарили: mazzy (10).
Старый 09.02.2022, 21:31   #43  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Common.setTmpData() создает новый экземпляр при передаче между клиентом и сервером. А если на одной стороне, то проще вставку сделать. Таблица же...


X++:
    TmpFrmVirtual tmp1, tmp2;
    
    tmp1.clear();
    tmp1.ItemId = 'item1';
    tmp1.insert();
    
    
    insert_recordset tmp2 (ItemId) 
        select ItemId from tmp1;

    tmp2.clear();
    tmp2.ItemId = 'item2';
    tmp2.insert();    


    select count(RecId) from tmp1;
    info(strFmt("tmp1 = %1", tmp1.recId));    

    select count(RecId) from tmp2;
    info(strFmt("tmp2 = %1", tmp2.recId));
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
За это сообщение автора поблагодарили: mazzy (10), DarkSpirit22 (1).
Старый 27.05.2022, 11:05   #44  
DarkSpirit22 is offline
DarkSpirit22
Участник
Аватар для DarkSpirit22
 
13 / 94 (4) ++++
Регистрация: 07.11.2013
Адрес: СПб
Цитата:
Сообщение от Masel Посмотреть сообщение
Я тут в очередной раз занимался оптимизацией разноски розничных продаж и наткнулся еще на пару возможных улучшений.

<...>

2. В классе Tax метод lineTaxAmount. В начале метода проверяется что в таблице есть записи немного экзотическим методом, считая их количество. Я поменял так, хотя можно было наверное вообще убрать запрос, меня пока и так устраивает.
X++:
    if (this.taxParameters().TaxSpecifyLine)
    {
    if (this.taxParameters().TaxSpecifyLine)
    {
        //+ sergey.m 03.02.2022 FRE_20421639_001
        //select count(RecId) from taxWorkTrans;
        select firstOnly RecId from taxWorkTrans;
        //- sergey.m 03.02.2022 FRE_20421639_001

        if (taxWorkTrans.RecId > 0 && !this.useSubLedgerJournalLines())
        {
            // Posting out of TmpTaxWorkTrans
Нашел еще одно место, где наличие записей через select count делается:
\Classes\TaxPost\saveAndPost

X++:
public void saveAndPost(LedgerPostingController _ledgerPostingController, SelectableDataArea _companyToPost = curext())
{
    this.initLedgerPosting(_ledgerPostingController);

    //+ Abramov_ 27.05.2022 TSK0000280_08
    //select count(RecId) from taxWorkTrans;
    select firstonly RecId from taxWorkTrans;
    //- Abramov_ 27.05.2022 TSK0000280_08

    if (taxWorkTrans.RecId > 0 && !this.useSubLedgerJournalLines())
Еще маленькая оптимизация:
При создании строк накладной покупки в PurchInvoiceJournalCreate.createJournalLine() поле vendInvoiceTrans.LineAmount рассчитывается без учета экземпляра класса Tax, который был рассчитан на предыдущем шаге (в PurchInvoiceJournalCreate.initTotals()).

Т.е. в initTotals мы формируем кэш проводок TaxUncommitted, и, если не передать Tax, мы делаем лишние запросы к тому же TaxUncommitted.

X++:
    //+ Abramov_ 27.05.2022 TSK0000280_08
    //vendInvoiceTrans.LineAmount     = vendInvoiceInfoLine.lineAmountExclTax(vendInvoiceJour.InvoiceDate);
    vendInvoiceTrans.LineAmount     = vendInvoiceInfoLine.lineAmountExclTax(vendInvoiceJour.InvoiceDate, this.parmTax());    
    //- Abramov_ 27.05.2022 TSK0000280_08
Еще мы решили в таблицах TmpTaxWorkTrans и TaxUncommitted установить св-во SaveContents = NO полям, которые относятся к функциональности других стран (напр. _IN, _BR). Их оказалось довольно много, TmpTaxWorkTrans "похудел" на треть.

Еще мы провели эксперимент с переводом TmpTaxWorkTrans в TempDB (и обновлением существующей функциональности соответственно). Пришли к выводу, что без существенного рефакторинга кода от версии TmpTaxWorkTrans в TempDB толку нет, т.к. производительность расчета налогов упала ровно в два раза.

Последний раз редактировалось DarkSpirit22; 27.05.2022 в 11:29.
За это сообщение автора поблагодарили: Logger (5).
Теги
faq, tax, налоги, оптимизация, производительность

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Вызов метода базового класса Eldar9x DAX: Программирование 15 22.03.2008 19:10
jerry-dynamics: tax codes Blog bot DAX Blogs 0 16.06.2007 11:20
Вызов класса из другого класса Protey DAX: Программирование 9 26.02.2007 11:01
передача курсора в два класса kitty DAX: Программирование 3 09.08.2006 13:21
Запустить метод класса loka DAX: Программирование 2 13.03.2006 15:40
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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