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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 11.11.2008, 10:28   #1  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 438 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Цитата:
Сообщение от Wamr Посмотреть сообщение
если не в этом, то в чем?
посмотреть с кем сопоставлена проводка и сравнить их costValue по сопоставленному кол-ву... опять же возвращаемся к InventSettlement
Привет Вась.
Есть такая проблема.
Есть приложение сильное изменённое.
В нём хватает чужого кода в классах закрытия, пересчёта и корректирки.
По одной номенклатуре (возможно их больше) не получается скорректировать себестоимость через корректировку наличия.
Выкидывает сообщение
Отрицательная себестоимость не возможна.
(S) \Classes\InventTransAdjust\updateNow - line 72
Не могу понять в чём дело. Считается вроде всё правильно и интуиция подсказывает возможно входные данные не правильны. А именно поле корректировки.
Предположил что это поле на InventTrans проверяется таким образом.
Для ValueOpen = да
X++:
display Amount MRD_calcCostAmountAdjustment()
{
    Amount costAmountAdjustment;
;
    if(this.QtySettled)
        costAmountAdjustment = this.Qty * this.CostAmountSettled / this.QtySettled - this.CostAmountPosted;
    else
        costAmountAdjustment = this.CostAmountSettled;
    return costAmountAdjustment;
}
Сделал форму и вывожу эти поля.
1) Цифры в основном различаются на втором знаке после запятой.
На той проводке которая меня интересует на первой после запятой.
Как раз мне мальца и нехватает чтоб ошибку убрать.
2) Что меня ещё смущает?
Что есть прводки без сопоставления, но с корректировкой.
Не понятно тогда откуда эти суммы беруться, если нет сопоставления.
Визуально вижу что эти цифры иногда совпадают с проводками по той же номенклатуре но по которой были сопоставления. Связано это или нет не знаю точно.
Первый вопрос более интересен. Но если кто сможет объяснить второй (Почему так) тоже будет хорошо.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему.

Последний раз редактировалось miklenew; 11.11.2008 в 10:47. Причина: описался место номенклатуры написал накладной
Старый 11.11.2008, 18:00   #2  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,914 / 5737 (197) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Цитата:
Сообщение от miklenew Посмотреть сообщение
Выкидывает сообщение
Отрицательная себестоимость не возможна.
(S) \Classes\InventTransAdjust\updateNow - line 72
Не могу понять в чём дело. Считается вроде всё правильно и интуиция подсказывает возможно входные данные не правильны. А именно поле корректировки.
Предположил что это поле на InventTrans проверяется таким образом.
Для ValueOpen = да
Хотя вызывает уважение желание топикстартера навести порядок в корректировках себестоимости, мне кажется, что miklenew взялся за задачу немного не с того конца. Такое сообщение выдается при попытке переоценить приходный складской лот (проводку грубо говоря) до отрицательной себестоимости. И на мой взгляд, тут более вероятна ситуация, при которой кто-то грязными руками покопался в логике класса, который грубо говоря преобразует новую сумму остатка по складам в коррекцию суммы каждой открытой проводки.(InventAdj-SumUp(), inventSumOpenTransact()).
Возможно, я не прав и топикстартер уже разобрался в том что происходит в этих классах. В таком случае, просьба написать почему возникло подозрение что неверно значение именно в inventTrans.costAmountAdjustment.
Старый 12.11.2008, 10:54   #3  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 438 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
К чему в результате дошёл

1) \Classes\InventSumOpenTransact\add
Закидываем в буфер costAmountPosted

2) (S) \Classes\InventSumOpenTransact\setTransAdjustNow - line 4
Инициализируем суммы корректировки нулями

3)(S) \Classes\InventSumOpenTransact\setAdjustment - line 49
Может получиться что расчитанная сумма корректировки нам не подходит,
тогда корректировка = this.transValue(x)+this.transAdjustNow(x)
Фактически это this.transValue(x) т.к. transAdjustNow(x) = 0

4) (S) \Classes\InventTransAdjust\updateNow - line 35
inventTrans.updateSplit(inventTrans.financialOpenQty());
Делим на две проводки (старая+новая)
И все суммы и количества пропорционально распределяем, кроме суммы по корректировке.
Корректировку оставляем на изначальной проводке. Т.к. в InventSettlement связь не только по лоту но и по recId.
После этой процедуры место старого inventTrans в памяти уже другой.
Вот это я исправил, так как это не правильно.
Поставил в верху метода
X++:
    RefRecId         origRecId;
А место
X++:
            if (inventTrans.financialOpenQty() != inventTrans.qty)
                inventTrans.updateSplit(inventTrans.financialOpenQty());
изменённый код
X++:
            if (inventTrans.financialOpenQty() != inventTrans.qty)
            {
                origRecId = inventTrans.RecId;
                inventTrans.updateSplit(inventTrans.financialOpenQty());
                if(inventTrans.RecId != origRecId)
                    inventTrans = InventTrans::findRecId(origRecId, true);
            }
Вопрос: Интересно, а зачем здесь вообще updatesplit()?
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему.
Старый 12.11.2008, 19:27   #4  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 438 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Есть подозрения, что сделал не правильно.
Завтра ещё буду юзать.
Но неужели не у кого нет мыслей зачем там updatesplit().
Буду благодарен за любые догадки, даже неправильные.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему.
Старый 01.03.2009, 19:19   #5  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
4,004 / 3299 (118) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от miklenew Посмотреть сообщение
По одной номенклатуре (возможно их больше) не получается скорректировать себестоимость через корректировку наличия.
Выкидывает сообщение
Отрицательная себестоимость не возможна.
(S) \Classes\InventTransAdjust\updateNow - line 72
Кажется разобрался почему так получается. Открыл обсуждение здесь
Расщепление InventSplitTrans_Remain и коррекция в наличии
Теги
логистика, переоценка

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
сопоставление оплат клиента, переносов сальдо-поле накладная в общем журнале? Aquarius DAX: Функционал 3 28.01.2009 12:51
InventTransIdReturn и Закрытие склада DenisS DAX: Программирование 15 03.12.2008 09:02
Denis Fedotenko: Новые поля в складских проводках Blog bot DAX: База знаний и проекты 10 24.05.2007 11:57
Как правильно достучаться из InventTrans до даты накладыной NJD DAX: Программирование 6 22.07.2005 20:52
Связь таблиц InventTrans и PurchLine Pustik DAX: Программирование 2 25.11.2004 12:23
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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