Имя: Пароль:
1C
1С v8
пользователи
0 Vasus55
 
27.01.12
08:58
как и где в 1с запретить заходить в программу под одним и тем же пользователем???
1 Fish
 
27.01.12
08:59
А зачем?
2 Vasus55
 
27.01.12
09:00
в целях безопасности)))
3 миша122062
 
27.01.12
09:02
(0)настройки пользователя
4 миша122062
 
27.01.12
09:02
+(3)только продвинутый сможет включить
(2) доменная аудентификация )))
5 Healer
 
27.01.12
09:02
Можно в модуль сеанса добавить проверку на имя компа или IP.
6 golden-pack
 
27.01.12
09:03
в УПП реализовано в (3)
7 Healer
 
27.01.12
09:03
...или проверять, нет ли уже такого пользователя среди активных...
8 Vasus55
 
27.01.12
09:19
(7) как именно проверить?
9 Vasus55
 
27.01.12
09:38
в получается в модуле сеанса необходимо написать некую процедуру, которая будет проверять является ли данный пользователь активным, елси нет выдавать предупреждение??
10 Vasus55
 
27.01.12
10:08
сделал так
Процедура ОбновитьСоединения()
   Попытка
       МассивСоединений=ПолучитьСоединенияИнформационнойБазы();
       Для Каждого Соединение Из МассивСоединений Цикл
           Если Соединение.Пользователь<>Неопределено Тогда
               Предупреждение("Данный пользователь уже работает в системе");
           КонецЕсли;
       КонецЦикла;
           Исключение
       Сообщить(ОписаниеОшибки());    
   КонецПопытки;
КонецПроцедуры

Процедура ПередНачаломРаботыСистемы(Отказ)
   ОбновитьСоединения();
КонецПроцедуры

но,условие не правильно работает(((
11 Vasus55
 
27.01.12
10:19
подскажите, где косяки???
12 Wobland
 
27.01.12
10:29
Если Соединение.Пользователь=ТекущийПользователь()
13 Wobland
 
27.01.12
10:30
но зачем-то же придумали множественный вход
14 Vasus55
 
27.01.12
10:44
терь, если с разных пк заходить под одним пользователем, то все равно впускает и предупреждение не выдает((((
15 Vasus55
 
27.01.12
10:45
а ниче что я код пишу в модуле обычного приложения и  
   Процедура ПередНачаломРаботыСистемы(Отказ)
       ОбновитьСоединения();
КонецПроцедуры
???
16 Vasus55
 
27.01.12
10:57
сделал нужно было код перенести во внешнее соединение, так как ПолучитьСоединенияИнформационнойБазы() Доступность:

Сервер, толстый клиент, внешнее соединение.
17 Wobland
 
27.01.12
10:58
(16) хм... а в каких случаях оно тебе пойдёт во внешнее соединение? в чём отличие отсервера?
18 Vasus55
 
27.01.12
11:05
хотя нет, не работает терь если с одного пк сидит  пользователь, то если новый пользователь захочет войти под своим именем, то он уже не зайдет
19 Vasus55
 
27.01.12
11:06
причем с этого же пк
20 Vasus55
 
27.01.12
11:11
а мне нужно чтобы с разных пк пользователи не могли одновременно зайти под одним именем
21 Fish
 
27.01.12
11:12
(20) смотри (12)
22 Vasus55
 
27.01.12
11:19
ну вот сдела так
Процедура ОбновитьСоединения()
Попытка
       МассивСоединений=ПолучитьСоединенияИнформационнойБазы();
       Для Каждого Соединение Из МассивСоединений Цикл
           Если Соединение.Пользователь = ТекущийПользователь()
               Тогда
           Предупреждение("Данный пользователь уже работает в системе");
       КонецЕсли;
       КонецЦикла;
           Исключение
       Сообщить(ОписаниеОшибки());    
КонецПопытки;
КонецПроцедуры

Процедура ПриНачалеРаботыСистемы()
   ОбновитьСоединения();
КонецПроцедуры
   
все равно пускает
23 Wobland
 
27.01.12
11:21
а вот у ПередНачаломРаботыСистемы есть Отказ
24 Vasus55
 
27.01.12
11:22
а где тогда писать этот весь код в модуле чего?
25 Vasus55
 
27.01.12
11:27
потому что в модуле внешнего соединения такой процедуры нет
26 Fish
 
27.01.12
11:27
(23) В модуле обычного приложения отладчик пишет:  Процедура или функция с указанным именем не определена (ТекущийПользователь)
27 Fish
 
27.01.12
11:29
+(26) А вот параметрысеанса.ТекущийПользователь определён
28 Vasus55
 
27.01.12
11:32
а если через модуль обычного приложения ПользователиИнформационнойБазы.ТекущийПользователь()
29 Fish
 
27.01.12
11:34
(28) Вот и сравнивай
30 Fish
 
27.01.12
11:35
Если Соединение.Пользователь = ПользователиИнформационнойБазы.ТекущийПользователь() Тогда
31 Wobland
 
27.01.12
11:36
(27) ну не проверял, подумаешь ;)
32 Vasus55
 
27.01.12
11:37
нет не в модуле обычного, внешнего он не пашет
33 Vasus55
 
27.01.12
11:42
может в коде что то не так?((
34 Vasus55
 
27.01.12
11:49
даже в модуле сеанса заходит(((
35 Vasus55
 
27.01.12
11:54
если ты находишься в конфигураторе а потом в преприятие не пускает, если кто уже сидит по этим именем
36 Fish
 
27.01.12
11:55
(35) Так проверяй еще и приложение - конфигуратор или предприятие :)))
37 Vasus55
 
27.01.12
11:59
(36)ниче не понял
38 Fish
 
27.01.12
12:01
(37) Блин посмотри, чему у тебя равно Соединение.ИмяПриложения . или в отладчике забанили? :)))
39 Vasus55
 
27.01.12
12:09
{(1)}: Значение не является значением объектного типа (ИмяПриложения)
в табло проверил
40 Vasus55
 
27.01.12
12:21
(38) и че же делать((
41 Jaffar
 
27.01.12
12:24
(4) "аудентификация" - от слова "аудио"? :-)
42 Vasus55
 
27.01.12
13:07
даже так не хочет((
ЗапретитьОткрытиеНесколькихСеансов = ПолучитьЗначениеПоУмолчанию(глТекущийПользователь, "ЗапретитьОткрытиеНесколькихСеансов");
   Если ЗапретитьОткрытиеНесколькихСеансов Тогда
       ТекущийНомерСоединения = НомерСоединенияИнформационнойБазы();
       УникальныйИдентификаторПользователя = ПользователиИнформационнойБазы.ТекущийПользователь().УникальныйИдентификатор;
       
       МассивСоединений = ПолучитьСоединенияИнформационнойБазы();
       Для Каждого ТекСоединение Из МассивСоединений Цикл
           Если (ТекСоединение.ИмяПриложения = "1CV8")
              И (НЕ ТекСоединение.НомерСоединения = ТекущийНомерСоединения)
              И (НЕ ТекСоединение.Пользователь = неопределено)
              И (ТекСоединение.Пользователь.УникальныйИдентификатор = УникальныйИдентификаторПользователя) Тогда
             
               Предупреждение("Пользователем с таким именем уже выполнен вход в систему");
               ЗавершитьРаботуСистемы(Ложь);
               Возврат;
               
           КонецЕсли;
       КонецЦикла;    
   КонецЕсли;
43 Jaffar
 
27.01.12
13:08
(42) а типовую какую-то смотрел?
44 Vasus55
 
27.01.12
13:16
это стиповой
45 Vasus55
 
27.01.12
14:56
ниче не помогает((9
46 Xsander
 
31.01.12
19:18
Написал следующим образом:

   // конроль возможности однократного входа в 1С
   ФлПодключенияПользователя=0;
   МассивСоединений = ПолучитьСоединенияИнформационнойБазы();
   Для Каждого ТекСоединение Из МассивСоединений Цикл
       Если СокрЛП(ПараметрыСеанса.ТекущийПользователь)=СокрЛП(ТекСоединение.Пользователь.ПолноеИмя) Тогда    
           ФлПодключенияПользователя=ФлПодключенияПользователя+1;
       КонецЕсли;
   КонецЦикла;    
   Если ФлПодключенияПользователя>1 Тогда
       Если СокрЛП(ТекСоединение.Пользователь.ПолноеИмя)<>"Администратор" Тогда
           Предупреждение("Пользователем с таким именем уже выполнен вход в систему");
           ЗавершитьРаботуСистемы(Ложь);
           Возврат;
       КонецЕсли;
   КонецЕсли;    


Да выдает ощибку - но ведь не тем, кто входит только один раз и администратору возможность оставил (конфигуратор/предприятие)

+ написал в "Процедура ПроверитьВозможностьРаботыПользователя(Отказ) Экспорт"
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.