Запрет запуска нескольких сеансов

18.10.13

База данных - Инструменты администратора БД

Запрет запуска нескольких сеансов
Пользователь запустил несколько сеансов 1с и параллельно формирует отчеты, в результате чего повесил сервак?

 

Шёл тихий, спокойный рабочий день, ничего не предвещало беды. 

Но, закон подлости подкрался незаметно. Повис терминальный сервак(Да, сервак не слишком то мощный, но всё же...).

Появилась задача запретить запуск нескольких сеансов 1с, дабы наши доблестные юзера не могли разом формировать много-много больших отчётиков.

 

Задачка, вроде бы простая, но естетственно у юзеров нет права на просмотр списка активных пользователей. Поиски в интеренете не дали никаких результатов, ибо предлагалось много чего, начиная от раздачи всем прав на просмотр списка активных пользователей, заканчивая COM соединением с той же базой.

После недолгих раздумий родилось следующее:

1) в любом привелигированном модуле(в моём случае модуль называется ПолныеПрава) добавлем функцию:

Функция ПолучитьСписокАктивныхПользователей() Экспорт
	СписокАктивныхЮзеров=ПолучитьСоединенияИнформационнойБазы();
	Запрос=Новый Запрос;
	Запрос.Текст="ВЫБРАТЬ
	|	""                                                                   "" КАК Пользователь,
	|	""                                                                   "" КАК ИмяКомпьютера";
	ТЗ=Запрос.Выполнить().Выгрузить().СкопироватьКолонки();
	для Каждого ЭлементМассива из СписокАктивныхЮзеров Цикл
		если ЭлементМассива.ИмяПриложения="1CV8" тогда
			НоваяСтрока=ТЗ.Добавить();
			НоваяСтрока.Пользователь=ВРег(СокрЛП(ЭлементМассива.Пользователь.Имя));
			НоваяСтрока.ИмяКомпьютера=ВРег(СокрЛП(ЭлементМассива.ИмяКомпьютера));
		КонецЕсли;
	КонецЦикла;
	Возврат ТЗ;
КонецФункции

сделать напрямую Возврат ПолучитьСоединенияИнформационнойБазы(); нельзя ибо 1с запустится с ошибкой "Передача мутабельного значения...."

2) В модуле приложения в процедуре ПриНачалеРаботыСистемы() пишем следующее:

	Если Не РольДоступна("ПолныеПрава") Тогда
		НеРазрешатьПодключение=Ложь;
		ИмяКомпа=ИмяКомпьютера();
		АктивныеПользователи=ПолныеПрава.ПолучитьСписокАктивныхПользователей();
		мЮзер=ВРег(СокрЛП(ПараметрыСеанса.ТекущийПользователь.Код));
		КолСеанс=0;
		Для каждого АктивныйПользователь Из АктивныеПользователи Цикл
			Если АктивныйПользователь.Пользователь=мЮзер Тогда
				Если АктивныйПользователь.ИмяКомпьютера=ИмяКомпа Тогда
					КолСеанс=КолСеанс+1;
					Если КолСеанс=2 Тогда
						Предупреждение("Под пользователем "+Строка(АктивныйПользователь.Пользователь)+" на компьютере "+АктивныйПользователь.ИмяКомпьютера+" уже имеется соединение."+Символы.ПС+"Работа системы будет завершена.");
						НеРазрешатьПодключение=Истина;
						Прервать;
					КонецЕсли;
				КонецЕсли;
			КонецЕсли;
		КонецЦикла;
		Если НеРазрешатьПодключение Тогда
			ЗавершитьРаботуСистемы(Ложь);
		КонецЕсли;
	КонецЕсли;

Как результат мы получили "Profit" все рады, все довольны)

См. также

SALE! 30%

PowerTools

Инструментарий разработчика Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

3600 2520 руб.

14.01.2013    172675    1074    0    

811

SALE! 20%

Управление данными и формами (УДиФ)

Инструменты администратора БД Инструментарий разработчика Администрирование Роли и права Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

10000 8000 руб.

10.11.2023    1289    3    1    

19

Брандмауэр для сервера 1С Предприятие 8 - внешнее управление сеансами

Инструменты администратора БД Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

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

3600 руб.

06.02.2017    30142    29    18    

45

Система хранения присоединенных файлов в томах на диске

Инструменты администратора БД Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием Платные (руб)

Конфигурация Комплексная автоматизация 1.1 (и УПП 1.3 тоже) хранит файлы и изображения в справочнике Хранилище дополнительной информации в реквизите Хранилище типа ХранилищеЗначений. Та же история с ВложениямиЭлектроннойПочты. Но при этом присоединенные файлы в Электронном документообороте хранит в томах на диске. Эта доработка позволяет использовать стандартный механизм хранения файлов, изображений и вложений электронных писем в томах на диске. При этом можно разделить тома хранения по объектам конфигурации.

4200 руб.

10.11.2015    60416    84    55    

70

Конфигурация Session Monitor

Мониторинг Инструменты администратора БД Платформа 1С v8.3 Россия Платные (руб)

Конфигурация Session Monitor предназначена для мониторинга сервера 1С с целью отслеживания чрезмерной нагрузки от конкретных сеансов и скорости реакции рабочих процессов.

1500 руб.

01.12.2020    13230    28    0    

43

Сжатие (уменьшение) картинок в базе 1С и приведение их к одинаковой ширине

Инструменты администратора БД Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Платные (руб)

Многие сталкиваются с проблемой когда изображения, находящиеся в базе разные по объему и размерам. Менеджеры могут добавить файлы в очень высоком разрешении, объемом свыше 20 Мегабайт. База данных становится слишком большой, выгрузка на сайт идёт медленно и требуется много место на хостинге. Как сжать картинки и уменьшить размер базы 1С? Это можно сделать с помощью данной обработки. Существует возможность выбрать различные варианты для того чтобы уменьшить картинки: в разы, в процентах от первоначального объема, а также сделать картинки одинаковой ширины. В результате размер базы 1С значительно сократится (в зависимости от количества и размера картинок), а изображения станут небольшого объема, равными по ширине, почти без потери качества. Работает на управляемых формах для УТ 11, КА, ERP.

2000 руб.

21.07.2022    8528    5    3    

11

Ускоренное проведение документов (x4), устранение ошибок 60/62 счетов и зачет авансов (Бухгалтерия 3.0)

Закрытие периода Инструменты администратора БД Корректировка данных Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Расширение «Оперативное проведение» в 4 раза уменьшает время проведения документов и закрытия месяца. Является комплексным решением проблем 62 и 60 счетов. Оптимизирует проведение при включенной функциональной опции «Раздельный учет НДС». Используется в более 10 организациях уже 2 года. Совместимо с конфигурацией Бухгалтерия 3.0 (+КОРП).

14400 руб.

29.04.2020    25990    77    145    

58

Контроль действий пользователей II

Инструменты администратора БД Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Контролируйте, кто и что менял при работе в базах 1С: создание, правки, удаление, поиск потерявшихся данных, вычисление злоумышленников. Подсистема содержит 10 точных отчетов, гибкая настройка контроля. Не тормозит работу, не грузит базу 1С. Позволяет контролировать работу пользователей удаленно со смартфона.

14280 руб.

07.07.2023    4143    1    3    

8
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. peterxx 21 18.10.13 11:14 Сейчас в теме
А все ли? Теперь пользователи не могут параллельно формировать много, много разных отчетиков... )
2. inclodes 27 18.10.13 11:22 Сейчас в теме
(1) peterxx, чего-то я совершенно не понял о чём вы.
3. dyak84 18.10.13 13:16 Сейчас в теме
Автор считаю статю не совсем полной а что делать если у пользователя не полные права а работать нужно в 2 сеансах. Давать полные права тогда он может натворить того что не нужно. а что делать если вирубался свет, зайти то в 1С ты тоже не можеш сеанс то висит. Думаю хорошо было б зделать на подобие
ЗапретитьОткрытиеНесколькихСеансов = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ЗапретитьОткрытиеНесколькихСеансов");
Если ЗапретитьОткрытиеНесколькихСеансов Тогда
ТекущийНомерСоединения = НомерСоединенияИнформационнойБазы();
УникальныйИдентификаторПользователя = ПользователиИнформационнойБазы.ТекущийПользователь().УникальныйИдентификатор;

МассивСоединений = ПолучитьСоединенияИнформационнойБазы();
Для Каждого ТекСоединение Из МассивСоединений Цикл
Если (ТекСоединение.ИмяПриложения = "1CV8")
И (НЕ ТекСоединение.НомерСоединения = ТекущийНомерСоединения)
И (НЕ ТекСоединение.Пользователь = неопределено)
И (ТекСоединение.Пользователь.УникальныйИдентификатор = УникальныйИдентификаторПользователя) Тогда

Предупреждение("Пользователем с таким именем уже выполнен вход в систему");
ЗавершитьРаботуСистемы(Ложь);
Возврат;

