Копирование соответствий между объектами в 1С:Предприятие — одна из самых востребованных операций при миграции данных, интеграции систем или восстановлении связей после сбоев. Без правильно настроенных соответствий невозможно корректно перенести справочники, документы или регистры из одной базы в другую, не потеряв при этом логические связи между данными. Эта задача актуальна для администраторов, разработчиков и даже опытных пользователей, которые сталкиваются с необходимостью синхронизации УТ 11, ERP 2.5, БП 3.0 или самописных конфигураций.
В этой статье мы разберём 5 рабочих методов копирования соответствий — от ручных операций в типовом функционале до автоматизированных скриптов на 1С:EnterpriseScript. Особое внимание уделим типичным ошибкам, которые приводят к потере ссылочной целостности (например, дублированию записей в регистре СоответствиеОбъектов), и покажем, как их избежать. Если вы когда-либо получали ошибку типа "Не найдено соответствие для объекта {GUID}" — здесь вы найдёте решение.
Для новичков важно понять: соответствие в 1С — это не просто связь "старое-новое", а запись в специальном регистре сведений, которая хранит уникальные идентификаторы (GUID) объектов из разных баз. При копировании таких записей нужно учитывать не только сами объекты, но и их версионность, права доступа и даже порядок операций. Например, перенос справочника Номенклатура без предварительного копирования соответствий для групп приведёт к "оборванным" ссылкам в новой базе.
1. Что такое соответствие объектов в 1С и зачем его копировать
Регистр сведений СоответствиеОбъектов (или его аналоги в разных конфигурациях) — это системный механизм, который хранит пары идентификаторов объектов из разных информационных баз. Например, при выгрузке данных из 1С:Управление торговлей 11 в 1С:Бухгалтерию 8 для каждого элемента справочника Контрагенты создаётся запись типа:
ИсходныйОбъект (GUID из УТ) → СоответствующийОбъект (GUID из БП)
Без этих записей невозможно:
- 🔄 Обновить данные в целевой базе (система не поймёт, какую запись менять).
- 📦 Перенести документы со ссылками на справочники (например, реализацию с номенклатурой).
- 🔗 Синхронизировать изменения между базами (при двустороннем обмене).
Копирование соответствий требуется в трёх ключевых сценариях:
- Миграция данных — перенос исторических данных из старой базы в новую (например, при переходе с УТ 10.3 на УТ 11).
- Восстановление после сбоя — если регистр соответствий был очищен или повреждён.
- Тестирование обменов — когда нужно продублировать связи между тестовой и рабочей базой.
⚠️ Внимание: В конфигурациях на базе БСП 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С). Она позволяет выборочно скопировать соответствия без привязки к планам обмена.
Пошаговая инструкция:
- Откройте обработку в исходной базе (
Файл → Открыть → выберите файл обработки). - На вкладке
Выгрузкаотметьте галочкойРегистры сведенийи выберитеСоответствиеОбъектов(или его аналог). - Нажмите
Выгрузить данныеи сохраните файл (например,correspondences.xml). - В целевой базе откройте ту же обработку, перейдите на вкладку
Загрузкаи выберите сохранённый файл. - Перед загрузкой нажмите
Настройкии убедитесь, что включён режим "Загружать соответствия объектов".
Особенности метода:
| Параметр | Значение |
|---|---|
| Скорость | Средняя (~500 записей/минуту) |
| Требуемые права | Полные права в обеих базах |
| Поддержка версий | 1С 8.2 и выше |
| Ограничения | Не kopирует историю изменений соответствий |
Если при загрузке появляется ошибка "Дублирование ключа", значит в целевой базе уже есть запись с таким же GUID. В этом случае:
// Запрос для очистки дублей (выполняется в Конфигураторе целевой базы)
ВыполнитьЗапрос("
| УДАЛИТЬ ИЗ РегистрСведений.СоответствиеОбъектов
| ГДЕ ИдентификаторОбъектаИст = &ИдОбъекта
", Новый Структура("ИдОбъекта", Новый УникальныйИдентификатор("...")));
4. Метод 3: Прямой SQL-запрос к базе данных
Для опытных пользователей и администраторов самый быстрый способ — работа напрямую с SQL-базой. Этот метод подходит для 1С на SQL-сервере (PostgreSQL, MS SQL, IBM DB2) и требует знания структуры таблиц.
Алгоритм действий:
- Подключитесь к базе через SQL Management Studio (или аналогичный инструмент).
- Найдите таблицу с соответствиями. В большинстве конфигураций она называется:
_InfoRg{НомерРегистра}Узнать точный номер регистра можно через запрос:
SELECT * FROM _InfoRG WHERE Name = 'СоответствиеОбъектов' - Скопируйте данные из исходной базы в целевую:
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. - 🔍 Просматривать и редактировать соответствия перед переносом.
Пошаговая инструкция:
- Скачайте обработку с сайта infostart.ru или its.1c.ru (бесплатная версия имеет ограничение на 1000 записей).
- Откройте её в исходной базе и выберите режим
Выгрузка соответствий. - Укажите путь для сохранения файла (например,
C:\Temp\correspondences.json). - В целевой базе откройте ту же обработку и загрузите файл через
Импорт соответствий.
Сравнение популярных обработок:
| Обработка | Поддержка версий | Макс. записей в бесплатной версии | Доп. функции |
|---|---|---|---|
| Универсальный обмен данными | 8.3.6+ | 1000 | Проверка целостности, лог ошибок |
| DataComposer | 8.3.10+ | 5000 | Визуальное сопоставление полей |
| 1C:EDT Migration Tool | 8.3.18+ | Неограничено* | Интеграция с Git, командная строка |
* Требует лицензии 1C:EDT.
⚠️ Внимание: При использовании сторонних обработок проверьте их совместимость с вашей версией платформы. Некоторые решения (например, DataComposer) требуют установки дополнительных компонентов, таких как .NET Framework 4.8.
7. Типичные ошибки и как их избежать
Даже опытные администраторы сталкиваются с проблемами при копировании соответствий. Вот самые распространённые ошибки и способы их решения:
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)?
Прямое копирование невозможно из-за различий в форматах хранения данных. Используйте промежуточный формат:
- Выгрузите соответствия из базы 8.2 в
.xmlчерез Метод 2. - Откройте файл в текстовом редакторе и замените теги старого формата (например,
<V8Document>на<ДокументОбъект>). - Загрузите отредактированный файл в базу 8.3.
Для сложных случаев используйте Конвертацию данных 2.0 (входит в поставку 1С).
Можно ли скопировать соответствия без остановки работы пользователей?
Да, но с оговорками:
- Для Метода 1 (типовая выгрузка) и Метода 2 (XML-обработка) блокировки минимальны — пользователи могут продолжать работу.
- Для Метода 3 (SQL) и Метода 4 (скрипт) рекомендуется выполнить операцию в нерабочее время или использовать транзакции с коротким временем блокировки.
Важно: Если в момент копирования пользователь изменяет объект, соответствие для которого копируется, может возникнуть конфликт версий. В этом случае повторите операцию для проблемных записей.