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

09.08.12

Разработка - Универсальные функции

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

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

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

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

См. также

Универсальные функции Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

21.05.2024    22013    dimanich70    81    

147

Универсальные функции Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    4241    3    John_d    11    

57

Универсальные функции Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    20846    atdonya    25    

58

Универсальные функции Программист Платформа 1С v8.3 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    5714    ke.92@mail.ru    17    

65

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    15471    YA_418728146    7    

169

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    3768    59    progmaster    8    

4

Инструментарий разработчика Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    18757    173    sapervodichka    112    

136
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
0. BorisMor 310 09.08.12 07:32 Сейчас в теме
Данный код позволит вам автоматически отключать регламентные задачи в копиях баз данных.

Перейти к публикации

1. Zero_nv 128 09.08.12 11:50 Сейчас в теме
Судя по коду это все ориентированно на клиент-сервер. Тогда зачем все это придумывать??
В консоли сервера предприятия 1С вибираем базу которая является копией. Правой кнопкой - Свойства - и ставим галочку напротив "Блокировка регламентных задач включена"
Регламентные задачи нас больше не беспокоят
w-divin; xzorkiix; KonstB; +3 1 Ответить
2. KonstB 180 09.08.12 12:00 Сейчас в теме
3. BorisMor 310 09.08.12 12:29 Сейчас в теме
(1) Zero_nv,
Вы же занимаетесь автоматизацией, а предлагаете ручками ставить галку :)
Фактически мы так и делали, но после пары "несчетных случаев" решили что на людей надежды нет.
clareon; semagin@gmail.com; +2 Ответить
5. Zero_nv 128 09.08.12 12:45 Сейчас в теме
(3) BorisMor объясните поподробней, что вы имели ввиду под фразой: "Фактически мы так и делали, но после пары "несчетных случаев" решили что на людей надежды нет."
И причем сдесь ручками ставить галку?? Это работает по принципу: один раз поставил и забыл, сколько бы не перезаливал бы данные из бекапов. Может я не понимаю что-то или у вас какая-то специфичная ситуация?
9. BorisMor 310 09.08.12 13:06 Сейчас в теме
(5) Zero_nv,
Один раз это делается в случае если у вас одна тестовая базе.
У нас исторически несколько баз и несколько программистов.
14. Zero_nv 128 10.08.12 04:30 Сейчас в теме
(9) у нас тож несколько программистов и 6 копий БД, но при этом кластером заведует один (!!!) человек. С него весь и спрос.
15. BorisMor 310 10.08.12 06:10 Сейчас в теме
(14) Zero_nv,
Ну чтож... значит свою расхлябанность мы решаем технической подкованностью))
Код "кладет соломку" там где пару раз упали - ничего плохого тут не вижу.
it2_shans; redtram; DanilaDru; +3 Ответить
6. djd.sf 09.08.12 12:53 Сейчас в теме
(3) но ведь можно же скрипт vbs написать, конфу трогать не придется.
7. Zero_nv 128 09.08.12 12:59 Сейчас в теме
(6) djd.sf Поясните каким образом можно использовать скрипт в этом случае
8. djd.sf 09.08.12 13:03 Сейчас в теме
(7) может быть я неправильно понял задачу, но что мешает переписать код в публикации на vbs? я так понял происходит подключение к com объекту, перебираются базы и по некому признаку выбирают базу, где изменяют свойство ScheduledJobsDenied
11. BorisMor 310 09.08.12 13:21 Сейчас в теме
(8) djd.sf,
Регламентное задание может сработать раньше чем отключающий скрипт. имхо
12. kapustinag 09.08.12 16:19 Сейчас в теме
(11)

Присоединяюсь к хору "непонятливых". Пока складывается впечатление, что либо что-то недообъяснено, либо Вы сами в своем хозяйстве неправильно хозяйствуете.
Ситуация следующая: может быть только одно из двух:
1) Тестовая база на кластере создана заново, и в нее загружена выгрузка из рабочей или восстановлен SQL-бэкап.

В этом случае, при создании базы на кластере 1С, нужно просто поставить галочку "Блокировка регламентных заданий включена", и все. А эта галочка и так поставлена по умолчанию при создании базы.

2) Тестовая база на кластере уже была ранее, и в нее загружена выгрузка из рабочей или восстановлен SQL-бэкап.

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

То есть, если при создании базы в кластере администратор кластера отработал ответственно, то и незачем огород городить.
Более того, если кластеры разные (один кластер - рабочий, а второй - тестовый), то имя тестовой базы может совпадать с именем рабочей, и Ваша проверка ничего не отключит.
13. kapustinag 09.08.12 16:22 Сейчас в теме
(11)
Конечно, если каждый разработчик может создавать себе на кластере все, что ему в голову взбредет, то такая отключалка нужна. Но это вряд ли хорошая практика. Может быть, имеет смысл уменьшить количество "хозяев" у кластера, и проблема уйдет сама собой?
4. xzorkiix 35 09.08.12 12:32 Сейчас в теме
// ---- Инцилизиурем константы ----
но это же не констранты! [кричит]

А так рекомендовал бы
Весь код метода работы с кластером и вкл/выкл регламентных заданий сделать самостоятельным метод,
например
УстановитьРежимВыполненияРегламентыхЗаданий()

И сделать главным акцентом поста, а привязка его в начало сеанса пользователя по условию как пример применения тогда комментарий (0) не будет сам собой напрашиваться.

так же в примере не ясно, если Сеанс инициализирует само регламентное задание - где его прерывание?
10. BorisMor 310 09.08.12 13:11 Сейчас в теме
(4) xzorkiix,
так же в примере не ясно, если Сеанс инициализирует само регламентное задание - где его прерывание?

Прерывается за счет вызова исключения во время инициализации сеанса.
16. пользователь 16.08.12 16:34
Сообщение было скрыто модератором.
...
18. WellMaster 104 14.12.16 17:36 Сейчас в теме
Извините, просто глаза режет: http://tsya.ru/
20. nicxxx 255 24.11.17 16:56 Сейчас в теме
(18) да да, база "не являеться" :))
19. le0nid 14.12.16 17:51 Сейчас в теме
Тоже используем нечто подобное, но не регламентные задания отключаем, а отключаются e-mail, тома файлов, папки обмена. Меняется заголовок.

Кода не много, а пару раз выручало.

З.ы. и да часть баз РИБ, причем со своими админами, что тоже немаловажный фактор в пользу использования такого функционала.
Оставьте свое сообщение