Каталог решений - Ограничение по количеству сессий пользователей

Ограничение по количеству сессий пользователей

Ограничение по количеству сессий пользователей

В наличии

Если терминальный сервер не "резиновый", то пользователям можно запретить плодить открытые 1с.

Категория:

Описание

У нас возникла проблема с некоторыми терминальными серверами (старенькими), пользователи формируя отчет (если отчет формируется долго), открывают еще одну сессию, и работают в ней, и так много раз. А памяти 1с к сожалению отъедает дай боже. Вот и пришлось сделать такие изменения:

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

 

Процедура ПроверкаВозможностиОткрытияЕщеОднойСессии(Пользователь)
   
#Если Клиент Тогда
       
Если Не РольДоступна(«ПолныеПрава») Тогда
           
ИтогСписокСоединений = Новый ТаблицаЗначений;
           
ИтогСписокСоединений.Колонки.Добавить(«Пользователь»);
           
ИтогСписокСоединений.Колонки.Добавить(«КоличествоСоединений»);

            СоединенияИнформационнойБазы = ПолучитьСоединенияИнформационнойБазы();

            Для Каждого Соединение Из СоединенияИнформационнойБазы Цикл

                ТЗ=ИтогСписокСоединений.Добавить();
               
ТЗ.Пользователь=СокрЛП(Соединение.Пользователь.Имя);
               
ТЗ.КоличествоСоединений = 1;

            КонецЦикла;
            Отбор=Новый Структура(«Пользователь»,СокрЛП(Пользователь.Код));
           
ОтборПользователя=Новый Структура(«Пользователь»,Пользователь);
           
Нашли=ИтогСписокСоединений.НайтиСтроки(Отбор);
           
//Получим сколько соединений разрешено
           
КоличествоРазрешенных=РегистрыСведений.КоличествоСессийПользователя.СрезПоследних(,ОтборПользователя);
            Если
КоличествоРазрешенных.Количество()=0 Тогда
               
КоличествоРазрешенныхСессий=1;
            Иначе
               
КоличествоРазрешенныхСессий=КоличествоРазрешенных.Получить(0).КоличествоДополнительныхСессий+1;
            КонецЕсли;
           
//Проверим, а вдруг это ADM входит
           
сеть = новый ComОбъект(«wscript.network»);
           
ПользовательОС=«\\»+сеть.UserDomain+«\»+сеть.UserName;
            Если
ВРег(Соединение.Пользователь.ПользовательОС)=ВРег(ПользовательОС) Тогда
               
//Проверим а есть ли разрешенные сессии
               
Если Нашли.Количество()>КоличествоРазрешенныхСессий Тогда
                   
Предупреждение(«Превышено количество разрешенных сессий.»,5,«Система ограничений»);
                   
ЗавершитьРаботуСистемы(Ложь, Ложь);
                    Возврат;
                КонецЕсли;
            КонецЕсли;
           
нНомерТекущегоСоединения=НомерСоединенияИнформационнойБазы();
        КонецЕсли;
   
#КонецЕсли
КонецПроцедуры

 

Регистр простейший Пользователь/КоличествоДополнительныхСессий периодический

P.S. Если есть АД то в случае Авторизации через ОС еще полезная штука для тестировщиков.

 

has been added to your cart:
Оформление заказа