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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 20.02.2014, 22:55   #1  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Интересно, на что они надеются, вызывая здесь Retry?
Варианты
  • Есть обработка дубликатов в catch секции
  • Код вырван из контекста (приведен не полностью)
  • Действительно ерунда

Так как SERIALIZABLE уровень изоляции не используется, даже при использовании конструкций вида

X++:
ttsbegin;

if (exists())
{
    doSomethingBeforeUpdate();
    update();
}
else
{    
    doSomethingBeforeInsert();
    insert();
}

ttscommit;
в Create / Update сценарии в принципе не исключен вариант создания дубликата другим процесом во время doSomethingBeforeInsert(), так что в следуюший retry блок пойдет по "правильной" (update) ветке. Ну а если количество таких "промахов" превышает пороговое значение (в этом случае - 5) - наверное есть какие-то проблемы с логикой и пора признаться - "не шмогла". Как-то так
__________________
-ТСЯ или -ТЬСЯ ?
За это сообщение автора поблагодарили: gl00mie (2).
Старый 21.02.2014, 20:36   #2  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от Vadik Посмотреть сообщение
Варианты
  • Есть обработка дубликатов в catch секции
  • Код вырван из контекста (приведен не полностью)
  • Действительно ерунда

Так как SERIALIZABLE уровень изоляции не используется, даже при использовании конструкций вида

X++:
ttsbegin;

if (exists())
{
    doSomethingBeforeUpdate();
    update();
}
else
{    
    doSomethingBeforeInsert();
    insert();
}

ttscommit;
в Create / Update сценарии в принципе не исключен вариант создания дубликата другим процесом во время doSomethingBeforeInsert(), так что в следуюший retry блок пойдет по "правильной" (update) ветке. Ну а если количество таких "промахов" превышает пороговое значение (в этом случае - 5) - наверное есть какие-то проблемы с логикой и пора признаться - "не шмогла". Как-то так
Кстати там именно такого плана код был, насколько мне сказали сегодня. (код не мой, я просто разместил объяву )
Старый 20.02.2014, 22:23   #3  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Может быть, на то, что в это время в другой сессии кто-нить удалит запись с таким же набором значений полей, входящих в уникальные индексы
Старый 28.02.2014, 10:26   #4  
demoded is offline
demoded
Участник
 
