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