|
|
#5 |
|
Moderator
|
В принципе - ты прав. Это завязано на отрицательный физический склад. Но сама ошибка срабатывает ТОЛЬКО если физический склад отрицательный и галка "Включать физические операции" включена. Если посмотреть на код рассчета себестоимости списания (inventMovement.financialIssueCostValue()), в старых версиях можно найти такой код:
X++: value = inventSum.postedValue; qty = inventSum.postedQty; if (this.inventModelGroup().inclPhysicalValueInCost) { value += inventSum.physicalValue; qty += inventSum.received - inventSum.deducted; } ... return Currency::amount(value / qty * _inventTrans.qty); Qty=100 Value = 1000000 Deducted= 199.9999 Received=100 PhysicalValue - скорее всего равно нолю. ПОскольку первые 100 штук списывали со правильной физической себестоимостью, последующие - по себестоимости из карточки (допустим - незаполненной) Получаем: Qty=100+100-199.9999=0.0001; Value=1000000 Сбестоимость списания 1000000/0.0001=1E9. Такие дела ![]() В более поздних sp эту формулу заменили на: X++: inventSum = _inventOnhand.inventSum();
if (inventSum.PostedValue * inventSum.PostedQty > 0)
{
value = abs(inventSum.postedValue);
qty = abs(inventSum.postedQty);
}
if (inventSum.PhysicalValue * (inventSum.Received - inventSum.Deducted) > 0 && this.inventModelGroup().inclPhysicalValueInCost)
{
value += abs(inventSum.physicalValue);
qty += abs(inventSum.received - inventSum.deducted);
}
if ((value * qty) <= 0 || qty <= 0)
{
value = _inventTrans.costAmountPhysical;
qty = _inventTrans.qty;
}
...
return Currency::amount(value / qty * _inventTrans.qty); |
|
|
|
| За это сообщение автора поблагодарили: Logger (8). | |