Заработало
Удалось сделать вот так:
X++:
purchTable.InventLocationId = 'XXXXXX';
//purchTable.modifiedField(fieldNum(PurchTable, InventLocationId));
purchTable.InventSiteId = InventLocation::find(purchTable.InventLocationId).InventSiteId;
//purchTable.modifiedField(fieldNum(PurchTable, InventSiteId));
purchTable.update();
while select forupdate purchLine
where
purchLine.PurchId == purchTable.PurchId
exists join existInventDim
where
existInventDim.inventDimId == purchLine.InventDimId
&& existInventDim.InventLocationId != purchTable.InventLocationId
{
inventDim = purchLine.inventDim();
inventDim.InventLocationId = purchTable.InventLocationId;
inventDim.InventSiteId = inventDim.inventLocation().InventSiteId;
inventDim = InventDim::findOrCreate(inventDim);
purchLine.InventDimId = inventDim.inventDimId;
//purchLine.setInventDimId(inventDim.inventDimId);
purchLine.update();
}
После этого утверждение и разноска накладной работают. Вчера почему-то не работало

Теперь все отрабатывает за 10 минут, включая разноску накладной.