Я делал так.
Перекрываем метод merge на таблице InventTable и до super пишем:
X++:
//удалить из inventTableModule для старой НЕ
delete_from inventTableModule
where inventTableModule.ItemId == this.ItemId;
//удалить из inventItemLocation для старой НЕ
delete_from inventItemLocation
where inventItemLocation.ItemId == this.ItemId;
Также для других таблиц которые связаны с InventTable и имеют первичный ключ пишем примерно следующее:
X++:
//удалить дубли в inventBatch
while select forupdate inventBatch
where inventBatch.itemId == this.ItemId
{
if (InventBatch::exist(inventTable.ItemId, inventBatch.inventBatchId))
inventBatch.delete();
}