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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 26.06.2013, 19:59   #1  
Aquarius is offline
Aquarius
Участник
 
139 / 29 (1) +++
Регистрация: 08.02.2007
Адрес: Одесса
Странное поведение при закрытии склада-ошибка в коде?
Добрый день, подскажите пожалуйста:
Акс 2009. Sp 5
Настройки Группа складских аналитик:
1.1 активный включено аналитики склад, партия, паллета, ячейка-
1.2. физ. наличие включено для аналитик склад, партия, паллета, ячейка,
1.3 .первичные аналитики -склад
1.4. финансовый склад включен для аналитик склад.
Настройки Группа складских моделей:
1.1. Складская модель ФИФО
Включены настройки:
1.2. Отрицательный физ склад,
1.3. Отрицательный фин склад,
1.4. Заказ на отгрузку,
1.5. Разносить физ операции,
1.6. Разносить фин операции,
1.7. Резервирование- контроль по дате.

У нас возникла следующая ситуация -некорректно проставляется корректировка сторно заказа при закрытии склада.
Заказ первоначально проведен и отсторнирован апрелем, затем повторно проведен и осторнирован в мае , затем окончательно проведен в мае.
1.до закрытия апреля
проводки
1.1. 30.04.2013 заказ 1698 продано -2000 шт сумма -146400 грв.
1.2. 30.04.2013 заказ 1698 куплено 2000 шт сумма 146400 грв.
1.3. 07.05.2013 заказ 1698 продано -2000 шт сумма -146400 грв.
1.4. 07.05.2013 заказ 1698 куплено 2000 шт сумма 146400 грв.
1.5. 07.05.2013 заказ 1698 продано -2000 шт сумма -146400 грв.
2. после закрытия апреля (ФИФО)
2.1. 30.04.2013 заказ 1698 продано -2000 шт сумма -20294,6 грв. полностью финансово закрыта проводка
2.2. 30.04.2013 заказ 1698 куплено 2000 шт сумма 81347,3 грв. проводка открыта
2.3. 07.05.2013 заказ 1698 продано -2000 шт сумма -146400 грв.
2.4. 07.05.2013 заказ 1698 куплено 2000 шт сумма 146400 грв.
2.5. 07.05.2013 заказ 1698 продано -2000 шт сумма -146400 грв.
если сделать пересчет в мае ( например 7 мая),то проводка 2.2 становится корректной, там итоговая сумма получается 20294,6.
перечень всех складских проводок по данной номенклатуре до закрытия и после закрытия привожу в ексель. там по 45 строк.
Мы планируем ежемесячно переоценивать складские запасы через корректировку в наличии путем указания процента изменения себестоимости- для всех номенклатур одинаковый процент изменения.
Данная складская проводка 2.2 вылазит в в открытые , должна быть переоценена вместе с другими.Но у нее абсолютно неправильная себестоимость. Если мы эту проводку переоценим через корректировку в наличиии,то последующие пересчеты себестоимости ее уже никак не затронут. Поэтому нам очень нужна правильная себестоимость в этой проводке на конец месяца.


Я обнаружила ,анализируя закрытие склада для данной номенклатуры в дебагерре, что в методе updateTransIdReturnReceipt класса InventCostItemDim
вызывается из :
[s] \Classes\InventCostItemDim\updateTransIdReceipt
[s] \Classes\InventCostItemDim\updateLevelAdjustment
[s] \Classes\InventCostItemDim\updateItem

при выборе расходных проводок , исходя из которых должна рассчитаться цена приходной проводки, нет ограничения по финансовой дате расходной проводки . (которое есть при выборе приходных проводок )
таким образом в моем случае при закрытии склада апреля при расчете цены для приходной проводки сторно заказа берутся две расходные проводки:
одна из апреля -2000 штук сумма -146400 грв уже имеет корректировку 126105,4 (корректировка рассчитана ранее в момент закрытия склада)
а другая из мая. -2000 штук -146400 грв
и получается некорректная цена (-146400-146400+126105,4)/4000 штук=41,67
которая и протягивается в приходную проводку сторно заказа и создает неправильную сумму 81347,3 грв.

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

Я обнаружила,что если поставить в коде в данном методе (см ниже отмечено комментариями TEMP) ограничение по финансовой дате расходной проводки,
то для приходной проводки сторно заказа выберется только одна расходная проводка :
30.04.2013 -2000 штук сумма -146400 грв уже имеет корректировку 126105,4
и получится цена (-146400+126105,4)/2000 штук=10,15
которая протянется в приходную проводку сторно заказа и создаст правильную сумму 20294,6 грв.

Подскажите, пожалуйста:
Почему не стоит такое ограничение по финансовой дате расходной проводки? Возможно есть ли случаи, в которых важно чтобы этого ограничения не было?
Можем ли мы у себя поставить такое ограничение, если мы будем всегда использовать ФИФО?
Проверила в Акс3, там тоже такого ограничения нет.

protected void updateTransIdReturnReceipt(
InventTransId _inventTransId,
InventTransId _inventTransIdReturn,
Price _costPrice = 0 // if 0 then it will be recalculated
)
{
InventTrans receipt;
InventTrans issue;
CostAmount adjustNow;

boolean onHandIsAdjusted;
;



if (!_inventTransId || !_inventTransIdReturn)
return;

if (!_costPrice)
{
select sum(Qty), sum(CostAmountAdjustment), sum(CostAmountPosted) from issue
index hint TransIdIdx
where issue.InventTransId == _inventTransIdReturn &&
issue.StatusReceipt == StatusReceipt::None &&
issue.StatusIssue == StatusIssue::Sold &&
issue.PackingSlipReturned == 0 &&
issue.InventTransIdReturn == _inventTransId
//TEMP
&&issue.DateStatus <= inventClosing.TransDate;
//
TEMP

if (!issue.Qty )
return;

_costPrice = (issue.CostAmountPosted + issue.CostAmountAdjustment) / issue.Qty;
}

onHandIsAdjusted = InventAdj::isOnhandAdjusted(_inventTransId, _inventTransIdReturn, '');

while select forupdate receipt
index hint TransIdIdx
where receipt.InventTransId == _inventTransId &&
receipt.StatusReceipt == StatusReceipt::Purchased &&
receipt.StatusIssue == StatusIssue::None &&
receipt.PackingSlipReturned == 0 &&
receipt.InventTransIdReturn == _inventTransIdReturn &&
receipt.DateStatus <= inventClosing.TransDate
{
adjustNow = Currency::amount(receipt.Qty * _costPrice - receipt.CostAmountPosted - receipt.CostAmountAdjustment,standardCurrency);

if (adjustNow)
{
receipt.CostAmountAdjustment += adjustNow;

this.createAdjustSettlement(receipt, adjustNow, '');

// The adjustment for a std cost item will always be
// reverted to bring the item cost down to std cost
// So there is no need to create an adjustment.
/* <SYS>
if (!this.inventModelGroup(receipt.ItemId).inventModelType().stdCostBased())
</SYS> */
// <GEEU>
if (! this.inventModelType_RU(receipt.ItemId).stdCostBased())
// </GEEU>
{
if (onHandIsAdjusted)
{
this.createErrorAdjustment(receipt, -adjustNow);
}

if (this.costValue(receipt) < 0)
this.createErrorAdjustment(receipt, -adjustNow);

if ((inventClosing.AdjustmentType == InventAdjustmentType::Closing) &&
(abs(adjustNow) < inventClosing.MinTransferValue || inventClosing.NumOfIteration >= inventClosing.MaxIterations))
{
this.createErrorAdjustment(receipt, -adjustNow);
}
}
else
{
/* <SYS>
this.inventModelGroup(receipt.ItemId).inventModelType().postUpdateFinancialAdjustment(receipt, inventClosing.Voucher, inventClosing.TransDate, adjustNow);
</SYS> */
// <GEEU>
this.inventModelType_RU(receipt.ItemId).postUpdateFinancialAdjustment(receipt, inventClosing.Voucher, inventClosing.TransDate, adjustNow);
// </GEEU>
}

this.updateCostAmountStd(receipt);
receipt.update();
}

mapInventTrans.insert(receipt.RecId, receipt);



}
}

Вложения
Тип файла: xlsx Пример.xlsx (17.3 Кб, 163 просмотров)
За это сообщение автора поблагодарили: Logger (5).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
ошибка при закрытии склада disana DAX: Прочие вопросы 19 11.02.2011 12:23
Ошибка при закрытии склада vazerdim DAX: Функционал 3 03.03.2010 12:54
Ошибка при закрытии склада jaran DAX: Прочие вопросы 10 24.12.2004 15:56
Ошибка при закрытии склада, при закрытии более ранней датой, чем пересчет Berkoff DAX: Функционал 2 25.10.2004 17:52
Русская локализация Axapta 3 ? SlavaK DAX: Администрирование 59 01.07.2003 22:38

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

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

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