Архив метки Синхронизация

Блокировка работы пользователей во время загрузки данных при синхронизации. РИБ

Роман Осадченко No Comments

У каждого, кто занимается организацией обмена на 1С, рано или поздно возникает необходимость загрузить из одного узла в другой значительный объем данных. Длительные блокировки в этом случае — дело обычное и нежелательное, время загрузки может исчисляться сутками.

К написанию этой заметки меня побудил личный опыт, а также опыт товарищей по несчастью, которые не нашли правильное решение.

К этой ситуации может привести две причины (обычно в типовых конфигурациях):

  1. Обмен между узлами не проводился долгое время (ftp пропал, обновление конфигурации одного из узлов вовремя не провели, и т.п.)
  2. В одном из узлов обмена проводится значительный объем документов за большой период времени при выключенном или медленном обмене.

На форумах встречается несколько способов решения проблемы:

  1. Ручной
    1. Очистка таблицы регистрации в узле-отправителе
    2. Регистрация в таблицах регистрации узла обмену всех справочников
    3. Проведение обмена с другими узлами
    4. Помесячная регистрация всех документов в таблицах узла-отправителя с обменом
  2. Автоматический (предложение и исполнение компанией «Рарус»)
    1. Создание копии плана обмена
    2. Регистрация в копии плана обмена изменений из основного плана обмена «порциями»
    3. Проведение обмена через копию плана обмена
    4. Удаление копии плана обмена

Как видим, эти решения сводятся к тому, чтобы передавать данные порциями.

 

Я расскажу о способе решения, при котором данные будут приниматься порциями, что значительно более удобно, и требует меньше времени на реализацию.

Отбросив предложения разбить файл на части (у меня его объем составлял больше 3 Гб, кто работает с XML — меня поймёт), мы посмотрим на возможности платформы.

У метода ПрочитатьИзменения() мы увидим два параметра:

  1. ЧтениеXML
  2. Количество элементов в транзакции

Вот второй параметр нам как раз и нужен! В типовых конфигурациях вторым параметром передаётся 0 (нуль), что означает: «Загрузка данных производится в рамках одной транзакции».

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

В моём примере оказалось достаточно поставить 5000 элементов — достаточно разумный компромисс между скоростью загрузки и длительностью блокировок.

Время загрузки каждой порции составило около 300 секунд.

Ниже решение на скриншотах:

.