Показать сообщение отдельно
Старый 30.08.2007, 12:26   #6  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от 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))
Вот из-за нее пропускаются строки, ссылающиеся на строки заказов типа Контракт