Копирование соответствий между объектами в 1С:Предприятие — одна из самых востребованных операций при миграции данных, интеграции систем или восстановлении связей после сбоев. Без правильно настроенных соответствий невозможно корректно перенести справочники, документы или регистры из одной базы в другую, не потеряв при этом логические связи между данными. Эта задача актуальна для администраторов, разработчиков и даже опытных пользователей, которые сталкиваются с необходимостью синхронизации УТ 11, ERP 2.5, БП 3.0 или самописных конфигураций.

В этой статье мы разберём 5 рабочих методов копирования соответствий — от ручных операций в типовом функционале до автоматизированных скриптов на 1С:EnterpriseScript. Особое внимание уделим типичным ошибкам, которые приводят к потере ссылочной целостности (например, дублированию записей в регистре СоответствиеОбъектов), и покажем, как их избежать. Если вы когда-либо получали ошибку типа "Не найдено соответствие для объекта {GUID}" — здесь вы найдёте решение.

Для новичков важно понять: соответствие в 1С — это не просто связь "старое-новое", а запись в специальном регистре сведений, которая хранит уникальные идентификаторы (GUID) объектов из разных баз. При копировании таких записей нужно учитывать не только сами объекты, но и их версионность, права доступа и даже порядок операций. Например, перенос справочника Номенклатура без предварительного копирования соответствий для групп приведёт к "оборванным" ссылкам в новой базе.

📊 С какой конфигурацией 1С вы чаще работаете?
УТ 11
ERP 2.5
БП 3.0
ЗУП 3.1
Самописная/Другая

1. Что такое соответствие объектов в 1С и зачем его копировать

Регистр сведений СоответствиеОбъектов (или его аналоги в разных конфигурациях) — это системный механизм, который хранит пары идентификаторов объектов из разных информационных баз. Например, при выгрузке данных из 1С:Управление торговлей 11 в 1С:Бухгалтерию 8 для каждого элемента справочника Контрагенты создаётся запись типа:


ИсходныйОбъект (GUID из УТ) → СоответствующийОбъект (GUID из БП)

Без этих записей невозможно:

  • 🔄 Обновить данные в целевой базе (система не поймёт, какую запись менять).
  • 📦 Перенести документы со ссылками на справочники (например, реализацию с номенклатурой).
  • 🔗 Синхронизировать изменения между базами (при двустороннем обмене).

Копирование соответствий требуется в трёх ключевых сценариях:

  1. Миграция данных — перенос исторических данных из старой базы в новую (например, при переходе с УТ 10.3 на УТ 11).
  2. Восстановление после сбоя — если регистр соответствий был очищен или повреждён.
  3. Тестирование обменов — когда нужно продублировать связи между тестовой и рабочей базой.
⚠️ Внимание: В конфигурациях на базе БСП 3.0 (например, ERP 2.5) регистр соответствий может называться РегистрСведений.СоответствиеОбъектовДляОбмена. Уточните его имя в своей версии через Конфигуратор → Объекты метаданных.

2. Метод 1: Ручное копирование через типовой обмен

Самый безопасный способ — использовать встроенные механизмы обмена данными. Он подходит для конфигураций с планом обмена (например, УТ 11 → БП 3.0). Алгоритм действий:

1. Откройте исходную базу (откуда нужно скопировать соответствия) и перейдите в Администрирование → Обмен данными → Настройка обмена.

2. Выберите нужный план обмена (например, ОбменСБухгалтерией) и нажмите Выгрузить данные. В настройках выгрузки отметьте галочку "Выгружать соответствия объектов".

3. В целевой базе запустите загрузку данных из файла, полученного на шаге 2. Система автоматически перенесёт соответствия вместе с объектами.

Преимущества метода:

  • 🛡️ Минимальный риск ошибок — типовой обмен учитывает все зависимости.
  • 🔄 Поддержка версионности — корректно обрабатываются изменения объектов.

Недостатки:

  • ⚠️ Работает только между совместимыми конфигурациями (например, УТ 11 → БП 3.0, но не УТ 11 → самописная база).
  • ⏳ Медленнее, чем прямые SQL-запросы (актуально для больших баз с 100K+ записей).
💡

Если при выгрузке соответствий появляется ошибка "Объект не найден", проверьте права пользователя в целевой базе. Для обмена требуется роль с правом записи в регистр СоответствиеОбъектов.

3. Метод 2: Копирование через обработку "ВыгрузкаЗагрузкаДанныхXML"

Универсальный инструмент для переноса данных между любыми конфигурациями — обработка ВыгрузкаЗагрузкаДанныхXML.epf (входит в стандартную поставку 1С). Она позволяет выборочно скопировать соответствия без привязки к планам обмена.

Пошаговая инструкция:

  1. Откройте обработку в исходной базе (Файл → Открыть → выберите файл обработки).
  2. На вкладке Выгрузка отметьте галочкой Регистры сведений и выберите СоответствиеОбъектов (или его аналог).
  3. Нажмите Выгрузить данные и сохраните файл (например, correspondences.xml).
  4. В целевой базе откройте ту же обработку, перейдите на вкладку Загрузка и выберите сохранённый файл.
  5. Перед загрузкой нажмите Настройки и убедитесь, что включён режим "Загружать соответствия объектов".

Особенности метода:

ПараметрЗначение
СкоростьСредняя (~500 записей/минуту)
Требуемые праваПолные права в обеих базах
Поддержка версий1С 8.2 и выше
ОграниченияНе kopирует историю изменений соответствий

Если при загрузке появляется ошибка "Дублирование ключа", значит в целевой базе уже есть запись с таким же GUID. В этом случае:


// Запрос для очистки дублей (выполняется в Конфигураторе целевой базы)

