AXForum  
Вернуться   AXForum > Прочие обсуждения > Курилка
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 08.08.2018, 14:03   #321  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
У него от скорости печатания работает ветряк, который питает ноутбук?
__________________
Ivanhoe as is..
Старый 08.08.2018, 14:29   #322  
Stitch_MS is offline
Stitch_MS
Участник
Аватар для Stitch_MS
Соотечественники
 
397 / 478 (16) +++++++
Регистрация: 27.02.2006
Адрес: Дания
Или ветряк охлаждает клавиатуру, чтобы дым от быстрого печатания не мешал смотреть в монитор.
Старый 09.08.2018, 05:55   #323  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
886 / 389 (14) ++++++
Регистрация: 24.01.2005
Адрес: Томск
Цитата:
Сообщение от Ivanhoe Посмотреть сообщение
Это какая версия?
Сорри, 2009-я.
__________________
Мы летаем, кружимся, нагоняем ужасы ...
Старый 10.08.2018, 10:41   #324  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
886 / 389 (14) ++++++
Регистрация: 24.01.2005
Адрес: Томск
2009 SP1 5.0.1500.6491 (хотя оно вполне справедливо и для старших/младших версий)

Уже давненько замечал, что есть такая практика в различных обработчиках модульных движений по части использования методов lastAmountCur()/lastAmountMST() от доступного в тех краях объекта LedgerVoucher для наполнения суммовых полей своих родных модульных проводок.

До сих пор отношение к этому далее и конкретнее, чем "чую бесовщину, но обосновать не могу", не шло...

Однако на днях коллеги в "песочнице" попытались разнести накладную по заказу на продажу, в которой было две строки с разными знаками (-/+) в качестве исправления ранее сделанной (изменялась цена продажи одной строки).
Все красиво и хорошо, склад и налоги -/+ прошли как и ожидалось, только вот проводка по клиенту сформировалась на сумму последней строки накладной вместо суммы всех строк.

Исследования показали, что эта "радость" возникает при сложении двух обстоятельств:
  1. Накопление разнознаковых частей и разбивка по ним в российской функциональности проводок ГК по клиенту в CustVendVoucher'е при наличии в дебете или кредите позиций с разным знаком (наполняется в SalesFormLetter_Invoice.createCustTrans(), будущие проводки ГК разбиваются далее в CustVendVoucher.postMultipleBalances_RU, вызываемом из post() этого же класса)
  2. Использование в инициализации суммы проводки по поставщику/клиенту в CustVendVouchere.initCustVendTrans() вышеозначенных методов, lastAmountCur()/lastAmountMST(), из LedgerVoucher'а

Есть мнение, что вышеозначенные методы небезопасны и их использование за пределами LedgerVoucher'а суть есть зло и рытье ямы самому себе.

P.S. <GEUU> в комментах тамошнего кода, наполнявший разбиение и поклавший на оное в своем же коде - это же наш здешний EVGL, если не ошибаюсь ?
Миниатюры
Нажмите на изображение для увеличения
Название: накладная клиента.jpg
Просмотров: 357
Размер:	263.1 Кб
ID:	12009  
__________________
Мы летаем, кружимся, нагоняем ужасы ...
Старый 10.08.2018, 10:58   #325  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от TasmanianDevil Посмотреть сообщение
P.S. <GEUU> в комментах тамошнего кода, наполнявший разбиение и поклавший на оное в своем же коде - это же наш здешний EVGL, если не ошибаюсь ?

Это страновые теги. EU - это Eвропа.
Старый 10.08.2018, 11:06   #326  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
886 / 389 (14) ++++++
Регистрация: 24.01.2005
Адрес: Томск
Цитата:
Сообщение от belugin Посмотреть сообщение
EU - это Eвропа.
Виноват, возвел на Евгения напраслину

Нет счас под рукой 2012-й (и тем более 365FO) - там оно как, радости сии остались ?
__________________
Мы летаем, кружимся, нагоняем ужасы ...
Старый 10.08.2018, 11:20   #327  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Как-то так:


X++:
custVendTrans.ReasonRefRecId = reasonRefRecID;

        // If the amount, which is the total invoice amount, is zero, then the amountMST and amountCur also must be zero
        if (amountCur)
        {
            if (_useSubLedger)
            {
                // <GIN>
                if (TaxWithholdParameters_IN::checkTaxParameters())
                {
                    amountCur += taxWithholdAmount;
                }
                // </GIN>

                custVendTrans.AmountMST = CurrencyExchangeHelper::mstAmount(amountCur, currencyCode, transDate, Currency::noYes2UnknownNoYes(triangulation), exchRate, exchRateSecondary);
            }
            else
            {
                // <GEERU>
                if (ledgerBalances)
                {
                    custVendTrans.AmountMST = CurrencyExchangeHelper::amount(postedAmountMST, Ledger::accountingCurrency());
                }
                else
                {
                    // </GEERU>
                    custVendTrans.AmountMST = CurrencyExchangeHelper::amount(ledgerPostingReference.lastAmountMST(), Ledger::accountingCurrency());
                    // <GEERU>
                }
                // </GEERU>
            }
        }
        else
        {
            custVendTrans.AmountMST = 0;
        }
X++:
 /// <summary>
    /// Calculates the total of the multiple posted balance amount based on
    /// the specific currency code and the object of <c>CurrencyExchangeHelper</c>.
    /// </summary>
    /// <param name = "_curencyCode">The transaction currency originating the conversion.</param>
    /// <param name = "_currencyExchangeHelper">The <c>CurrencyExchangeHelper</c> class which manages calculations between currencies.</param>
    /// <returns>A container of AmountCur and AmountMst.</returns>
    private container calculatePostedMultipleBalanceAmounts_RU(CurrencyCode _curencyCode, CurrencyExchangeHelper _currencyExchangeHelper)
    {
        int i;
        boolean correction;
        AmountCur balanceValue;
        AmountCur retAmountCur;
        amountMST retAmountMst;
        for (i = 1; i<=conLen(ledgerBalances); i++)
        {
            [correction, balanceValue] = conPeek(ledgerBalances, i);
            retAmountCur += balanceValue;
            retAmountMST += _currencyExchangeHelper.calculateTransactionToAccounting(
                    _curencyCode,
                    balanceValue,
                    true
            );
        }
        return [retAmountCur, retAmountMst];
    }


X++:
if (countryRegion_RU)
        {
            custVoucher.parmSalesInvoicePostingType_RU(custInvoiceJour_RU.InvoicePostingType_RU);
            if (this.postBalanceAsManyLedgerTransactions_RU())
            {
                custVoucher.parmLedgerBalances_RU([[false, salesTotals.totalAmountBySign_RU(false)], [this.parmStorno(), salesTotals.totalAmountBySign_RU(true)]]);
            }
        }
Старый 10.08.2018, 12:56   #328  
brahma is offline
brahma
Участник
1C
 
278 / 80 (3) ++++
Регистрация: 01.12.2005
Цитата:
Сообщение от TasmanianDevil Посмотреть сообщение
X++:
///    method returns false. Otherwise, it returns true.
/// </remarks>
Шикарно обрезался комментарий.
Старый 10.09.2018, 14:33   #329  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
647 / 350 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Смотрю код сделанный предыдущим интегратором и... о божечки!
X++:
    switch (jobType)
    {
        case RouteJobType::Process:
            select _prodRoute
                where _prodRoute.ProdId     == prodTable.ProdId
                   && _prodRoute.OprNum     == oprNum
                   && _prodRoute.JobType    == RouteJobType::Process;
            break;

        case RouteJobType::Setup:
            select _prodRoute
                where _prodRoute.ProdId  == prodTable.ProdId
                   && _prodRoute.OprNum  == OprNum
                   && _prodRoute.JobType == RouteJobType::Setup;
            break;
    }
Оно как бы работает, это радует... но нельзя ли было подумать головой, а не плодить условную логику?..
X++:
    select _prodRoute
        where _prodRoute.ProdId     == prodTable.ProdId
           && _prodRoute.OprNum     == oprNum
           && _prodRoute.JobType    == jobType;
__________________
// no comments
Старый 10.09.2018, 15:08   #330  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,039 / 1633 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
У вас же не тоже самое получилось, значений то в енуме больше
За это сообщение автора поблагодарили: dech (1).
Старый 10.09.2018, 18:26   #331  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
647 / 350 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Да, действительно! Под вечер уже мозг задеревенел)))
Но все равно можно проще сделать:
X++:
    switch (jobType)
    {
        case RouteJobType::Process:
        case RouteJobType::Setup:
            select _prodRoute
                where _prodRoute.ProdId     == prodTable.ProdId
                   && _prodRoute.OprNum     == oprNum
                   && _prodRoute.JobType    == jobType;
            break;
    }
__________________
// no comments
Старый 17.09.2018, 02:37   #332  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,039 / 1633 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
Коллеги наткнулись. оказывается кому-то из МС пришла здравая мысль денормализовать DIMENSIONATTRIBUTEVALUECOMBINATION(это AX7.3) - теперь там кол-во столбцов по кол-ву аналитик * 3.
Cделали втихую и никак не анонсировали, по видимому в движке синхронизации(т.е. в АОТ эта таблица имеет 5 полей).
Нажмите на изображение для увеличения
Название: DIMENSIONATTRIBUTEVALUECOMBINATION.jpg
Просмотров: 480
Размер:	276.1 Кб
ID:	12096
Старый 17.09.2018, 02:56   #333  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от trud Посмотреть сообщение
Коллеги наткнулись. оказывается кому-то из МС пришла здравая мысль денормализовать DIMENSIONATTRIBUTEVALUECOMBINATION(это AX7.3) - теперь там кол-во столбцов по кол-ву аналитик * 3.
Cделали втихую и никак не анонсировали, по видимому в движке синхронизации(т.е. в АОТ эта таблица имеет 5 полей).
Вложение 12096
А почему в WTF и почему "втихую" ? Add dimensions to Excel templates довольно давно сделали - мы еще на 1611 это использовали
__________________
-ТСЯ или -ТЬСЯ ?
За это сообщение автора поблагодарили: trud (5).
Старый 17.09.2018, 04:10   #334  
skuull is offline
skuull
Участник
Most Valuable Professional
Лучший по профессии 2014
 
700 / 752 (27) +++++++
Регистрация: 08.03.2013
Адрес: ХЗ
Цитата:
Сообщение от trud Посмотреть сообщение
Коллеги наткнулись. оказывается кому-то из МС пришла здравая мысль денормализовать DIMENSIONATTRIBUTEVALUECOMBINATION(это AX7.3) - теперь там кол-во столбцов по кол-ву аналитик * 3.
Cделали втихую и никак не анонсировали, по видимому в движке синхронизации(т.е. в АОТ эта таблица имеет 5 полей).
Оно так года с 2016, с открытием вас!
Старый 17.09.2018, 04:21   #335  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,039 / 1633 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
Цитата:
Сообщение от Vadik Посмотреть сообщение
А почему в WTF и почему "втихую"
О, как-то пропустил, спасибо
WTF - ибо странно почему бы не дать доступ к этим данным из X++ изначально. т.е. сейчас для получения значения аналитик надо сильно заморочиться(т.е. ссылку на атрибут надо как-то хранить, писать методы). а тут получается альтернативный подход где все уже есть, просто по ID получай конкретную запись где будут все поля(по сути также как было в AX2009 с енумом аналитики)
а каким образом обновляются эти невидимые столбцы в этой таблице DIMENSIONATTRIBUTEVALUECOMBINATION?

Последний раз редактировалось trud; 17.09.2018 в 04:23.
За это сообщение автора поблагодарили: Logger (3), gl00mie (3).
Старый 17.09.2018, 04:52   #336  
skuull is offline
skuull
Участник
Most Valuable Professional
Лучший по профессии 2014
 
700 / 752 (27) +++++++
Регистрация: 08.03.2013
Адрес: ХЗ
Цитата:
Сообщение от trud Посмотреть сообщение
О, как-то пропустил, спасибо
WTF - ибо странно почему бы не дать доступ к этим данным из X++ изначально. т.е. сейчас для получения значения аналитик надо сильно заморочиться(т.е. ссылку на атрибут надо как-то хранить, писать методы). а тут получается альтернативный подход где все уже есть, просто по ID получай конкретную запись где будут все поля(по сути также как было в AX2009 с енумом аналитики)
а каким образом обновляются эти невидимые столбцы в этой таблице DIMENSIONATTRIBUTEVALUECOMBINATION?
Все на SQL триггерах, смотрите в классы DimensionSQLObjectsDAVCInsertTrigger и ему подобные.
За это сообщение автора поблагодарили: trud (3).
Старый 17.09.2018, 09:35   #337  
raz is offline
raz
NavAx
Аватар для raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,494 / 1065 (38) ++++++++
Регистрация: 22.07.2003
Адрес: МО
Из DAX они тоже доступны через (fieldName2Id(tableNum(DimensionAttributeValueCombination), identifierStr(MainAccountValue)))

https://community.dynamics.com/ax/f/33/t/222182
За это сообщение автора поблагодарили: trud (3), Logger (3), gl00mie (3).
Старый 17.09.2018, 09:39   #338  
raz is offline
raz
NavAx
Аватар для raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,494 / 1065 (38) ++++++++
Регистрация: 22.07.2003
Адрес: МО
Цитата:
Сообщение от Vadik Посмотреть сообщение
А почему в WTF и почему "втихую" ? Add dimensions to Excel templates довольно давно сделали - мы еще на 1611 это использовали
У меня не работает lookup в excel, что бы выбрать нужное значение. Как это сделать в 8.0?
Старый 17.10.2018, 08:05   #339  
axm2017 is offline
axm2017
Участник
 
1,917 / 313 (14) ++++++
Регистрация: 15.05.2017
Случайно глянул пару методов Cust/VendTransOpen

Видимо уже давно не смотрел в код стандарта

на update
X++:
        ttsbegin;
        //..какие то изменения данных
        if (this.validateWrite())
        {
            super();
        }
        ttscommit;
Что в 12 и в новой версии присутствует
За это сообщение автора поблагодарили: trud (2).
Старый 22.10.2018, 20:02   #340  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
PurchLine.update() в D365FO стал просто великолепен: мало того, что метод раздулся до 370 строк (что, PurchLineType.update()? не, не слышали), так он еще и начал пересчитывать налоги по заказу на покупку - видать, какой-то костыль для отображения итогов по заказу в виде FormPart.
X++:
if (this.distributionUpdateNeeded(purchLineOrig))
{
    if (purchTable.InclTax &&
        (this.hasAmountChanged(purchLineOrig) || this.hasTaxChanged(purchLineOrig)))
    {
        PurchTotals::newPurchTable(purchTable).calc(false, false, true);
        PurchLine::logMeasure(instrumentation, classStr(PurchTotals), methodStr(PurchTotals, calc), stopWatch);
    }
Конечно, на тестовых данных с 10-ю строками всё прекрасно, а вот в реальных условиях, когда строк эдак под 600 и более, какая-нить отмена недопоставленного количества превращается в десятки минут ожидания, так еще и блокировки на PurchTableVersion вешаются, так что несколько заказов на покупку в параллель штатно не отменишь.
Цитата:
Сообщение от Blog bot Посмотреть сообщение
How much telemetry are we collecting? A lot, like, really a lot!
Да, спасибо, в последней версии всё стало работать еще тормознее за счет того, что каждый чих пишется в EventLog, и по нему можно найти проблемное место. Но толку-то? Как вот надо извратиться, чтобы при запрете оверлеинга, одними extension'ами отрубить этот холостой пересчет налогов на каждой строке? Чтоб служба медом не казалась, PurchLine.distributionUpdateNeeded() сделан закрытым (private), так что свой пост-обработчик туда не повесишь.

Последний раз редактировалось gl00mie; 22.10.2018 в 20:08.
За это сообщение автора поблагодарили: fed (3), raz (5), sukhanchik (4).
Теги
axapta, cil, d365fo, guid, rasset, uuid, uuidv7, баг

 


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

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

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