Коллеги, обнаружил что в методе класса \Classes\InventCostItemDim\updateMarking используется отбор проводок определённого типа:
X++:
// load
while select forupdate inventTrans
index hint OpenItemIdx
where inventTrans.ValueOpen == InventTransOpen::Yes &&
inventTrans.ItemId == _itemId &&
inventTrans.InventRefTransId != ''
join inventDim
where inventDim.InventDimId == inventTrans.InventDimId
{
...
В классе InventCostItemDimSecCur_RU этот метод не перекрыт.
Таким образом, при закрытии склада во вторичной валюте после закрытия в основной, мы не можем отобрать нужные проводки (потому что фильтрация по inventTrans.ValueOpen == InventTransOpen::Yes) и вообще не получаем сопоставлений, аналогичных тем, что были в основной валюте.
То же самое видим в методе класса \Classes\InventCostItemDim\updateServiceItemTrans:
X++:
while select forupdate inventTrans
index hint OpenItemIdx
where inventTrans.ValueOpen == InventTransOpen::Yes &&
inventTrans.ItemId == _itemId &&
(inventTrans.StatusIssue == StatusIssue::Sold ||
inventTrans.StatusReceipt == StatusReceipt::Purchased) &&
inventTrans.DateStatus <= inventClosing.TransDate &&
inventTrans.InventRefTransId == '' //marked service item transactions will be settled according to marking principle
{
...
Но перекрытого метода в потомке-классе InventCostItemDimSecCur_RU нет. Соответственно, результат тот же - мы не получаем сопоставлений во вторичной валюте, аналогичных сопоставлениям в основной валюте.
Заметили только что, потому что наша бизнес-логика активно использует эти сопоставления (коррекции себестоимости) в основной и во вторичной валюте.
Думаю исправить сие вручную. Но, может, кому известны какие-нибудь подводные камни?