Привет.
Как мне кажется обнаружил ошибку в коде при расчете себестоимости в операции перенос.
Как описано в доках по расчету себестоимости, при списании сверх нормы и при установленном параметре отрицательный финансовый склад, себестоимость списания пойдет по стандартной. Но на деле это не выполняется.
При разноске журнала, в конечном итоге
вызвается метод класса
PHP код:
InventUpd_Financial.updateFinancialIssue
Далее по методу идет следующий код, где мы получем себестоимость
PHP код:
changeCostAmount = movement.financialIssueCostValue(inventTrans,inventOnhand) - inventTrans.costValue();
if (changeCostAmount)
{
inventTrans.costAmountPosted += changeCostAmount;
.......
Если посмотреть подробно метод movement.financialIssueCostValue,
то в нем идет довольно странный код, где предположительно есть ошибка
PHP код:
CostAmount financialIssueCostValue(InventTrans _inventTrans,
InventOnhand _inventOnhand)
{
CostAmount value;
InventQty qty;
InventSum inventSum;
;
if (_inventTrans.qty >= 0 || ! _inventOnhand)
throw error(strFmt("@SYS22828",funcName()));
if (this.inventModelGroup().standardCost)
return Currency::amount(this.inventTable().costPcsPrice(_inventTrans.inventDimId) * _inventTrans.qty);
if (_inventTrans.InventRefTransId && inventTrans::useMarkedCostprice(this.dimGroupId()))
{
[qty,value] = inventTrans::calcMarkedCostValue(_inventTrans.InventRefTransId,_inventTrans.ItemId,_inventTrans.inventDimId,this.inventModelGroup().inclPhysicalValueInCost);
if (qty > 0 && value >= 0)
return Currency::amount(value / qty * _inventTrans.qty);
}
inventSum = _inventOnhand.inventSum();
value = inventSum.postedValue;
qty = inventSum.postedQty;
if (this.inventModelGroup().inclPhysicalValueInCost)
{
value += inventSum.physicalValue;
qty += inventSum.received - inventSum.deducted;
}
if ((value * qty) <= 0)
{
value = _inventTrans.costAmountPhysical;
qty = _inventTrans.qty;
}
if ((value * qty) <= 0)
return Currency::amount(this.inventTable().costPcsPrice(_inventTrans.inventDimId) * _inventTrans.qty);
return Currency::amount(value / qty * _inventTrans.qty);
}
В данном методе при совпадении знаков value (InventSum.PostedValue) и qty (InventSum.PostedQty) себестоимость всегда будет расчитана по средней.
Может-ли вообще быть ситуация, когда знаки InventSum.PostedValue и InventSum.PostedQty будут разными и себестоимость будет расчитана верно.
Буду благодарен за любые материалы или подсказки по внутренним механизмам формирования себестоимости.