Отключение регламентных заданий в копии базы
Данный код позволит вам автоматически отключать регламентные задачи в копиях баз данных.
- Описание
- Подробнее
Описание
- В константе «ИмяРабочейБазы» прописывается имя рабочей базы (Например: ”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(РабочаяБаза);
ВызватьИсключение «Выключенно регламентное задание. Перезапуститесь.» ; // Что бы прервать сеанс регламентного
КонецЕсли;
Возврат Ложь;
КонецФункции
И не забываем вставить вызов этой процедуры из модуля сеанса…
Процедура УстановкаПараметровСеанса()
ПолныеПрава.ПроверкаНаКопию();
…
КонецПроцедуры
