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