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

18.10.13

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

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

 

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

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

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

 

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

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

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

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

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

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

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

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

См. также

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

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя. Решение в Реестре отечественного ПО

8400 руб.

20.08.2024    14398    109    46    

108

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

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

15000 руб.

10.11.2023    11917    45    27    

67

Инструменты администратора БД Роли и права Системный администратор Программист Пользователь 8.3.14 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Документооборот 1С:Зарплата и кадры государственного учреждения 3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Роли… Вы тратите много времени и сил на подбор ролей среди около 2400 в ERP или 1500 в Рознице 2, пытаясь понять какими правами они обладают? Вы все время смотрите права в конфигураторе или отчетах чтоб создать нормальные профили доступа? Вы хотите наглядно видеть какие права дает профиль и редактировать все в простом виде? А может хотите просто указать подсистему и дать права на просмотр и добавление на объекты и не лезть в дебри прав и чтоб обработка сама подобрала нужные роли? Все это теперь стало возможно! Обновление от 18.09.2024, версия 1.2

18000 руб.

06.12.2023    10699    47    8    

78

SALE! %

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

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

4800 3840 руб.

14.01.2013    191284    1152    0    

920

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

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

14400 руб.

29.04.2020    33846    108    152    

75

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

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

3600 руб.

06.02.2017    32627    145    18    

51

Архивирование (backup) Инструменты администратора БД Платформа 1С v8.3 Управляемые формы 1C:Бухгалтерия 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Данная разработка позволит решить вопрос с резервным копированием Ваших баз в автоматическом режиме, расположенных на сервере 1С. Система умеет ставить блокировки на вход, блокировать фоновые задания, принудительно отключать сеансы пользователей. И все это система делает в автоматически при создании бэкапа (или через команду). Выгрузка происходит в родной формат 1С - .dt. Так же система умеет архивировать данные выгрузки с установкой пароля. Умеет менять расширение файла zip или dt на любое указанное вами, что позволит сохранить выгрузки от шифровальщика. Может удалять старые копии выгрузок, оставляя указанное количество резервных копий, начиная с самой поздней. Только для WINDOWS!

6000 руб.

06.11.2012    73754    629    45    

88

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

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

3000 руб.

21.07.2022    10167    10    4    

18
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. peterxx 23 18.10.13 11:14 Сейчас в теме
А все ли? Теперь пользователи не могут параллельно формировать много, много разных отчетиков... )
2. inclodes 30 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 1749 23.10.13 03:17 Сейчас в теме
(4) и в УТ и в КА, по-моему эта настройка у 1С уже давно в стандартных решениях. Может даже и в БСП есть. Так что автора можно поздравить - он изобрёл велосипед.
6. DAnry 9 23.10.13 13:18 Сейчас в теме
Запрет запуска нескольких сеансов бывает полезным... Но, как говорится, всему свое время. Такую вещь опционально надо делать. Надо включил, не надо - выключил. Но может статься и "нежданчик"
7. Ele1234567 11.04.14 14:36 Сейчас в теме
Нужно будет попробовать.
8. dima_home 254 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 30 16.07.19 09:51 Сейчас в теме
(10)

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