Цитата:
Сообщение от
glibs
Есть такое в 3.0. Если запустить закрытие, то такие ссылки чистятся.
Для одного клиента мы с mazzy в процедуру пересчета вставляли такой же кусок кода (чистящий ссылки), как и в закрытии.
Чистятся то они чистятся, для закрытия, как я и написал. Но почему-то не для контрактов. Приведу код, на который дал ссылку в первом посте:
Это из метода, который вызывается при пересчете себестоимости и закрытии склада.
X++:
// clear unused references
if (inventClosing.AdjustmentType == inventAdjustmentType::Closing && (mapQtyIssue || mapQtyReceipt))
{
while select forupdate inventTrans
index hint openItemIdx
where inventTrans.ValueOpen == inventTransOpen::Yes &&
inventTrans.ItemId == _itemId &&
inventTrans.InventRefTransId != ''
{
if (! setPhysicalMarked.in(inventTrans.inventTransId) && this.financialOpenQty(inventTrans))
{
if ((inventTrans.Qty > 0 && (! mapQtyIssue || ! mapQtyIssue.exists(inventTrans.InventTransId) || abs(mapQtyIssue.lookup(inventTrans.InventTransId)) < inventAdj::settleQtyDiff())) ||
(inventTrans.Qty < 0 && (! mapQtyReceipt || ! mapQtyReceipt.exists(inventTrans.InventTransId) || abs(mapQtyReceipt.lookup(inventTrans.InventTransId)) < inventAdj::settleQtyDiff())))
{
if (inventTrans.QtySettled)
inventTrans.updateSplit(this.financialOpenQty(inventTrans));
if (!InventCostItemDim::isBlanketOrderReference(inventTrans))
{
inventTrans.InventRefTransId = '';
inventTrans.doUpdate();
if (! inventTrans.isUpdatedFinancial())
{
movement = inventTrans.inventMovement(true);
if (movement && movement.inventRefTransId() != '')
{
movement.setInventRefFields(inventRefType::None,'','');
movement.updateDoBuffer();
}
}
}
}
}
}
}
Обратите внимание на строку:
X++:
if (!InventCostItemDim::isBlanketOrderReference(inventTrans))
Вот из-за нее пропускаются строки, ссылающиеся на строки заказов типа Контракт