При выполнении синхронизации данных между информационными базами 1С (особенно через универсальный формат Enterprise Data или XDTO) пользователи часто сталкиваются с критической ошибкой: «Значение "..." поля "Код" не уникально». Эта ситуация полностью блокирует обмен, и стандартные средства «Исправления дублей» здесь обычно не помогают. Давайте подробно разберем, почему возникает эта ошибка, где именно искать проблемный объект и как правильно восстановить работу обмена.
Первое, что сбивает с толку начинающих разработчиков — это формат значения кода. Ошибка сообщает о неуникальности длинной строки вида ce92c30b-5e42-4f99-a7f7-2fe499fd19b8. Проанализируем ситуацию: в современных конфигурациях 1С, построенных на базе Библиотеки стандартных подсистем (БСП), именно такие строковые представления уникальных идентификаторов (GUID) используются в качестве Кода для узлов планов обмена.
Рассмотрим наиболее частые причины появления дублей:
ЭтотУзел. При попытке настроить синхронизацию между «оригиналом» и «копией» система видит два узла с одинаковыми кодами.Частая ошибка — пытаться найти этот GUID в справочниках. Рассмотрим код, который часто используют для поиска, и поймем, почему он может не сработать:
&НаСервереБезКонтекста
Функция НайтиЭлементСправочникаНаСервере()
Идентификатор = Новый УникальныйИдентификатор("ce92c30b-5e42-4f99-a7f7-2fe499fd19b8");
Для Каждого Спр Из Справочники Цикл
СсылкаНаЭлемент = Спр.ПолучитьСсылку(Идентификатор);
Если СсылкаНаЭлемент.ПолучитьОбъект() <> Неопределено Тогда
Возврат СсылкаНаЭлемент;
КонецЕсли;
КонецЦикла;
КонецФункции
Проанализируем этот подход. Метод ПолучитьСсылку(Идентификатор) ищет объект по его внутреннему Binary UUID (ссылке в базе данных). Однако ошибка «Код не уникально» относится к строковому реквизиту Код. Это абсолютно разные поля! Объект может иметь одну ссылку, но в поле Код у него может быть записан GUID другой базы в виде строки. Поэтому искать нужно именно текстовое совпадение в реквизите Код, причем не только в справочниках, но и в планах обмена.
Чтобы найти, какой именно объект (справочник, документ или план обмена) «занял» этот код, лучше использовать запрос по всем типам метаданных. Разберем программный способ поиска, который охватывает не только справочники, но и планы обмена:
Функция НайтиОбъектПоКодуСтрокой(Знач ИскомыйКод) Экспорт
Результат = Неопределено;
МассивМетаданных = Новый Массив;
МассивМетаданных.Добавить(Справочники);
МассивМетаданных.Добавить(ПланыОбмена); // Это самое важное место!
МассивМетаданных.Добавить(ПланыВидовХарактеристик);
Для Каждого Коллекция Из МассивМетаданных Цикл
Для Каждого Менеджер Из Коллекция Цикл
// Пытаемся найти объект по коду
Ссылка = Менеджер.НайтиПоКоду(ИскомыйКод);
Если НЕ Ссылка.Пустая() Тогда
Сообщить("Объект найден в: " + Менеджер);
Возврат Ссылка;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Возврат Результат;
КонецФункции
Если этот код найдет элемент в ПланыОбмена, значит, у вас действительно конфликт узлов синхронизации.
Поскольку синхронизация обычно выполняется в фоновом режиме, разберем, как точно определить проблемное место через конфигуратор:
УзелОбменаОбъект.Записать(), проанализируйте переменную УзелОбменаОбъект.В момент остановки вы увидите в табло тип объекта. Скорее всего, это будет один из узлов Плана обмена (например, СинхронизацияДанныхЧерезУниверсальныйФормат).
Если поиск дублей вручную слишком сложен, а база была создана копированием, самым эффективным методом будет полная очистка настроек синхронизации. Проанализируем шаги:
ЭтотУзел.Рассмотрим несколько моментов, которые помогут избежать подобных проблем в будущем:
Объект.ОбменДанными.Загрузка = Истина; перед записью. Это отключит проверки уникальности в модуле объекта и позволит вам изменить «битый» код.Общие настройки узлов информационных баз или Соответствия объектов информационных баз. Если после удаления узлов ошибка сохраняется, проверьте записи в этих регистрах по искомому GUID.Таким образом, мы выяснили, что ошибка уникальности кода при синхронизации — это почти всегда конфликт узлов планов обмена. Тщательный поиск по всем метаданным (включая планы обмена) и последующая перенастройка синхронизации позволяют эффективно решить эту проблему даже начинающему специалисту.