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