Переопределение подсистем для поиска исправлений

  оглавление  Можно ли выполнять операции с базой без административного доступа к кластеру?

Обновлятор-1с. Как настроить пропуск операций с базой при внешнем управлении сеансами

Проблема

Ко мне обратился пользователь обновлятора с такой проблемой. У него на обслуживании много баз с доступом через сервис внешнего управления сеансами. И вот периодически через этот сервис пользователям временно ограничивается доступ к базе по той или иной причине (например, база на обслуживании или пользователь не оплатил услуги).

Обновлятор в этом случае тоже не может подключиться к базе и выдаёт ошибку при попытке выполнить по расписанию, например, архивацию или обновление. И вот было бы хорошо, чтобы обновлятор понимал, что эта ситуация с базой не ошибка, просто требуется временно пропускать любые операции с этой базой. Сейчас такая ситуация с базой приводит к ошибке и соответствующим уведомлениям администраторов, хотелось бы этого избежать.

Решение

Заходим в свойства базы, закладка "События", "Перед операцией". Из меню на панели скрипта выбираем пункт "обновлятор"-"методы"-"отменить операцию, если подключение к базе возвращает специальную ошибку".

В редактор вставится вот такая команда:

@cancel_if_error_connection_has(
    str: "#_база_на_обслуживании_#"
)

Что делает эта команда? Она выполняет подключение к базе и если это подключение вернуло ошибку и в тексте этой ошибки содержится значение параметра str, то выполняется пропуск всей операции с базой:

Таким образом на стороне кода сервиса управления сеансами просто достаточно вернуть любое сообщение, содержащее (помимо прочего текста) в данном случае строку #_база_на_обслуживании_#

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

Можно за кодовую строку взять вообще значение guid, например a03bfd76-c093-47a7-8f15-2a3d1b1b758d. Такое значение точно случайно не повторится, но я за более говорящую кодовую строку, так как она в итоге попадает в статус пропуска операции и вы видите её в отчёте обновлятора.

Поэтому возможно имеет смысл завести сразу несколько кодовых строк, говорящих о причине блокировке базы. И далее передать эти значения в команду через запятую, например, вот так:

@cancel_if_error_connection_has(
    str: "#_база_на_обслуживании_#, #_не_оплачен_период_#, #_ещё_какая_нибудь_причина_#"
)

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

С уважением, (преподаватель школы 1С программистов и разработчик обновлятора).



Владимир Милькин
Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.

Нажмите одну из кнопок, чтобы поделиться:



Переопределение подсистем для поиска исправлений

  оглавление  Можно ли выполнять операции с базой без административного доступа к кластеру?