Показать сообщение отдельно
Старый 15.07.2004, 16:19   #1  
monk is offline
monk
Участник
 
67 / 12 (1) ++
Регистрация: 14.10.2002
Себестоимость списания
Привет.
Как мне кажется обнаружил ошибку в коде при расчете себестоимости в операции перенос.

Как описано в доках по расчету себестоимости, при списании сверх нормы и при установленном параметре отрицательный финансовый склад, себестоимость списания пойдет по стандартной. Но на деле это не выполняется.


При разноске журнала, в конечном итоге
вызвается метод класса

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 >= || ! _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 && 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 будут разными и себестоимость будет расчитана верно.

Буду благодарен за любые материалы или подсказки по внутренним механизмам формирования себестоимости.