Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Ограничение по количеству сессий пользователей          
Vofka Подменю пользователя
сообщение 09.10.11, 17:20
Сообщение #1

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 14050
Из: Киев
Спасибо сказали: 4612 раз
Рейтинг: 3748.8

Если терминальный сервер не "резиновый", то пользователям можно запретить плодить открытые 1с.

У нас возникла проблема с некоторыми терминальными серверами (старенькими), пользователи формируя отчет (если отчет формируется долго), открывают еще одну сессию, и работают в ней, и так много раз. А памяти 1с к сожалению отъедает дай боже. Вот и пришлось сделать такие изменения:

В модуле приложения ПриНачалеРаботыСистемы добавил вызов такой процедуры:

Процедура ПроверкаВозможностиОткрытияЕщеОднойСессии(Пользователь)
    #Если Клиент Тогда
        Если Не РольДоступна("ПолныеПрава") Тогда
            ИтогСписокСоединений = Новый ТаблицаЗначений;
            ИтогСписокСоединений.Колонки.Добавить("Пользователь");
            ИтогСписокСоединений.Колонки.Добавить("КоличествоСоединений");

            СоединенияИнформационнойБазы = ПолучитьСоединенияИнформационнойБазы();

            Для Каждого Соединение Из СоединенияИнформационнойБазы Цикл

                ТЗ=ИтогСписокСоединений.Добавить();
                ТЗ.Пользователь=СокрЛП(Соединение.Пользователь.Имя);
                ТЗ.КоличествоСоединений = 1;

            КонецЦикла;
            Отбор=Новый Структура("Пользователь",СокрЛП(Пользователь.Код));
            ОтборПользователя=Новый Структура("Пользователь",Пользователь);
            Нашли=ИтогСписокСоединений.НайтиСтроки(Отбор);
            //Получим сколько соединений разрешено
            КоличествоРазрешенных=РегистрыСведений.КоличествоСессийПользователя.СрезПос
ледних(,ОтборПользователя);
            Если КоличествоРазрешенных.Количество()=0 Тогда
                КоличествоРазрешенныхСессий=1;
            Иначе
                КоличествоРазрешенныхСессий=КоличествоРазрешенных.Получить(0).КоличествоДополнительныхСессий+1;
            КонецЕсли;
            //Проверим, а вдруг это ADM входит
            сеть = новый ComОбъект("wscript.network");
            ПользовательОС="\\"+сеть.UserDomain+"\"+сеть.UserName;
            Если ВРег(Соединение.Пользователь.ПользовательОС)=ВРег(ПользовательОС) Тогда
                //Проверим а есть ли разрешенные сессии
                Если Нашли.Количество()>КоличествоРазрешенныхСессий Тогда
                    Предупреждение("Превышено количество разрешенных сессий.",5,"Система ограничений");
                    ЗавершитьРаботуСистемы(Ложь, Ложь);
                    Возврат;
                КонецЕсли;
            КонецЕсли;
            нНомерТекущегоСоединения=НомерСоединенияИнформационнойБазы();
        КонецЕсли;
    #КонецЕсли
КонецПроцедуры


Регистр простейший Пользователь/КоличествоДополнительныхСессий периодический

P.S. Если есть АД то в случае Авторизации через ОС еще полезная штука для тестировщиков.

[необходимо зарегистрироваться для просмотра ссылки]

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 15.06.25, 22:45
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!