Мы когда-то всерьез разбирались с процедурами импорта-экспорта. Выяснилось следующее:
При экспорте в файл экспорта записывается максимальный и минимальные recid в текущей компании. (Далее maxOldRecid,minOldRecId).
При импорте - в пространстве recid резервируется MaxOldRecId-minOldRecId штук идентификаторов записей (начиная с newMinRecId). Далее, для любого поля типа recId, или любого расширенного типа, унаследованного от типа recid, в поле записывается значение newMinRecId+oldRecId-minOldRecid. Таким образом ссылки - восстанавливаются. Нужно только чтобы все таблицы, связанные по recid импортировались/экспортировались одновременно. Для ссылок по tableid используется аналогичное правило. Axapta при импорте ведет таблицу соответствия tableid в старом приложении и tableid в новом приложении, и выполняет трансляцию для всех полей, имеющих тип tableid или любой унаследованный от него.
К сожалению - трансляция recid точно не работает при одновременном экспорте таблиц из реальных компаний и виртуальных. Насколько я понимаю - в экспортном файле записывается minOldRecId и maxOldRecId только для одной компании. (Возможно - текущей - тогда с виртуальными компаниями вообще дело плохо) Соответственно - корректно преобразовать одни старые recid в новые система вообще не может. Связано это с тем, что счетчики recid хранятся в разрезе компаний (в таблице systemsequences).
Как итог:
При работе с виртуальными компаниями - импорт-экспорт теряет ссылки по recid
Импортировать связаные по recid таблицы нужно одновременно.
|