HelpF.pro

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

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

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