Завершить работу пользователей. Выполнить завершение активных сеансов, если превышено время ожидания, а затем
// Выполнить завершение активных сеансов, если превышено время ожидания, а затем
// завершить текущий сеанс.
//
Процедура ЗавершитьРаботуПользователей() Экспорт
// Получим текущее значение параметров блокировки.
ТекущийРежим = СоединенияИБВызовСервера.ПараметрыБлокировкиСеансов(Истина);
ВремяНачалаБлокировки = ТекущийРежим.Начало;
ТекущийМомент = ТекущийРежим.ТекущаяДатаСеанса;
Если ТекущийМомент < ВремяНачалаБлокировки Тогда
ТекстСообщения = НСтр("ru = 'Блокировка работы пользователей запланирована на %1.'");
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, ВремяНачалаБлокировки);
ПоказатьОповещениеПользователя(НСтр("ru = 'Завершение работы пользователей'"),
"e1cib/app/Обработка.БлокировкаРаботыПользователей",
ТекстСообщения, БиблиотекаКартинок.Информация32);
Возврат;
КонецЕсли;
КоличествоСеансов = ТекущийРежим.КоличествоСеансов;
Если КоличествоСеансов <= 1 Тогда
// Отключены все пользователи, кроме текущего сеанса.
// В последнюю очередь предлагаем завершить сеанс, запущенный с параметром "ЗавершитьРаботуПользователей".
// Такой порядок отключений необходим для обновления конфигурации с помощью пакетного файла.
СоединенияИБКлиент.УстановитьПризнакРаботаПользователейЗавершается(Ложь);
Оповестить("ЗавершениеРаботыПользователей", Новый Структура("Статус, КоличествоСеансов", "Готово", КоличествоСеансов));
СоединенияИБКлиент.ЗавершитьРаботуЭтогоСеанса();
Возврат;
КонецЕсли;
БлокировкаУстановлена = ТекущийРежим.Установлена;
Если Не БлокировкаУстановлена Тогда
Возврат;
КонецЕсли;
// Если информационная база файловая, то часть соединений не может быть завершена принудительно.
Если СтандартныеПодсистемыКлиент.ПараметрКлиента("ИнформационнаяБазаФайловая") Тогда
Возврат;
КонецЕсли;
// После начала блокировки сеансы всех пользователей должны быть отключены
// если этого не произошло пробуем принудительно прервать соединения.
ОтключитьОбработчикОжидания("ЗавершитьРаботуПользователей");
Попытка
ПараметрыАдминистрирования = СоединенияИБКлиент.СохраненныеПараметрыАдминистрирования();
Если ОбщегоНазначенияКлиент.КлиентПодключенЧерезВебСервер() Тогда
СоединенияИБВызовСервера.УдалитьВсеСеансыКромеТекущего(ПараметрыАдминистрирования);
Иначе
СоединенияИБКлиентСервер.УдалитьВсеСеансыКромеТекущего(ПараметрыАдминистрирования);
КонецЕсли;
СоединенияИБКлиент.СохранитьПараметрыАдминистрирования(Неопределено);
Исключение
СоединенияИБКлиент.УстановитьПризнакРаботаПользователейЗавершается(Ложь);
ПоказатьОповещениеПользователя(НСтр("ru = 'Завершение работы пользователей'"),
"e1cib/app/Обработка.БлокировкаРаботыПользователей",
НСтр("ru = 'Завершение сеансов не выполнено. Подробности см. в Журнале регистрации.'"), БиблиотекаКартинок.Предупреждение32);
ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СоединенияИБКлиент.СобытиеЖурналаРегистрации(),
"Ошибка", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()),, Истина);
Оповестить("ЗавершениеРаботыПользователей", Новый Структура("Статус,КоличествоСеансов", "Ошибка", КоличествоСеансов));
Возврат;
КонецПопытки;
СоединенияИБКлиент.УстановитьПризнакРаботаПользователейЗавершается(Ложь);
ПоказатьОповещениеПользователя(НСтр("ru = 'Завершение работы пользователей'"),
"e1cib/app/Обработка.БлокировкаРаботыПользователей",
НСтр("ru = 'Завершение сеансов выполнено успешно'"), БиблиотекаКартинок.Информация32);
Оповестить("ЗавершениеРаботыПользователей", Новый Структура("Статус,КоличествоСеансов", "Готово", КоличествоСеансов));
СоединенияИБКлиент.ЗавершитьРаботуЭтогоСеанса();
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
ЗавершитьРаботуЭтогоСеанса (БСП)
ИнтерактивнаяОбработкаПриСменеПароляПриЗапуске (БСП)
ЗавершитьРаботуЭтогоСеансаЗавершение (БСП)
ЗавершитьОбработкуПользователяИБ (БСП)
ЗавершитьСеансыОбластиДанных (БСП)
ЗаписатьФайлПротоколаОшибкиИЗавершитьРаботу (БСП)
Канал FastCode 1C в Телеграм! Шаблоны кода, статьи, полезные советы, курсы по 1С (8К участников)