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

15.11.19

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
ЗавершениеРаботыПользователей_ТАКСИ_009.cfe
.cfe 9,50Kb ver:191024.009
8
8 Скачать (1 SM) Купить за 1 850 руб.

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

Для этого была написана админовская часть, использующая некую табличную часть сеансов, получающая сеансы с АГЕНТА для клиент-серверных баз, так и  с файловых баз, используя механизм 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. Сильно прошу палками не кидать. Любые реальные ссылки будут восприняты с благодарностью.

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

См. также

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

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

12000 руб.

02.09.2020    169329    937    403    

905

Инструменты администратора БД Роли и права Системный администратор Программист Пользователь 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    10014    48    5    

78

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

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

5940 руб.

27.05.2021    38965    281    98    

215

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

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

15000 руб.

10.11.2023    11402    40    27    

66

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

Расширение для 1С:Бухгалтерия 3.0, которое позволяет использовать отдельные роли для доступа к складским документам, для доступа к документам раздела "Производство" и для доступа к документам раздела "Покупки".

4560 руб.

21.05.2019    1695307    575    194    

137

Ценообразование, анализ цен Роли и права Системный администратор Платформа 1С v8.3 Управление правами 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Расширение возможностей программы 1С УНФ. Функционал расширения - разграничение всевозможных прав пользователей и контроль при совершении различных действий.

3000 руб.

23.02.2018    59197    164    262    

156

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

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

19200 руб.

29.11.2019    25885    17    8    

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

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

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

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

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

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

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