Комментарии
Избранное
Подписка
Сортировка:
Древо
Автор считаю статю не совсем полной а что делать если у пользователя не полные права а работать нужно в 2 сеансах. Давать полные права тогда он может натворить того что не нужно. а что делать если вирубался свет, зайти то в 1С ты тоже не можеш сеанс то висит. Думаю хорошо было б зделать на подобие
ЗапретитьОткрытиеНесколькихСеансов = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ЗапретитьОткрытиеНесколькихСеансов");
Если ЗапретитьОткрытиеНесколькихСеансов Тогда
ТекущийНомерСоединения = НомерСоединенияИнформационнойБазы();
УникальныйИдентификаторПользователя = ПользователиИнформационнойБазы.ТекущийПользователь().УникальныйИдентификатор;
МассивСоединений = ПолучитьСоединенияИнформационнойБазы();
Для Каждого ТекСоединение Из МассивСоединений Цикл
Если (ТекСоединение.ИмяПриложения = "1CV8")
И (НЕ ТекСоединение.НомерСоединения = ТекущийНомерСоединения)
И (НЕ ТекСоединение.Пользователь = неопределено)
И (ТекСоединение.Пользователь.УникальныйИдентификатор = УникальныйИдентификаторПользователя) Тогда
Предупреждение("Пользователем с таким именем уже выполнен вход в систему");
ЗавершитьРаботуСистемы(Ложь);
Возврат;
КонецЕсли;
КонецЦикла;
КонецЕсли;
и завести дополнительное право на работу с несколькими сеансами. И какам то образом проверять время бездействия пользователя.
ЗапретитьОткрытиеНесколькихСеансов = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ЗапретитьОткрытиеНесколькихСеансов");
Если ЗапретитьОткрытиеНесколькихСеансов Тогда
ТекущийНомерСоединения = НомерСоединенияИнформационнойБазы();
УникальныйИдентификаторПользователя = ПользователиИнформационнойБазы.ТекущийПользователь().УникальныйИдентификатор;
МассивСоединений = ПолучитьСоединенияИнформационнойБазы();
Для Каждого ТекСоединение Из МассивСоединений Цикл
Если (ТекСоединение.ИмяПриложения = "1CV8")
И (НЕ ТекСоединение.НомерСоединения = ТекущийНомерСоединения)
И (НЕ ТекСоединение.Пользователь = неопределено)
И (ТекСоединение.Пользователь.УникальныйИдентификатор = УникальныйИдентификаторПользователя) Тогда
Предупреждение("Пользователем с таким именем уже выполнен вход в систему");
ЗавершитьРаботуСистемы(Ложь);
Возврат;
КонецЕсли;
КонецЦикла;
КонецЕсли;
и завести дополнительное право на работу с несколькими сеансами. И какам то образом проверять время бездействия пользователя.
Процедуры автора не работают на клиент серверной системе с управляемыми формами.
из-за передачи мутабельных значений.
Переделал
В привилегированном модуле (у нас это "_ПодключениеКом")
В модуле управляемого приложения:
из-за передачи мутабельных значений.
Переделал
В привилегированном модуле (у нас это "_ПодключениеКом")
Функция ПолучитьСписокАктивныхПользователей() Экспорт
СписокАктивныхЮзеров=ПолучитьСоединенияИнформационнойБазы();
//Таблицу значений нельзя использовать, т.к. ее не передать с сервера на клиент
МассивПользователей =новый Массив();
для Каждого ЭлементМассива из СписокАктивныхЮзеров Цикл
если ЛЕВ(ЭлементМассива.ИмяПриложения,4)="1CV8" тогда
МассивПользователей.Добавить(Новый Структура("Пользователь,ИмяКомпьютера",ВРег(СокрЛП(ЭлементМассива.Пользователь.Имя)),ВРег(СокрЛП(ЭлементМассива.ИмяКомпьютера))));
КонецЕсли;
КонецЦикла;
Возврат МассивПользователей;
КонецФункции
ПоказатьВ модуле управляемого приложения:
&НаКлиенте
Процедура ПриНачалеРаботыСистемы()
//Если Не РольДоступна("ПолныеПрава") Тогда //на клиенте нельзя так проверять роль.
НеРазрешатьПодключение=Ложь;
ИмяКомпа=ВРег(ИмяКомпьютера()); //тут автор забыл сделать верхний регистр
АктивныеПользователи=_ПодключениеКом.ПолучитьСписокАктивныхПользователей();
мЮзер=ВРег(СокрЛП(УправлениеПользователями.ПолучитьТекущегоПользователя())); //Это у нас так пользователя получаем.
//мЮзер=ВРег(СокрЛП(ПараметрыСеанса.ТекущийПользователь.Код)); //так возможно у вас надо получить.
КолСеанс=0;
Для ННН = 0 ПО АктивныеПользователи.ВГраница() Цикл
Если АктивныеПользователи[ННН].Пользователь=мЮзер Тогда
Если АктивныеПользователи[ННН].ИмяКомпьютера=ИмяКомпа Тогда
КолСеанс=КолСеанс+1;
Если КолСеанс=2 Тогда
Предупреждение("Под пользователем "+АктивныеПользователи[ННН].Пользователь+" на компьютере "+АктивныеПользователи[ННН].ИмяКомпьютера+" уже имеется соединение."+Символы.ПС+"Работа системы будет завершена.",30); //Модальное окно надо делать всегда с таймаутом.
НеРазрешатьПодключение=Истина;
Прервать;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если НеРазрешатьПодключение Тогда
ЗавершитьРаботуСистемы(Ложь);
КонецЕсли;
// КонецЕсли;
КонецПроцедуры
//100% рабочее.
Показать Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
Вакансии
Ведущий программист / Руководитель проектов 1С
Москва
зарплата от 190 000 руб. до 190 000 руб.
Полный день
Москва
зарплата от 190 000 руб. до 190 000 руб.
Полный день