Это старая версия документа.


В процессе конвертации базы до версии 4.2 выдается сообщение "Нарушение уникальности значений ключа"

Вопрос:

При конвертации базы до версии 4.2 выдаются сообщения следующего вида:

  1. "Нарушение уникальности значений ключа 'Владелец,РольКолонки' класса 'База.КолонкаОбъекта'. Удалите записи, нарушающие уникальность ключа."
  2. "Нарушение уникальности значений ключа 'Владелец,Наименование' класса 'База.ПараметрИмпорта'. Удалите записи, нарушающие уникальность ключа."

После этого конвертация откатывается. В чем проблема, как ее решить?

Ответ:

Вероятно, в исходной базе (в той, что была до конвертирования) имеется дублирование значений тех параметров, для которых ранее не существовало требований уникальности, а теперь эти требования появились.

Внимание!

Описываемый ниже способ исправления проблемы включает в себя удаление записей, что может нарушить логику работы пакетов импорта: ранее для таких ситуаций происходил импорт в одно поле из разных параметров файла (что в целом не совсем верно, но так пакеты ранее настроить было можно), теперь же, начиная с версии 4.2, такую загрузку, если в ней действительно есть необходимость, надо делать через отдельные этапы импорта. Используя приведённую ниже инструкцию, Вы не переделываете пакет импорта под новые требования, а просто исправляете препятствие для конвертации, удаляя дублирующие записи из списков соответствий параметров пакетов импорта. В связи с этим дальнейшем может потребоваться доработка соответствующего пакетов импорта.


Для решения проблемы сделайте следующее:

  1. Восстановите базу данных из сделанной перед конвертацией резервной копии (см. Загрузка базы данных из файла).
  2. Откройте эту базу данных в Business Studio 4.0/4.1 (в зависимости от того, какой версии был бэкап).
  3. Скачайте архив по ссылке под текстом данной статьи, распакуйте его содержимое в отдельную папку. В папке будет 5 файлов, название каждого из них будет содержать версию базы данных.
  4. Импортируйте в Вашу базу данных информацию из файла, номер версии в названии которого соответствует номеру версии базы, использующейся в Вашей версии Business Studio (соответствия номеров версий Business Studio можно посмотреть в Истории версий).
  5. Далее откройте справочник "Хранимые фильтры" (в Главном меню программы команда "Отчёты - Хранимые фильтры") и:
    1. Выполните фильтр "База.КолонкаОбъекта - дубли" (фильтр находится по пути Хранимые фильтры\Пользовательские фильтры\Поиск дублей в справочниках импорта). В окне с результатами фильтра записи будут отсортированы по убыванию значения в колонке "Количество(Владелец)". Для каждой из строк со значением > 1 необходимо:
      1. Вызвать от ячейки колонки "Владелец" правой кнопкой мыши контекстное меню и выбрать там пункт "Открыть свойства параметра".
      2. Сделать скриншот открывшегося окна, сохранить его (он может понадобиться потом для изучения требуемой логики работы этого пакета импорта, в соответствии с которой надо будет внести правки в пакет в версии 4.2).
      3. Удалить строки с одинаковыми значениями параметра "Параметр класса" (оставить только одну строку с таким значением).
    2. Выполните фильтр "База.ПараметрИмпорта - дубли" (фильтр находится по пути Хранимые фильтры\Пользовательские фильтры\Поиск дублей в справочниках импорта). В окне с результатами фильтра записи будут отсортированы по убыванию значения в колонке "Количество(Владелец)". Для каждой из строк со значением > 1 необходимо:
      1. Вызвать от ячейки колонки "Владелец" правой кнопкой мыши контекстное меню и выбрать там пункт "Копировать текст ячейки".
      2. Открыть справочник "Объект импорта".
      3. Вызвать от заголовка колонки "Название" окно быстрого фильтра, вставить туда строку, скопированную в предыдущем пункте в буфер обмена (Ctrl+V), провести поиск.
      4. От оставшейся единственной строки вызвать правой кнопкой мыши контекстное меню и выбрать там команду "Дополнительно - Поиск ссылок на объект". На этом этапе возможно 2 результата, для каждого из которых дальнейшие действия будут свои:
        1. Если в окне поиска ссылок пусто, закройте его и удалите строку справочника "Объект импорта", от которой вызывали поиск ссылок на объект.
        2. Если в окне поиска ссылок есть строка:
          1. Откройте её свойства по кнопке на верхней панели окна поиска ссылок.
          2. В открывшемся окне с помощью команды меню "Действия - Настройка колонок" выведите на показ колонку "Владелец" (выделите в открывшемся окне галочкой и нажмите кнопку "Применить").
          3. Вызовите от заголовка выведенной на показ колонки "Владелец" правой кнопкой мыши контекстное меню и выберите в нём пункт "Открыть свойства параметра".
          4. Далее откроется окно настройки пакета импорта, где надо будет открыть вкладку "Параметры", сделать скриншот всего окна настройки пакета импорта при открытой этой вкладке (он может понадобиться потом для изучения требуемой логики работы этого пакета импорта, в соответствии с которой надо будет внести правки в пакет в версии 4.2), а затем удалить с ней будет удалить строки с одинаковыми значениями в колонке "Параметр класса" (оставить только одну строку с таким значением).
  6. Сделайте резервную копию базы данных (см. Сохранение базы данных в файл).
  7. Попробуйте провести конвертацию этой базы данных.

Скачать файл "search_duplicate_key_in_import_repository.zip" (16 Кб)

Driven by DokuWiki