Как реализовать отключение пользователей в случае простоя — для экономии количества задействованных лицензий (1С: Программисту) — 1C-h
 

Как реализовать отключение пользователей в случае простоя — для экономии количества задействованных лицензий (1С: Программисту)

3

Конфигурации 1С, предоставляемые партнерами фирмы 1С, обычно защищены лицензиями.

Расход лицензий при этом осуществляется «покомпьютерно». Т.е. если на одном компьютере запустить несколько экземпляров 1С:Предприятия, то на все будет затрачена одна лицензия.

Чтобы не покупать лишние лицензии, а также чтобы пользователи не запускали 1С и не уходили «гулять», заняв при этом лицензию, можно реализовать следующее ограничение.

Как оно работает: каждые полчаса на каждом клиентском месте осуществляется проверка задействованных лицензий. В том случае, когда общее количество израсходованных лицензий на всех компютерах больше заданного (например, больше девяти), пользователю предлагается подтвердить работу в системе (достаточно нажать на кнопку «Enter»). Если пользователь этого не сделал, то это означает, что его нет на месте и лицензию можно освободить.

При этом срабатывают следующие ограничения:

  • если у пользователя открыто какое-то окно в модальном режиме (например, окно проверки версии конфигурации), то вопрос задан не будет («особо умные пользователи» могут перед уходом открывать модальное окно и их не выкинет из базы)
  • если у пользователя открыта модифицированная форма (окно со звездочкой), то выход не будет осуществлен, пока он не сохранит форму.

Рассмотрим на примере конфигурации логистики «Акселот».
В процедуре ПриНачалеРаботыСистемы() модуля приложения вставляем строки кода:

	//отключение бездействующих пользователей
	Если НЕ ИмяПользователя() = "ТСД"  Тогда
		ПодключитьОбработчикОжидания("ПроверитьПростойПользователя", 1800);  // 1800с - 30 минут
	КонецЕсли;

Сама процедура, вызываемая обработчиком ожидания:

Процедура ПроверитьПростойПользователя() Экспорт
	мсСоединений = ПолучитьСоединенияИнформационнойБазы();
	мсУчтенныхКомпьютеров = Новый Массив;

	Для Каждого ТекСписок Из мсСоединений Цикл
		Если ТекСписок.ИмяПриложения = "1CV8" и ТекСписок.Пользователь <> "ТСД" И мсУчтенныхКомпьютеров.Найти(ТекСписок.ИмяКомпьютера) = Неопределено Тогда
			мсУчтенныхКомпьютеров.Добавить(ТекСписок.ИмяКомпьютера); // один компьютер - одна лицензия
		КонецЕсли;
	КонецЦикла;

	Если мсУчтенныхКомпьютеров.Количество() > 9 И НЕ ИмяПользователя() = "Имя_Разработчика" Тогда // Начинаем принимать меры, если израсходовано больше 9 лицензий (к примеру), при этом пощадим (не будем выкидывать) сами себя ;) 

		Ответ = Вопрос("Подтвердите работу в системе",РежимДиалогаВопрос.ОК,120, ,"Нужна лицензия!");

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

	КонецЕсли;

	мсУчтенныхКомпьютеров.Очистить();

КонецПроцедуры

3 thoughts on “Как реализовать отключение пользователей в случае простоя — для экономии количества задействованных лицензий (1С: Программисту)

  1. Не совсем мне это понятно.

    Стоит в сети сервак на винде-7, заделан под термсервер, стоит ключ на 5 сетевых пользователей. Стоит на нем 1с 8.2.

    Заходят одновременно 5 пользователей под своими учетками удаленно через терминальный режим. Заходит 6й, и тоже входит в базу, и спокойно работает!

    Как такое может быть?

    1. Artem, ключ на 5 + каждая программа 1с сама по себе дает одно пользовательское место

    2. значит либо дополнительные лицензии есть, либо применена таблетка от жадности

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Next Post

Как удобнее опознавать запущенный экземпляр 1С:Предприятия - код программного переопределения заголовка запускаемого экземпляра 1С:Предприятия (1С: Программисту)

Чт Апр 14 , 2011
Разработчик 1С часто сталкивается с неудобством распознавания запущенного экземпляра 1С:Предприятия. Чтобы понять, что за база запущена, приходится идти в меню «Справка» и жать там на «О программе…». При этом, например, есть вероятность, что при большом количестве запущенных баз, разработчик примет за тестовую рабочий («боевой») экземпляр базы и начнет экспериментировать в […]