КонецЕсли;
КонецЦикла;
КонецЕсли;
и завести дополнительное право на работу с несколькими сеансами. И какам то образом проверять время бездействия пользователя.
Andreyyy; pandanation; dmpas; +3 Ответить
4. AltF1 8 21.10.13 08:09 Сейчас в теме
В УПП есть такая настройка пользователя.
5. DrAku1a 1609 23.10.13 03:17 Сейчас в теме
(4) и в УТ и в КА, по-моему эта настройка у 1С уже давно в стандартных решениях. Может даже и в БСП есть. Так что автора можно поздравить - он изобрёл велосипед.
6. DAnry 8 23.10.13 13:18 Сейчас в теме
Запрет запуска нескольких сеансов бывает полезным... Но, как говорится, всему свое время. Такую вещь опционально надо делать. Надо включил, не надо - выключил. Но может статься и "нежданчик"
7. Ele1234567 11.04.14 14:36 Сейчас в теме
Нужно будет попробовать.
8. dima_home 231 20.12.16 12:15 Сейчас в теме
Процедуры автора не работают на клиент серверной системе с управляемыми формами.
из-за передачи мутабельных значений.
Переделал
В привилегированном модуле (у нас это "_ПодключениеКом")

Функция ПолучитьСписокАктивныхПользователей() Экспорт
    СписокАктивныхЮзеров=ПолучитьСоединенияИнформационнойБазы();
          //Таблицу значений нельзя использовать, т.к. ее не передать с сервера на клиент
	МассивПользователей =новый Массив();
    для Каждого ЭлементМассива из СписокАктивныхЮзеров Цикл
		если ЛЕВ(ЭлементМассива.ИмяПриложения,4)="1CV8" тогда
			МассивПользователей.Добавить(Новый Структура("Пользователь,ИмяКомпьютера",ВРег(СокрЛП(ЭлементМассива.Пользователь.Имя)),ВРег(СокрЛП(ЭлементМассива.ИмяКомпьютера))));
        КонецЕсли;
    КонецЦикла;
    Возврат МассивПользователей;
КонецФункции
Показать


В модуле управляемого приложения:

&НаКлиенте
Процедура ПриНачалеРаботыСистемы()

 	//Если Не РольДоступна("ПолныеПрава") Тогда  //на клиенте нельзя так проверять роль.
        НеРазрешатьПодключение=Ложь;
        ИмяКомпа=ВРег(ИмяКомпьютера());  //тут автор забыл сделать верхний регистр
        АктивныеПользователи=_ПодключениеКом.ПолучитьСписокАктивныхПользователей();
        мЮзер=ВРег(СокрЛП(УправлениеПользователями.ПолучитьТекущегоПользователя()));  //Это у нас так пользователя получаем.
        //мЮзер=ВРег(СокрЛП(ПараметрыСеанса.ТекущийПользователь.Код)); //так возможно у вас надо получить.

        КолСеанс=0;
		Для ННН = 0 ПО АктивныеПользователи.ВГраница() Цикл
            Если АктивныеПользователи[ННН].Пользователь=мЮзер Тогда
                Если АктивныеПользователи[ННН].ИмяКомпьютера=ИмяКомпа Тогда
                    КолСеанс=КолСеанс+1;
                    Если КолСеанс=2 Тогда
                        Предупреждение("Под пользователем "+АктивныеПользователи[ННН].Пользователь+" на компьютере "+АктивныеПользователи[ННН].ИмяКомпьютера+" уже имеется соединение."+Символы.ПС+"Работа системы будет завершена.",30);  //Модальное окно надо делать всегда с таймаутом.
                        НеРазрешатьПодключение=Истина;
                        Прервать;
                    КонецЕсли;
                КонецЕсли;
            КонецЕсли;
        КонецЦикла;
        Если НеРазрешатьПодключение Тогда
            ЗавершитьРаботуСистемы(Ложь);
        КонецЕсли;
   // КонецЕсли;
КонецПроцедуры
  
//100% рабочее.
Показать
9. kirill_potap 25.04.19 07:40 Сейчас в теме
Ошибка: Метод объекта не обнаружен(ПолучитьСписокАктивныхПользователей) (((
10. nick_e 2 10.06.19 09:29 Сейчас в теме
Может на SQL это как то проще можно сделать?
12. inclodes 27 16.07.19 09:51 Сейчас в теме
(10)

средствами sql?
это вообще возможно?
разве скуль контролирует подключения пользователей?
11. beletskyy 14.06.19 12:48 Сейчас в теме
присоединюсь к вопросу поставленному, есть ли проще варианты?
Оставьте свое сообщение