Ошибка при синхронизации Значение поля "Код" не уникально

1. Eva-Light 19.11.20 13:18 Сейчас в теме
Текст ошибки подробно:
Значение "ce92c30b-5e42-4f99-a7f7-2fe499fd19b8" поля "Код" не уникально
{Обработка.КонвертацияОбъектовXDTO.МодульОбъекта(763)}:				УзелОбменаОбъект.Записать();
{Обработка.КонвертацияОбъектовXDTO.МодульОбъекта(361)}:		ПроверитьКодыУзлов(РезультатАнализаДанныхКЗагрузке, КомпонентыОбмена.УзелКорреспондента);
{ОбщийМодуль.ОбменДаннымиСервер.Модуль(7271)}:				ОбработкаОбменаДаннымиXML.ВыполнитьЗагрузкуДанных(ПараметрыЗагрузки);
{ОбщийМодуль.ОбменДаннымиСервер.Модуль(6851)}:				ПрочитатьСообщениеСИзменениямиДляУзла(СтруктураНастроекОбмена, СообщениеОбмена, , ТолькоПараметры);
{ОбщийМодуль.ОбменДаннымиСервер.Модуль(381)}:	ВыполнитьОбменДаннымиЧерезФайловыйРесурс(СтруктураНастроекОбмена, ТолькоПараметры);
{ОбщийМодуль.ОбменДаннымиСервер.Модуль(3883)}:			ВыполнитьДействиеОбменаДляУзлаИнформационнойБазы(Отказ, УзелИнформационнойБазы,
{Обработка.ВыполнениеОбменаДанными.МодульМенеджера(34)}:	ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(
{(1)}:Обработки.ВыполнениеОбменаДанными.ВыполнитьЗапускОбменаДанными(Параметры[0],Параметры[1])
{ОбщийМодуль.ОбщегоНазначения.Модуль(4883)}:	Выполнить ИмяМетода + "(" + ПараметрыСтрока + ")";
{ОбщийМодуль.ДлительныеОперации.Модуль(1026)}:		ОбщегоНазначения.ВыполнитьМетодКонфигурации(ИмяПроцедуры, ПараметрыВызова);
{ОбщийМодуль.ДлительныеОперации.Модуль(1016)}:		ВызватьПроцедуру(ВсеПараметры.ИмяПроцедуры, ВсеПараметры.ПараметрыПроцедуры);

по причине:
Значение "ce92c30b-5e42-4f99-a7f7-2fe499fd19b8" поля "Код" не уникально
Показать

Уже всю голову сломала, не понимаю, как это исправить. Очевидно, что где-то есть дубликат такого же кода. Разве нормально для кода такое странное значение? Сначала я подумала, что это уникальный идентификатор элемента справочника, сделала обработку для перебора всех справочников и поиска элемента с таким GUID, но ни одного элемента во всех справочниках не нашлось. Потом начала искать по коду, но по коду выдаёт либо "Неопределено", либо "0", либо пустые ссылки.
Прикрепляю часть кода обработки:
&НаСервереБезКонтекста
Функция НайтиЭлементСправочникаНаСервере()
	Идентификатор = Новый УникальныйИдентификатор("ce92c30b-5e42-4f99-a7f7-2fe499fd19b8");
	Код = "ce92c30b-5e42-4f99-a7f7-2fe499fd19b8"; 
	
	Для Каждого Спр Из Справочники Цикл
		Сообщить(Спр);
		СсылкаНаЭлемент = Спр.ПолучитьСсылку(Идентификатор);
		СсылкаНаЭлемент2 = Спр.НайтиПоКоду(Код);
		Если СсылкаНаЭлемент.ПолучитьОбъект() <> Неопределено Тогда
			Возврат СсылкаНаЭлемент.ПолучитьОбъект(); 	
		КонецЕсли;
	КонецЦикла;
КонецФункции
Показать

Занимаюсь 1С первые две недели, могу тупить :'D
По теме из базы знаний
Найденные решения
12. MaxS 2858 02.12.20 18:19 Сейчас в теме
Вероятно одна база была создана копией из другой базы, потом появился конфликт идентичных уникальных идентификаторов узлов обмена. Необходимо какой-нибудь обработкой поменять уид узла, удалить и заново настроить обмен. Не забыть удалить из папки обмена все файлы.
Eva-Light; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. FatPanzer 19.11.20 14:06 Сейчас в теме
(1)
СсылкаНаЭлемент = Спр.ПолучитьСсылку(Идентификатор);
Если СсылкаНаЭлемент.ПолучитьОбъект() <> Неопределено Тогда
    Возврат СсылкаНаЭлемент.ПолучитьОбъект();     
КонецЕсли;

Как это развидеть???
4. Eva-Light 19.11.20 14:11 Сейчас в теме
(3) Поясните пожалуйста, что тут не так?
5. FatPanzer 19.11.20 14:13 Сейчас в теме
(4) ПолучитьОбъект() уберите.
7. Eva-Light 19.11.20 14:19 Сейчас в теме
(5) Ничего не изменилось
8. FatPanzer 19.11.20 14:20 Сейчас в теме
(7) А я вам и не говорил, что что-то изменится и станет работать правильно. Я просто посоветовал вам избавиться от говнокода, за который исключают из профессии.
9. Eva-Light 19.11.20 14:22 Сейчас в теме
(8) Хорошо, спасибо) На другом форуме был совет так сделать.
14. 3dice 22 03.04.24 20:16 Сейчас в теме
(4)
	СсылкаНаЭлемент = Спр.ПолучитьСсылку(Идентификатор);
	Если НЕ ПустаяСтрока(СсылкаНаЭлемент.ВерсияДанных) Тогда
		Возврат СсылкаНаЭлемент.ПолучитьОбъект();     
	КонецЕсли;
15. 3dice 22 03.04.24 20:17 Сейчас в теме
(4)
СсылкаНаЭлемент = Спр.ПолучитьСсылку(Идентификатор);
	Если НЕ ПустаяСтрока(СсылкаНаЭлемент.ВерсияДанных) Тогда
		Возврат СсылкаНаЭлемент.ПолучитьОбъект();     
	КонецЕсли;
6. Asya.Ozerova 41 19.11.20 14:18 Сейчас в теме
(1)
Функция НайтиСсылкуПоУИД(знач УИД) Экспорт
    
    ЭтоМассив = ТипЗнч(УИД) = Тип("Массив");
    
    МассивУидов = Новый Массив;
    Если ЭтоМассив Тогда
        МассивУидов = УИД;
    Иначе
        МассивУидов.Добавить(УИД);
    КонецЕсли;
    
	Результат = Неопределено;
    
    МассивМетаданных = Новый Массив;    
	МассивМетаданных.Добавить(Справочники);
	МассивМетаданных.Добавить(Документы);
	МассивМетаданных.Добавить(ПланыВидовХарактеристик);
	МассивМетаданных.Добавить(ПланыСчетов);
	МассивМетаданных.Добавить(ПланыВидовРасчета);
	МассивМетаданных.Добавить(ПланыОбмена);
	МассивМетаданных.Добавить(БизнесПроцессы);
	МассивМетаданных.Добавить(Задачи);
    
    МассивТипов = Новый Массив; 
    
    Для Каждого СтрМетаданное Из МассивМетаданных Цикл
        Для Каждого Стр Из СтрМетаданное.ТипВсеСсылки().Типы() Цикл
            МассивТипов.Добавить(Стр);
        КонецЦикла;
    КонецЦикла;
        
    ТаблицаСсылок = Новый ТаблицаЗначений;
    ТаблицаСсылок.Колонки.Добавить("УИД"    , Новый ОписаниеТипов("Строка",,,,Новый КвалификаторыСтроки(36)));
    ТаблицаСсылок.Колонки.Добавить("Ссылка" , Новый ОписаниеТипов(МассивТипов));
    
    Для Каждого СтрМетаданное Из МассивМетаданных Цикл
        Для Каждого Менеджер Из СтрМетаданное Цикл   
            Для Каждого СтрУИД Из МассивУидов Цикл
                Попытка
                    НовСтр = ТаблицаСсылок.Добавить();
                    НовСтр.Ссылка = Менеджер.ПолучитьСсылку(Новый УникальныйИдентификатор(СтрУИД));
                    НовСтр.УИД    = СтрУИД;
                Исключение
                КонецПопытки;
            КонецЦикла;
        КонецЦикла;
    КонецЦикла;
            
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   ТаблицаСсылок.Ссылка КАК Ссылка,
        |   ТаблицаСсылок.УИД КАК УИД
        |ПОМЕСТИТЬ ВТ
        |ИЗ
        |   &ТаблицаСсылок КАК ТаблицаСсылок
        |;
        |
        |////////////////////////////////////////////////////////////­////////////////////
        |ВЫБРАТЬ
        |   ВТ.Ссылка КАК Ссылка,
        |   ВТ.УИД КАК УИД
        |ИЗ
        |   ВТ КАК ВТ
        |ГДЕ
        |   НЕ ВТ.Ссылка.ПометкаУдаления ЕСТЬ NULL";
    
    Запрос.УстановитьПараметр("ТаблицаСсылок",ТаблицаСсылок);
    РезультатЗапроса = Запрос.Выполнить();
    
    Если Не РезультатЗапроса.Пустой() Тогда
        Если ЭтоМассив Тогда
            Результат = РезультатЗапроса.Выгрузить(); 
        Иначе
            ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
            ВыборкаДетальныеЗаписи.Следующий();
            
            Результат = ВыборкаДетальныеЗаписи.Ссылка;
        КонецЕсли;
    КонецЕсли;
    
	Возврат Результат;
		
КонецФункции
Показать
Попробуйте так, возможно это не Справочник

Можно еще убрать ПометкуУдаления, на тот случай если объект удален, тогда надо изменить запрос:
        "ВЫБРАТЬ
        |   ТаблицаСсылок.Ссылка КАК Ссылка,
        |   ТаблицаСсылок.УИД КАК УИД
        |ПОМЕСТИТЬ ВТ
        |ИЗ
        |   &ТаблицаСсылок КАК ТаблицаСсылок
        |;
        |
        |////////////////////////////////////////////////////////////­­////////////////////
        |ВЫБРАТЬ
        |   ВТ.Ссылка КАК Ссылка,
        |   ВТ.УИД КАК УИД
        |ИЗ
        |   ВТ КАК ВТ";
Показать
10. Eva-Light 19.11.20 14:58 Сейчас в теме
(6) Попробовала оба варианта и с пометкой на удаление, и без, ещё немного переделала ваш вариант под поиск по коду, при поиске по уид пишет <Объект не найден>, а в варианте с кодом результат запроса пустой :(
Вариант с кодом:
&НаСервереБезКонтекста
Функция НайтиСсылкуПоКоду(Код) Экспорт
	
	ЭтоМассив = ТипЗнч(Код) = Тип("Массив");
	
    МассивМетаданных = Новый Массив;    
    МассивМетаданных.Добавить(Справочники);
    МассивМетаданных.Добавить(Документы);
    МассивМетаданных.Добавить(ПланыВидовХарактеристик);
    МассивМетаданных.Добавить(ПланыСчетов);
    МассивМетаданных.Добавить(ПланыВидовРасчета);
    МассивМетаданных.Добавить(ПланыОбмена);
    МассивМетаданных.Добавить(БизнесПроцессы);
    МассивМетаданных.Добавить(Задачи);
    
    МассивТипов = Новый Массив; 
    
    Для Каждого СтрМетаданное Из МассивМетаданных Цикл
        Для Каждого Стр Из СтрМетаданное.ТипВсеСсылки().Типы() Цикл
            МассивТипов.Добавить(Стр);
        КонецЦикла;
    КонецЦикла;
        
    ТаблицаСсылок = Новый ТаблицаЗначений;
    ТаблицаСсылок.Колонки.Добавить("Код"    , Новый ОписаниеТипов("Строка",,,,Новый КвалификаторыСтроки(36)));
    ТаблицаСсылок.Колонки.Добавить("Ссылка" , Новый ОписаниеТипов(МассивТипов));
            
    Запрос = Новый Запрос;
    Запрос.Текст = 
            "ВЫБРАТЬ
	        |   ТаблицаСсылок.Ссылка КАК Ссылка,
	        |   ТаблицаСсылок.Код КАК Код
	        |ПОМЕСТИТЬ ВТ
	        |ИЗ
	        |   &ТаблицаСсылок КАК ТаблицаСсылок
	        |;
	        |
	        |ВЫБРАТЬ
	        |   ВТ.Ссылка КАК Ссылка,
	        |   ВТ.Код КАК Код
	        |ИЗ
	        |   ВТ КАК ВТ";
  
    Запрос.УстановитьПараметр("ТаблицаСсылок",ТаблицаСсылок);
    РезультатЗапроса = Запрос.Выполнить();
    
    Если Не РезультатЗапроса.Пустой() Тогда
        Если ЭтоМассив Тогда
            Результат = РезультатЗапроса.Выгрузить();
        Иначе
            ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
            ВыборкаДетальныеЗаписи.Следующий();
            
            Результат = ВыборкаДетальныеЗаписи.Ссылка;
		КонецЕсли;
	Иначе
		Сообщить("Не найдено");
    КонецЕсли;
    
    Возврат Результат;
        
КонецФункции
Показать
11. Asya.Ozerova 41 19.11.20 23:03 Сейчас в теме
(10) В этом случае, (2) попробуйте, будет видно на каком Объекте он "Тормозит"
2. Drivingblind 228 19.11.20 14:01 Сейчас в теме
Установите в отладчике остановку по ошибке и автоматическое подключение к фоновым заданиям и посмотрите, что находится в УзелОбменаОбъект при попытке записать объект.

p.s. Вряд ли там справочник, кстати, реквизит "Код" может быть еще у узла плана обмена, а ваш код только по сравочникам отрабатывает.
Eva-Light; +1 Ответить
12. MaxS 2858 02.12.20 18:19 Сейчас в теме
Вероятно одна база была создана копией из другой базы, потом появился конфликт идентичных уникальных идентификаторов узлов обмена. Необходимо какой-нибудь обработкой поменять уид узла, удалить и заново настроить обмен. Не забыть удалить из папки обмена все файлы.
Eva-Light; +1 Ответить
13. Eva-Light 03.12.20 13:22 Сейчас в теме
(12) Спасибо, действительно, так и оказалось, помогло удаление всех узлов обмена и настройка новых
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот