Очередной "мягкий" отключатель активных и не очень пользователей

15.11.19

Администрирование - Роли и права

Тема отключения пользователей не нова, но это чуть другой взгляд на проблему.

Скачать файлы

Наименование Файл Версия Размер
ЗавершениеРаботыПользователей_ТАКСИ_009.cfe
.cfe 9,50Kb
8
.cfe 191024.009 9,50Kb 8 Скачать

Поставлено ТЗ написания как можно более простого метода, чтобы "мягко" отключать пользователей. Базы как клиент-серверные, так и файловые. И отключать надо по команде, а не каждую сессию отдельно руками.
Концепция решения "мягкого" отключения следующая - пользователь должен "сам" завершить свою работу. Иными словами необходимо дать клиенту понять, что необходимо завершить работу. Вариаций можно добавить сколько угодно.

Для этого была написана админовская часть, использующая некую табличную часть сеансов, получающая сеансы с АГЕНТА для клиент-серверных баз, так и  с файловых баз, используя механизм COM(медленный) или HTTP-сервисы(быстрый, предпочтительно), с функцией отключения нужного сеанса:

Процедура ДатьЗаданиеНаОтключениеСеансовИБ(ИБ, ИмяПользователя, НомерСеанса, ИмяПриложения, Компьютер, СообщениеПользователю = "", ТаймАут=10) Экспорт
	// Сеанс.ИмяПриложения
	//1CV8 - идентификатор приложения 1С:Предприятие в режиме запуска "Толстый клиент"; 
	//1CV8C - идентификатор приложения 1С:Предприятие в режиме запуска "Тонкий клиент"; 
	//WebClient - идентификатор приложения 1С:Предприятие в режиме запуска "Веб-клиент"; 
	//Designer - идентификатор приложения Конфигуратор; 
	//COMConnection - идентификатор сессии внешнего соединения 1С:Предприятия через COM; 
	//WSConnection - идентификатор сессии Web-сервиса; 
	//BackgroundJob - идентификатор сессии обработки заданий; 
	//SystemBackgroundJob - идентификатор системного фонового задания; 
	//SrvrConsole - идентификатор сессии консоли кластера; 
	//COMConsole - идентификатор административной сессии внешнего соединения; 
	//JobScheduler - идентификатор сессии планировщика заданий; 
	//Debugger - идентификатор сессии отладчика; 
	//OpenIDProvider - провайдер OpenID; 
	//RAS - идентификатор сервера администрирования.

	Если ИмяПриложения = "1CV8" или ИмяПриложения = "1CV8C" или ИмяПриложения = "WebClient" или ИмяПриложения = "Толстый клиент" или ИмяПриложения = "Тонкий клиент" или ИмяПриложения = "Веб-клиент" Тогда
		КлючОбъекта			= "ЗавершениеРаботы";
		КлючНастроек		= СтрЗаменить(Строка(НомерСеанса), Символы.НПП,"");
		Настройки			= ИБ.NewObject("Структура");
			Настройки.Вставить("Пользователь",				ИмяПользователя);
			Настройки.Вставить("ТекущийПользователь",		ПараметрыСеанса.ТекущийПользователь.Наименование);
			Настройки.Вставить("Компьютер",					Компьютер);
			Настройки.Вставить("Сеанс",						НомерСеанса);
			Настройки.Вставить("ДатаИнициацииОтключения",	ТекущаяДата());
			Настройки.Вставить("ТаймАут",					ТаймАут);
			Если НЕ СообщениеПользователю = "" тогда
				Настройки.Вставить("РежимОтключения",		2);// 0 - отключение без предупреждения, 1 - вывести с предупреждением , 2 - просто сообщение
				Настройки.Вставить("СообщениеПользователю",	СообщениеПользователю);
			Иначе
				Настройки.Вставить("РежимОтключения",		1);// 0 - отключение без предупреждения, 1 - вывести с предупреждением
				Настройки.Вставить("СообщениеПользователю",	"Сообщение от Админа: ""Просьба выйти из базы для выполнения архивации""");
			КонецЕсли;
		ОписаниеНастроек 	= "Отключение пользователя по запросу администратора";
		ИБ.ХранилищеОбщихНастроек.Сохранить(КлючОбъекта, КлючНастроек, Настройки, ОписаниеНастроек, ИмяПользователя);
	КонецЕсли;
КонецПроцедуры

Поскольку почти все клиентские базы стоят на поддержке без возможности вносить изменения, то было написано расширение. В нем присутствует функция оценки задания на отключение. Отключается только необходимый пользователь. По сути дела, решение принимает клиентская часть - "Если МНЕ задание на завершение работы, то будет предпринята попытка отключения". Ниже сама функция отключения

Функция КонтрольЗавершенияРаботы() Экспорт
	НомерСеанса 		= ЗРП_ОбщийМодульСервер.ПолучитьНомерСеанса();
	НачалоРаботы		= ЗРП_ОбщийМодульСервер.ПолучитьдатуСеанса(НомерСеанса);
	СтруктураПараметров = ЗРП_ОбщийМодульСервер.ЗагрузитьХранилищеОбщихНастроек("ЗавершениеРаботы", СтрЗаменить(Строка(НомерСеанса),Символы.НПП,""), ИмяПользователя());
	Если НЕ СтруктураПараметров = Неопределено Тогда
		Если НЕ ЗРП_ОбщийМодульСервер.ЗапущенКонфигуратор() Тогда
			Если НомерСеанса = СтруктураПараметров.Сеанс Тогда
				ЗРП_ОбщийМодульСервер.УдалитьХранилищеОбщихНастроек("ЗавершениеРаботы", СтрЗаменить(Строка(НомерСеанса),Символы.НПП,""), ИмяПользователя());
				Попытка
					Если СтруктураПараметров.ДатаИнициацииОтключения > НачалоРаботы Тогда  // если пользователь успел выйти до команды
						Если СтруктураПараметров.РежимОтключения = 0 Тогда  // безусловное завершение без вопросов
							ЗавершитьРаботуСистемы(Ложь);
						ИначеЕсли СтруктураПараметров.РежимОтключения = 1 Тогда // только сообщение с описанием того кто выдал задание на закрытие
							Оповещение = Новый ОписаниеОповещения("ПослеЗакрытияПредупреждения", ЗРП_ОбщийМодульКлиент);
							ПоказатьПредупреждение(Оповещение, СтрЗаменить(СтруктураПараметров.СообщениеПользователю, "%", СтруктураПараметров.ТекущийПользователь), СтруктураПараметров.ТаймАут);
						ИначеЕсли СтруктураПараметров.РежимОтключения = 2 Тогда // выдача вопроса с интерактивным выбором ЗАКРЫТЬ или НЕТ
							Оповещение = Новый ОписаниеОповещения("ПослеЗакрытияВопроса", ЗРП_ОбщийМодульКлиент);
							Кнопки = Новый СписокЗначений;
							Кнопки.Добавить(КодВозвратаДиалога.ОК, "Завершить");
							Кнопки.Добавить(КодВозвратаДиалога.Отмена, "Отмена");
							ПоказатьВопрос(Оповещение, СтрЗаменить(СтруктураПараметров.СообщениеПользователю, "%", СтруктураПараметров.ТекущийПользователь), Кнопки, СтруктураПараметров.ТаймАут, , "Завершение работы системы");
						ИначеЕсли СтруктураПараметров.РежимОтключения = 3 Тогда // только сообщение
							Предупреждение(СтруктураПараметров.СообщениеПользователю, СтруктураПараметров.ТаймАут);
						КонецЕсли;
					КонецЕсли;
				Исключение
					ЗРП_ОбщийМодульСервер.ЗЖР("ЗавершениеРаботыПользователей.КонтрольЗавершенияРаботы()", "Ошибка",,ОписаниеОшибки());
				КонецПопытки;
			КонецЕсли;
		КонецЕсли;
	КонецЕсли; 
КонецФункции 

Расширение на данный момент работоспособно на версии ЗУП 3.1.11.133, БУХ 3.0.73.60, КА2 2.4.7.141/3.2.23.3(БИТфинанс). Поскольку не использовалось БСП, то и проблем с библиотекой тоже нет.
Остались две проблемы:

1. Разрешимая - условие совместимости, меняемое при обновлении, которое можно исправить в любой момент;
2. Не решённая - если на главном окне вылезло окно с вопросом, блокирующим весь интерфейс, ожидающего интерактивного принятия решения. Поиск решения ведётся.

 

P.S. Сильно прошу палками не кидать. Любые реальные ссылки будут восприняты с благодарностью.

Расширение пример

См. также

SALE! 20%

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

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

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

13000 10400 руб.

02.09.2020    122137    670    389    

714

Запрет доступа к данным по зарплате для БП 3.0 и КА 2.5

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

