"Бага" эта известная. Хотя некоторые утверждают, что это не "бага", а "фича".
Эта "бага-фича", проявляет себя еще и когда ЗАКУПКА созданна на основании контракта: такая закупка не будет учавствовать в сопоставлении с расходами при пересчете.
Данная проблема связана с тем, что у таких закупок и заказов (которые созданны на основании контракта), складские проводки имеют заполненное поле "Ссылка на лот". Как известно, данное поле, кроме всего прочего, указывает из какого лота прихода, взять себестоимость для лота расхода.
В нашем же случае эти ссылки на лоты содержат номера лотов, которых нет в таблице складских проводок, а есть только в строках заказов или строках закупок. Это те самые строки контрактов на основании которых мы создавали заказы или закупки. И как известно, строки контрактов не создают складских проводок. А следовательно и не имееют складской себестоимости.
В классе InventCostItemDim, есть следующие методы:
1. protected void load(InventDim _inventDimCriteria)
2. protected void updateSettleRefItem(ItemId _itemId)
в этих методах вы увидите запросы в которых встречается такое условие:
<div class='XPPtop'>X++</div><div class='XPP'>
inventTrans.InventRefTransId [color=:blue]==[/color] [color=:red]''[/color]</div>
или
<div class='XPPtop'>X++</div><div class='XPP'>
inventTrans.InventRefTransId != [color=:red]''[/color]</div>
но, помимо того что мы выбираем проводки с заполненными или незаполненными InventRefTransId, нам еще следует проверять, имеется ли проводка с таким лотом в InventTrans. Зачем такая проверка, я думаю совершенно очевидно.
При небольшой корректировке этих запросом мы добиваемся правильного пересчета.
Все. Проверенно временем.
|