Книга знаний

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

Альтернативное создание начального образа в УРБД

Статья описывает альтернативный способ создания начального образа для подчиненной базы данных.Автор статьи: Neco | Редакторы: Живой Ископаемый
Последняя редакция №8 от 24.01.11 | История
URL: http://kb.mista.ru/article.php?id=325

Ключевые слова: Начальный, образ, подчиненная база данных, план обмена, альтернативный


При формировании распределенной системы обмена данных, для создания начального образа подчиненной
базы обычно используется кнопка на форме списка планов обмена "Создать начальный образ" или
программная процедура:
СоздатьНачальныйОбраз(<Узел>, <Строка соединения>)

Это штатное решение 1С, однако, оно страдает некоторыми недостатками. Самый существенный из них это
такой, что если нужно выгружать много данных и база данных большая, то создание начального образа
растягивается на часы. Частенько, создании образа не завершается, по причине неожиданной
перезагрузки компьютера или ошибок выгрузки данных.
Чтобы обойти эти ограничения и ускорить создание начального образа предлагается следующая методика:
  1. Создать нужные узлы в плане обмена. На данном этапе мы должны в основной базе данных создать все
    нужные узлы, которые будут участвовать в обмене. Узлу присваивается уникальный код и
    наименование.
  2. Создать копию информационной базы. Если информационная база в файловом варианте, то копия
    создается простым копирование 1Cv8.1CD. Если вариант ИБ клиент-серверный, то сначала нужно выгрузить
    базу в режиме конфигуратора в dt-файл (1Cv8.dt), а потом загрузить ее в новую базу
  3. Подготовить вновь созданную базу к использованию, как подчиненную:
    • Удалим все не нужные узлы. Для это нужно использовать непосредственное удаление элементов из
      планов обмена.
    • Удалить изменения для узлов обмена. Программно данную процедуру для всех узлов обмена можно
      выполнить код:
      ПланыОбмена.УдалитьРегистрациюИзменений(Узел);
      

      Внимание! когда удаляем регистрацию изменений - следим чтобы в качестве параметра не передавался
      ЭтотУзел. Вызовет ошибку.

    • Очистить номера сообщений для всех узлов в планах обмена. Данная процедура нужно в случае если
      узлы для плана обмена не создавались "с нуля" и для них уже выгружались/загружались данные.
      ОбъектУзел = Узел.ПолучитьОбъект();    
      ОбъектУзел.НомерОтправленного = 0;
      ОбъектУзел.НомерПринятого = 0;
      ОбъектУзел.Записать();
      

    • Поменять местами код и наименование между главным узлом и подчиненным. Т.е. в нашей (копии
      главной) базе сейчас текущим узлом является главный узел, это потому что база создавалась
      копированием. Нужно код и наименование подчиненного узла перенести в текущий узел, а код и
      наименование главного узла в другой, не текущий. Например в планах обмена два узла: "Главный" и
      "Подчиненный". "Главный" имеет признак текущего для данной ИБ узла. Переносим код из узла "Главный"
      в узел "Подчиненный" и наоборот из "Подчиненный" в "Главный".
    • Если конфигарация базы-оригинала была подключена к хранилищу, то необходимо зайти в конфигуратор
      и отключиться от него. Обычно для этого достаточно просто открыть конфигурацию и в диалоге ввода
      пути и пароля для хранилища ничего не вводить, просто его закрыв. После выполнения этой процедуры
      обязательно закрыть конфигуратор. Следующий шаг необходимо выполнять при закрытом конфигураторе.
    • Установить главный узел. На данном этапе устанавливаем главным узел в который мы перенесли код и
      наименование из бывшего главного узла:
      ПланыОбмена.УстановитьГлавныйУзел(Узел);
      

      Внимание! при этой операции конфигуратор должен быть закрытым, потому что на конфигурацию
      накладывается "замок" - возможность изменения только в центре


    • При этом возле главного узла появиться красная пиктограмма.
  4. Осуществить тестовый обмен данными между подчиненным и главным узлом. Установить, настроить
    дополнительные реквизиты в главной и подчиненной базе. На этом этапе базы уже готовы для
    использования

Минус данной методики такой, что в подчиненную базу попадают сразу все данные, которые есть в
главной. Т.е. если у нас в настройках обмена есть фильтры на выгрузку данных, то данные в
подчиненной базе придется создавать "вычищать" вручную. Возможен вариант решения проблемы, когда
регистрируем все изменения для данных в подчиненной базе и выгружаем в главную. В главной полученные
данные обрабатываем так, что если эти данные не проходят по фильтру, то в подчиненную посылаем  
"УдалениеОбъекта". При загрузке сообщения в подчиненной базе, все "ненужные" элементы будут удалены.

Полезные ссылки в книге знаний:
Книга знаний: УРБД на v8 за четыре шага.;
Книга знаний: v8: Выборочная миграция данных в УРБД;
Закладка

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

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