39 / 91 (4) ++++
Регистрация: 10.03.2010
обновление приложения слоем...
За это сообщение автора поблагодарили: mazzy (2), belugin (-2), Logger (2), lev (2).
Старый 26.03.2014, 19:24   #5  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Приложение AX 2012 R2 CU7 (6.2.1000.4051), при активации ключа Retail на формах заказов на продажу и заказов на покупку появляется кнопка "Добавить продукты", открывающая форму создания и изменения строк заказа на основе продуктов с возможностью фильтрации последних по каталогу. Там используется времяночка TmpRetailProductsToAdd, по данным которой при закрытии формы собственно создаются и изменияются строки заказа. Разработчикам пришло в голову, что пользователи могут на этой форме поменять не только количество, но и аналитики хранения/отслеживания номенклатуры, поэтому они завели "фиктивный" FormDS на базе InventDim (разумеется, запретив сохранять что-либо через него), а на сохранение времяночки повесили такой чудо-код (\Forms\RetailAddItems\Data Sources\TmpInventTable\Methods\write):
X++:
public void write()
{
    InventDim   inventDimLocal;

    inventDimLocal.ConfigId         = inventDim.ConfigId;
    inventDimLocal.InventColorId    = inventDim.InventColorId;
    inventDimLocal.InventSizeId     = inventDim.InventSizeId;
    inventDimLocal.InventStyleId    = inventDim.InventStyleId;
    inventDimLocal.InventSiteId     = inventDim.InventSiteId;
    inventDimLocal.InventLocationId = inventDim.InventLocationId;
    inventDimLocal.InventBatchId    = inventDim.InventBatchId;
    inventDimLocal.wmsLocationId    = inventDim.wmsLocationId;
    inventDimLocal.wmsPalletId      = inventDim.wmsPalletId;
    inventDimLocal.inventSerialId   = InventDim.inventSerialId;
  
    tmpInventTable.InventDim = InventDim::findOrCreate(inventDimLocal).InventDimId;

    super();
}
Разумеется, им было невдомек, что локализаторы в других странах, да и просто внедренцы нет-нет да и добавляют новые аналитики в InventDim
За это сообщение автора поблагодарили: belugin (5), S.Kuskov (2).
Старый 14.05.2014, 20:43   #6  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Приложение AX 2012 R2 CU7 (6.2.1000.4051), интересно, при каком параде планет здесь должен будет отработать бразильский функционал?..
\Data Dictionary\Tables\InventTransferTable\Methods\Update
X++:
// <GEERU>
public void update()
{
    #ISOCountryRegionCodes
    if (SysCountryRegionCode::isLegalEntityInCountryRegion([#isoRU]))
    {
        ttsbegin;
        this.setInventProfileId_RU();
        this.setInventProfileIdTo_RU();
        this.updateLinesInventProfile_RU();
        super();
        // <GBR>
        if (BrazilParameters::isEnabled())
        {
            this.SysExtensionSerializerMap::postUpdate();
        }
        // </GBR>
        ttscommit;
    }
    else
    {
        super();
    }
}
// </GEERU>
\Data Dictionary\Tables\BrazilParameters\Methods\isEnabled
X++:
public static boolean isEnabled()
{
    #ISOCountryRegionCodes
    return SysCountryRegionCode::isLegalEntityInCountryRegion([#isoBR]);
}
За это сообщение автора поблагодарили: kashperuk (5).
Старый 16.05.2014, 18:01   #7  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Приложение AX 2012 R2 CU7 (6.2.1000.4051), интересно, при каком параде планет здесь должен будет отработать бразильский функционал?..
\Data Dictionary\Tables\InventTransferTable\Methods\Update
X++:
// <GEERU>
public void update()
{
    #ISOCountryRegionCodes
    if (SysCountryRegionCode::isLegalEntityInCountryRegion([#isoRU]))
    {
        ttsbegin;
        this.setInventProfileId_RU();
        this.setInventProfileIdTo_RU();
        this.updateLinesInventProfile_RU();
        super();
        // <GBR>
        if (BrazilParameters::isEnabled())
        {
            this.SysExtensionSerializerMap::postUpdate();
        }
        // </GBR>
        ttscommit;
    }
    else
    {
        super();
    }
}
// </GEERU>
\Data Dictionary\Tables\BrazilParameters\Methods\isEnabled
X++:
public static boolean isEnabled()
{
    #ISOCountryRegionCodes
    return SysCountryRegionCode::isLegalEntityInCountryRegion([#isoBR]);
}

В Бразилию сообщил, и уже сегодня пофиксили.
Старый 10.06.2014, 00:29   #8  
Cardagant is offline
Cardagant
Участник
 
317 / 54 (2) ++++
Регистрация: 11.10.2011
Доброго времени суток!

Наткнулся на мелкий баг, решил выложить, кто хочет, исправьте

Заглянул в DAX 2009, Axapta 3.0, код аналогичен. В 2012й похоже уже всё красиво.

Форма ProdParameters, метод numberSeqPostInit()

X++:
NumberSeqReference      numberSeqReferenceProd;
NumberSeqReference      numberSeqReferenceRoute;
;
numberSeqReferenceProd  = ProdParameters::numberSeqReference();
numberSeqReferenceRoute = RouteParameters::numberSeqReference(); // инициализуется класс обработчик номерной серии для маршрутов

numberSequenceReference_ds.object(fieldnum(NumberSequenceReference, AllowSameAs)).visible(
    numberSeqReferenceProd.sameAsActive() || numberSeqReferenceProd.sameAsActive()); // но здесь почему-то используется только экзменпляр Prod'а, а Route в проверке не участвует
ctrlLabelSameAs.visible(numberSeqReferenceProd.sameAsActive() || numberSeqReferenceProd.sameAsActive()); // и здесь тоже

Последний раз редактировалось Cardagant; 10.06.2014 в 00:45.
За это сообщение автора поблагодарили: S.Kuskov (1).
Старый 10.06.2014, 20:51   #9  
pedrozzz is offline
pedrozzz
Молодой, подающий надежды
Аватар для pedrozzz
MCBMSS
Лучший по профессии 2015
 
164 / 218 (8) ++++++
Регистрация: 18.02.2010
Адрес: Краснодар
2012 R2 CU7
В классе RunBaseQuery_RU переменная queryrun объявлена, как SysQueryRun, но в методах самого класса она инициализируется, как QueryRun
X++:
protected final void initQueryRun()
{
    ...
    query       = this.initNewQuery();
    queryrun    = new QueryRun(query);
}
X++:
public boolean unpack(container packedClass)
{
    ...
            if (packedQuery)
            {
                queryrun = new QueryRun(packedQuery);
            }
    ...
}
Если создать наследника этого класса, то из Ах он будет работать прекрасно, но стоит поставить его в пакет, как тот (пакет) будет валиться с ошибкой неправильного присваивания типа переменной. Видимо, внутри CIL эта ситуация обрабатывается иначе.
Чтобы все заработало, переменную инициализировать, как
X++:
queryrun = new SysQueryRun(...)
__________________
Кононов Пётр
За это сообщение автора поблагодарили: Ivanhoe (5), gl00mie (2), S.Kuskov (1).
Старый 15.06.2014, 19:57   #10  
SRF is offline
SRF
Участник
MCBMSS
Axapta Retail User
 
365 / 543 (19) +++++++
Регистрация: 08.08.2007
Записей в блоге: 1
AX 2012 CU7, форма SalesCopying, метод CustInvoiceTrans\upDateRemainderCache, некорректный расчет ранее возвращенного кол-ва для заказов отгруженных через функционал отложенного перехода права собственности, также ошибка есть в случае использования функционала проектов.

X++:
void upDateRemainderCache(CustInvoiceTrans _custInvoiceTrans)
{
    SalesQty qty;
    PdsCWInventQty cwQty;
    SalesLine       localSalesLine;
    // <GEERU>
    GoodsInRouteInventTransIdDelivery_RU inventTransIdDelivery_RU;
    // </GEERU>

    if (!creditNoteReturnRemainder.exists(_custInvoiceTrans.RecId))
    {
        localSalesLine = SalesLine::find(_custInvoiceTrans.InventTransId);
        [qty, cwQty] = SalesLine::pdsRemainReturnLotQtyAllCreditNote(_custInvoiceTrans.InventTransId, localSalesLine.ProjId);
        // <GEERU>
        if (SysCountryRegionCode::isLegalEntityInCountryRegion([#isoRU]))
        {
            inventTransIdDelivery_RU = _custInvoiceTrans.custInvoiceTrans_RU().InventTransIdDelivery_RU;
        }
        if (inventTransIdDelivery_RU)
        {
            qty = UnitOfMeasureConverter::convert(-SalesLine::qtyDeliveryToCreditNote_RU(inventTransIdDelivery_RU),
                                                  UnitOfMeasure::unitOfMeasureIdBySymbol(_custInvoiceTrans.inventTable().inventUnitId()),
                                                  UnitOfMeasure::unitOfMeasureIdBySymbol(_custInvoiceTrans.SalesUnit),
                                                  NoYes::Yes,
                                                  InventTable::itemProduct(_custInvoiceTrans.ItemId));

            qty = localSalesLine.type().invoicedInTotal() - qty;
        }
        // </GEERU>
        creditNoteReturnRemainder.insert(_custInvoiceTrans.RecId, qty);
        cwCreditNoteReturnRemainder.insert(_custInvoiceTrans.RecId, cwQty);
    }
}
Вместо строки
X++:
 localSalesLine = SalesLine::find(_custInvoiceTrans.InventTransId);
нужно вставить
X++:
 localSalesLine = SalesLine::findInventTransId(_custInvoiceTrans.InventTransId);
Если провалится в метод SalesLine :: pdsRemainReturnLotQtyAllCreditNote, то там тоже можно увидеть аналогичную ошибку
X++:
public server static container pdsRemainReturnLotQtyAllCreditNote(
    InventTransId   _inventTransId,
    ProjId _projId = SalesLine::find(_inventTransId).ProjId)
__________________
Sergey Nefedov
За это сообщение автора поблагодарили: gl00mie (3), S.Kuskov (1).
Старый 15.05.2014, 16:38   #11  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Русская локализация R3
Нажмите на изображение для увеличения
Название: AAK.PNG
Просмотров: 239
Размер:	25.0 Кб
ID:	8863

Каждый раз, когда в русской компании натыкаешься на эти пункты меню, это вызывает неподдельное веселье аудитории. Нравится глубина проработки этой важной для страны темы: целый подмодуль "Alcohol*", включая журнал ежедневного потребления Alcohol Daily Journal, полная интеграция.

Последний раз редактировалось EVGL; 15.05.2014 в 16:54.
Старый 15.05.2014, 17:08   #12  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2155 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Угу, только участникам рынка и автоматизаторам (конечным) не смешно Есть слухи, что надо будет каждую продажу сразу регистрировать в единой гос. БД.
__________________
Ivanhoe as is..
Старый 18.07.2014, 19:38   #13  
skuull is offline
skuull
Участник
Most Valuable Professional
Лучший по профессии 2014
 
699 / 752 (27) +++++++
Регистрация: 08.03.2013
Адрес: ХЗ
X++:
//First of all, I'd like to appologise to whoever is going to maintain this code.
    //It was originally created for the Loan management system (and is works perfectly for that), but
    //because of time constraints this class will also be used for investment register
    //- which has never been properly spec'ed.
    //So allot of things are being thrown to the AxnLRCreateJournals class to that class's main method
    //to make it work for investment register.
    //Again, I am sorry - CL
Вот такое вот решение продают люди
За это сообщение автора поблагодарили: Logger (1).
Старый 28.07.2014, 17:21   #14  
skuull is offline
skuull
Участник
Most Valuable Professional
Лучший по профессии 2014
 
699 / 752 (27) +++++++
Регистрация: 08.03.2013
Адрес: ХЗ
X++:
// Calculate the number of years and the number
for (monthCounter = month; monthCounter > 12; monthCounter -= 12)
{
    yr += 1;
}
За это сообщение автора поблагодарили: mazzy (2).
Старый 29.07.2014, 14:47   #15  
user_ax is offline
user_ax
Участник
Аватар для user_ax
 
599 / 39 (3) +++
Регистрация: 07.10.2012
Адрес: ZP
skuull, эта пять!
Старый 29.07.2014, 17:36   #16  
skuull is offline
skuull
Участник
Most Valuable Professional
Лучший по профессии 2014
 
699 / 752 (27) +++++++
Регистрация: 08.03.2013
Адрес: ХЗ
Цитата:
Сообщение от user_ax Посмотреть сообщение
skuull, эта пять!
Вам смешно, а я каждый день нахожу что-то такое и плачу

И вот немного от русских интерграторов

X++:
   return "pld"; // грязный хак
Старый 30.07.2014, 05:53   #17  
macklakov is offline
macklakov
NavAx
Аватар для macklakov
 
2,129 / 917 (35) +++++++
Регистрация: 03.04.2002
Цитата:
Сообщение от skuull Посмотреть сообщение
Вам смешно, а я каждый день нахожу что-то такое и плачу

И вот немного от русских интерграторов

X++:
   return "pld"; // грязный хак
Так ты посмотри, что этот код делает. Судя по аббревиатуре, это заглушка для польской локализации. Насколько помню, там так грязно было, что по другому никак.
__________________
Isn't it nice when things just work?
Старый 30.07.2014, 08:09   #18  
skuull is offline
skuull
Участник
Most Valuable Professional
Лучший по профессии 2014
 
699 / 752 (27) +++++++
Регистрация: 08.03.2013
Адрес: ХЗ
Это имя компании
За это сообщение автора поблагодарили: macklakov (1).
Старый 28.10.2014, 18:46   #19  
Stitch_MS is offline
Stitch_MS
Участник
Аватар для Stitch_MS
Соотечественники
 
396 / 478 (16) +++++++
Регистрация: 27.02.2006
Адрес: Дания
Цитата:
hi there

Thanks for reading my message. I have no IT backgroung and only CAN use email and web surfing.

I want to become ms dynamics ax consultant ( not programmer). So anyone kind enough to tell me the study route from scratch to become ms dynamics ax consultant. Also how long it can be take without any IT background. THANKS.
http://community.dynamics.com/ax/f/33/t/143365.aspx
Старый 21.11.2014, 15:55   #20  
Ruff is offline
Ruff
Дмитрий Ерин
Аватар для Ruff
1C
 
475 / 396 (14) ++++++
Регистрация: 18.09.2003
Адрес: Тула
AX2009, AX2012, sys слой:
X++:
final class TaxSalesInvoice extends Tax
{
    SalesCalcTax    salesFormLetter;
    ...
}
SalesCalcTax к иерархии FormLetter - никаким боком.
Аналогичные объявления в классах TaxSales, TaxPurch, TaxPurchInvoice, может еще где-то...
Наверно я чего-то не догоняю, но эта невинная "шутка" стоила битого часа впустую потерянного времени
__________________
За это сообщение автора поблагодарили: macklakov (1), Logger (2), ivas (3).
Теги
axapta, cil, d365fo, guid, rasset, uuid, uuidv7, баг

 


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

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

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