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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 06.02.2017, 16:31   #1  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от Slava Chernenko Посмотреть сообщение
Наткнулся на ошибку, полез смотреть откуда ноги растут, оказалось так всегда было, в смысле в SYS слое такой код.
AX 2009, EmplTable form, datasource EmplTable write():

X++:
public void write()
{
.....

    ttsbegin;

......

    if (emplTable.PartyId && dirPartyTable.Name && !DirPartyTable::exist(emplTable.PartyId))
    {
.......

        if (dirPartyTable.validateWrite())
        {
            // Create a new DirPartyTable row.
            dirPartyTable.write();
            lastNewUnusedId = "";
        }
        else
        {
            // Abort the transaction.
            ttsabort;
        }
    }
    else if (emplTable.PartyId && dirPartyTable.Name && dirPartyTableChanged && DirPartyTable::exist(emplTable.PartyId))
    {
        if (dirPartyTable.validateWrite())
        {
            // Update the existing DirPartyTable row.
            dirPartyTable.write();
        }
        else
        {
            // Abort the transaction.
            ttsabort;
        }
    }

    super();

.....

    ttscommit;
}
Проблема в комбинации ttsabort в середине кода и ttscommit в конце.
Интересно, куда этот код разползся в следующих версиях и выжил ли в AX 7...
EmplTable больше нет.
Может этот код где-то и существует, но я не имею ни малейшего представления, где это сейчас.
Старый 09.02.2017, 17:29   #2  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
870 / 637 (23) +++++++
Регистрация: 14.10.2004
Вместо утренней зарядки, перед первым запуском Аксапты, быстро удаляем кеш на компьтере. В командной строке Windows вводим:
del /s ax*.auc
Старый 10.02.2017, 19:56   #3  
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 R3 \Classes\RetailTransactionServiceOrders\getCustomerOrder
AX 2012 R2 \Classes\RetailTransactionService\getCustomerOrder
X++:
select InventTransOrigin from inventTransOriginSalesLine
where inventTransOriginSalesLine.SalesLineInventTransId == salesLine.InventTransId;
Люди тестировали код, как обычно, на своей 10-гиговой игрушечной базе, и им было невдомек, что в кластерном индексе на первом месте стоит поле SalesLineDataAreaId - в итоге этот чудо запрос ни разу не попадает в индекс и на нормальных объемах данных приводит к зависанию на минуты. Из-за этого AX POS при попытке поднять заказ на продажу через RTS отваливается по таймауту. Если исправить на нормальный вызов InventTransOriginSalesLine::findInventTransOriginId(), то все отрабатывает за секунды.
За это сообщение автора поблагодарили: kashperuk (5).
Старый 10.02.2017, 19:58   #4  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от gl00mie Посмотреть сообщение
...приводит к зависанию на минуты...
ты лучше посмотри как поиск по номеру чека происходит...
Старый 17.02.2017, 15:20   #5  
SRF is offline
SRF
Участник
MCBMSS
Axapta Retail User
 
365 / 542 (19) +++++++
Регистрация: 08.08.2007
Записей в блоге: 1
Табличка TMSRouteSegmentLoadLine
AX 2012 R3, к словам об игрушечной базе Отсутствие индекса и непонятный cross join к WHSLoadLine.
Миниатюры
Нажмите на изображение для увеличения
Название: TMSRouteSegmentLoadLine.png
Просмотров: 395
Размер:	72.9 Кб
ID:	11215  
__________________
Sergey Nefedov

Последний раз редактировалось SRF; 17.02.2017 в 15:57.
Старый 17.02.2017, 18:09   #6  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от SRF Посмотреть сообщение
AX 2012 R3, к словам об игрушечной базе Отсутствие индекса и непонятный cross join к WHSLoadLine.
Сергей, вы у себя это починили? Или это теоретическая находка?
Старый 17.02.2017, 18:23   #7  
SRF is offline
SRF
Участник
MCBMSS
Axapta Retail User
 
365 / 542 (19) +++++++
Регистрация: 08.08.2007
Записей в блоге: 1
Починили, добавили индекс по LoadLineRecId и код слегка поправили, не знаю уж какая в итоге была задумка начального запроса, но правили вот так:

X++:
    select count(RecId) from segmentLine
        //join line
        where segmentLine.LoadLineRecId == loadLine.RecId;
__________________
Sergey Nefedov
За это сообщение автора поблагодарили: kashperuk (5).
Старый 17.02.2017, 15:57   #8  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
А почему там джойнится курсор с именем Line, а условие накладывается на курсор с именем loadLine? Или там по смыслу так и нужно чтобы полное декартово произведение получалось?
Старый 17.02.2017, 17:52   #9  
SRF is offline
SRF
Участник
MCBMSS
Axapta Retail User
 
365 / 542 (19) +++++++
Регистрация: 08.08.2007
Записей в блоге: 1
О том и речь, зачем.
__________________
Sergey Nefedov
Старый 18.02.2017, 13:08   #10  
b_nosoff is offline
b_nosoff
Читатель
Аватар для b_nosoff
MCP
MCBMSS
 
197 / 143 (5) +++++
Регистрация: 01.12.2004
Адрес: Msk
Записей в блоге: 13
RetailTransactionServiceOrders::updateCustomerOrder()

X++:
    salesLine.SalesQty = qty;
    salesLine.QtyOrdered = qty;
__________________
Axapta non erubescit
Старый 18.02.2017, 13:20   #11  
b_nosoff is offline
b_nosoff
Читатель
Аватар для b_nosoff
MCP
MCBMSS
 
197 / 143 (5) +++++
Регистрация: 01.12.2004
Адрес: Msk
Записей в блоге: 13
И еще прикольный косяк - в RetailOrderHistoryViewQuery на датасорсе RetailTransactionTable, присоединенном к SalesTable по notexists join, не хватает условия по EntryStatus != Voided, приводящий к тому, что если вы отменили транзакцию по какому-либо из Customer Order-ов, он пропадает из истории на POS.
Вообще, про это условие, похоже, не все помнят. Вот, например, в RetailTransactionServiceTransactions::addSalesOrderToResultMap() тоже забыли...
__________________
Axapta non erubescit
Старый 18.02.2017, 23:01   #12  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от b_nosoff Посмотреть сообщение
RetailTransactionServiceOrders::updateCustomerOrder()

X++:
    salesLine.SalesQty = qty;
    salesLine.QtyOrdered = qty;
Такого кода в 7ке нету в этом классе
Старый 18.02.2017, 23:04   #13  
b_nosoff is offline
b_nosoff
Читатель
Аватар для b_nosoff
MCP
MCBMSS
 
197 / 143 (5) +++++
Регистрация: 01.12.2004
Адрес: Msk
Записей в блоге: 13
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Такого кода в 7ке нету в этом классе
В 2012 R3 CU12 есть
__________________
Axapta non erubescit
Старый 17.02.2017, 19:57   #14  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
А сам способ проверки наличия в таблице записей через подсчёт их количества это же неаккуратненько как-то.
Старый 18.02.2017, 01:09   #15  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
А сам способ проверки наличия в таблице записей через подсчёт их количества это же неаккуратненько как-то.
Да, я в фиксе сделал просто firstonly RecId вместо count()

Retail запрос тоже пофиксил.
За это сообщение автора поблагодарили: S.Kuskov (2), SRF (5).
Старый 18.02.2017, 17:18   #16  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,160 / 1289 (47) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Я не работаю с DAX2012 и не специализируюсь на retail в предыдущих версиях.
Для собственного развития время от времени копаюсь в DAX2012. Такое впечатление, что куча мест, касающихся retail в DAX2012 это тема для daily Axapta WTF.
Почему так? В предыдущих версиях для России в основе лежало решение от Коламбуся для конкретного клиента (могу ошибаться, но вроде бы для Перекрестка). В DAX2012 было заявлено, что решение для ритейла универсальное международное. Думаю, что "международное решение" это как-то выверенное на сотнях-тысячах клиентов. Что не так в "международном решении"?
Старый 18.02.2017, 18:08   #17  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2155 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Это когда было решение коламбуса по ритейлу в стандарте?
А модуль ритейл, насколько я знаю, был куплен у международного партнера еще для 2009, а в 2012 его уже мс сам переписывал.
__________________
Ivanhoe as is..
Старый 18.02.2017, 22:40   #18  
b_nosoff is offline
b_nosoff
Читатель
Аватар для b_nosoff
MCP
MCBMSS
 
197 / 143 (5) +++++
Регистрация: 01.12.2004
Адрес: Msk
Записей в блоге: 13
Цитата:
Сообщение от Ivanhoe Посмотреть сообщение
А модуль ритейл, насколько я знаю, был куплен у международного партнера еще для 2009, а в 2012 его уже мс сам переписывал.
Да, верно, модуль был куплен у LS Retail для 2009-й версии
__________________
Axapta non erubescit
Старый 28.03.2017, 13:02   #19  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,038 / 1629 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
Оригинально подошли к проблеме переименования полей в D365. При переименовании поля в таблице и нажатии кнопки сохранить старое просто удаляется, а новое создается. Проблема ID наконец-то решена(о чем вроде как даже писали в what's new)
Правда данные при этом тоже удаляются, но кого это волнует.
За это сообщение автора поблагодарили: gl00mie (2), AlGol (3), Logger (1).
Старый 28.03.2017, 13:19   #20  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от trud Посмотреть сообщение
Проблема ID наконец-то решена
Heavy is good. Heavy is reliable (c) Борис Бритва
Особенно удобно при рефакторинге, не правда ли ?
__________________
-ТСЯ или -ТЬСЯ ?
Теги
axapta, cil, d365fo, guid, rasset, uuid, uuidv7, баг

 


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

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

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