Как исправить ошибку неуникальности ссылки (таблица Reference7) при загрузке структуры метаданных в «1С:Конвертация данных 2.1»?

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

При активной разработке правил обмена в конфигурации «1С:Конвертация данных 2.1» (КД) специалисты часто сталкиваются со специфическими ошибками СУБД. Одной из самых неприятных и неочевидных является ошибка СУБД, возникающая при попытке обновить или загрузить структуру метаданных новой конфигурации поверх старой. Программа выдает системное сообщение:

{Обработка.ЗагрузкаСтруктурыМетаданных.МодульОбъекта(499)}: Ошибка при вызове метода контекста (Записать) Объект.Записать(); по причине: Ошибка при попытке вставки записи с неуникальным значением ссылки. таблица Reference7.

В этой статье мы подробно разберем, почему возникает этот сбой, проанализируем внутреннее устройство базы данных КД, рассмотрим стандартный и альтернативные методы обхода проблемы, а также научимся вручную добавлять новые реквизиты в правила без полной перезагрузки метаданных.

Выясняем причину: почему возникает ошибка таблицы Reference7?

Для начала проанализируем, за какую сущность в базе данных «Конвертации данных» отвечает физическая таблица Reference7 (в некоторых базах имя таблицы может незначительно отличаться в зависимости от версии КД и платформы, но суть остается прежней). Данная таблица хранит элементы справочника «Свойства» (или «Объекты» конфигурации).

Данный сбой является известной зарегистрированной ошибкой логики самой КД. Он происходит в тот момент, когда обработка загрузки метаданных (например, MD83Exp.epf) пытается сопоставить существующие в КД элементы структуры с новыми, считанными из XML-файла. Основные технические причины конфликта:

  1. Дублирование уникальных идентификаторов (GUID): Файл структуры метаданных содержит внутренние идентификаторы объектов. При обновлении конфигурации-приемника или источника обработка сопоставляет свойства. Если в базе КД уже присутствует свойство с аналогичным GUID, но привязанное к другому объекту метаданных, СУБД блокирует транзакцию из-за нарушения уникальности уникального индекса.
  2. Несоответствие версий обработок выгрузки: Использование устаревших версий обработок выгрузки структуры метаданных. Новые платформы 1С часто обновляют объектную модель (например, при внедрении маркировки или изменении учета НДС), и старые версии обработок некорректно генерируют XML-схему.
  3. Перекрестные ссылки метаданных: Попытка загрузить описание «обычной» конфигурации (например, БП 2.0) поверх конфигурации с КОРП-функционалом (БП 2.0 КОРП), где часть объектов имеет одинаковые имена, но принципиально разные внутренние структуры и типы данных.

Способ 1. Создание новой конвертации и импорт по правильной схеме (Решение проблемы)

Наиболее быстрый и гарантированный способ обойти ошибку неуникальности — выполнить импорт в правильной последовательности внутри новой, чистой настройки конвертации. Разберем этот процесс по шагам.

Шаг 1. Экспорт текущих правил
Перед любыми действиями обязательно сохраните ваши текущие наработки. Выгрузите существующие правила обмена в XML-файл на локальный диск.

Шаг 2. Создание новой настройки конвертации
В базе «Конвертация данных» перейдите в список конвертаций и создайте новую запись. Не загружайте в нее правила сразу.

Шаг 3. Первоочередная загрузка метаданных
Загрузите новые, актуальные файлы описания структуры метаданных (полученные с помощью обработки MD83Exp.epf) для конфигурации-источника и конфигурации-приемника. На этом этапе КД создаст абсолютно чистые, непротиворечивые структуры объектов и свойств без конфликта GUID.

Шаг 4. Загрузка сохраненных правил
Теперь импортируйте XML-файл правил обмена, сохраненный на Шаге 1. При загрузке выберите опцию «Заменить существующие правила». Программа автоматически сопоставит ваши старые правила с новой, чистой структурой метаданных.

Важное предупреждение: После выполнения такой загрузки обязательно проверьте типы реквизитов в правилах конвертации свойств (ПКС). Иногда принудительное сопоставление со сбросом структуры может сбросить сложные или составные типы данных до базового значения Строка. Проверьте ключевые реквизиты документов вручную!


Способ 2. Очистка старой структуры без создания новой базы КД

Если в вашей базе «Конвертации данных» хранится много других настроенных обменов, создавать новую базу КД крайне неудобно. В этом случае мы можем применить схему полной очистки старых метаданных.

Рассмотрим пошагово этот алгоритм:

  1. Выполните выгрузку работающих правил обмена в файл XML.
  2. Перейдите в справочник «Конфигурации» в КД и полностью удалите старое описание конфигурации, которая вызывает ошибку (в нашем случае — БП 2.0 КОРП). При удалении конфигурации КД очистит все связанные с ней подчиненные справочники свойств и объектов, освобождая занятые GUID.
  3. Загрузите обновленную структуру метаданных конфигурации заново.
  4. Выполните загрузку правил обмена из файла XML. КД автоматически сопоставит объекты правил с новой «чистой» структурой.

Способ 3. Ручное добавление реквизита в XML-файл правил (в обход КД)

Что делать, если вам нужно добавить всего один реквизит в документ, а база метаданных весит гигабайты и загружается часами? В такой ситуации мы можем обойтись без использования интерфейса КД и отредактировать правила вручную.

Проанализируем структуру XML-файла правил обмена. Откройте сохраненный файл правил в текстовом редакторе (лучше всего использовать Notepad++ с плагином XML Tools). Найдите узел нужного правила конвертации объектов (ПКО), в который требуется добавить реквизит. Для этого используйте поиск по имени ПКО.

Внутри тега ПКО найдите группу свойств и добавьте туда новый элемент по аналогии со следующим примером:


<Свойство>
    <Код>999</Код>
    <Наименование>НовыйРеквизит --> НовыйРеквизит</Наименование>
    <Порядок>50</Порядок>
    <Источник Имя="НовыйРеквизит" Тип="Булево"/>
    <Приемник Имя="НовыйРеквизит" Тип="Булево"/>
</Свойство>

После сохранения изменений файл правил можно сразу загружать в рабочую базу для выполнения обмена через обработку УниверсальныйОбменДаннымиXML.epf. Метод отлично подходит для оперативного решения задач «в полях».


Способ 4. Временное снятие защиты от редактирования в КД

По умолчанию в «Конвертации данных» справочники структуры метаданных закрыты от ручного редактирования пользователем для предотвращения нарушения ссылочной целостности. Однако мы можем временно обойти это ограничение.

Выполним следующие действия:

  1. Откройте базу КД в режиме Конфигуратор.
  2. Найдите справочники Конвертация_Свойства и Конвертация_Объекты (названия могут отличаться в зависимости от релиза КД).
  3. В свойствах форм этих справочников найдите параметр «Только просмотр» и снимите этот флаг (или временно предоставьте полные права своей учетной записи на интерактивное добавление элементов).
  4. Запустите КД в режиме «1С:Предприятие». Теперь вы можете зайти в карточку нужного объекта метаданных и вручную добавить строку с новым реквизитом, указав его имя, синоним и тип данных.

После добавления реквизита верните настройки прав и свойств форм в исходное состояние, чтобы не нарушить целостность метаданных при последующих штатных обновлениях.

Резюме

Мы проанализировали причины сбоя СУБД при сопоставлении метаданных и рассмотрели четыре практических метода исправления. Использование правильного порядка импорта в чистую конвертацию (сначала метаданные, затем правила) является наиболее безопасным и стандартным решением, которое убережет ваши правила обмена от конфликтов GUID и ошибок уникальности.

← На главную