Программное закрытие всех форм всех пользователей или еще лучше 1с-ки
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(2) AnryMc, Да это я умею))Конкретно в УПП 1.3 есть обработка Активные пользователи. Она может завершить сеанс,но при этом у пользователя 1с-ка не закрывается и вылазит окно "Сеанс работы завершнен Администарторм (перезагрузить---Завершить.)" Мне же необходимо не просто разорвать сеанс, а сделать так чтобы и 1с у пользователя сама закрылась.
(3) Shooroopik111,
На неуправляймых формах было:
ПРОЦЕДУРА:
Из неё вызываются в Глобальном Модуле:
На неуправляймых формах было:
ПРОЦЕДУРА:
# Если Клиент Тогда
Если УстановитьБлокировкуСоединений Тогда
// поскольку блокировка еще не установлена, то при входе в систему
// для данного пользователя был подключен обработчик ожидания завершения работы.
// Отключаем его. Так как для этого пользователя подключается специализированный обработчки ожидани
// "ЗавершитьРаботуПользователей", который ориентирован на то, что данный пользователь
// должен быть отключен последним.
ОтключитьОбработчикОжидания("КонтрольРежимаЗавершенияРаботыПользователей");
ПодключитьОбработчикОжидания("ЗавершитьРаботуПользователей", 60);
КонецЕсли;
# КонецЕсли
// параметры блокировки
Блокировка = Новый БлокировкаУстановкиСоединений;
Блокировка.Начало = НачалоБлокировки;
Блокировка.Конец = ОкончаниеБлокировки;
Блокировка.Сообщение = Сообщение;
Блокировка.Установлена = УстановитьБлокировкуСоединений;
Блокировка.КодРазрешения = КодРазрешения;
// установка блокировки соединений
УстановитьБлокировкуУстановкиСоединений(Блокировка)
ПоказатьИз неё вызываются в Глобальном Модуле:
#Если Клиент Тогда
// Процедура выполняет отключение пользователей от информационной
// базы в случае, если был запущен сеанс с параметром "ЗавершитьРаботуПользователей"
//
Процедура КонтрольРежимаЗавершенияРаботыПользователей() Экспорт
ТекущийРежим = ПолучитьБлокировкуУстановкиСоединений();
БлокировкаУстановлена = УправлениеСоединениямиИБ.УстановленаБлокировкаСоединений();
ВремяНачалаБлокировки = ТекущийРежим.Начало;
ВремяОкончанияБлокировки = ТекущийРежим.Конец;
ИнтервалПредупреждения = УправлениеСоединениямиИБ.ИнтервалОжиданияЗавершенияРаботыПользователей();
ИнтервалЗакрытьСЗапросом = 0;
ИнтервалЗакрытьБезЗапроса = - УправлениеСоединениямиИБ.ИнтервалОжиданияЗавершенияРаботыПользователей() / 5;
ИнтервалПрекратить = - УправлениеСоединениямиИБ.ИнтервалОжиданияЗавершенияРаботыПользователей() / 2.5;
ТекущийМомент = ТекущаяДата();
Если БлокировкаУстановлена Тогда
Если ВремяОкончанияБлокировки <> '00010101' И ТекущийМомент > ВремяОкончанияБлокировки Тогда
Возврат;
КонецЕсли;
Если НЕ ЗначениеЗаполнено(ВремяНачалаБлокировки)
ИЛИ ВремяНачалаБлокировки - ТекущийМомент <= ИнтервалПрекратить Тогда
ПрекратитьРаботуСистемы(Истина);
ИначеЕсли ВремяНачалаБлокировки - ТекущийМомент <= ИнтервалЗакрытьБезЗапроса Тогда
Сообщение = УправлениеСоединениямиИБ.ИзвлечьСообщениеБлокировки(ТекущийРежим.Сообщение);
Предупреждение(НСтр("ru='Работа системы завершается.';uk='Робота системи завершується.'") + ?(ПустаяСтрока(Сообщение), ".", " " + Сообщение), 30);
ЗавершитьРаботуСистемы(Ложь, Истина);
ИначеЕсли ВремяНачалаБлокировки - ТекущийМомент <= ИнтервалЗакрытьСЗапросом Тогда
Сообщение = УправлениеСоединениямиИБ.ИзвлечьСообщениеБлокировки(ТекущийРежим.Сообщение);
Предупреждение(НСтр("ru='Работа системы завершается.';uk='Робота системи завершується.'") + ?(ПустаяСтрока(Сообщение), ".", " " + Сообщение), 30);
ЗавершитьРаботуСистемы(Истина, Истина);
ИначеЕсли ВремяНачалаБлокировки - ТекущийМомент <= ИнтервалПредупреждения Тогда
Сообщение = УправлениеСоединениямиИБ.ИзвлечьСообщениеБлокировки(ТекущийРежим.Сообщение);
Предупреждение(НСтр("ru='Работа системы будет завершена в ';uk='Роботу системи буде завершено у '") + ВремяНачалаБлокировки + ?(ПустаяСтрока(Сообщение), ".", " " + Сообщение), 30);
КонецЕсли;
КонецЕсли;
КонецПроцедуры // КонтрольРежимаЗавершенияРаботыПользователей
// Завершение работы только при условии удачной установки монопольного режима работы
// Вызывается, только при запуске системы от имени администратора с параметром запуска "ЗавершитьРаботуПользователей"
//
Процедура ЗавершитьРаботуПользователей() Экспорт
Соединения = ПолучитьСоединенияИнформационнойБазы();
Если Соединения.Количество() = 1 Тогда
// Отключены все пользователи, кроме текущего сеанса
// В последнюю очередь завершается сеанс, запущенный с параметром "ЗавершитьРаботуПользователей".
// Такой порядок отключений необходим для обновления конфигурации с помощью пакетного файла
ЗавершитьРаботуСистемы(Ложь);
Возврат;
КонецЕсли;
// Получим текущее значение параметров блокировки
ТекущийРежим = ПолучитьБлокировкуУстановкиСоединений();
БлокировкаУстановлена = ТекущийРежим.Установлена;
ВремяНачалаБлокировки = ТекущийРежим.Начало;
ИнтервалОтключения = - УправлениеСоединениямиИБ.ИнтервалОжиданияЗавершенияРаботыПользователей();
ТекущийМомент = ТекущаяДата();
Если БлокировкаУстановлена И
(НЕ ЗначениеЗаполнено(ВремяНачалаБлокировки)
ИЛИ ВремяНачалаБлокировки - ТекущийМомент <= ИнтервалОтключения) Тогда
// после начала блокировки сеансы всех пользователей должны быть отключены
// если этого не произошло пробуем принудительно прервать соединения
ОтключитьОбработчикОжидания("ЗавершитьРаботуПользователей");
// Невозможно принудительно отсоединить подключения в файловом режиме работы
Если ОпределитьЭтаИнформационнаяБазаФайловая() Тогда
УправлениеСоединениямиИБ.РазрешитьРаботуПользователей();
Сообщение = УправлениеСоединениямиИБ.ПолучитьНазванияСоединенийИБ(НСтр("ru='Не удалось завершить работу пользователей:';uk='Не вдалося завершити роботу користувачів:'"));
ЗаписьЖурналаРегистрации(НСтр("ru='Завершение работы пользователей';uk='Завершення роботи користувачів'",Локализация.КодЯзыкаИнформационнойБазы()), УровеньЖурналаРегистрации.Предупреждение, , , Сообщение);
ЗавершитьРаботуСистемы(Ложь);
Возврат;
КонецЕсли;
ПараметрыАдминистрированияИБ = УправлениеСоединениямиИБ.ПолучитьПараметрыАдминистрированияИБ();
ПараметрыЗапуска = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(ПараметрЗапуска,";");
Если ПараметрыЗапуска.Количество() > 1 Тогда
ПараметрыАдминистрированияИБ.ИмяАдминистратораИБ = Врег(ПараметрыЗапуска[1]);
КонецЕсли;
Если ПараметрыЗапуска.Количество() > 2 Тогда
ПараметрыАдминистрированияИБ.ПарольАдминистратораИБ = Врег(ПараметрыЗапуска[2]);
КонецЕсли;
Результат = УправлениеСоединениямиИБ.ОтключитьСоединенияИБ(ПараметрыАдминистрированияИБ);
Если Результат Тогда
Сообщить(НСтр("ru='Завершение работы пользователей выполнено успешно.';uk='Завершення роботи користувачів виконано успішно.'"), СтатусСообщения.Информация);
ЗавершитьРаботуСистемы(Ложь);
Иначе
Сообщение = УправлениеСоединениямиИБ.ПолучитьНазванияСоединенийИБ(НСтр("ru='Не удалось завершить работу пользователей:';uk='Не вдалося завершити роботу користувачів:'"));
Сообщить(Сообщение, СтатусСообщения.Внимание);
ЗаписьЖурналаРегистрации(НСтр("ru='Завершение работы пользователей';uk='Завершення роботи користувачів'",Локализация.КодЯзыкаИнформационнойБазы()), УровеньЖурналаРегистрации.Предупреждение, , , Сообщение);
КонецЕсли;
КонецЕсли;
КонецПроцедуры // ЗавершитьРаботуПользователей
#КонецЕсли
Показать
(7), к сожалению, УПП рядом нет, но в БСП и в БП данный код есть и находится в
Может не будем продолжать бессмысленный спор и Вы продолжите задавать вопросы после того, как воспользуетесь советом из сообщения (4) и у Вас что-то не получится?
СоединенияИБГлобальный.КонтрольРежимаЗавершенияРаботыПользователей()
Может не будем продолжать бессмысленный спор и Вы продолжите задавать вопросы после того, как воспользуетесь советом из сообщения (4) и у Вас что-то не получится?
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот