Книга знаний

1С:Предприятие / v8 / Приемы программирования / Обмен данными, УРБД

v8: Выборочная миграция данных в УРБД

Скелет кода по настройке выборочной миграции данных в УРБД.Автор статьи: Гений 1С | Редакторы: MikleV, TormozIT
Последняя редакция №10 от 29.11.06 | История
URL: http://kb.mista.ru/article.php?id=278

Ключевые слова: УРБД,миграция,выборочная


Иногда в УРБД нужно, чтобы элементы мигрировали не по всем базам, а только в выборочные места.
Это легко настроить.
Объясняю по шагам.
Существуют два метода.

Метод 1 - прописывание в каждом модуле объекта



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

Далее в процедуру ПриЗаписи модуля объекта вставить вызов процедуры обРегистрацияИзменений (именно внутри такого условия):

Процедура ПриЗаписи(Отказ)
    Если ЭтотОбъект.ОбменДанными.Получатели.АвтоЗаполнение и не ЭтотОбъект.ОбменДанными.Загрузка Тогда 
        обРегистрацияИзменений(ЭтотОбъект) ;
    КонецЕсли;
КонецПроцедуры


В процедуре обРегистрацияИзменений вызывается функция обОтправлятьОбъектВУзел для проверки того, нужно ли отправлять объект в указанную базу.

Процедура обРегистрацияИзменений(Объект) Экспорт 
    ГлавныйУзел = ПланыОбмена.ГлавныйУзел();
    Если ГлавныйУзел=Неопределено Тогда    //это центральная база
        ПланОбмена = ПланыОбмена.Распределенка.Выбрать();
        Пока ПланОбмена.Следующий() Цикл
            //В сам себя не отправляем
            Если ПланОбмена = ПланыОбмена.Распределенка.ЭтотУзел() тогда
                Продолжить;
            КонецЕсли;    
            
            //Некое хитрое условие
            Если обОтправлятьОбъектВУзел(Объект, ПланОбмена) Тогда
                Объект.ОбменДанными.Получатели.Добавить(ПланОбмена.Ссылка);
            КонецЕсли;
        КонецЦикла;
    Иначе
        //изменен периферийный объект в базе создания
        Объект.ОбменДанными.Получатели.Добавить(ГлавныйУзел);
    КонецЕсли;
КонецПроцедуры


Вот собственно и все.

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

Метод 2 - прописывание в плане обмена


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

Процедура ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента) 
    //Некое хитрое условие
    Если НЕ обОтправлятьОбъектВУзел(ЭлементДанных, Ссылка) Тогда
        ОтправкаЭлемента=ОтправкаЭлементаДанных.Игнорировать;
        Отказ=истина;
    КонецЕсли;
КонецПроцедуры


Как определеять, что отправлять в филиалы


Наиболее простой способ - хранить в документах реквизит подразделение и регистр сведений, который определяет, документы по каким подразделениям должны приходить на филиал.

Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2024 | Mista.ru

Яндекс.Метрика