Расширение позволяет максимально полно ограничить доступ пользователей к данным по заработной плате, а именно закрывает доступ к документам начисления и выплаты заработной платы, не позволяет просматривать бухгалтерские отчеты по счету учета зарплаты а также убирает зарплатные проводки из журнала проводок. Расширение запрещает просматривать платежные документы на выплату зарплаты, так же не доступны регламентные отчеты в ПФР и ИФНС. Расширение предлагает готовые настроенные профили "Бухгалтер без зарплаты", "Только просмотр без зарплаты".

5700 руб.

27.05.2021    32731    204    89    

165

Автоподбор ролей для профилей и групп доступа в любых типовых базах 1С УТ 11, КА 2, ERP2, Розница 2/3, УНФ 16/3, БП 3, ЗУП 3 и подобных (УФ, Платформа 8.3.14+)

Инструменты администратора БД Роли и права 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, пытаясь понять какими правами они обладают? Вы все время смотрите права в конфигураторе или отчетах чтоб создать нормальные профили доступа? Вы хотите наглядно видеть какие права дает профиль и редактировать все в простом виде? А может хотите просто указать подсистему и дать права на просмотр и добавление на объекты и не лезть в дебри прав и чтоб обработка сама подобрала нужные роли? Все это теперь стало возможно! Обновление от 15.12.2023, версия 1.1.

12000 руб.

06.12.2023    2976    13    1    

34

SALE! 20%

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

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

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

10000 8000 руб.

10.11.2023    3531    11    1    

34

Расширение для разграничения доступа к контрагентам и обработка для группового назначения доступа для Бухгалтерии (RLS) 3.0.143.42

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

Расширение предназначено для Бухгалтерии предприятия (версии ПРОФ и КОРП). Типовая конфигурация остается на поддержке. С помощью расширения менеджер по продажам будет иметь доступ к контрагентам и списку их документов только в случае, если он является для них ответственным. Пользователю с полными правами также доступна обработка «Назначение ответственных» для группового добавления/удаления ответственного в карточке контрагента. Есть версия данного расширения для клиентов Fresh - в магазине расширений (Fresh)

9360 руб.

14.09.2022    5759    7    4    

9

Роли для кладовщика

Логистика, склад и ТМЦ Роли и права Платформа 1С v8.3 Бухгалтерский учет Управление правами 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Расширение, которое позволяет использовать отдельные роли для доступа к складским документам, для доступа к документам раздела "Производство" и для доступа к документам раздела "Покупки".

2520 руб.

21.05.2019    1692307    552    192    

133

Универсальная система оповещений в базе или по почте по произвольным условиям, расписанием, ролям и пользователям (Расширение / конфигурация для платформ 8.3.6+, для ЛЮБЫХ баз)

Роли и права Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Платные (руб)

Данная система разработана как альтернатива стандартной системе напоминаний. Но имеет ряд существенных преимуществ: отображение в базе или с отправкой по почте, свое расписание, возможность фильтрации по ролям и пользователям, формирование своих запросов и макетов, шаблоны писем, работа в фоне. А также может блокировать работу пользователей при заданных условиях. Может работать в составе любой конфигурации. Имеется справка с описанием возможностей. (Обновление от 20.02.2024, версия 2.2, расширение)

18000 руб.

29.11.2019    24692    13    8    

33
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Xershi 1474 15.11.19 19:15 Сейчас в теме
Какое может быть решение, когда пользователь ушел домой. Только рубить.
А какая цель публикации, академический интерес?
По поводу расширения. Пишут обработку и она анализирует совместимость и затем ставит нужную версию.
2. ybatiaev 58 16.11.19 00:03 Сейчас в теме
(1) Если необходимо АВТОМАТИЧЕСКИ обновить базы, без участия программистов, но:
- база файловая(как можно рубить программно? Научите);
- необходимо обновить около 500 баз за ночь и ничто не должно помешать;
- необходимо отключать только те базы, в которых не работают в конфигураторе или отключить по определённому правилу .

Цель публикации - поделиться опытом.

По поводу обработки напишите путь решения. Буду признателен. Кроме интерфейса только "Такси" или "Такси. Разрешено..," есть ещё и совместимость версий.
zabaluev; +1 Ответить
3. Xershi 1474 16.11.19 09:48 Сейчас в теме
(2) для примера посмотрите как сейчас ставится Битрикс.

