В этой заметке предлагается способ избежать длительной первичной синхронизации Комплексной конфигурации после ее преобразования в распределенную (во всяком случае, это наблюдалось в релизе 7.70.459).

Суть проблемы, в общем-то, заключается в следующем. При преобразовании информационной базы Комплексной конфигурации в распределенную все, казалось бы, идет своим чередом: создаем периферийные информационные базы, делаем для них выгрузку, "разворачиваем" эти выгрузки на соответствующих компьютерах, запускаем, после чего производим автообмен. И вот здесь получается интересная ситуация: эти выгрузки сопоставимы по размеру с исходными выгрузками для периферийных баз! Как следствие, если мы запускаем автообмен на центральной базе, то 1С может "лопатить" одну выгрузку несколько часов! Разумеется, такое положение дел не устраивало никого.

К счастью, мне подсказали, что дело возможно в запуске процедуры обновления конфигурации на периферийных базах. Начал разбираться. Оказалось, что так оно и происходит: номер релиза при формировании периферийных баз не выгружался (кстати как и префикс ИБ, указываемый в настройках), соответственно, система считала нужным "перелопатить" практически всю БД, дабы обновить ее до текущей версии. Но ведь обновление-то, фактически, не требуется!

Поэтому пришлось немного "хакнуть" процедуру ПриНачалеРаботыСистемы в глобальном модуле.

Изначально проверка необходимости обновления выглядела так:/p>

Если Константа.НомерРелиза <> Лев(Метаданные.Комментарий, 8 ) Тогда
  Если ПравоДоступа("Использование","Обработка.ОбновлениеИБ") = 1 Тогда
    ОткрытьФорму("Обработка.ОбновлениеИБ");
  Иначе
    Предупреждение("Первый запуск программы для обновления информационной базы
      |должен произвести пользователь с правами администратора!", 60);
    СтатусВозврата(0);
    Возврат;
  КонецЕсли;
КонецЕсли;

А, как мы выяснили, Константа.НомерРелиза сразу после "разворачивания" периферийный базы пустая. Поэтому этот кусок кода был модифицирован:

Если Константа.НомерРелиза <> Лев(Метаданные.Комментарий, 8 ) Тогда
  Если Вопрос("(заплатка) Установить номер релиза "+Метаданные.Комментарий+" без выполнения обновления?", "Да+Нет")="Да" Тогда
    Константа.НомерРелиза = Лев(Метаданные.Комментарий, 8 );
  Иначе
    Если ПравоДоступа("Использование","Обработка.ОбновлениеИБ") = 1 Тогда
      ОткрытьФорму("Обработка.ОбновлениеИБ");
    Иначе
      Предупреждение("Первый запуск программы для обновления информационной базы
        |должен произвести пользователь с правами администратора!", 60);
      СтатусВозврата(0);
      Возврат;
    КонецЕсли;
  КонецЕсли;
КонецЕсли;

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

В результате проделанных манипуляций, проблема "здоровой" первичной выгрузки из периферийной базы была решена. Спасибо умным людям с "Волшебного форума" smile


Категория: Программирование, 1С | Опубликовано 03.06.2009 | Редакция от 19.02.2017

Похожие материалы:


Комментарии, обсуждение

комментарии простроенны на платформе Disqus