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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 29.11.2011, 22:35   #8  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Обещанное продолжение: если под одним номером ГТД и номером инвойса проходит несколько проводок InventTrans, а разноска идет на себестоимость, то рано или поздно при попытке разноски ГТД произойдет ошибка, связанная с округлением. Такая ситуация неминуемо возникнет, если идет учет по палетам или серийным номерам.

Опять-таки, я получил это на первой же наипростейшей реальной ГТД, состоящей из одной строки инвойса.


Программист метода \Classes\CustomJournalGTDPostImport_RU\createInventAdjust наивно поставил throw error на случай, если ему не удалось до конца распределить сумму ГТД на проводки. При этом он совершил ряд логических и технических ошибок:

в строке 81 встречается пассаж
X++:
        if (remainAdjustNow <= Currency::find(customCurrencyCode).RoundOffAmount)
        {
            adjustNow += remainAdjustNow;
            remainAdjustNow = 0;
        }
в котором идет попытка скомпенсировать ошибку округления. При этом customCurrencyCode - это не что иное, как рубли, причем всегда. Проверяется параметр на валюте "рубль", который обычно на проекте выставляют в копейку. Легко понять, что эта проверка в описанной ситуации практически не работает.

Паллиативное решение заключается в том, чтобы поменять проверку на
X++:
if (remainAdjustNow <= LedgerParameters::find().MaxRoundingDifferenceMST)
которая будет срабатывать гораздо чаще.

Более элегантным решением было бы компенсировать ошибку округления на каждом шаге цикла или попросту закинуть ошибку округления на последнюю проводку, благо нормальные люди обычно не считают себестоимость на уровне палет или серийных номеров, и пропорция распределения коррекции себестоимости между отдельными проводками не играет роли.


Сам цикл, в котором идет поиск InventTrans для распределения, тоже неверен, поскольку не проверяется InvoiceReturned да и вообще знак проводки. Если в инвойс замешалась строка со сторно, жди очень интересных эффектов.

Последний раз редактировалось EVGL; 29.11.2011 в 22:58.
За это сообщение автора поблагодарили: lev (3), Ich@Ru (1).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Оформление возврата услуг Dolores DAX: Функционал 6 07.12.2016 17:09
Сколько времени у вас занимает сбор перекрестных ссылок по вашему приложению AX 4.0/2009? gl00mie DAX: Программирование 25 16.04.2012 10:39
Сбор суммы по партионным остаткам Che DAX: Программирование 7 16.03.2011 10:49
Оформление перезаказа aevi82 DAX: Функционал 6 07.12.2004 09:40
оформление комиссионных SAlekseev DAX: Функционал 5 28.04.2003 17:48

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

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

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