Как реализовать отключение пользователей в случае простоя — для экономии количества задействованных лицензий (1С: Программисту)
Опубликовано: 01.09.2018
Конфигурации 1С, предоставляемые партнерами фирмы 1С, обычно защищены лицензиями.
Расход лицензий при этом осуществляется «покомпьютерно». Т.е. если на одном компьютере запустить несколько экземпляров 1С:Предприятия, то на все будет затрачена одна лицензия.
Чтобы не покупать лишние лицензии, а также чтобы пользователи не запускали 1С и не уходили «гулять», заняв при этом лицензию, можно реализовать следующее ограничение.
Как оно работает: каждые полчаса на каждом клиентском месте осуществляется проверка задействованных лицензий. В том случае, когда общее количество израсходованных лицензий на всех компютерах больше заданного (например, больше девяти), пользователю предлагается подтвердить работу в системе (достаточно нажать на кнопку «Enter»). Если пользователь этого не сделал, то это означает, что его нет на месте и лицензию можно освободить.
При этом срабатывают следующие ограничения:
если у пользователя открыто какое-то окно в модальном режиме (например, окно проверки версии конфигурации), то вопрос задан не будет («особо умные пользователи» могут перед уходом открывать модальное окно и их не выкинет из базы) если у пользователя открыта модифицированная форма (окно со звездочкой), то выход не будет осуществлен, пока он не сохранит форму.Рассмотрим на примере конфигурации логистики «Акселот».
В процедуре ПриНачалеРаботыСистемы() модуля приложения вставляем строки кода: //отключение бездействующих пользователей Если НЕ ИмяПользователя ( ) = "ТСД" Тогда ПодключитьОбработчикОжидания ( "ПроверитьПростойПользователя" , 1800 ) ; // 1800с - 30 минут КонецЕсли ;Сама процедура, вызываемая обработчиком ожидания:
Процедура ПроверитьПростойПользователя ( ) Экспорт мсСоединений = ПолучитьСоединенияИнформационнойБазы ( ) ; мсУчтенныхКомпьютеров = Новый Массив ; Для Каждого ТекСписок Из мсСоединений Цикл Если ТекСписок .ИмяПриложения = "1CV8" и ТекСписок .Пользователь < > "ТСД" И мсУчтенныхКомпьютеров .Найти (ТекСписок .ИмяКомпьютера ) = Неопределено Тогда мсУчтенныхКомпьютеров .Добавить (ТекСписок .ИмяКомпьютера ) ; // один компьютер - одна лицензия КонецЕсли ; КонецЦикла ; Если мсУчтенныхКомпьютеров .Количество ( ) > 9 И НЕ ИмяПользователя ( ) = "Имя_Разработчика" Тогда // Начинаем принимать меры, если израсходовано больше 9 лицензий (к примеру), при этом пощадим (не будем выкидывать) сами себя ;) Ответ = Вопрос ( "Подтвердите работу в системе" , РежимДиалогаВопрос .ОК , 120 , , "Нужна лицензия!" ) ; Если Ответ = КодВозвратаДиалога .Таймаут Тогда ЗавершитьРаботуСистемы ( Истина ) ; // осуществим запись в журнал регистрации (чтобы видеть, кого выкидывало из базы) ЗаписьЖурналаРегистрации ( "Завершение работы при длительном простое" , УровеньЖурналаРегистрации .Информация , ,Справочники .ахПользователи .НайтиПоКоду (ПользователиИнформационнойБазы .ТекущийПользователь ( ) ) ) ; КонецЕсли ; КонецЕсли ; мсУчтенныхКомпьютеров .Очистить ( ) ; КонецПроцедурыСегодня | Завтра | ||
USD | 32.62 | 32.50 | |
EUR | 39.90 | 39.92 |
Обменник | Переходов |
Wmchanger | 6 |
E-Market | 5 |
WMtoCash.com | 4 |
Str-Money | 3 |
Hot-Change | 3 |
Вы можете получить WMR-бонус в размере 0,01-0,10 WMR на свой кошелек 1 раз в сутки | |
Кошелек
|
|
Код
|
|
Обмен Webmoney |