При активной разработке правил обмена в конфигурации «1С:Конвертация данных 2.1» (КД) специалисты часто сталкиваются со специфическими ошибками СУБД. Одной из самых неприятных и неочевидных является ошибка СУБД, возникающая при попытке обновить или загрузить структуру метаданных новой конфигурации поверх старой. Программа выдает системное сообщение:
{Обработка.ЗагрузкаСтруктурыМетаданных.МодульОбъекта(499)}: Ошибка при вызове метода контекста (Записать) Объект.Записать(); по причине: Ошибка при попытке вставки записи с неуникальным значением ссылки. таблица Reference7.
В этой статье мы подробно разберем, почему возникает этот сбой, проанализируем внутреннее устройство базы данных КД, рассмотрим стандартный и альтернативные методы обхода проблемы, а также научимся вручную добавлять новые реквизиты в правила без полной перезагрузки метаданных.
Для начала проанализируем, за какую сущность в базе данных «Конвертации данных» отвечает физическая таблица Reference7 (в некоторых базах имя таблицы может незначительно отличаться в зависимости от версии КД и платформы, но суть остается прежней). Данная таблица хранит элементы справочника «Свойства» (или «Объекты» конфигурации).
Данный сбой является известной зарегистрированной ошибкой логики самой КД. Он происходит в тот момент, когда обработка загрузки метаданных (например, MD83Exp.epf) пытается сопоставить существующие в КД элементы структуры с новыми, считанными из XML-файла. Основные технические причины конфликта:
Наиболее быстрый и гарантированный способ обойти ошибку неуникальности — выполнить импорт в правильной последовательности внутри новой, чистой настройки конвертации. Разберем этот процесс по шагам.
Шаг 1. Экспорт текущих правил
Перед любыми действиями обязательно сохраните ваши текущие наработки. Выгрузите существующие правила обмена в XML-файл на локальный диск.
Шаг 2. Создание новой настройки конвертации
В базе «Конвертация данных» перейдите в список конвертаций и создайте новую запись. Не загружайте в нее правила сразу.
Шаг 3. Первоочередная загрузка метаданных
Загрузите новые, актуальные файлы описания структуры метаданных (полученные с помощью обработки MD83Exp.epf) для конфигурации-источника и конфигурации-приемника. На этом этапе КД создаст абсолютно чистые, непротиворечивые структуры объектов и свойств без конфликта GUID.
Шаг 4. Загрузка сохраненных правил
Теперь импортируйте XML-файл правил обмена, сохраненный на Шаге 1. При загрузке выберите опцию «Заменить существующие правила». Программа автоматически сопоставит ваши старые правила с новой, чистой структурой метаданных.
Важное предупреждение: После выполнения такой загрузки обязательно проверьте типы реквизитов в правилах конвертации свойств (ПКС). Иногда принудительное сопоставление со сбросом структуры может сбросить сложные или составные типы данных до базового значения Строка. Проверьте ключевые реквизиты документов вручную!
Если в вашей базе «Конвертации данных» хранится много других настроенных обменов, создавать новую базу КД крайне неудобно. В этом случае мы можем применить схему полной очистки старых метаданных.
Рассмотрим пошагово этот алгоритм:
Что делать, если вам нужно добавить всего один реквизит в документ, а база метаданных весит гигабайты и загружается часами? В такой ситуации мы можем обойтись без использования интерфейса КД и отредактировать правила вручную.
Проанализируем структуру XML-файла правил обмена. Откройте сохраненный файл правил в текстовом редакторе (лучше всего использовать Notepad++ с плагином XML Tools). Найдите узел нужного правила конвертации объектов (ПКО), в который требуется добавить реквизит. Для этого используйте поиск по имени ПКО.
Внутри тега ПКО найдите группу свойств и добавьте туда новый элемент по аналогии со следующим примером:
<Свойство>
<Код>999</Код>
<Наименование>НовыйРеквизит --> НовыйРеквизит</Наименование>
<Порядок>50</Порядок>
<Источник Имя="НовыйРеквизит" Тип="Булево"/>
<Приемник Имя="НовыйРеквизит" Тип="Булево"/>
</Свойство>
После сохранения изменений файл правил можно сразу загружать в рабочую базу для выполнения обмена через обработку УниверсальныйОбменДаннымиXML.epf. Метод отлично подходит для оперативного решения задач «в полях».
По умолчанию в «Конвертации данных» справочники структуры метаданных закрыты от ручного редактирования пользователем для предотвращения нарушения ссылочной целостности. Однако мы можем временно обойти это ограничение.
Выполним следующие действия:
Конвертация_Свойства и Конвертация_Объекты (названия могут отличаться в зависимости от релиза КД).После добавления реквизита верните настройки прав и свойств форм в исходное состояние, чтобы не нарушить целостность метаданных при последующих штатных обновлениях.
Мы проанализировали причины сбоя СУБД при сопоставлении метаданных и рассмотрели четыре практических метода исправления. Использование правильного порядка импорта в чистую конвертацию (сначала метаданные, затем правила) является наиболее безопасным и стандартным решением, которое убережет ваши правила обмена от конфликтов GUID и ошибок уникальности.