Разорвать соединения информационной базой. Разрывает соединения с информационной базой по фильтру.
// Разрывает соединения с информационной базой по фильтру.
//
// Параметры:
// ПараметрыАдминистрированияКластера - Структура, описывающая параметры подключения к кластеру серверов,
// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(),
// ПараметрыАдминистрированияИБ - Структура, описывающая параметры подключения к информационной базе,
// описание - см. АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(),
// Фильтр - Описание условия фильтрации соединений, которые требуется завершить.
// Варианты:
// 1. Массив структур, описывающих условия фильтрации разрываемых соединений. Поля структур, входящих в массив:
// Свойство - Строка, имя свойства, по которому осуществляется фильтрация. Допустимые значения - см.
// Возвращаемое значение функции АдминистрированиеКластераКлиентСервер.СвойстваСоединения(),
// ВидСравнения - значение системного перечисления ВидСравнения, вид сравнения значений соединений с указанным
// в условии фильтра. Допустимые значения:
// ВидСравнения.Равно,
// ВидСравнения.НеРавно,
// ВидСравнения.Больше (только для числовых значений),
// ВидСравнения.БольшеИлиРавно (только для числовых значений),
// ВидСравнения.Меньше (только для числовых значений),
// ВидСравнения.МеньшеИлиРавно (только для числовых значений),
// ВидСравнения.ВСписке,
// ВидСравнения.НеВСписке,
// ВидСравнения.Интервал (только для числовых значений),
// ВидСравнения.ИнтервалВключаяГраницы (только для числовых значений),
// ВидСравнения.ИнтервалВключаяНачало (только для числовых значений),
// ВидСравнения.ИнтервалВключаяОкончание (только для числовых значений),
// Значение - Число, Строка, Дата, Булево, СписокЗначений, Массив, Структура - значение, с которым
// сравнивается значение соответствующего свойства соединения. При ВидСравнения.ВСписке и
// ВидСравнения.НеВСписке в качестве значения должны передаваться СписокЗначений или Массив, содержащие набор
// значений, с которыми будет выполняться сравнение. При ВидСравнения.Интервал,
// ВидСравнения.ИнтервалВключаяГраницы,
// ВидСравнения.ИнтервалВключаяНачало и ВидСравнения.ИнтервалВключаяОкончание в качестве значения должны
// передаваться структуры с полями С и По, значения которых образуют интервал, с которым будет выполняться
// соответствующее сравнение,
// 2. Структура (упрощенный вариант), ключ - Имя свойства соединения (см. выше), значение - значение, с которым
// выполняется сравнение. При использовании данного варианта описания фильтра сравнение всегда выполняется на
// равенство.
//
Процедура РазорватьСоединенияСИнформационнойБазой(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ, Знач Фильтр = Неопределено) Экспорт
COMСоединитель = COMСоединитель();
СоединениеСАгентомСервера = СоединениеСАгентомСервера(
COMСоединитель,
ПараметрыАдминистрированияКластера.АдресАгентаСервера,
ПараметрыАдминистрированияКластера.ПортАгентаСервера);
Кластер = ПолучитьКластер(
СоединениеСАгентомСервера,
ПараметрыАдминистрированияКластера.ПортКластера,
ПараметрыАдминистрированияКластера.ИмяАдминистратораКластера,
ПараметрыАдминистрированияКластера.ПарольАдминистратораКластера);
Значение = Новый Массив;
Значение.Добавить("1CV8"); // идентификатор приложения 1С:Предприятие в режиме запуска "Толстый клиент".
Значение.Добавить("1CV8C"); // идентификатор приложения 1С:Предприятие в режиме запуска "Тонкий клиент".
Значение.Добавить("WebClient"); // идентификатор приложения 1С:Предприятие в режиме запуска "Веб-клиент".
Значение.Добавить("Designer"); // идентификатор приложения Конфигуратор.
Значение.Добавить("COMConnection"); // идентификатор сессии внешнего соединения 1С:Предприятия через COM.
Значение.Добавить("WSConnection"); // идентификатор сессии Web-сервиса.
Значение.Добавить("BackgroundJob"); // идентификатор сессии обработки заданий.
Значение.Добавить("WebServerExtension"); // идентификатор расширения Web-сервера.
АдминистрированиеКластераКлиентСервер.ДобавитьУсловиеФильтра(Фильтр, "ИдентификаторКлиентскогоПриложения", ВидСравнения.ВСписке, Значение);
КоличествоПопыток = 3;
ВсеСоединенияРазорваны = Ложь;
Для ТекущаяПопытка = 0 По КоличествоПопыток Цикл
Соединения = ПолучитьСоединения(
COMСоединитель,
СоединениеСАгентомСервера,
Кластер,
ПараметрыАдминистрированияИБ,
Фильтр,
Ложь);
Если Соединения.Количество() = 0 Тогда
ВсеСоединенияРазорваны = Истина;
Прервать;
ИначеЕсли ТекущаяПопытка = КоличествоПопыток Тогда
Прервать;
КонецЕсли;
Для каждого Соединение Из Соединения Цикл
Попытка
Соединение.СоединениеСРабочимПроцессом.Disconnect(Соединение.Соединение);
Исключение
// Соединение могло уже завершиться к моменту вызова Disconnect.
Продолжить;
КонецПопытки;
КонецЦикла;
КонецЦикла;
Если НЕ ВсеСоединенияРазорваны Тогда
ВызватьИсключение НСтр("ru = 'Не удалось разорвать соединения.'");
КонецЕсли;
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////