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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 15.02.2011, 14:30   #21  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Т.е. все-таки модификации есть
__________________
Ivanhoe as is..
Старый 15.02.2011, 14:35   #22  
AvrDen is offline
AvrDen
Участник
 
134 / 26 (1) +++
Регистрация: 04.08.2005
Адрес: Усть-Каменогорск
Цитата:
Сообщение от Ivanhoe Посмотреть сообщение
Т.е. все-таки модификации есть
Ну да - это модификация, но модификация, которая никак не влияет на расчет суммы затрат, это "просто удобство для пользователей" и которое стабильно работало в предыдущих версиях.
Непонятно почему сейчас происходят такие "фокусы"
Старый 15.02.2011, 14:47   #23  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Согласен с AvrDen, это не серьёзно. Явный баг
Интересно было бы создать тестовый проектик (тестовые таблички + тестовая форма), на котором бы воспроизводился описанный глюк и погонять такой проект на разных приложениях и СУБД. AvrDen, может сворганите такой на скорую руку?
Старый 15.02.2011, 15:15   #24  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Баг неприятный. Но если в стандарте его нет, то намного быстрее можно было бы найти проблему - модификацию.

Вопрос автору: у вас версия системы указана для чего? Приложение или и все bin-файлы?

Попробовал сделать модификацию с новым ДС по InnerJoin (вывел ItemName на форму) - ошибка не повторилась. Приложение 5.0.1500.2116, bin-файлы 5.0.1500.3761.
__________________
Ivanhoe as is..
Старый 21.02.2011, 07:12   #25  
AvrDen is offline
AvrDen
Участник
 
134 / 26 (1) +++
Регистрация: 04.08.2005
Адрес: Усть-Каменогорск
Провел эксперимент - взял рабочее приложение и создал новую БД, залил туда тестовые данные. Ошибка не повторилась... Т.е. дело не в модификациях...

Последний раз редактировалось AvrDen; 21.02.2011 в 07:15.
Старый 21.02.2011, 07:14   #26  
AvrDen is offline
AvrDen
Участник
 
134 / 26 (1) +++
Регистрация: 04.08.2005
Адрес: Усть-Каменогорск
Цитата:
Сообщение от Ivanhoe Посмотреть сообщение
Вопрос автору: у вас версия системы указана для чего? Приложение или и все bin-файлы?
у меня и приложение и bin-файлы 5.0.1500.2116
Старый 22.02.2011, 08:17   #27  
AvrDen is offline
AvrDen
Участник
 
134 / 26 (1) +++
Регистрация: 04.08.2005
Адрес: Усть-Каменогорск
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Интересно было бы создать тестовый проектик
Попробуйте запустить следующий job(recId только свой подставьте ) и посмотреть в Журнале трассировки операторов SQL план запроса
X++:
static void Job17(Args _args)
{
    InventJournalTrans  inventJournaltrans;
    InventDim           inventDim;
    InventTable         inventTable;
    InventItemBarcode   inventItemBarcode;
    ;
    ttsbegin;
    select forupdate inventJournaltrans
        where inventJournaltrans.RecId == 5637149414
        join inventDim
        where inventDim.inventDimId == inventJournaltrans.InventDimId
        join inventTable
        where inventTable.ItemId == inventJournaltrans.ItemId;

        inventJournaltrans.CostAmount = 8933.72;
        inventJournaltrans.update();
    ttscommit;
}
У меня получился следующий план запроса:

UPDATE INVENTJOURNALTRANS SET COSTAMOUNT=8.93372E3,RECVERSION=702523288 WHERE (((DATAAREAID=N'mhv') AND (RECID=5637149414)) AND (RECVERSION=902287041))

Как видно CostAmount представлен в экспоненциальном виде и SQL воспринимает его как 8933.719999999999

Удалив из job таблицу Inventtable

X++:
static void Job17(Args _args)
{
    InventJournalTrans  inventJournaltrans;
    InventDim           inventDim;
    InventTable         inventTable;
    InventItemBarcode   inventItemBarcode;
    ;
    ttsbegin;
    select forupdate inventJournaltrans
        where inventJournaltrans.RecId == 5637149414
        join inventDim
        where inventDim.inventDimId == inventJournaltrans.InventDimId;

        inventJournaltrans.CostAmount = 8933.72;
        inventJournaltrans.update();
    ttscommit;
}
получим план запроса

UPDATE INVENTJOURNALTRANS SET COSTAMOUNT=?,RECVERSION=? WHERE (((DATAAREAID=?) AND (RECID=?)) AND (RECVERSION=?))
Старый 22.02.2011, 08:24   #28  
AvrDen is offline
AvrDen
Участник
 
134 / 26 (1) +++
Регистрация: 04.08.2005
Адрес: Усть-Каменогорск
Обратились с этой проблемой на форум SQL
http://www.sql.ru/forum/actualthread.aspx?tid=830538

В связи с этим вопрос: как можно поменять размерность полей в AX?

Последний раз редактировалось AvrDen; 22.02.2011 в 08:28.
Старый 22.02.2011, 21:43   #29  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
По-моему, размерность полей в AX ни при чем, поскольку потеря точности может возникать при разной размерности на разных числовых константах. Проблема, если верить описанию на sql.ru, в том, что ядро отправляет запрос, указывая значение для поля типа numeric в экспоненциальной форме, соответствующей типам float и real, вместо использования формата констант, принятых для типа numeric/decimal (см. константы TSQL). Из-за этого возникает приведение типа, в ходе которого теряется точность. Это все, конечно, отчасти связано с особенностями Ms SQL, тем не менее, используй ядро "родную" форму представления констант, проблем бы не возникало. К слову, вот простой пример, иллюстрирующий "странности" в приведении типов в Ms SQL (проверено на Ms SQL Server 2008, v10.0.4000.0):
PHP код:
declare @test numeric(28,12)
select @test 8.93372E3
print @test
select 
@test 8933.72
print @test 
на выходе получаем:
Код:
8933.719999999999
8933.720000000000
Я бы в такой ситуации посоветовал внимательно изучить список вышедших исправлений и при отсутствии чего-то схожего зарегистрировать ошибку в службе поддержки. Думаю, исправить в ядре формат строкового представления числовых констант, отправляемых на СУБД, не составит особого труда, и скоро выйдет соответствующий hotfix.
За это сообщение автора поблагодарили: AvrDen (1).
Старый 10.11.2011, 13:00   #30  
axalex is offline
axalex
Участник
 
91 / 14 (1) ++
Регистрация: 14.03.2011
Цитата:
Сообщение от AvrDen Посмотреть сообщение
Добрый день!
Периодически при разноске складских журналов возникает ошибка "Неправильное округление величины".
Ошибка возникает в InventJournalTrans/checkAmount
X++:
    if (this.CostAmount != Currency::amount(this.CostAmount))
        ok = checkFailed("@SYS2602");
В строке журнала поле CostAmount стоит сумма 8933,72
При этом в отладчике в поле CostAmount непонятно почему заносится очень странное значение(например 8933,719999999999), т.е. система не округлила сумму. При этом, если изменить в строке журнала сумму на 8933,73, то ошибка не возникает.
X++:
//исправление ошибки округления в складском журнале
static void InventJournalCostAmountRound(Args _args)
{
    InventJournalTrans  inventjournalTrans;
    InventJournalId     inventJournalId = "/*НОМЕР ЖУРНАЛА*/";
    ;

    ttsbegin;
    while select forupdate inventjournalTrans
        where inventjournalTrans.JournalId == inventJournalId
    {
        inventjournalTrans.CostAmount = Currency::amount(inventjournalTrans.CostAmount);
        inventjournalTrans.doUpdate();
    }
    ttscommit;
    info("Округление успешно");
}
__________________
С уважением, Алексей.
За это сообщение автора поблагодарили: vml (1).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Округление при расчете НДФЛ barry allen DAX: Программирование 1 20.12.2010 15:15
Расчеты с персоналом // Виды зарплаты // Округление farlander DAX: Функционал 0 29.04.2009 09:54
Неверное округление физ. Обновляемого количества товара fur-lined DAX: Функционал 14 10.11.2006 11:02
округление в OLAP xconsul DAX: Администрирование 2 19.11.2005 14:33
Тип проводки - округление накладной по закупке Ann DAX: Функционал 0 23.06.2004 14:05

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

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

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