|
КД 3.0 Непонятно работает СначалаПоУникальномуИдентификаторуПотомПоПолямПоиска | ☑ | ||
---|---|---|---|---|
0
soopchik
29.11.20
✎
02:21
|
Всем доброго времени суток.
Не могу понять как же всё таки искать сначала по GUID а потом по полям поиска По коду наблюдаю такой алгоритм что после поиска по GUID Программно формируется текст запроса в который потом добавляется левое соединение с регистром ПубличныеИдентификаторыСинхронизируемыхОбъектов И условие на то что записей в нём с найденной ссылкой не должно быть О чем в целом и сказано на ИТС "Если в загружаемом объекте есть информация об исходном GUID и вариант идентификации для объекта "По GUID" или "По GUID и полям поиска", то поиск выполняется среди всех объектов заданного типа, кроме тех, для которых в РПИ уже установлены соответствия." (хотя возможно это и не об этом но очень уж похоже) И выходит так что объекты с одними и теми же полями поиска но с разными GUID все равно дублируются, т.к. первый создаётся в базе и для него создается запись в регистре а для второго не подбирается ссылка созданная при первом потому что для этой самой подобранной по полям поиска ссылке есть запись в этом регистре БСП 3.0.3.341 Не подскажите как все же обойти эту ситуацию, без допилов в БСП ? Я так понимаю что там все должно быть не сложно и я просто где-то не там смотрю. Спасибо. |
|||
1
hhhh
29.11.20
✎
03:08
|
(0) в каком модуле и в какой процедуре смотрите?
|
|||
2
soopchik
29.11.20
✎
12:47
|
(1) модуль: ОбменДаннымиXDTOСервер
Функция СтруктураОбъектаXDTOВДанныеИБ( В ней ДанныеИБ = СсылкаОбъектаПоСвойствамОбъектаXDTO( Фрагмент кода: Если ПоискЗапросом Тогда Запрос = Новый Запрос; ТекстЗапроса = "ВЫБРАТЬ | Таблица.Ссылка КАК Ссылка |ИЗ | [ПолноеИмя] КАК Таблица |ГДЕ | [УсловиеОтбора]"; Отбор = Новый Массив; Для Каждого ПолеПоиска Из ПоляПоиска Цикл Если ОбменДаннымиПовтИсп.ЭтоСтроковыйРеквизитНеограниченнойДлины(ПравилоКонвертации.ПолноеИмя, ПолеПоиска.Ключ) Тогда ОтборСтрокой = "ВЫРАЗИТЬ(Таблица.[Ключ] КАК СТРОКА([ДлинаСтроки])) = &[Ключ]"; ОтборСтрокой = СтрЗаменить(ОтборСтрокой, "[Ключ]", ПолеПоиска.Ключ); ОтборСтрокой = СтрЗаменить(ОтборСтрокой, "[ДлинаСтроки]", Формат(СтрДлина(ПолеПоиска.Значение), "ЧГ=0")); Отбор.Добавить(ОтборСтрокой); Иначе Отбор.Добавить(СтрЗаменить("Таблица.[Ключ] = &[Ключ]", "[Ключ]", ПолеПоиска.Ключ)); КонецЕсли; Запрос.УстановитьПараметр(ПолеПоиска.Ключ, ПолеПоиска.Значение); КонецЦикла; УсловиеОтбора = СтрСоединить(Отбор, " И "); Если АнализироватьПубличныеИдентификаторы Тогда // Из поиска необходимо исключить уже сопоставленные ранее объекты. ТекстСоединения = " ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПубличныеИдентификаторыСинхронизируемыхОбъектов КАК ПубличныеИдентификаторы | ПО ПубличныеИдентификаторы.Ссылка = Таблица.Ссылка И ПубличныеИдентификаторы.УзелИнформационнойБазы = &УзелОбмена"; УсловиеОтбора = УсловиеОтбора + Символы.ПС + " И ПубличныеИдентификаторы.Ссылка is null"; ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ГДЕ", ТекстСоединения + Символы.ПС + " ГДЕ"); Запрос.УстановитьПараметр("УзелОбмена", УзелОбмена); КонецЕсли; |
|||
3
soopchik
29.11.20
✎
12:50
|
(1) Переменная оооооо по условию (т.е. всегда):
АнализироватьПубличныеИдентификаторы = ВариантИдентификации = "СначалаПоУникальномуИдентификаторуПотомПоПолямПоиска" И ДанныеXDTOСодержатСсылку И ЗначениеЗаполнено(УзелОбмена); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |