К чему в результате дошёл
1) \Classes\InventSumOpenTransact\add
Закидываем в буфер costAmountPosted
2) (S) \Classes\InventSumOpenTransact\setTransAdjustNow - line 4
Инициализируем суммы корректировки нулями
3)(S) \Classes\InventSumOpenTransact\setAdjustment - line 49
Может получиться что расчитанная сумма корректировки нам не подходит,
тогда корректировка = this.transValue(x)+this.transAdjustNow(x)
Фактически это this.transValue(x) т.к. transAdjustNow(x) = 0
4) (S) \Classes\InventTransAdjust\updateNow - line 35
inventTrans.updateSplit(inventTrans.financialOpenQty());
Делим на две проводки (старая+новая)
И все суммы и количества пропорционально распределяем, кроме суммы по корректировке.
Корректировку оставляем на изначальной проводке. Т.к. в InventSettlement связь не только по лоту но и по recId.
После этой процедуры место старого inventTrans в памяти уже другой.
Вот это я исправил, так как это не правильно.
Поставил в верху метода
А место
X++:
if (inventTrans.financialOpenQty() != inventTrans.qty)
inventTrans.updateSplit(inventTrans.financialOpenQty());
изменённый код
X++:
if (inventTrans.financialOpenQty() != inventTrans.qty)
{
origRecId = inventTrans.RecId;
inventTrans.updateSplit(inventTrans.financialOpenQty());
if(inventTrans.RecId != origRecId)
inventTrans = InventTrans::findRecId(origRecId, true);
}
Вопрос: Интересно, а зачем здесь вообще updatesplit()?