На файловой базе запуск обработки блокировки пользователей, как и в клиент серверной.
Про 500 баз. Так у вас же расширение, а не конфигурация для обновления.
4. ybatiaev 58 17.11.19 01:15 Сейчас в теме
(3) про битрикс не понял. В смысле как ставится? Хочу с ним познакомится, но руки не доходят.
Не понял и про блокировки. К чему Вы это написали? И я про блокировку не писал (моя конфа и это делает при необходимости).
Про 500 баз - данное расширение помогает выкинуть пользователей без участия программиста... у меня в том числе и конфигурация обновлений.
5. dock 44 18.11.19 08:59 Сейчас в теме
1) в ЗУП3 и БУХ3 прекрасно отрабатывает и типовой механизм... (в том числе и для файловых баз).
2) На скрине очень интересное сообщение от админа: "... для выполнения архивации"
В серверных базах архивация (бекап) выполняется средствами SQL, в файловых базах - специальными утилитами (например cobian backup), посредством теневой копии. В обоих случаях, выгонять пользователей не требуется :).
6. ybatiaev 58 18.11.19 14:43 Сейчас в теме
(5)
- "Смешное сообщение" - сделал для теста. Задаётся любое в админовской части.
- У нас сисадмины отделены от программеров вообще и средствами SQL делается всё с разрезом неделя. Всего неделя. Главная их задача - бесперебойная работа СУБД, скорость и оперативность исправления ошибок;
- с базами работают и пользователи-администраторы. Других не дёргают. Хранение баз (любой базы) настраиваемое. Без администраторов баз сами базы могут быть восстановлены или сделан срез перед операциями. Таких срезов много и дергать администраторов не разрешают;
- Восстановление из бакапа SQL процесс более затратный по времени, чем из DT;
- файловую базы можно просто скопировать, если что, но обновить после этого всё же не удастся, если база залочена. Прошу подсказать типовой программный механизм с файловыми базами, без участия программиста пожалуйста. Направьте, может что упустил. Работы много... всего читать не успеваю.
7. dock 44 18.11.19 15:06 Сейчас в теме
(6)
1)
- Восстановление из бакапа SQL процесс более затратный по времени, чем из DT;

Если загрузка из DT происходит быстрее, чем загрузка из бекапа SQL.... значит у вас что-то не так с SQL базой :) однозначно!
Чисто технически, при загрузке из DT, выполняется больше операций :)
2)
- файловую базы можно просто скопировать, если что, но обновить после этого всё же не удастся, если база залочена.

просто скопировать, если в базе "сидит" хотя бы один пользователь ? ни разу не получалось "просто скопировать" :)
про "залочена" не понял... залочена средствами 1С или системой ?
8. ybatiaev 58 19.11.19 08:03 Сейчас в теме
(7) по 1 вопросу - передам сисадминам. Насколько мне известно восстановление с DT "чистит" пустое место и частично восстанавливает "битые" ссылки, если это возможно. С SQL восстанавливается ВСЁ полностью. Поэтому операций да, больше.
по 2 пункту - да прям. Сейчас проверил, может что изменилось. Открыл и конфигуратор и клиента. *.1CD прекрасно скопировался. И это является стандартным механизмом "бакапа" при автообновления у самих 1С-ников.
9. dock 44 19.11.19 11:21 Сейчас в теме
(8)
*.1CD прекрасно скопировался.

соглашусь, я не прав... Но это уже изменение на уровне самой платформы - раньше была ошибка "файл занят"...
Всё течёт, все меняется :)
10. NoRazum 29 14.01.20 16:38 Сейчас в теме
(9) Запустите проведение с трех клиентов и попробуйте скопировать. Результат будет другой.
11. ybatiaev 58 16.01.20 09:37 Сейчас в теме
(10) Этот механизм был сделан самой 1С и только для интерактивного режима. Предполагаю идею - всплывает сообщение кому-то, что вышла новая версия, мол "ОБНОВИТЬ ВЕРСИЮ?", бухгалтер(с полными правами) кричит всем "буду обновлять", все выходят и далее по плану. Никакого автоматического обновления файловой базы не могло быть. Ну и тем более, если не один работает, а другой, не посмотрев активных, начинает все действия. Тут уж совсем надо быть глупым.
Ну а мягкое отключение как раз для таких вот случаев. Выдал сообщение, если пользователя нет - отключил, если работает(и ответил интерактивно) - не трогать.до времени.
Вариант со скриптами намного проще, конечно. Но этот механизм у меня встроен в некий администратор баз. Там некий комплекс действий по ситуации. Основная идея - оперативность.
Оставьте свое сообщение