|
![]() |
#1 |
Moderator
|
Извиняюсь - занят был - сразу не ответил. Этот самый updateSplit() - единственное что отличает переоценку остатков от переоценки проводок. Вот допустим ты купил 100 процессоров по $100 каждый и за месяц продал половину по цене $120. Потом 1ого числа Intel планово снизил цены за процы до $70 и даже компенсировал тебе разницу. Теперь ты должен ОСТАВШИЕСЯ 50 процессоров переоценить до $70 и продавать их по $85.
Если ты просто переоценишь проводку (или уберешь updateSplit()), то у тебя сумма переоценки равномерно размажется по всему приходному лоту (в том числе и по процессорам которые ты уже продал). В итоге у тебя получиться что первый месяц ты торговал процессорами с себестоимостью $85 при продажной цене $120; второй месяц ты торговал процессорами тоже с себестоимостью $85 при продажной цене $85. Получается что маржа и себестоимость криво посчитаны. А из за того что у тебя при переоценке остатков расщепляется на открытую и закрытую части, переоценка попадет только на открытую часть. В итоге у тебя себестоимость старых продаж не измениться, а новых - упадет ровно настолько насколько нужно. Кстати - это единственное место в Аксапте, которое я знаю, которое расщепляет ФИНАНСОВО разнесенные проводки. Во всех остальных местах, расщепление финансово разнесенных проводок запрещено |
|
|
За это сообщение автора поблагодарили: miklenew (7). |
![]() |
#2 |
Участник
|
Цитата:
Т.е. по-моему это еще один случай, когда система расщепляет фин. разнесенные проводки. |
|
![]() |
#3 |
Участник
|
Допустим есть такая ситуация есть 3 прихода по номенклатуре
Было закрытие (если нет ни одного закрытия система не позволит сделать корректировку) Эти приходы ни с одним расходом не сопоставились. И коррекция равна 0. Просто так легче дальше считать. Так вот Пример1 X++: Qty CostAmountPosted 10 100 5 20 20 300 X++: 35 420 35*5-420 = -245 Считаем Adjustment InventSumOpenTransact\setAdjustment() (47) adjustNow = Currency::amount(this.transQty(x) * adjustInTotal/ qtyTotal); (для 1 прихода) 10*(-245)\35= - 70 (для 2 прихода) 5*(-245)\35= - 35 (для 3 прихода) 20*(-245)\35= - 140 Видим что для второго прихода получилось 35, а разнесённая сумма 20 Смотрим InventSumOpenTransact\setAdjustment() (49) if (this.transValue(x) + this.transAdjustNow(x) + adjustNow < 0) Ну раз 35 снять не можем снимем = 20 Теперь эти 15 пропали и мы должны их всунуть или в 1 или 3 приход иначе у нас себестоимость остатка 5 не будет. Смотрим InventSumOpenTransact\setAdjustment() (44) if (this.transQty(x) >= qtyRemain) adjustNow = Currency::amount(amountRemain); Т.е. эти 15 войдут в в последний приход Если в последнем меньше чем коррекция Пример2 X++: Qty CostAmountPosted 10 300 5 20 20 100 -70 -20 -100 А так как распределение не всё пройдёт вторая итерация -70 (ещё -70) = -140 -20 -100 (и на последней +остаток 15) = - 85 И здесь всё ок (когда сопоставлений не было). Но вот когда появляются частично сопоставлененые проводки. Например если бы 2-ой приход был сопоставлен при закрытие 3 ед из 5. То произойдёт разбиение проводки на количество 3 и 2(CostAmountPosted 12 и 8 соответственно). И в результате будет попытка корректировки второй проводки (где Qty = 2 и CostAmountPosted = 8) А в буфере то у нас 20. От туда и ошибка про отрицательную себестоимость. Разделение проводки будет происходить для всех частично сопоставленых проводок которые участвуют в коррекции. Так вот вопрос почему бы в методе InventSumOpenTransact\add массив transValue для тех проводок у которых есть сопоставление заполнять не costAmountPosted, а costAmountPosted - (qtySettled*costAmountPosted)\qty = наши 8 И массив transQty = qty - qtySettled = наши 2 несопоставленные ед?
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему. Последний раз редактировалось miklenew; 12.11.2008 в 23:01. |
|
Теги |
логистика, переоценка |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|