gifts2017

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

Опубликовал Кирилл (kiros) в раздел Администрирование - Защита, права, пароли

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

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

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

 

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

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

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

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

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

 

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

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

 

См. также

Подписаться Добавить вознаграждение
Комментарии
1. J G (JRG) 28.09.11 16:27
2. Кирилл (kiros) 29.09.11 08:43
3. Александр Медведев (anig99) 29.09.11 14:52
М... а галочка в типовых "Запретить пользователю больше 1 сессии"???
4. Dushka (Dushka) 29.09.11 15:05
(3)есть такая галочка в настройках пользователя :)
но всё равно молодец ведь! и для нетиповых очень пригодится
плюсану
5. haz (zaxarovsky) 29.09.11 15:38
Привышено каличество разришеных сисек
6. Ийон Тихий (cool.vlad4) 29.09.11 15:41
(5)Евгений Ваганович, вы тоже задумались над этой проблемой?
7. Юрий (forurchik) 29.09.11 15:45
классная обработка. ндоели бухи. спасибо автору
8. Александр Иванов (seducer) 29.09.11 16:06
А у нас при входе в терминалку сразу запускается 1С. Пользователям политиками запрещено все. Ни рабочий стол, ни "Пуск" не видны.
(3) А галка такая есть не во всех типовых. Например, в УТ нет такого (если не содрать, например, с УПП) :).
9. Александр Крынецкий (echo77) 30.09.11 07:24
- Требует доработку: РегистрСведений.КоличествоСессийПользователя
- Не понятно, зачем делать регистр сведений периодическим?
- Код можно написать короче, если сворачивать таблицу соединений
10. ediks (ediks) 30.09.11 09:30
(0)Третий день смотрю на главной странице ИС вывеску "Превышено количество разрешенных сесСий".
Кирилл, поправь опечатку на картинке, что-ли!!! :)
ЗЫ: да и в коде неплохо было бы...
11. Александр Градский (Cobranet123) 30.09.11 10:31
(3)(4) А где вы в типовых нашли такую галку?? Вот смотрю щас что БП2.0 что ЗУП ну не вижу этой галочки и все, может скриншот для особо слепых?
12. Александр Иванов (seducer) 30.09.11 13:19
(10) А что не так? Если честно, не въехал.
13. Александр Медведев (anig99) 30.09.11 13:29
Настройки пользователя - другие настройки
14. ediks (ediks) 30.09.11 13:47
(12) Слово "сеССия" пишется с 2 буквами С. Просто автор опечатался. Заголовок-то у публикации верно написан.
15. Александр Иванов (seducer) 30.09.11 14:08
(14) Так на картинке 2 буквы "с". Или уже поправили картинку?
16. fobos f_fobos (f_fobos) 30.09.11 19:23
echo77 пишет:
- Не понятно, зачем делать регистр сведений периодическим?

говорит Капитан Очевидность:
а) Для хранения истории.
б) На случай изобретения машины для перемещения пользователя во времени.
17. Павел Путков (odineskin) 02.10.11 17:39
а работает ли ваша настройка при работе с одной учетки? или только когда с нескольких заходят?
18. Кирилл (kiros) 03.10.11 09:06
(17) odineskin, работает, только проверку на "ПользовательОС" надо убрать.
19. Игорь Вихорев (vigo67) 04.10.11 09:47
Тоже проблемы с нехваткой лиценьзий из-за забытых терминальных сессий. Будем пробовать ваш спсоб борьбы с этой бедой.
20. Alexander Nick (nickkey) 07.10.11 11:20
вещь неплохая каждый чего то почерпнет судя из поста много еще идей добавилось да и ваще пора наверно сварганить чего нибудь экстраординарное какую нибудь надстройку чтоли со средствами администрирования було бы кулл :)))
21. Брест Беларусь (zhleonid8) 18.11.11 09:12
убедился что лучший способ делать правильно -научить пользователей, но обработка кул