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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 21.01.2020, 13:45   #421  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
597 / 278 (11) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Оптимизировал немного кастомный код в плане как производительности, так и удобочитаемости
X++:
public Boolean ppoContainerActive(InventDimGroupId _dimGroup)
{
    // > Modified by ---------- ----- (-------@----------------.com), 01-21-2020, zzz_CHG0033895_SFWrkCtrAssignToWasteCode
    InventDimSetup  inventDimSetup;

    select firstonly RecId from inventDimSetup
        where inventDimSetup.DimGroupId == _dimGroup
           && inventDimSetup.Active
           && inventDimSetup.DimFieldId == fieldnum(InventDim, AFCInventContainerId);

    return inventDimSetup.RecId != 0;
    // < Modified by ---------- ----- (-------@----------------.com), 01-21-2020, zzz_CHG0033895_SFWrkCtrAssignToWasteCode
    //InventDimGroup  inventDimGroup;
    //InventDimSetup  inventDimSetup;
    //Boolean         doContainer;
    //;
    //
    //inventDimGroup = InventDimGroup::find(_dimGroup);
    //while select inventDimSetup where inventDimSetup.dimGroupId == _dimGroup
    //{
    //    if (inventDimSetup.Active == NoYes::Yes)
    //    {
    //        if (inventDimSetup.DimFieldId == fieldnum(InventDim, afcInventContainerId))
    //        {
    //            doContainer = true;
    //        }
    //    }
    //}
    //
    //return doContainer;
    // < Modified by ---------- ----- (-------@----------------.com), 01-21-2020, zzz_CHG0033895_SFWrkCtrAssignToWasteCode
}
__________________
// no comments
За это сообщение автора поблагодарили: S.Kuskov (2).
Старый 13.03.2020, 10:15   #422  
axm2017 is offline
axm2017
Участник
 
599 / 206 (8) ++++++
Регистрация: 15.05.2017
strange russian code
X++:
            vendTrans       = this.transBuffer();
            vendTransOpen   = this.transOpenBuffer();

            while select sum(AmountMST) from vendTransOpen
                group by RefRecId
                where vendTransOpen.AccountNum  == this.AccountNum
                   && vendTransOpen.TransDate   >= _fromDate
                   && vendTransOpen.TransDate   <= _toDate
                join  vendTrans
                    where vendTrans.RecId       == vendTransOpen.RefRecId
                       && (vendTrans.Invoice    != ''
                       || (vendTrans.Invoice    == '' && vendTrans.AmountMST    < 0))
            {
                openBalanceMST += vendTransOpen.AmountMST;
            }
из openInvoiceBalanceMST в табличке VendTable.

Последний раз редактировалось axm2017; 13.03.2020 в 10:17.
Старый 13.03.2020, 10:28   #423  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,020 / 1146 (43) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
Сообщение от axm2017 Посмотреть сообщение
strange russian code
...
из openInvoiceBalanceMST в табличке VendTable.
А почему russian? Такой код и в старых версиях есть и полностью на слое SYS. russian там методы, которые баланс по договору считают.
Старый 13.03.2020, 11:15   #424  
axm2017 is offline
axm2017
Участник
 
599 / 206 (8) ++++++
Регистрация: 15.05.2017
Цитата:
Сообщение от Raven Melancholic Посмотреть сообщение
А почему russian? Такой код и в старых версиях есть и полностью на слое SYS. russian там методы, которые баланс по договору считают.
Sorry, действительно не факт что русский, видимо американо-индийский , а по договорам там кстати подобный же косяк хотя там он имеет хоть какое то объяснение-обоснование.

Последний раз редактировалось axm2017; 13.03.2020 в 11:18.
Старый 24.03.2020, 14:30   #425  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
597 / 278 (11) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Наткнулся в недрах класса JournalRunBaseBatch
X++:
public container  pack()
{
    throw error(Error::missingOverload(funcName()));
}
То же самое и для unpack().
Здесь как бы разница есть, перегружен метод, или переопределен.
Причем в Х++ сроду не было перегруженных методов.
Видимо, не сильно-то и важно. Заходим внутрь и видим:
X++:
//Do not use!
//Declare method as abstract instead or call Error::missingOverride();
#obsolete static LabelType missingOverload(str name)
{
    return Error::missingOverride(name);
}
Ладно, здесь возможно заглушку поставили на случай будущих апгрейдов в сторону нормальных языков.
Но что мешало сразу использовать missingOverride()?
Напомню, кто может не въехал.
Override - переопределение метода в рамках наследования.
Overload - перегрузка метода, т.е. в теле одного класса мы можем разместить дофига методов с одним и тем же именем, но разными параметрами. Что очень распространено в C#, Java и Delphi.
Такое чувство, что разработчики MS просто сами не сильно понимают в чем разница.
__________________
// no comments
Старый 15.06.2020, 17:15   #426  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,597 / 1763 (66) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Гендерно- и расово-нейтральный новояз прекрасен
Миниатюры
Нажмите на изображение для увеличения
Название: AllowList.GIF
Просмотров: 62
Размер:	33.2 Кб
ID:	12852  
__________________
-ТСЯ или -ТЬСЯ ?
Старый 23.12.2020, 18:44   #427  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
854 / 592 (21) +++++++
Регистрация: 14.10.2004
В этом месте у пользователя происходит раздвоение личности. Ошибки нет, но журнал не разносится.
Все-таки какая Аксапта прикольная, смеялся несколько минут над этим.

Нажмите на изображение для увеличения
Название: Скриншот 23-12-2020 184202.jpg
Просмотров: 128
Размер:	95.9 Кб
ID:	13014
__________________
Мои утилиты для Аксапты версий 3.0-2012: http://aceofdatabase.blogspot.com/
Старый 06.07.2021, 18:40   #428  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,559 / 1062 (39) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Вот не знаю, это ошибка или сознательно сделали

dax2012R3

Табличный метод PurchTable.initFromPurchAgreementHeader()


X++:
    select firstonly DeliveryPostalAddress, DeliveryName, Project, ContactPerson,
                     CashDiscountCode, MiscChargeGroup, DeliveryTerm, DeliveryMode,
                     PaymentSchedule, PaymentTerms
        from agreementHeaderDefault
        where agreementHeaderDefault.AgreementHeader == _purchAgreementHeader.RecId
        join firstonly    MethodOfPayment
                        , PaymentSpecification
                        , BuyerGroup
                        , VendorInvoiceAccount
                        , PurchasePool
            from purchAgreementHeaderDefault
            where purchAgreementHeaderDefault.PurchaseAgreementHeader == _purchAgreementHeader.RecId
        // <GEERU>
        outer join firstonly RecId,
                             InventProfileType,
                             InventProfileId,
                             VendPostingProfile,
                             vatOperationCode,
                             vatChargeSource
        from purchAgreementHeaderExt
        where purchAgreementHeaderExt.AgreementHeader == _purchAgreementHeader.RecId
        // </GEERU>
            ;
Тут проблема в том, что на таблицах AgreementHeaderDefault и PurchAgreementHeaderDefault стоит контроль на пустоту. Если все значимые поля пустые, то запись не создается или удаляется. Как следствие, если хотя бы по одной таблице записи не существует (т.е. не заполнены поля с данными), то не получим данные из остальных таблиц, даже если там что-то есть

В этом был какой-то глубокий смысл или "так получилось" ?
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 27.07.2021, 11:24   #429  
mayk is offline
mayk
Участник
Аватар для mayk
 
43 / 65 (3) ++++
Регистрация: 07.03.2008
Наткнулся на прелести обновления индексированных полей InMemory таблиц
Пример 3 разных попыток обновления

X++:
   TmpFontName tmp;    
    ;    
    //(update_recordset)
    delete_from tmp; tmp.insert();
    update_recordset tmp setting FontName = tmp.FontName + 'a';
    while select tmp {info (tmp.FontName);}
    
    //(select forupdate)
    delete_from tmp; tmp.insert();
    while select forupdate tmp{ tmp.FontName += 'a'; tmp.update(); }
    while select tmp {info (tmp.FontName);}

    //(select forupdate order)
    delete_from tmp; tmp.insert();
    while select forupdate tmp order recid{ tmp.FontName += 'a'; tmp.update(); }
    while select tmp {info (tmp.FontName);}
