Имя: Пароль:
1C
 
Как блокировать многократное открытие сеанса одним пользователем?
0 Метелица
 
18.11.08
05:25
Ситуация: пользователь1 заходит в систему под своим именем со своего компа сколько хочет раз, не закрывая предыдущих сеансов. Вопрос: система не блокирует автоматически  пользователя при попытке второй раз войти в базу под своим же именем при открытом первом сеансе?
Пытаюсь сама создать блокировку. Еще вопрос: как узнать имена пользователей, с открытыми сейчас сеансами?
1 Adoff
 
18.11.08
05:46
Перебрать все подключения ПолучитьСоединенияИнформационнойБазы(), исключая текущее НомерСоединенияИнформационнойБазы(). Если Соединение.Пользователь.Имя = ИмяПользователя - блокировать соединение
2 Нэт2008
 
18.11.08
06:00
В настройках пользователя поставить флажок "Запретить открытие нескольких сеансов", а имена пользователей можно узнать посмотрев в Сервис - Активные пользователи.
3 4347
 
18.11.08
06:30
(2) Можно подробнее, Операции-Спавочники-пользователи не нашла "Запретить открытие нескольких сеансов"
4 Нэт2008
 
18.11.08
08:21
Справочники - Пользователи - открываете форму конкретного пользователя (два раза щелкаете мышкой по нужному пользователю) - Другие настройки - "Запретить открытие нескольких сеансов".
5 skunk
 
18.11.08
08:24
(4)уверен(а) что везде онное есть?
6 ZanderZ
 
18.11.08
08:28
(2) енто не везде реализовано по моему только в УПП
7 4347
 
19.11.08
07:10
(4 ) В УПП (1.1.9.3) нет такого, в Бух(1.6.9.4) тоже нет . В каких программах это все же работает?
8 shuhard
 
19.11.08
08:24
(7) УПП 1.2.19.1
9 Serg_1960
 
19.11.08
08:50
Запрет на открытие нескольких сиансов зависит больше от платформы, чем от конфигурации. Ищите в своей конфе следующий код (или вставляйте и адаптируйте сами):

Процедура ПриНачалеРаботыСистемы()
...
   ЗапретитьОткрытиеНесколькихСеансов = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ЗапретитьОткрытиеНесколькихСеансов");
   Если ЗапретитьОткрытиеНесколькихСеансов Тогда
       ТекущийНомерСоединения = НомерСоединенияИнформационнойБазы();
       УникальныйИдентификаторПользователя = ПользователиИнформационнойБазы.ТекущийПользователь().УникальныйИдентификатор;
       
       МассивСоединений = ПолучитьСоединенияИнформационнойБазы();
       Для Каждого ТекСоединение Из МассивСоединений Цикл
           Если (ТекСоединение.ИмяПриложения = "1CV8")
              И (НЕ ТекСоединение.НомерСоединения = ТекущийНомерСоединения)
              И (НЕ ТекСоединение.Пользователь = неопределено)
              И (ТекСоединение.Пользователь.УникальныйИдентификатор = УникальныйИдентификаторПользователя) Тогда
             
               Предупреждение("Пользователем с таким именем уже выполнен вход в систему");
               ЗавершитьРаботуСистемы(Ложь);
               Возврат;
               
           КонецЕсли;
       КонецЦикла;    
   КонецЕсли;
10 Serg_1960
 
19.11.08
08:56
Главную роль играет поддержка Вашего релиза платформы комманды НомерСоединенияИнформационнойБазы() и ПолучитьСоединенияИнформационнойБазы()...
11 almar
 
19.11.08
09:00
(0) А зачем?
12 mango
 
19.11.08
10:26
Действительно зачем? Данная возможность предназначена для того, чтобы можно было запустить какую-либо долгую процедуру в одном сеансе и, при этом, безпроблемно работать в другом. Если не секрет поделитесь зачем Вам этот запрет?
13 Метелица
 
19.11.08
11:22
Всем Большое спасибо! Код Serg 1960 работает без единого изменения! Отдельное спасибо.
14 Serg_1960
 
19.11.08
11:30
(13) И Вам спасибо :) Доброе слово и кошке приятно :)

(11) и (12) Отвечу за автора :)

А затем, что некоторые нетерпеливые узверы исхитряются по несколько раз нажать на ярлык запуска программы, прежде чем она успеет запуститься. Такие тормоза работают с одним сеансом, не обращая внимание на другие закладки 1С в трее...
Закон Брукера: Даже маленькая практика стоит большой теории.