HelpF.pro

Как ограничить пользователя только одним сеансом

В восьмой версии 1С нет штатного способа ограничить пользователя использованием только одного сеанса, это сделано потому что теперь при необходимости система может создавать от имени пользователя дополнительные сеансы в которых выполняются какие-то вспомогательные обработки. Например, когда формируется отчет, обработка данных происходит в фоновом задании, которое видно в списке активных пользователей отдельной строкой. С другой стороны это дает возможность пользователям открывать окно приложения несколько раз, на одном или разных компьютерах. Чтобы бороться с этим нужно применять программные методы.
С помощью функции ПолучитьСоединенияИнформационнойБазы() можно получить массив, который будет содержать информацию о всех подключениях, активных на момент обращения к функции, т.е. каждый элемент массива будет соответствовать одному соединению. Получается, что задача сводится к перебору элементов массива и подсчету количества сеансов открытых текущим пользователем.
Вот пример функции, которая возвращает Истина, если количество сеансов больше одного. Нужно обратить внимание, что подсчитываются только сеансы, у которых имя приложения равно 1CV8 (толстый клиент) или 1CV8C (тонкий клиент). Другие возможные имена приложений: Designer (конфигуратор), BackgroundJob (фоновое задание).
Код 1C v 8.х
 Функция  ПроверкаОткрытогоСеансаТекушегоПользователя()   Экспорт
ТекущийПользовательИБ  =  ПользователиИнформационнойБазы.ТекущийПользователь();
СоединенияИБ  =  ПолучитьСоединенияИнформационнойБазы();
СеансОткрыт   = Ложь;
Для  каждого  СоединениеИБ  Из  СоединенияИБ  Цикл
Если  Найти(СоединениеИБ.ИмяПриложения,   "1CV8")   =  О  Тогда
Продолжить; КонецЕсли;
Если  СоединениеИБ.Пользователь.УникальныйИдентификатор  =  ТекушийПользовательИБ.УникальныйИдентификатор  Тогда
Если  СеансОткрыт  Тогда
Возврат  Истина; 
Иначе
СеансОткрыт  =  Истина;
 КонецЕсли;
КонецЕсли;
КокецЦикла;
Возврат Ложь;
КокецФуккции  //   ПроверкаОткрытогоСеансаТекушегоПользователя   

Еще замечание — эта функция должна выполняться на сервере, пользователь, для которого выполняется проверка, от имени которого выполняется функция, должен иметь доступ к просмотру активных соединений.
Опубликовано на сайте: https://HelpF.pro
Прямая ссылка: https://HelpF.pro/faq/view/1527.html