Доработка стандартной обработки ВыгрузкаЗагрузкаДанныхXML для загрузки только новых объектов

Часто, используя эту замечательную обработку, приходилось сожалеть, что там нет возможности выгружать только те объекты, которых нет в базе-приемнике. Теперь эта настройка появилась.

 Однажды, встала задача объединить 2 базы, одна из которых в свое время была родителем другой, но потом их пути разошлись, обмены давно не делались.  И одним из условий было, ни в коем случае не изменять уже существующие документы в основной базе, а только добавить недостающие из подчиненной.  В первую очередь, в голову пришла идея написать обработку для загрузки недостающих документов, используя внешнее соединение.  Но потом,  вспомнил о существовании такой замечательной обработки для обмена между идентичными базами как ВыгрузкаЗагрузкаДанныхXML, после небольшой модернизации,  задача была успешно решена.

   Поиск уже существующих объектов  производится по ссылке, может быть не всегда это верно, но в моём конкретном случае все отработало  как нужно. Для проверки пришлось создать запрос в цикле чтения объектов, но в данном случае, мне кажется, это оправдано.

   Если ЗагружатьТолькоНовые Тогда

     МетаД=ЗаписанноеЗначение.Метаданные();       

                ТипОбъекта=МетаД.ПолноеИмя();

                Если ОбъектСуществует(ТипОбъекта,МетаД.Имя,ЗаписанноеЗначение.Ссылка) Тогда                                                     

                   Продолжить;

                КонецЕсли;

   КонецЕсли;

Функция ОбъектСуществует(ТипОбъекта,Псевдоним,Ссылка)               

                Запрос = Новый Запрос;

                Запрос.Текст =

                               «ВЫБРАТЬ

                               |»+Псевдоним+«.Ссылка

                               |ИЗ

                               |»+ТипОбъекта+» КАК «+Псевдоним+«

                               |ГДЕ

                               |             «+Псевдоним+«.Ссылка = &Ссылка»;

                Запрос.УстановитьПараметр(«Ссылка», Ссылка);

                Результат = Запрос.Выполнить();

    Возврат не Результат.Пустой()         

КонецФункции

Если у кого-то есть идеи по оптимизации или какое-то другое решение данной задачи, то пишем в  комментариях, не стесняемся.

Надеюсь, что доработка пригодится кому-нибудь еще.

9 Comments

  1. CratosX

    Спасибо за экономию моего времени.

    Есть один вопрос — версия обработки 2.1.5, а на диске ИТС за октябрь 2012 года есть только 2.1.2. Где ты взял последнюю версию?

    Да, в шаблоны КД не глянул((. Вопрос снят

    Reply
  2. PowerBoy

    Вот так надо делать:

    Если ЭтоДокумент И ЗагружатьТолькоНовыеДокументы И Не ЗаписанноеЗначение.Ссылка.Пустая() Тогда

    Продолжить;

    КонецЕсли;

    http://infostart.ru/public/14887/

    Reply
  3. нОлька

    А в переносе справочников не было ни каких изменений??? У меня при использовании типовой обработки при переносе справочника «Расчетные счета» и поставленной галочкой «при необходимости» на контрагентах — задвоились строки в справочнике контрагенты, причем и код и наименование совпадают, а если галку не ставить, то расчетные счета вообще не переносятся

    Reply
  4. Sybr

    (3) В вашем случае вряд ли поможет, сравнение идет по ссылке, а не по наименованию или коду.

    Reply
  5. 1996oks

    Спасибо большое. Очень помогла.

    Reply
  6. higs

    Спасибо. И мне пригодилась.

    Reply
  7. maksa2005

    Спасибо. Пригодилось в самый раз)))

    Reply
  8. makas

    Проверил отчет в БП 2.0.64

    Единственное замечание, обработка переносит по GUID, а не по Кодам или Наименованию.

    Соответственно, задвоения в справочниках исправлял обработками «ПоискИЗаменаЗначений» и «ПоискИЗаменаДублирующихсяЭлементов»

    Reply
  9. Elected

    У меня зависает 1С-ка при запуске этой обработки.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *