Довольно часто при обмене данными нужно прописать соответствие одного объекту другому, не учитывая возможные реквизиты поиска и прочие очевидные вещие.
- УзелОбмена - не заполняем, чтобы не путаться под ногами у реальных фоновых обменов.
- СсылкаВДругойИБ - уникальный идентификатор(источник БД 8 ) или другая уникальная конкатенация полей объекта.
- СобственнаяСсылка - ссылка назначение в текущей БД.
- ИмяТипаПриемника - строковое представление типа ссылки объекта в источнике
Если НомерВариантаПоиска = 1 тогда
Выполнить(Алгоритмы.ПолучитьСоотвествиеОбъектов);
КонецЕсли;
и создаем сам аглоритм "ПолучитьСоотвествиеОбъектв" с установленным флагом "Использовать при загрузке"
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| СоответствиеОбъектовДляОбмена.СобственнаяСсылка КАК Ссылка
|ИЗ
| РегистрСведений.СоответствиеОбъектовДляОбмена КАК СоответствиеОбъектовДляОбмена
|ГДЕ
| СоответствиеОбъектовДляОбмена.УзелОбмена = &УзелОбмена
| И СоответствиеОбъектовДляОбмена.СсылкаВДругойИБ = &СсылкаВДругойИБ
| И СоответствиеОбъектовДляОбмена.ИмяТипаПриемника = &ИмяТипаПриемника";
Запрос.УстановитьПараметр("УзелОбмена", Неопределено);
Запрос.УстановитьПараметр("СсылкаВДругойИБ",
СвойстваПоиска.Получить("{УникальныйИдентификатор}"));
Запрос.УстановитьПараметр("ИмяТипаПриемника", СтруктураСвойств.ТипСсылкиСтрокой);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
СсылкаНаОбъект=Выборка.Ссылка;
ОбъектНайден=Истина;
КонецЕсли;
Теперь более подробно о алгоритме.
Алгоритм реализует передачу переменной СсылкаНаОбъект определенного значения.
Из документации: СсылкаНаОбъект - ссылка на результирующий объект. Если в обработчике установить данную ссылку (не пустую) то программа ее запомнит и поиск на этом будет считать успешно завершенным
Теперь о том чего в документации не написано:
- Если установить данную ссылку (не пустую) , обработчик загрузки не поймет, что объект найден, и изменит его несмотря на установку свойства НеЗамещать. Поэтому присвоим значение переменной ОбъектНайден=Истина;
- Получить уникальный идентификатор можно из структуры поиска, если установлена синхронизация по уникальному идентификатору СвойстваПоиска.Получить("{УникальныйИдентификатор}")
- Строковое представление типа можно вытянуть еще из одной недокументированной структуры - СтруктураСвойств вот образец значений, которые она может содержать
Дружище, ты спас мой закипавший мозг )))
ОтветитьУдалить