Как избавиться от дублирования организации при синхронизации БП 3.0 и ЗУП 3.1?

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

Синхронизация данных между конфигурациями «1С:Бухгалтерия предприятия 3.0» (БП 3.0) и «1С:Зарплата и управление персоналом 3.1» (ЗУП 3.1) — один из наиболее часто используемых механизмов в экосистеме 1С. Однако администраторы и программисты нередко сталкиваются с ситуацией, когда после очередного сеанса обмена в базе-приемнике (чаще всего в ЗУП) появляется дубликат карточки организации.

Попытки исправить ситуацию стандартной обработкой «Поиск и удаление дублей» часто заканчиваются неудачей: процесс слияния зависает или аварийно завершается со сложными техническими ошибками СУБД. В этой статье мы подробно рассмотрим, почему возникает эта проблема, проанализируем причины сбоев при объединении дублей и разберем несколько эффективных способов решения — от простых пользовательских настроек до низкоуровневых манипуляций с уникальными идентификаторами (GUID).

Выясняем причину: почему происходит автоматическое задвоение?

Прежде чем приступать к активным действиям, проанализируем ситуацию и поймем, по какому принципу механизмы синхронизации сопоставляют организации. В современных конфигурациях 1С обмен по умолчанию происходит по технологии EnterpriseData. При первом обмене система пытается сопоставить ключевые поля справочника Организации. К ним относятся:

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

  1. Различия в истории КПП. В ЗУП 3.1 история изменения КПП организации хранится в периодическом регистре сведений, привязанном к регистрации в налоговом органе. В БП 3.0 КПП указывается непосредственно в карточке организации. Если даты документов обмена или история регистраций заполнены некорректно, алгоритм сопоставления может дать сбой.
  2. Невидимые спецсимволы и пробелы. Наличие лишнего пробела в конце строки ИНН или КПП в одной из баз визуально незаметно, но для платформы 1С это разные строки. Перед синхронизацией необходимо посимвольно выверить ключевые реквизиты в обеих базах.
  3. Разные типы юридических лиц. Если в одной базе организация ошибочно заведена с видом «Юридическое лицо», а в другой — «Индивидуальный предприниматель», стандартные правила обмена не смогут сопоставить их автоматически, даже если ИНН совпадает.

Почему стандартное «Слияние дублей» выдает ошибку?

Часто при попытке объединить дублирующие карточки организаций стандартная обработка «Поиск и удаление дублей» останавливается с ошибкой СУБД, ссылаясь на один из регистров сведений. Разберем по шагам, почему это происходит.

Справочник Организации связан со множеством периодических регистров сведений (например, УчетнаяПолитикаОрганизаций, ИсторияРегистрацийВНалоговомОргане, ОтветственныеЛица). В этих регистрах хранятся настройки для каждого юридического лица с привязкой к дате (периоду).

Когда обработка пытается заменить дублирующуюся организацию на оригинальную, она перезаписывает ссылку на организацию во всех связанных объектах. Если для обеих организаций в регистре сведений уже существуют записи на одну и ту же дату (например, задана учетная политика на 01.01.2024 для «Оригинала» и для «Дубля»), то при попытке замены ссылок СУБД попытается записать две абсолютно идентичные строки с одинаковым периодом и ключевыми полями. Это вызывает ошибку уникальности индекса СУБД (в SQL — Violation of PRIMARY KEY constraint).

Как решить проблему слияния: перед запуском обработки слияния необходимо зайти в указанный в ошибке регистр сведений, найти записи, принадлежащие удаляемой (дублирующей) организации, и вручную удалить их. После очистки конфликтующих записей в периодических регистрах стандартное объединение пройдет успешно. Для полной очистки сведений и документов по лишней организации можно использовать обработку для удаления данных по организации в БП 3.0 и ЗУП 3.1.

Решение 1. Интерактивное сопоставление данных без перенастройки обмена

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

  1. Перейдите в раздел Администрирование — Синхронизация данных — Настройки синхронизации.
  2. Выберите нужную настройку обмена, но не запускайте автоматический обмен.
  3. Нажмите кнопку Еще и выберите пункт Сопоставление данных (или нажмите на ссылку «Настройка сопоставления» в детальных параметрах обмена).
  4. В открывшемся окне найдите таблицу со справочником Организации.
  5. Система покажет несопоставленные объекты. Выберите строку с дублирующейся организацией из БП и вручную укажите ей в соответствие правильную организацию из ЗУП.
  6. Нажмите кнопку Применить. Связь запишется в служебные таблицы синхронизации, и при последующих обменах дублирование прекратится.

Решение 2. Использование регистра «Публичные идентификаторы синхронизируемых объектов»

При использовании современного формата обмена EnterpriseData информация о сопоставлении объектов по внутренним уникальным идентификаторам больше не хранится в старом регистре СоответствияОбъектовИнформационныхБаз (именно поэтому он часто оказывается пустым). Теперь за это отвечает регистр сведений ПубличныеИдентификаторыСинхронизируемыхОбъектов.

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

  1. В базе-источнике (например, БП 3.0) откройте карточку нужной организации и узнайте ее внутренний уникальный идентификатор (GUID) через функции для технического специалиста или специальную обработку.
  2. В базе-приемнике (ЗУП 3.1) откройте регистр сведений ПубличныеИдентификаторыСинхронизируемыхОбъектов.
  3. Создайте новую запись, где в поле «Ссылка» укажите правильный элемент справочника Организации в текущей базе, а в поле «Идентификатор» (в формате GUID) вставьте скопированный уникальный идентификатор из БП.

Этот способ мгновенно и навсегда связывает объекты между базами без необходимости запуска тяжелых процедур сопоставления.

Решение 3. Техническая замена GUID через временный элемент (Для разработчиков)

Если вы хотите решить проблему радикально на уровне базы данных, но опасаетесь «битых ссылок» (объектов вида <Объект не найден>), мы можем применить продвинутую методику безопасной подмены GUID. Напрямую менять GUID у элемента, по которому уже проведены сотни документов, крайне опасно. Поэтому рассмотрим более изящный алгоритм. Для устранения уже возникших повреждений ссылочной структуры можно использовать инструмент для восстановления битых ссылок.

Посмотрим на пример программного создания элемента с предопределенным GUID. Мы напишем небольшую внешнюю обработку, которая создаст в ЗУП 3.1 пустую карточку организации, но присвоит ей GUID организации из БП 3.0.

Сначала получим GUID организации из БП 3.0 (код выполняется в контексте БП):


СсылкаНаОрг = Справочники.Организации.НайтиПоРеквизиту("ИНН", "7701010101");
Если НЕ СсылкаНаОрг.Пустая() Тогда
    УникальныйИдентификаторБП = Строка(СсылкаНаОрг.УникальныйИдентификатор());
    Сообщить("GUID организации в БП: " + УникальныйИдентификаторБП);
КонецЕсли;

Теперь в базе ЗУП 3.1 выполним код, который создаст временную организацию-заготовку с точно таким же GUID:


// Вставьте полученный из БП GUID в строку ниже
СтрокаGUID = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"; 
НовыйGUID = Новый УникальныйИдентификатор(СтрокаGUID);

// Проверим, нет ли уже объекта с таким идентификатором в ЗУП
СсылкаНаСуществующий = Справочники.Организации.ПолучитьСсылка(НовыйGUID);

// Если объект не существует, создаем его программно
НоваяОрганизация = Справочники.Организации.СоздатьЭлемент();
НоваяОрганизация.УстановитьСсылкуНового(СсылкаНаСуществующий);
НоваяОрганизация.Наименование = "Временная Организация (Синхронизация)";
НоваяОрганизация.ИНН = "7701010101";
НоваяОрганизация.КПП = "770101001";
НоваяОрганизация.Записать();
Сообщить("Временный элемент успешно создан с GUID базы БП!");

После выполнения этого кода в ЗУП 3.1 у нас появятся две организации:

Теперь нам остается лишь запустить стандартную обработку «Поиск и удаление дублей». В качестве Оригинала мы принудительно выбираем только что созданную временную организацию (так как у нее правильный GUID для будущих обменов), а в качестве Дубля — старую рабочую организацию. Обработка перенесет все документы, регистры и настройки со старой организации на новую. После завершения слияния синхронизация будет проходить идеально, так как GUID совпадут на 100%.

Решение 4. Перенастройка узлов синхронизации (Пользовательский метод)

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

  1. Удалите дублирующие элементы справочника Организации в обеих базах (предварительно перенеся ссылки на оригиналы).
  2. Полностью удалите настройки синхронизации (узлы обмена) в БП 3.0 и в ЗУП 3.1.
  3. Настройте синхронизацию заново с нуля.
  4. Важно: сразу после создания настройки отключите автоматическую регистрацию всех объектов для обмена.
  5. В БП 3.0 вручную зарегистрируйте к обмену только один объект — справочник Организации.
  6. Выполните выгрузку данных из БП 3.0 в файл или через прямое подключение.
  7. В ЗУП 3.1 запустите загрузку данных, но выберите режим «Выполнить сопоставление данных вручную» (интерактивный режим загрузки).
  8. В появившемся окне сопоставления выберите вашу организацию, сопоставьте ее с пришедшим объектом из БП 3.0 и завершите загрузку.
  9. Убедитесь, что в справочнике осталась ровно одна запись. После этого можно включать регулярный автоматический обмен — дубли больше не появятся.

Мы подробно разобрали все возможные варианты борьбы с дублированием организаций при интеграции БП 3.0 и ЗУП 3.1. Выберите подходящий вам метод в зависимости от уровня доступа к базе данных и масштаба накопившихся ошибок.

← На главную