ВыполнитьЗапрос("

| УДАЛИТЬ ИЗ РегистрСведений.СоответствиеОбъектов

| ГДЕ ИдентификаторОбъектаИст = &ИдОбъекта

", Новый Структура("ИдОбъекта", Новый УникальныйИдентификатор("...")));

4. Метод 3: Прямой SQL-запрос к базе данных

Для опытных пользователей и администраторов самый быстрый способ — работа напрямую с SQL-базой. Этот метод подходит для 1С на SQL-сервере (PostgreSQL, MS SQL, IBM DB2) и требует знания структуры таблиц.

Алгоритм действий:

  1. Подключитесь к базе через SQL Management Studio (или аналогичный инструмент).
  2. Найдите таблицу с соответствиями. В большинстве конфигураций она называется:
    _InfoRg{НомерРегистра}

    Узнать точный номер регистра можно через запрос:

    SELECT * FROM _InfoRG WHERE Name = 'СоответствиеОбъектов'
  3. Скопируйте данные из исходной базы в целевую:
    
    

    INSERT INTO TargetDB._InfoRg12345

    SELECT * FROM SourceDB._InfoRg12345

    WHERE [Период] = (SELECT MAX([Период]) FROM SourceDB._InfoRg12345)

Критические моменты:

  • 🔐 Бэкап обязателен! Ошибка в SQL-запросе может повредить данные.
  • 🔄 Проверьте совпадение структур — в разных версиях 1С поля таблицы могут отличаться.
  • 🛑 Не копируйте системные поля типа _IDRRef — они генерируются автоматически.
⚠️ Внимание: При копировании между базами с разными версиями платформы (например, 8.3.18 → 8.3.22) может потребоваться конвертация форматов хранения GUID. Используйте утилиту chdbfl.exe из комплекта 1С для проверки целостности после операции.

Сделать бэкап обеих баз|Проверить права доступа к SQL-серверу|Уточнить номер регистра соответствий|Сверить структуры таблиц в исходной и целевой базе|Подготовить скрипт отката на случай ошибки-->

5. Метод 4: Программное копирование через скрипт

Если нужно автоматизировать процесс или копировать соответствия выборочно (например, только для определённого справочника), поможет скрипт на встроенном языке 1С:EnterpriseScript. Ниже пример кода для копирования соответствий между двумя базами через COM-соединение:


// Подключение к исходной базе

ИсходнаяБаза = Новый COMОбъект("V83.ComConnector");

ИсходнаяБаза.Connect("File=""C:\Bases\Source"";Usr=""Администратор"";Pwd=""123""");

// Подключение к целевой базе

ЦелеваяБаза = Новый COMОбъект("V83.ComConnector");

ЦелеваяБаза.Connect("File=""C:\Bases\Target"";Usr=""Администратор"";Pwd=""123""");

// Получаем все соответствия из исходной базы

Запрос = ИсходнаяБаза.NewObject("Запрос");

Запрос.Текст = "

| ВЫБРАТЬ

| СоответствиеОбъектов.ИдентификаторОбъектаИст КАК ИдИст,

| СоответствиеОбъектов.ИдентификаторОбъектаЦель КАК ИдЦель,

| СоответствиеОбъектов.ТипОбъектаИст КАК ТипИст

| ИЗ

| РегистрСведений.СоответствиеОбъектов КАК СоответствиеОбъектов

| ";

Результат = Запрос.Выполнить();

Выборка = Результат.Выбрать();

// Записываем в целевую базу

Пока Выборка.Следующий() Цикл

Запись = ЦелеваяБаза.NewObject("РегистрСведений.СоответствиеОбъектов");

Запись.ИдентификаторОбъектаИст = Выборка.ИдИст;

Запись.ИдентификаторОбъектаЦель = Выборка.ИдЦель;

Запись.ТипОбъектаИст = Выборка.ТипИст;

Запись.Записать();

КонецЦикла;

Преимущества скрипта:

  • 🎯 Гибкость — можно фильтровать соответствия по типам объектов или датам.
  • 🔄 Автоматизация — подходит для регулярных задач (например, еженедельной синхронизации).

Для выполнения скрипта потребуется:

  • Установленный 1С:Предприятие на компьютере.
  • Права администратора в обеих базах.
  • Настройка COM-соединения (в about:config браузера или через dcomcnfg).
Как ускорить скрипт для больших баз

Для ускорения обработки более 100 000 записей разбейте выборку на пакеты по 10 000 строк и используйте транзакции:


ЦелеваяБаза.NewObject("Транзакция").НачатьТранзакцию();

// ... код записи пакета ...

ЦелеваяБаза.NewObject("Транзакция").ЗафиксироватьТранзакцию();

Это снизит нагрузку на сервер и уменьшит риск блокировок.

6. Метод 5: Использование внешних обработок (например, "Универсальный обмен данными")

Для пользователей, не владеющих программированием, подойдут готовые обработки от партнёров 1С. Одна из самых популярных — "Универсальный обмен данными" (разработчик: фирма "Альт-Софт"). Она позволяет:

  • 🔄 Копировать соответствия между любыми конфигурациями (включая самописные).
  • 📂 Сохранять и загружать связи в формате .xml или .json.
  • 🔍 Просматривать и редактировать соответствия перед переносом.

Пошаговая инструкция:

  1. Скачайте обработку с сайта infostart.ru или its.1c.ru (бесплатная версия имеет ограничение на 1000 записей).
  2. Откройте её в исходной базе и выберите режим Выгрузка соответствий.
  3. Укажите путь для сохранения файла (например, C:\Temp\correspondences.json).
  4. В целевой базе откройте ту же обработку и загрузите файл через Импорт соответствий.

Сравнение популярных обработок:

ОбработкаПоддержка версийМакс. записей в бесплатной версииДоп. функции
Универсальный обмен данными8.3.6+1000Проверка целостности, лог ошибок
DataComposer8.3.10+5000Визуальное сопоставление полей
1C:EDT Migration Tool8.3.18+Неограничено*Интеграция с Git, командная строка

* Требует лицензии 1C:EDT.

⚠️ Внимание: При использовании сторонних обработок проверьте их совместимость с вашей версией платформы. Некоторые решения (например, DataComposer) требуют установки дополнительных компонентов, таких как .NET Framework 4.8.

7. Типичные ошибки и как их избежать

Даже опытные администраторы сталкиваются с проблемами при копировании соответствий. Вот самые распространённые ошибки и способы их решения:

1. Дублирование записей в регистре

Симптом: При загрузке появляется ошибка "Уникальное ограничение нарушено".

Причина: В целевой базе уже есть запись с таким же ИдентификаторОбъектаИст.

Решение: Очистите регистр перед загрузкой:


Регистр = РегистрыСведений.СоответствиеОбъектов;

Регистр.Очистить();

2. Несовпадение типов объектов

Симптом: Соответствия скопированы, но при обмене данные не находятся.

Причина: В целевой базе другой ТипОбъектаЦель (например, справочник Контрагенты в исходной базе соответствует Партнёры в целевой).

Решение: Используйте обработку с ручным сопоставлением типов или правьте скрипт:


// Пример замены типа

Если Выборка.ТипИст = "СправочникСсылка.Контрагенты" Тогда

Запись.ТипОбъектаЦель = "СправочникСсылка.Партнёры";

КонецЕсли;

3. Потеря ссылочной целостности

Симптом: Документы в целевой базе "висят в воздухе" без связей со справочниками.

Причина: Соответствия скопированы после переноса объектов (нужно делать наоборот).

Решение: Порядок операций должен быть таким:

  1. Перенести справочники (без соответствий).
  2. Скопировать соответствия.
  3. Перенести документы (они найдут связи по соответствиям).
💡

Всегда проверяйте соответствия после копирования! Выполните тестовый обмен 1-2 документами, чтобы убедиться, что связи работают корректно.

8. Проверка результата и откат изменений

После копирования соответствий необходимо проверить их корректность. Вот чек-лист для контроля:

Сравнить количество записей в исходном и целевом регистре|Проверить 3-5 случайных соответствий вручную (через Все функции → Регистры сведений)|Выполнить тестовый обмен 1 документом|Просмотреть журнал регистрации (если есть ошибки)|Сверить GUID объектов в обеих базах-->

Если обнаружены ошибки, используйте один из методов отката:

  • 🔙 Восстановление из бэкапа — самый надёжный способ, если ошибки критичные.
  • 🧹 Очистка регистра — подходит для некритичных ошибок:
    
    

    РегистрыСведений.СоответствиеОбъектов.Очистить();

  • 🔧 Выборочное исправление — если ошибки в отдельных записях, исправьте их через Регистры сведений → СоответствиеОбъектов → Открыть список.

Для автоматизированного контроля можно использовать запрос:


ВЫБРАТЬ

СоответствиеОбъектов.ИдентификаторОбъектаИст КАК ИдИст,

ЕСТЬNULL(СоответствиеОбъектов.ИдентификаторОбъектаЦель, "") КАК ИдЦель

ИЗ

РегистрСведений.СоответствиеОбъектов КАК СоответствиеОбъектов

ГДЕ

НЕ СоответствиеОбъектов.ИдентификаторОбъектаЦель ЕСТЬ NULL

И НЕ ВЫРАЖЕНИЕ(СоответствиеОбъектов.ИдентификаторОбъектаЦель КАК СправочникСсылка).Пустая()

Этот запрос найдёт все соответствия, где целевой объект не существует (например, был удалён).

FAQ: Частые вопросы по копированию соответствий

Можно ли скопировать соответствия между базами с разными конфигурациями (например, УТ 11 и самописная)?

Да, но потребуется ручная корректировка типов объектов. В самописной конфигурации регистр соответствий может называться иначе (например, РегистрСведений.СвязиОбъектов). Используйте Метод 4 (скрипт) или Метод 5 (внешние обработки) с настройкой сопоставления типов.

Как скопировать соответствия, если нет доступа к SQL-серверу?

Используйте Метод 2 (обработка ВыгрузкаЗагрузкаДанныхXML) или Метод 5 (внешние обработки). Они работают через типовой функционал 1С и не требуют прямых запросов к базе. Альтернатива — Метод 1 (типовая выгрузка), если конфигурации совместимы.

Почему после копирования соответствий документы не проводятся в целевой базе?

Причина в 90% случаев — несовпадение версий объектов. Например, в исходной базе документ имеет версию 2, а в целевой — версию 1. Проверьте настройки обмена: должен быть включён режим "Обновлять существующие объекты". Также убедитесь, что скопированы все соответствующие справочники (например, для документа РеализацияТоваровУслуг нужны соответствия для Номенклатуры, Контрагентов и Складов).

Как скопировать соответствия между базами на разных платформах (8.2 и 8.3)?

Прямое копирование невозможно из-за различий в форматах хранения данных. Используйте промежуточный формат:

  1. Выгрузите соответствия из базы 8.2 в .xml через Метод 2.
  2. Откройте файл в текстовом редакторе и замените теги старого формата (например, <V8Document> на <ДокументОбъект>).
  3. Загрузите отредактированный файл в базу 8.3.

Для сложных случаев используйте Конвертацию данных 2.0 (входит в поставку 1С).

Можно ли скопировать соответствия без остановки работы пользователей?

Да, но с оговорками:

  • Для Метода 1 (типовая выгрузка) и Метода 2 (XML-обработка) блокировки минимальны — пользователи могут продолжать работу.
  • Для Метода 3 (SQL) и Метода 4 (скрипт) рекомендуется выполнить операцию в нерабочее время или использовать транзакции с коротким временем блокировки.

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