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