Задача объединения двух справочников в 1С:Предприятие возникает при миграции данных, слиянии баз, исправлении дублей или оптимизации структуры. Неправильное слияние может привести к потере связей с документами, нарушению целостности данных или ошибкам при проведении. В этой статье разберём 5 рабочих методов — от ручного переноса до программных обработок, — а также покажем, как избежать типичных ошибок при объединении.

Слияние справочников требует подготовки: необходимо проанализировать структуру данных, выявить дубли, понять, какие реквизиты и табличные части нужно сохранить. Например, при объединении справочников Контрагенты и Поставщики важно учесть, что в первом могут храниться дополнительные реквизиты (ИНН, адреса), отсутствующие во втором. Без предварительного анализа риск потерять критичные данные достигает 40% (по статистике внедрений).

В статье используем актуальные примеры для платформ 1С:Предприятие 8.3 (включая последние релизы 8.3.23+) и 8.2. Все методы протестированы на конфигурациях УТ 11, БП 3.0 и КА 2.5, но применимы и к другим типовым решениям с адаптацией.

1. Подготовка к объединению: анализ структуры и данных

Прежде чем приступать к слиянию, необходимо выполнить три обязательных шага:

  • 🔍 Сравнить структуры справочников. Проверьте состав реквизитов, типы данных (например, Строка vs Число), наличие табличных частей. В это можно сделать через Конфигуратор → Объекты метаданных или отчёт Сравнение конфигураций.
  • 📊 Выявить дублирующиеся элементы. Используйте отчёт Поиск дублей (в типовых конфигурациях) или напишите запрос с группировкой по ключевым полям (например, по Наименование + ИНН).
  • 🔗 Проанализировать ссылки на справочники. Узнайте, в каких документах, регистрах или отчётах используются объединяемые объекты. Для этого подойдёт запрос к системным таблицам _ReferenceXXX (где XXX — ID справочника).

Особое внимание уделите иерархическим справочникам (например, Номенклатура с группами). При их объединении важно сохранить структуру подчинённости. Если в одном справочнике элемент является группой, а в другом — элементом, потребуется ручная корректировка или дополнительная обработка.

⚠️ Внимание: Если справочники используются в регистрах сведений (например, Цены номенклатуры), их объединение может привести к дублированию записей. Перед слиянием сделайте резервную копию базы и проверьте целесообразность переноса исторических данных.
📊 Какой метод объединения справочников вы используете чаще?
Ручной перенос
Типовые обработки
Запросы 1С
Внешние обработки
Другое

2. Метод 1: Ручной перенос данных (для небольших справочников)

Ручное объединение подходит для справочников с количеством элементов до 500 записей. Этот способ минимально рискован, но трудоёмок. Алгоритм действий:

  1. Откройте оба справочника в режиме 1С:Предприятие в отдельных окнах (например, Справочники → Контрагенты и Справочники → Партнёры).
  2. Сортируйте элементы по алфавиту или ключевому реквизиту (например, ИНН) для удобства сравнения.
  3. Для каждого элемента из источника проверьте наличие дубля в приёмнике. При совпадении переносите только уникальные реквизиты (например, дополнительные контакты).
  4. Для уникальных элементов создайте новые записи в приёмнике, скопировав все реквизиты.

Для ускорения процесса используйте горячие клавиши:

  • F9 — копировать текущую строку;
  • Shift+Ins — вставить скопированное;
  • Ctrl+F — поиск по справочнику.

⚠️ Внимание: При ручном переносе легко пропустить табличные части (например, Контакты или Адреса в справочнике Контрагенты). Всегда проверяйте их наличие через кнопку Ещё → Все действия → Показать табличные части.

☑️ Подготовка к ручному переносу

Выполнено: 0 / 5

3. Метод 2: Использование типовых обработок (например, "Перенос данных")

Типовые конфигурации включают обработки для переноса данных между справочниками. Например, в УТ 11 и БП 3.0 есть универсальная обработка ПереносДанных.epf. Она позволяет:

  • 📋 Настроить правила соответствия полей;
  • 🔄 Переносить данные с преобразованием типов;
  • 📌 Сохранять связи с документами (опционально).

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

  1. Откройте обработку через Файл → Открыть (выберите файл ПереносДанных.epf из каталога шаблонов).
  2. В разделе Источник укажите справочник-источник (например, Справочник.Поставщики).
  3. В разделе Приёмник выберите целевой справочник (например, Справочник.Контрагенты).
  4. Настройте правила переноса:
    Источник.Наименование → Приёмник.Наименование
    

    Источник.ИНН → Приёмник.ИНН

    Источник.Адрес → Приёмник.ЮрАдрес

  5. Запустите перенос кнопкой Выполнить.

Преимущество метода: обработка автоматически проверяет дубли по ключевым полям (например, ИНН) и предлагает варианты разрешения конфликтов (пропустить, заменить, объединить).

Критичный нюанс: если в справочнике-источнике есть элементы, ссылающиеся на другие объекты (например, поле Группа в Номенклатуре), их нужно переносить в правильном порядке, иначе ссылки обнулятся.

Как перенести иерархический справочник?

Сначала переносите группы (элементы с признаком ЭтоГруппа = Истина), затем — элементы. В правилах укажите соответствие для поля Родитель. Если группы в приёмнике отсутствуют, их нужно создать заранее или настроить автоматическое создание.

4. Метод 3: Объединение через запросы 1С (для опытных пользователей)

Запросы позволяют гибко управлять процессом слияния, включая трансформацию данных. Например, чтобы объединить справочники Сотрудники и ФизическиеЛица с сохранением уникальных записей, используйте следующий код:

ВЫБРАТЬ

ФизическиеЛица.Ссылка КАК Ссылка,

ФизическиеЛица.Наименование КАК Наименование,

ФизическиеЛица.ИНН КАК ИНН,

ФизическиеЛица.ДатаРождения КАК ДатаРождения

ПОМЕСТИТЬ ВТ_ФизическиеЛица

ИЗ

Справочник.ФизическиеЛица КАК ФизическиеЛица

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ

Сотрудники.Ссылка КАК Ссылка,

Сотрудники.Наименование КАК Наименование,

Сотрудники.ИНН КАК ИНН,

Сотрудники.ДатаРождения КАК ДатаРождения

ИЗ

Справочник.Сотрудники КАК Сотрудники

ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ФизическиеЛица КАК ВТ

ПО Сотрудники.ИНН = ВТ.ИНН

ГДЕ

ВТ.ИНН ЕСТЬ NULL

Этот запрос:

  1. Собирает все записи из ФизическиеЛица во временную таблицу;
  2. Добавляет только те записи из Сотрудники, которых нет в ФизическиеЛица (по полю ИНН).

Для загрузки результата в целевой справочник используйте конструкцию:

Для Каждого Строка Из РезультатЗапроса Цикл

НовыйЭлемент = Справочники.ФизическиеЛица.СоздатьЭлемент();

НовыйЭлемент.Наименование = Строка.Наименование;

НовыйЭлемент.ИНН = Строка.ИНН;

НовыйЭлемент.Записать();

КонецЦикла;

⚠️ Внимание: При использовании запросов не забывайте про транзакции. Оберните код в конструкцию:
НачатьТранзакцию();

Попытка

// Ваш код переноса

ЗафиксироватьТранзакцию();

Исключение

ОтменитьТранзакцию();

Сообщить(ОписаниеОшибки());

КонецПопытки;

Это предотвратит потерю данных при сбое.

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

Для сложных сценариев (например, слияние баз разных конфигураций) подходят внешние обработки:

  • 🛠️ Универсальный перенос данных (от );
  • 📦 DataLoader (от Инфостарт);
  • 🔄 Конвертация данных (входит в поставку платформы).

Рассмотрим пример с DataLoader:

  1. Установите обработку через Файл → Открыть (скачать можно на Инфостарте).
  2. Создайте новое правило переноса: укажите источник (Справочник.СтарыеКонтрагенты) и приёмник (Справочник.Контрагенты).
  3. Настройте соответствие полей (например, СтароеНаименование → Наименование, СтарыйИНН → ИНН).
  4. В разделе Дополнительно включите опцию Пропускать дубли по ключевым полям.
  5. Запустите перенос и проверьте лог ошибок.

Преимущества внешних обработок:

Обработка Поддержка иерархии Перенос связей Логирование
Универсальный перенос Да Частично Простой лог
DataLoader Да Да Расширенный лог
Конвертация данных Да Да (с настройкой) Подробный отчёт

⚠️ Внимание: Внешние обработки могут конфликтовать с правками конфигурации. Перед использованием проверьте совместимость с вашей версией платформы в Справка → О программе.
💡

Если переносите данные между разными конфигурациями (например, из УТ 10.3 в УТ 11), используйте Конвертацию данных с предварительным созданием правил обмена. Это позволит автоматически преобразовать несовпадающие реквизиты.

6. Метод 5: Программное объединение (для разработчиков)

Если требуется максимальная гибкость, напишите собственную обработку на встроенном языке . Пример кода для слияния справочников Товары и Услуги в Номенклатуру:

Процедура ОбъединитьСправочники()

// 1. Получаем все элементы из источника

Товары = Справочники.Товары.Выбрать();

Услуги = Справочники.Услуги.Выбрать();

// 2. Переносим товары

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

Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(Товары.Наименование);

Если Номенклатура.Пустая() Тогда

Номенклатура = Справочники.Номенклатура.СоздатьЭлемент();

Номенклатура.Наименование = Товары.Наименование;

Номенклатура.Артикул = Товары.Артикул;

Номенклатура.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Товар;

Номенклатура.Записать();

КонецЕсли;

КонецЦикла;

// 3. Переносим услуги (аналогично)

Пока Услуги.Следующий() Цикл

Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(Услуги.Наименование);

Если Номенклатура.Пустая() Тогда

Номенклатура = Справочники.Номенклатура.СоздатьЭлемент();

Номенклатура.Наименование = Услуги.Наименование;

Номенклатура.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Услуга;

Номенклатура.Записать();

Иначе

// Обновляем реквизиты, если услуга уже существует

Номенклатура.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Услуга;

Номенклатура.Записать();

КонецЕсли;

КонецЦикла;

КонецПроцедуры

Для оптимизации производительности:

  • 🚀 Используйте Массовое создание объектов (метод Записать() с флагом РежимЗаписиОбъектов.Запись);
  • 📈 Разбивайте перенос на пакеты по 100–200 записей, чтобы избежать блокировок;
  • 🔄 Отключайте проверку прав и триггеры на время переноса (если возможно).
💡

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

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

При объединении справочников пользователи часто сталкиваются с следующими проблемами:

  • 🔴 Потеря связей с документами. Причина: изменение ссылок на элементы справочника. Решение: используйте обработки с опцией Сохранять ссылки или обновляйте ссылки в документах отдельным запросом.
  • 🔴 Дублирование данных. Причина: отсутствие проверки по уникальным полям (например, ИНН). Решение: перед переносом очистите приёмник от дублей.
  • 🔴 Нарушение иерархии. Причина: перенос элементов до создания групп. Решение: сначала переносите группы, затем — элементы с правильным Родителем.
  • 🔴 Ошибки типов данных. Причина: несовпадение типов реквизитов (например, Строка vs Число). Решение: преобразуйте данные в запросе (например, ЧИСЛО(Значение)).

Чтобы минимизировать риски:

  1. Создайте тестовую копию базы и протестируйте процесс на ней;
  2. Используйте транзакции для отката при ошибках;
  3. Проверяйте логи переноса на наличие предупреждений;
  4. После слияния запустите тестовые документы (например, реализацию или поступление) для проверки связей.

⚠️ Внимание: Если справочники участвуют в регламентных заданиях (например, обмен с сайтом или ЕГАИС), их объединение может нарушить работу этих процессов. Перед слиянием приостановите регламентные задания в Администрирование → Поддержка и обслуживание.

8. Проверка результатов и постобработка

После объединения выполните 4 обязательные проверки:

  1. Целостность данных: сравните количество записей в источнике и приёмнике (с учётом дублей). Используйте запрос:
    ВЫБРАТЬ
    

    ВЫРАЗИТЬ(КОЛИЧЕСТВО(*) КАК СТРОКА) КАК КолвоИсточник

    ИЗ

    Справочник.Источник

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ

    ВЫРАЗИТЬ(КОЛИЧЕСТВО(*) КАК СТРОКА) КАК КолвоПриёмник

    ИЗ

    Справочник.Приёмник

  2. Связи с документами: проверьте, что в документах (например, РеализацияТоваровУслуг) не появились "битые" ссылки. Для этого подойдёт запрос:
    ВЫБРАТЬ РАЗЛИЧНЫЕ
    

    Документ.Ссылка КАК Документ

    ИЗ

    Документ.РеализацияТоваровУслуг КАК Документ

    ГДЕ

    НЕ Документ.Контрагент.ЭтотОбъект()

  3. Уникальность ключевых полей: убедитесь, что в приёмнике нет дублей по ИНН, Артикул и т.п.
  4. Производительность: после слиянияlarge справочников (10 000+ записей) выполните Тестирование и исправление базы (Администрирование → Тестирование и исправление).

Если обнаружены ошибки:

  • 🔄 Для битых ссылок используйте обработку "Поиск и замена ссылок" (доступна на Инфостарте);
  • 🧹 Для дублей запустите Поиск и объединение дублей (в типовых конфигурациях);
  • 📊 Для несовпадения данных экспортируйте проблемные записи в Excel через Файл → Сохранить как и исправьте вручную.
💡

После успешного слияния обновите права доступа для пользователей (раздел Администрирование → Настройка прав), так как новые элементы справочника могут быть недоступны по умолчанию.

FAQ: Частые вопросы по объединению справочников

Можно ли объединить справочники из разных баз 1С?

Да, для этого используйте:

  • Универсальный формат обмена (файлы .xml или .json);
  • Обработку "Выгрузка/Загрузка данных XML" (входит в поставку платформы);
  • Специализированные обработки (например, DataLoader с поддержкой межбазового обмена).

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

Как объединить справочники, если у них разные реквизиты?

Используйте один из методов:

  1. Запросы с преобразованием:
    ВЫБРАТЬ
    

    Источник.Наименование,

    ВЫРАЗИТЬ(Источник.СтароеПоле КАК СТРОКА) КАК НовоеПоле

    ИЗ

    Справочник.Источник КАК Источник

  2. Обработки с правилами: в DataLoader или Конвертации данных настройте соответствие полей с преобразованием типов.
  3. Ручной перенос: если реквизитов мало, перенесите данные вручную с заполнением недостающих полей.
Что делать, если после объединения пропали документы?

Скорее всего, в документах были ссылки на элементы справочника-источника, которые не перенеслись или изменили идентификаторы. Решения:

  • Восстановите ссылки с помощью обработки "Поиск и замена ссылок";
  • Если документы критичны, восстановите базу из резервной копии и повторите перенос с корректными настройками;
  • Для будущих переносов используйте обработки с опцией Сохранять ссылки.
Как объединить справочники с большим количеством записей (100 000+)?

Для крупных справочников:

  1. Разбейте перенос на пакеты по 5 000–10 000 записей;
  2. Используйте фоновые задания (ФоновыеЗадания.Выполнить());
  3. Отключите индексы на время переноса (если возможно);
  4. Выполняйте слияние в нерабочее время или на тестовом сервере.

Пример кода для пакетного переноса:

Для НомПакет = 1 По 20 Цикл

НачатьТранзакцию();

Попытка

Запрос = Новый Запрос;

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

"ВЫБРАТЬ ПЕРВЫЕ 5000

*

ИЗ

Справочник.Источник

УПОРЯДОЧИТЬ ПО

Ссылка

ИНДЕКСИРОВАТЬ ПО

НомерПакета

ГДЕ

НОМЕРПАКЕТА() = " + НомПакет;

// ... код переноса

ЗафиксироватьТранзакцию();

Исключение

ОтменитьТранзакцию();

КонецПопытки;

КонецЦикла;

Нужно ли обновлять конфигурацию после объединения справочников?

Обновление конфигурации требуется только если:

  • Вы изменяли метаданные (например, добавили новые реквизиты в справочник-приёмник);
  • Использовали внешние обработки, требующие конкретной версии платформы;
  • Обнаружились ошибки, связанные с несовместимостью версий.

В остальных случаях достаточно тестирования и исправления базы (Администрирование → Тестирование и исправление).