Что выведет джоб? Вот что:
Цитата:
Сообщение (16:16:38)
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
a
А с TempDb такой ерунды нет. Обновление выполняется лишь один раз.
За это сообщение автора поблагодарили: axm2017 (4), dech (5).
Старый 26.11.2021, 16:48   #430  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
854 / 592 (21) +++++++
Регистрация: 14.10.2004
Axapta 2012 R3
Расчеты с клиентами - Журналы - Платежи - Журнал платежей
Создаем первую строку в журнале. Вводим какого-то клиента
Создаем вторую строку в журнале. Вводит другого клиента
Стоя на второй строке журнала нажимаем "Фукнции - Сопоставление".
Помечаем проводки для сопоставления.
Потом не закрывая форму сопоставлений возвращаемся на форму строк журнала и встаем на первую строку
Потом возвращаемся на форму сопоставлений и закрываем её
И вуаля - в первую строку журнала записывается аналитика из клиента, который указан для второй строки.
А потом удивляемся при сведении балансов.
__________________
Мои утилиты для Аксапты версий 3.0-2012: http://aceofdatabase.blogspot.com/
За это сообщение автора поблагодарили: S.Kuskov (5).
Старый 15.12.2021, 11:04   #431  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
597 / 278 (11) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Как бы и ошибок нет, Но индусы снова поражают своей логикой!
В классе PurchTableType:
X++:
/// <summary>
/// Checks if the invoice can be updated.
/// </summary>
/// <returns>
/// Returns true if the invoice can be updated.
/// </returns>
// <GIN>
public boolean  canInvoiceBeUpdated_IN()
{
    boolean  ok = true;

    ok = this.mayInvoiceBeUpdated();
    if (ok && !VendTable::canVendorBeUpdated(purchTable.OrderAccount, purchTable.InvoiceAccount, DocumentStatus::Invoice))
    {
        ok = false;
    }
    if (ok)
    {
        if (purchTable.InterCompanyOrder
            &&  purchTable.InterCompanyOriginalSalesId
            &&  purchTable.InterCompanyDirectDelivery)
        {
           ok = (!purchTable.interCompanyEndpointActionPolicy().PostPurchInvoice
                &&   purchTable.interCompanySalesTable().SalesStatus == SalesStatus::Invoiced);
        }
        ok = ok && true;  // Что это за дикость?
    }

    if (ok)
    {
        ok = this.checkPurchQty(DocumentStatus::Invoice);
    }

    return ok;
}
// </GIN>
__________________
// no comments
Старый 15.12.2021, 12:27   #432  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,020 / 1146 (43) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
X++:
ok = ok && true;
Возможно, что для чего-то потребовалось установить точку останова в этом месте, вот и написали код ,который не меняет ничего, а строку для точки останова даёт. А потом забыли прочистить.

До DAX2012, в которой точки останова срабатывают на скобке, завершающей блок кода или метода, иногда сам так делал.

Правда в рабочем приложении такое видеть, конечно, дикость.
Старый 15.12.2021, 13:58   #433  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,583 / 2537 (92) +++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от Raven Melancholic Посмотреть сообщение
X++:
ok = ok && true;
Возможно, что для чего-то потребовалось установить точку останова в этом месте, вот и написали код ,который не меняет ничего, а строку для точки останова даёт. А потом забыли прочистить.
Я обычно завожу в глобале метод пустышку с именем dummy или empty и ставлю в код его вызов.
Старый 15.12.2021, 18:34   #434  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,645 / 5205 (179) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Не вполне баг кодинга, но все равно - неприятно поразившая меня фича D365FO.
С древних времен версии 2.1 и по крайней мере до последнего релиза DAX2012, удаление складских проводок при уменьшении количества в заказе шло в порядке OnOrder->ReserveOrdered->ReservePhysical. Все это происходило независимо от наличия/остуствия складской маркировки. В D365FO, добавили два прохода: Сначала оно обрабатывает в таком порядке складские проводки без маркировки, а потом с маркировкой.
У меня у клиента часто возникает такая ситуация: Клиент заказал допустим 40 подарков к рождеству; На складе удалось зарезервировать 30, и еще 10 примаркировали к закупке с ожидаемым сроком доставки 22.12. Потом клиент звонит и говорит что не хочет ждать, хочет 30 штук сразу, а вместо 10 недостающих подарков купит что-то другое в другой фирме.
В традиционных версиях DAX, если уменьшить количество в строке заказа до 30, то система оставит 30 штук физически зарезервированых и удалит складскую проводку на 10 штук в статусе "Зарезервировано в заказаных". В D365FO, она выкинет 10 штук из физически зарезервированой проводки (поскольку она не примаркирована), и оставит в итоге 20 штук зарезервированых на складе и 10 штук в заказаных. Так что если мы попытаемся отгрузить клиенту обещенные прямо сейчас 30 штук, система скажет что в этот раз мы можем отгрузить только 20 штук и тп. Единственный выход - отмаркировать злополучную складскую проводку от закупки до удаления количества...
За это сообщение автора поблагодарили: sukhanchik (6), twilight (3).
Старый 19.12.2021, 17:18   #435  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
597 / 278 (11) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Цитата:
Сообщение от Raven Melancholic Посмотреть сообщение
X++:
ok = ok && true;
Возможно, что для чего-то потребовалось установить точку останова в этом месте, вот и написали код ,который не меняет ничего, а строку для точки останова даёт. А потом забыли прочистить.
В данном случае не нужно писать дополнительный код для точки останова.
Следующий if (ok) вполне пригоден для просмотра значений переменных.
Скорее выглядит как копипаста, когда лишний код убрали, оставив такую конструкцию.
__________________
// no comments
Теги
axapta, cil, rasset, баг

 

Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 12:59.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.