Каталог решений - Отключение регламентных заданий в копии базы

Отключение регламентных заданий в копии базы

Отключение регламентных заданий в копии базы

В наличии

Данный код позволит вам автоматически отключать регламентные задачи в копиях баз данных.

Категория:

Описание

У нас есть регламентные задачи которые надо выполнять только на рабочей базе (забирает данные с другой базы). При создание копии базы данные «уходили» в нерабочую базу. Что бы это искоренить был придуман следующий алгоритм дейсвий:

  • В константе «ИмяРабочейБазы» прописывается имя рабочей базы (Например: ”UT82_Live”)
  • Если создается копия базы то она называется по другому (Например: ”UT82_Test”)
  • Если имя базы не совпадает с константой «ИмяРабочейБазы», то идет отключение регламенты задач.

Для этого была создана процедура «ПроверкаНаКопию()». Процедура находиться в общем привилигированнм модуле.
Вызваться процедура при инициализации сеанса пользователя («Модуль сеанса» — Процедура «УстановкаПараметровСеанса()»).
Сама процедура:

// Проверяет не являеться ли текущая база копией
// Определяеться по константе ИмяРабочейБазы — которая не должна отличаться от текущей базы
// Если база копия то отрубаем регламентное задание
// Истина — это не копия
// Ложь — это копия базы
Функция ПроверкаНаКопию()  Экспорт
   
// —- Проверка на копию —-
   
ИмяРабочейБазы = СокрЛП(НРег(Константы.ИмяРабочейБазы.Получить()));
   
СтрокаСоединения = НРег(СтрокаСоединенияИнформационнойБазы());

    ИскомаяБаза = «»»» + ИмяРабочейБазы + «»»»;
   
БазаНайдена = Найти(СтрокаСоединения,ИскомаяБаза) > 0;

    Если БазаНайдена и Не ПустаяСтрока(ИмяРабочейБазы) тогда
        Возврат Истина;
    Иначе
       
#Если НаКлиенте тогда
       
Сообщить(«Текущая базе не являеться рабочей! (см. константу «»ИмяРабочейБазы»») » + Константы.ИмяРабочейБазы.Получить());
       
#КонецЕсли
   
КонецЕсли;

    // —- Инцилизиурем константы —-

    ИмяСервера = «server1C»;        // адрес 1С сервер
   
АдминКластера = «»;
   
ПарольАдминаКластера = «»;
   
Админ1С = «COMConnect»;     // пользователь с полными правами
   
ПарольАдмина1С = «»;        // пароль админа 1С

    // —- Отписываемся от регламентых заданий —-
    Соединение = Новый COMОбъект(«V82.COMConnector»);               // Соединились с 1С
   
Попытка
       
СоединениеАгент = Соединение.ConnectAgent(ИмяСервера);      // Соединились с 1С Агентом
       
Кластеры = СоединениеАгент.GetClusters();                   // Получитли массив кластеров (COMSafeArray)
   
Исключение
       
#Если НаКлиенте тогда
       
Сообщить(«Ошибка соединения с COM сервером: » + ОписаниеОшибки());
       
#КонецЕсли
       
Возврат Ложь;
    КонецПопытки;

    КоличествоКластеров = Кластеры.GetLength(0);
    Если
КоличествоКластеров < 1 тогда
       
#Если НаКлиенте тогда
       
Сообщить(«Не найден кластер на сервере » + ИмяСервера);
       
#КонецЕсли
       
Возврат Ложь;
    КонецЕсли;

    РабочийКластер = Кластеры.GetValue(0);
    Попытка
       
// Авторизируемся на кластере (Кластер,Имя,Пароль)
       
СоединениеАгент.Authenticate(РабочийКластер, АдминКластера, ПарольАдминаКластера);
    Исключение
       
#Если НаКлиенте тогда
       
Сообщить(«Ошибка авторизации: » + ОписаниеОшибки());
       
#КонецЕсли
       
Возврат Ложь;
    КонецПопытки;

    // Подключаемся к рабочему процессу
   
РабочийПроцесс = СоединениеАгент.GetWorkingProcesses(РабочийКластер).GetValue(0);
   
Порт = СтрЗаменить(Строка(РабочийПроцесс.MainPort),Символы.НПП,«»);  // убиваем непереносимые пробелы
   
СтрокаПодлючения = РабочийПроцесс.HostName + «:» + Порт;
   
СоединениеСРабочимПроцессом = Соединение.ConnectWorkingProcess(СтрокаПодлючения);
   
СоединениеСРабочимПроцессом.AddAuthentication(Админ1С,ПарольАдмина1С);

    // Ищем текущую базу данных
   
МассивБаз = СоединениеСРабочимПроцессом.GetInfoBases();
   
БазаНайдена = Ложь;
    Для каждого
РабочаяБаза из МассивБаз цикл
       
ИскомаяБаза = НРег(«»»» + РабочаяБаза.Name + «»»»);
       
БазаНайдена = Найти(СтрокаСоединения,ИскомаяБаза) > 0;
        Если
БазаНайдена тогда
            Прервать;
        КонецЕсли;
    КонецЦикла;

    Если Не БазаНайдена тогда
       
#Если НаКлиенте тогда
       
Сообщить(«База (» + СтрокаСоединения + «) не найдена на сервере » + ИмяСервера);
       
#КонецЕсли
       
Возврат Ложь;
    КонецЕсли;

    Если НЕ РабочаяБаза.ScheduledJobsDenied тогда
       
#Если НаКлиенте тогда
       
Сообщить(«Отключаем регламентное задание»);
       
#КонецЕсли
       
РабочаяБаза.ScheduledJobsDenied = Истина;   // Блокируем выполнения регламентных заданий
       
СоединениеСРабочимПроцессом.UpdateInfoBase(РабочаяБаза);
        ВызватьИсключение
«Выключенно регламентное задание. Перезапуститесь.» ; // Что бы прервать сеанс регламентного
   
КонецЕсли;

    Возврат Ложь;
КонецФункции

И не забываем вставить вызов этой процедуры из модуля сеанса…

Процедура УстановкаПараметровСеанса()
   
ПолныеПрава.ПроверкаНаКопию();
    …
КонецПроцедуры

has been added to your cart:
Оформление заказа