![]() |
#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). |