Показать сообщение отдельно
Старый 14.02.2011, 12:43   #1  
Bega is offline
Bega
Участник
Аватар для Bega
 
382 / 444 (15) +++++++
Регистрация: 18.08.2005
Адрес: Москва
Проблемы при закрытии склада DAX2009 SP1 RU5/RU6
Решил поделиться проблемами и решениями, которые возникли при закрытии склада. Большая часть проблем связана с расширенным расчетом производственной себестоимости, который был добавлен RU5.

ПРОБЛЕМА 1: Неверная себестоимость расходов при расширенном расчете себестоимости.

Основная логика по закрытию склада находится в классе InventCostItemDim. В методе updateItem вызывается updateLevelAdjustment() в котором коррекции, которые «прилетели» на данную номенклатуру с предыдущих шагов, распределяются на приходные проводки этой номенклатуры.
X++:
while select sum(Adjustment) from inventCostListTrans
            index hint ItemIdx
            group by InventTransId,InventTransIdReturn,VoucherPhysical
            where inventCostListTrans.Voucher           == inventClosing.Voucher            &&
                  inventCostListTrans.NumOfIteration    == inventCostList.NumOfIteration    &&
                  inventCostListTrans.ItemId            == inventCostList.ItemId
        {
            // <GEEU>
            if (calculationProdWIP_RU 
               && inventCostListTrans.InventTransId &&  this.calcWIPProdHistoricalCost_RU(inventCostListTrans.InventTransId, 
inventCostListTrans.VoucherPhysical))
            {
                continue;
            }
            // </GEEU>

            this.updateTransIdReceipt(inventCostListTrans.InventTransId,
                                      inventCostListTrans.Adjustment,
                                      inventCostListTrans.InventTransIdReturn,
                                      inventCostListTrans.VoucherPhysical);
        }
Без включенного расчета расширенной себестоимости (calculationProdWIP_RU = НЕТ) всегда выполняется метод updateTransIdReceipt(), который распределяет коррекцию inventCostListTrans.Adjustment на приходные проводки. В этом методе, после того как коррекция была добавлена к приходной проводке, эта проводка добавляется в мап mapInventTrans.insert(receipt.RecId,receipt). Дальше этот мап используется в методе updateReceiptAdjustment(), чтобы «распространить» коррекции, сделанные по приходным проводкам на сопоставленные с ними расходные проводки.

Если включен расширенный расчет себестоимости и приходная проводка имеет тип «Производство», то вызывается метод calcWIPProdHistoricalCost (), в нем вызывается написанная в RU5 логика, рассчитывается фактическая себестоимость расходов по производственному заказу, себестоимость выходов (побочной и основной продукции), делается коррекция приходов.

Так вот, первая проблема связана с тем, что наши локализаторы забыли для основного выхода сделать вставку в вышеупомянутый mapInventTrans и все коррекции, которые были добавлены к приходам, не распространялись на расходы.

РЕШЕНИЕ

Нужно в конце метода ProdCalculatingWIPEngine_RU:: createAdjustSettlement() вызвать inventCostItemDim.updateInventTrans(_inventTrans):
X++:
    //+ DPL InventClosingFix_OK 11.02.2011 OK
    if (inventCostItemDim != null)
    {
        inventCostItemDim.updateInventTrans(_inventTrans);
    }
    else
    //- DPL InventClosingFix_OK 11.02.2011 OK
    _inventTrans.update();
}
Метод updateInventTrans() защищенный (protected), измените его на public:
X++:
//+ DPL InventClosingFix_OK 11.02.2011 OK
//protected void updateInventTrans(InventTrans _inventTrans)
public void updateInventTrans(InventTrans _inventTrans)
//- DPL InventClosingFix_OK 11.02.2011 OK
...
За это сообщение автора поблагодарили: fed (30), Logger (15), madm (1), zhan (2), imir (1).