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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.01.2010, 16:27   #1  
Damn is offline
Damn
Участник
 
374 / 105 (4) +++++
Регистрация: 28.05.2003
Адрес: Москва
Метод TmpInventTransMark.updateTmpMark()
Ax2009 SP1 Hotfix Rollup 3 с GLS-слоем для Восточной Европы

Собственно, заинтересовала 183-я строка этого метода.

X++:
if (abs(inventTrans.financialOpenQty() > abs(qtyRemain)))
Как я понимаю, тут функция abs применяется к условию ? То есть к некоему булевскому значению - true или false. abs(true) = 1, abs(false) = 0. Тут можно и без abs обойтись. Была ли какая-то хитрая задумка в этом ?

В Ax3.0 аналогичный этому метод располагался в таблице InventTrans. Там была точно такая же строчка
__________________
Дмитрий
За это сообщение автора поблагодарили: kashperuk (5), Logger (1), Raven Melancholic (1), Sergey Petrov (1), Ievgenii (2).
Старый 27.01.2010, 17:22   #2  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
1,811 / 984 (36) +++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
Сообщение от Damn Посмотреть сообщение
Как я понимаю, тут функция abs применяется к условию ?
Да, а должен к inventTrans.financialOpenQty(), то есть правильно будет (выше в этом методе именно так):
Код:
if (abs(inventTrans.financialOpenQty()) > abs(qtyRemain))
Старый 27.01.2010, 17:44   #3  
kashperuk is offline
kashperuk
Senior SDE, Dynamics AX
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,353 / 2064 (77) +++++++++
Регистрация: 30.05.2004
Адрес: Копенгаген, Дания
Я попросил изменить на обратное условие - так намного лучше видно, что скобки расставлены неверно:

X++:
if (abs(qtyRemain) < abs(inventTrans.financialOpenQty()))
За это сообщение автора поблагодарили: Raven Melancholic (2).
Старый 28.01.2010, 15:20   #4  
Maximin is offline
Maximin
NavAx
NavAx Club
 
404 / 331 (12) ++++++
Регистрация: 09.10.2002
Адрес: Москва
Баян...
Маркировка - достала!
Вроде, в 4ке перерабатывали этот механизм - неужели в 5ке взяли опять 3ку за основу? o_O
__________________
Жизнь прекрасна! Если, конечно, правильно подобрать антидепрессанты...

Последний раз редактировалось Maximin; 28.01.2010 в 15:24.
За это сообщение автора поблагодарили: Damn (1).
Старый 29.10.2019, 09:57   #5  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,462 / 969 (35) +++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Поднял старую тему, поскольку также вызывает недоумение фрагмент этого кода в dax2012, который тянется с младших версий

X++:
           else
            if (tmpInventTransMark.QtyMarkNow != 0) // update new marking
            {
                qtyRemain = -tmpInventTransMark.QtyMarkNow;
                loop      = 0;

                while (loop < 4)   // почему здесь значение 4, а не 3 ?
                {
                    // Select transactions are to be marked
                    inventTransThis = TmpInventTransMark::inventTransMark(_inventTransId,
                                                                          _inventDimCriteria,
                                                                          _qty,
                                                                          tmpInventTransMark,
                                                                          loop);
Это собственно маркирование и поиск проводок для этого самого маркирования

loop = 0 - Не маркированные проводки с тем же значением InventDimId
loop = 1 - Не маркированные проводки, но по значениям аналитик
loop = 2 - Проводки по значениям аналитик, маркированные с другой проводкой
loop = 3 - Проводки по значениям аналитик. Без контроля маркирования

Вот loop = 3 и вызывает вопросы. По сути, этот шаг цикла просто еще раз отберет те же самые проводки, которые были отобраны на предыдущих шагах.

В результате, если изначально ошиблись с подсчетом количества для маркирования или другой пользователь внес изменения в проводки, то вот этот самый шаг с loop = 3 может привести к разнообразным глюкам маркирования

Я не очень понимаю, это специально было сделано? Может, в младших версиях был в этом какой-то смысл?
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Теги
ax2009, ax3.0, bug, баг, ошибка

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
DAX 2009,5.0.1000.52 SP1 в таблице smmBusRelTable отсутствует метод convert2Customer Murlin DAX: Программирование 8 11.11.2009 16:23
Как вызвать метод для поля в FormDataSource? Maxim Gorbunov DAX: Программирование 3 08.05.2007 11:28
Дисплей метод таблицы который вызывается из ГРИДА 3oppo DAX: Программирование 10 23.05.2006 06:47
display метод с параметром Андре DAX: Программирование 5 11.01.2006 19:04
Передача массива VARIANTов в Automation метод Maximin DAX: Программирование 0 09.10.2002 19:31
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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