ПРОБЛЕМА 6. При расчете по средневзвешенной проводки не всегда сопоставляются, стоимость расхода из-за этого неверная.
У нас в течение периода ГП часто движется без стоимости, потому что калькуляция производственных заказов происходит позже, чем выпуск.
В феврале при создании виртуального переноса для средневзвешенной цены , поскольку на момент создания этого переноса у сопоставляемых проводок была нулевая стоимость, создались складские проводки «Средневзвешенное закрытие запасов» (InventTransType = SummedUp) с нулевой финансовой суммой (CostAmountPosted = 0). Далее на следующих шагах закрытия февраля, средневзвешенная была скорректирована (сумма CostAmountAdjustment), значение CostAmountPosted так и осталось нулевым, это все вполне корректно. На конец февраля мы имеем остаток по номенклатуре и единственную складскую открытую проводку «Куплено» с типом «Средневзвешенное закрытие запасов».
В марте в методе InventCostItemDim::updateModelAverage происходит сопоставление приходов и расходов в соответствии со средневзвешенной моделью себестоимости.
В этом куске кода происходит поиск подходящих приходов для сопоставления:
X++:
while (tmpreceiptScan.RecId&&tmpreceiptScan.TransDate<=endDate)
{
receiptScan = this.tmpReceipt2Trans(tmpreceiptScan);
// <GEEU>
if (receiptScan.TransType != InventTransType::SummedUp || this.currencyTransfer_RU(receiptScan))
{
// </GEEU>
вызывается метод this.currencyTransfer_RU(), в котором проверяется только CostAmountPosted, а она у нас равна нулю.
X++:
protected boolean currencyTransfer_RU(InventTrans _inventTrans)
{
return _inventTrans.CostAmountPosted != 0;
}
таким образом, наша открытая проводка «Средневзвешенное закрытие запасов» будет исключена из сопоставления и мартовская расходная проводка не будет сопоставлена и ее стоимость будет неверной.
РЕШЕНИЕ
Я закрыл слад вот с такой модификацией и проблема была решена:
X++:
//+ DPL InventClosingFix_OK 11.04.2011 OK
//if (receiptScan.TransType != InventTransType::SummedUp || this.currencyTransfer_RU(receiptScan))
if ( receiptScan.TransType != InventTransType::SummedUp || receiptScan.costValue() != 0)
//- DPL InventClosingFix_OK 11.04.2011 OK
Можно бы было доделать currencyTransfer_RU(), чтобы он анализировал и CostAmountAdjustment но он используется ниже в других местах и такая модификация потребует еще тестирования, проверю отдельно и напишу.