http://wm-monitoring.ru/ ')) {alert('Спасибо за то что установили нашу кнопку! =)');} else {alert('Очень жаль! =(');}"> http://wm-monitoring.ru/

Как реализовать отключение пользователей в случае простоя — для экономии количества задействованных лицензий (1С: Программисту)

Опубликовано: 01.09.2018

Конфигурации 1С, предоставляемые партнерами фирмы 1С, обычно защищены лицензиями.

Расход лицензий при этом осуществляется «покомпьютерно». Т.е. если на одном компьютере запустить несколько экземпляров 1С:Предприятия, то на все будет затрачена одна лицензия.

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

Как оно работает: каждые полчаса на каждом клиентском месте осуществляется проверка задействованных лицензий. В том случае, когда общее количество израсходованных лицензий на всех компютерах больше заданного (например, больше девяти), пользователю предлагается подтвердить работу в системе (достаточно нажать на кнопку «Enter»). Если пользователь этого не сделал, то это означает, что его нет на месте и лицензию можно освободить.

При этом срабатывают следующие ограничения:

если у пользователя открыто какое-то окно в модальном режиме (например, окно проверки версии конфигурации), то вопрос задан не будет («особо умные пользователи» могут перед уходом открывать модальное окно и их не выкинет из базы) если у пользователя открыта модифицированная форма (окно со звездочкой), то выход не будет осуществлен, пока он не сохранит форму.

Рассмотрим на примере конфигурации логистики «Акселот».

В процедуре ПриНачалеРаботыСистемы() модуля приложения вставляем строки кода:

//отключение бездействующих пользователей Если НЕ ИмяПользователя ( ) = "ТСД" Тогда ПодключитьОбработчикОжидания ( "ПроверитьПростойПользователя" , 1800 ) ; // 1800с - 30 минут КонецЕсли ;

Сама процедура, вызываемая обработчиком ожидания:

Процедура ПроверитьПростойПользователя ( ) Экспорт мсСоединений = ПолучитьСоединенияИнформационнойБазы ( ) ; мсУчтенныхКомпьютеров = Новый Массив ; Для Каждого ТекСписок Из мсСоединений Цикл Если ТекСписок .ИмяПриложения = "1CV8" и ТекСписок .Пользователь < > "ТСД" И мсУчтенныхКомпьютеров .Найти (ТекСписок .ИмяКомпьютера ) = Неопределено Тогда мсУчтенныхКомпьютеров .Добавить (ТекСписок .ИмяКомпьютера ) ; // один компьютер - одна лицензия КонецЕсли ; КонецЦикла ; Если мсУчтенныхКомпьютеров .Количество ( ) > 9 И НЕ ИмяПользователя ( ) = "Имя_Разработчика" Тогда // Начинаем принимать меры, если израсходовано больше 9 лицензий (к примеру), при этом пощадим (не будем выкидывать) сами себя ;) Ответ = Вопрос ( "Подтвердите работу в системе" , РежимДиалогаВопрос .ОК , 120 , , "Нужна лицензия!" ) ; Если Ответ = КодВозвратаДиалога .Таймаут Тогда ЗавершитьРаботуСистемы ( Истина ) ; // осуществим запись в журнал регистрации (чтобы видеть, кого выкидывало из базы) ЗаписьЖурналаРегистрации ( "Завершение работы при длительном простое" , УровеньЖурналаРегистрации .Информация , ,Справочники .ахПользователи .НайтиПоКоду (ПользователиИнформационнойБазы .ТекущийПользователь ( ) ) ) ; КонецЕсли ; КонецЕсли ; мсУчтенныхКомпьютеров .Очистить ( ) ; КонецПроцедуры
Карта
rss