Показать сообщение отдельно
Старый 12.11.2008, 10:54   #22  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
К чему в результате дошёл

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++:
    RefRecId         origRecId;
А место
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()?
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему.