ПРОБЛЕМА 2. Неверная себестоимость расходов по побочной продукции.
Эта проблема очень похожа на предыдущую, но причина немного в другом. Рассмотрим на примере. Вся логика выполняется на 0-й итерации.
Есть продукция «какао-масло» и побочная «жмых», в расход идет «какао-тертое». На предыдущих шагах закрытия склада были сделаны коррекции «какао-тертого», то есть изменилась себестоимость расхода. Эта коррекция попала в таблицу inventCostListTrans, чтобы система переоценила стоимость связанных выходов «какао-масла» и «какао-тертого».
Далее система доходит до расчета «какао-масла», запускает расчет RU5, рассчитывается стоимость выхода основной и побочной продукции. Для побочной продукции локализаторы , в отличие от проблемы №1 сделали правильно – вызвали из своей логики метод updateTransIdReceipt(), который отразил коррекцию на приходе побочной продукции и добавил проводку в mapInventTrans, чтобы «распространить» коррекцию на сопоставленные расходные проводки.
Все бы было хорошо, если бы это не было 0-й итерации и самым первым расчетом для «какао-масла». На нулевой итерации в методе InventCostItemDim:: updateItem() запускается сопоставление по модели:
X++:
se = setInventDim.getEnumerator();
while (se.moveNext())
{
inventDim = se.current();
this.initMapInventTrans();
this.load(inventDim);
this.updateReceiptAdjustment();
this.updateModel(inventDim);
}
При вызове this.initMapInventTrans() все сохраненные в mapInventTrans данные ОЧИЩАЮТСЯ, так что стоимость расходов по побочной продукции никогда не будет приведена в соответствие с приходами.
РЕШЕНИЕ
В методе InventCostItemDim:: updateItem() перед циклом сопоставления нужно вызвать updateReceiptAdjustment():
X++:
else
{
// if this is not a closing, or if this is the first time, then match ..
// first match issues and receipts that are marked
this.updateSettleRefItem(inventCostList.ItemId);
//+ DPL InventClosingFix_OK 12.02.2011 OK
//если здесь не вызвать этот метод-не идут дальше коррекции по побочной продукции
if (calculationProdWIP_RU)
this.updateReceiptAdjustment();
//- DPL InventClosingFix_OK 12.02.2011 OK
// then match remaining issues and receipts according to inventory model
if (! isServiceItem)
{
setInventDim = new Set(Types::Record);
// find all financial dimension combinations
queryRun = inventCostHelp.initQueryRunTrans(this.inventTable(inventCostList.ItemId),
this.inventModelGroup(inventCostList.ItemId));
while (queryRun.next())
{
inventDim = queryRun.get(tablenum(InventDim));
setInventDim.add(inventDim);
}
// match issues and receipts per financial dimension combination
se = setInventDim.getEnumerator();
while (se.moveNext())
{
inventDim = se.current();
this.initMapInventTrans();
this.load(inventDim);
this.updateReceiptAdjustment();
this.updateModel(inventDim);
}
setInventDim = null;
}
}