1с отключить неактивных и просроченных пользователей

Обновлено: 07.07.2024

Ко мне обратился один из пользователей обновлятора со следующей проблемой:

Есть клиент, у которого вечно пропадают лицензии 1с, пользователи запускают несколько сеансов и работают, но лицензий не хватает. Точнее хватало бы, если бы использовалось по одной лицензии. В свое время я намучился с этим у себя на демо сервере, где пользователи запускают веб-сеансы и не закрывают их как положено, в результате куча новых сеансов и как следствие, нехватка лицензий.

И он предложил добавить в обновлятор следующую функциональность:

Периодически проверяем все сеансы на сервере и если какой-то из сеансов не использовался в течении N-минут, то завершаем его, освобождая таким образом лицензии.

Решение

1. Перейдите в обновляторе на закладку "Скрипты":

2. Здесь выберите тип скрипта "Пакетный" и базу, в которой требуется периодически завершать неиспользуемые сеансы на сервере 1с:

3. Далее нажмите пункт "обновлятор", далее "Методы", далее "Завершение неиспользуемых сеансов":

4. Откроется диалог со следующими параметрами:

Пробежимся по его настройкам.

а. Прежде всего мы задаём типы сеансов на сервере 1с, которые нужно обрабатывать. По умолчанию, отмечены только 1CV8 и 1CV8C - толстый и тонкий клиенты соответственно. Если вы хотите, чтобы обрабатывались и другие типы сеансов, отметьте их галками.

б. Выбор между "в базе" и "в кластере". Нужно понимать, что скрипт всегда запускается для какой-то конкретной базы, которую мы выбрали в настройках. Если таких баз 10 скрипт запускается 10 раз для каждой из этих баз. Если выбран пункт "в базе", то обрабатываются только сеансы базы, для которой сейчас выполняется скрипт. Если же выбран пункт "в кластере", то обрабатываются все сеансы кластера, в который входит база.

в. Пункт "неактивные более Х минут". Сеансы, которые неактивны более X минут будут завершаться принудительно. Внимание. Для реализации этой опции обновлятор ориентируется на последнюю активность сеанса, которую нам возвращает сервер. Это значение можно увидеть в оснастке кластера в колонке сеанса "Последняя активность". К сожалению, в большинстве случаев (видимо фоновое поведение клиента) эта колонка обновляется кластером даже если пользователь не работает напрямую в базе. Я не нашёл других способов узнавать именно пользовательскую активность в сеансе.

г. Пункт "спящие". Если поставить эту галку, то сеансы, у которых установлен признак Hybernate (спящий), будут завершаться принудительно.

д. Пункт "дубли". Если поставить эту галку, то сеансы запущенные в одной и той же базе, с одного и того же компьютера, под одним и тем же пользователем будут считаться дублями. Из всех дублей будет оставляться только самый старый сеанс (запущенный первым из всех), а все остальные будут завершаться принудительно.

В нашем случае мы хотим, чтобы завершались все сеансы кластера, в который входит база, если:

  • сеанс является толстым или тонким клиентом
  • сеанс неактивен более 10 минут
  • сеанс заснул

Настройки диалога будут такими:

Нажимаем OK и в текст скрипта вставляется следующая команда:

Если вы программист или опытный администратор, то думаю без труда понимаете какой параметр здесь за что отвечает.

Снимаем (если они стоят) все галки, они нам в этом скрипте ни к чему:

Теперь можете смело экспериментировать, чтобы убедиться что скрипт делает то, что вам нужно. Для этого создавайте необходимые условия для завершения сеансов и нажимайте кнопку "Запустить".

Предположим, что всё в полном порядке.

Осталось сохранить этот скрипт в планировщик, чтобы он запускался по расписанию.

Нажимаем кнопку "Сохранить":

В открывшемся диалоге зададим путь и имя (сделайте его осмысленным) скрипта. Из галок обязательно поставим "Закрывать обновлятор после работы скрипта" и "Настроить однократный запуск скрипта через планировщик Windows":

Нажмём "ОК" и укажем авторизацию пользователя, под которым нужно выполнять скрипт:

Снова нажмём ОК. Готово, скрипт добавился в планировщик заданий.

Теперь перейдём в планировщик заданий Windows и уже в нём настроим нужную нам периодичность запуска:

Откроем задание на редактирование и на закладке "Триггеры" укажем, что хотим выполнять задачу ежедневно каждые 15 минут:

Замечание

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

Нужно понимать, что технически запуск скрипта равносилен запуску обновлятора для выполнения определенных задач. А такие запуски в рамках одного экземпляра программы выстраиваются в очередь. И если у вас ночью запустилось пакетное обновление баз на 8 часов, то пока все эти обновления не отработают, никакие скрипты запущены не будут.

В целом под небольшие и часто повторяемые задачи я советую выделить отдельный экземпляр программы.

Также отдельно обращаю внимание на то, что вы можете сохранить несколько скриптов с разными параметрами контроля сеансов для разных баз/групп баз/кластеров.

С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).

Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.

Есть ли возможность как-нибудь определить
1) Время бездействия пользователя
2) Время бездействия пользователя в окне 1С?

К событиям не привязаться - пользователь может ничего не записывать. В каждую форму тоже те пропишешь.
"Кнопка бдительности" как на ЖД не годится.
Использовать отдельный сеанс, мониторящий кластер и соединения в нем, а не на клиентской стороне?

Может какой-нибудь скрипт есть, позволяющий определить бездействие, хотя бы в рамках винды, не конкретно 1С?

Даже суррогатные варианты приветствуются.

При входе каждого нового пользователя у всех появляется окно с вопросом. Нужно ввести свой номер телефона (или код с картинки) - чтобы доказать, что сидишь в 1С и глаза открыты
100 раз обсуждалось, и как бы всегда был вывод один - эта задача бред, смысла не имеет, начальство надо послать на йюх когда просят такое. Имхо
(0) загони всех в терминал - он умеет показывать бездействие через "Диспетчер служб терминалов".
Смысл не в мониторинге рыботы сотрудников, а в том, что ключи кончаются.
Только кнопка смерти. Иначе никак, ибо сеанс проявляет активность и без участия пользователя.
можеш логировать действия юзера например (параметр запуска 1с), и смотреть меняется файл или нет.
З.ы. докупите ключи

1. Подойти к пользователю и спросить, активен ли он.
2. Если не активен, выгнать нахрен.

(12) Не, недостаточно автоматизировано! Надо так:
Сделать мессенджер в 1С и через него спрашивать.
(13) здание большое? если нет - удаленно запустить ролик-кричалку, если ответ пользователя слышен (криком ли, матом - неважно) - значит активен.
поставь экранную заставку, а в 1с проверяй наличие соответствующего процесса в памяти (если процесс найден - грохаем 1с).

(0) ключи может кончаются, не из-за того, что много входит. А может некоторые по два, три раза заходят в связи с тем. что процессы на 1С сервере залипают.

запрети запуск нескольких сеансов под одним пользователем. В справочники доп настройки пользователей флажок поставь.
(19) Если ключи железные, а не програмные, тогда пофигу сколько ты сеансов открыл. 1компьютер=1лицензия.
(21) ты не прав, если раздача идет сервером - то 1 сесия = 1 ключ

(21) т.е. можно только одну лицензию купить и 100тней рыл на одном терминале работать?

Кому подойдет информация: Администратор 1С, Системный администратор, Бухгалтер
Подойдет для конфигураций: Все типовые конфигурации 1С новых редакций

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

Вообще необходимо стараться избегать необходимости завершать работу пользователей базы принудительно, а завершать работу пользователей стандартным закрытием сеансов работы. Т.к. каждое такое "выкидывание" пользователей из базы является по своей сути аварийным завершением работы с базой. И именно в такие аварийные завершения работы могут возникать или накапливаться ошибки (но не обязательно каждый раз) в пользовательских файлах, которые могут потом выражаться в нетиповом поведении 1С у отдельных пользователей, потребуется очистка кэша базы на отдельном рабочем месте. Но, когда других вариантов не остается, то приходится удалять активные сеансы работы пользователей принудительно.

Будет рассмотрено три момента: в файловой базе, а так же два варианта с использованием возможностей базы в режиме 1С:Предприятие и с помощью утилиты администрирования баз данных для серверного варианта базы. Понять, какой тип базы у Вас - файловый или серверный можно по ссылке.

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

Внимание: описанные ниже действия доступны для пользователей с полным набором прав!

1. Блокировка работы пользователей в файловой базе

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

Для этого необходимо перейти в разделе "Администрирование" ("НСИ и администрирование" - в зависимости от конфигурации может быть такое название) по ссылке "Обслуживание", далее по ссылке "Блокировка работы пользователей". Блокировка базы устанавливается текущим пользователем. После нажатия на кнопку "Установить блокировку" сеансы других пользователей будут прерваны до момента снятия блокировки.

1С 8 блокировка работы пользователей файловой базы

2. Завершение работы пользователей серверной базы в режиме 1С: Предприятие

Переходим в раздел "НСИ и администрирование" или "Администрирование" в зависимости от конфигурации базы 1С 8, далее переход по ссылке "Обслуживание".

1C 8 как удалить, выгнать работающих пользователей из базы в режиме Предприятие

Далее, как продемонстрировано на, объединенном изображении переход по ссылке "Активные пользователи" откроет одноименную форму списка работающих пользователей базы 1С. Выделяем несколько строк или отдельные и с помощью кнопки "Завершить сеанс" работа пользователей будет завершена.

как завершить работу пользователей в базе 1С 8

3. Завершение работы пользователей серверной базы с помощью "Администрирования серверов 1С Предприятия"

Возможна такая ситуация, что доступ в базу оказался не возможен, например, из-за того, что закончились свободные лицензии. Поэтому завершить работу пользователей базы 1С 8 не получиться вышеописанным способом. Так же, если используется старая редакция конфигурации базы, то вышеописанные способы окажутся попросту невозможными в силу отсутствия функционала. Но это все же возможно сделать с помощью дополнительной возможности.

1с 8 не обнаружено свободной лицензии!

Этот вариант уже предполагает завершение работы пользователей не в режиме Предприятие или Конфигуратор, а с помощью дополнительной утилитой "Администрирование серверов 1С Предприятия". Поэтому важно, чтобы у пользователя уже не 1С, а операционной системы на компьютере или сервере было достаточно прав для работы с данной утилитой.

1C 8 ярлык Администрирование серверов 1С предприятия
1C 8 утилита Администрирование серверов 1С Предприятие в меню кнопки Пуск в Windows

Находим базу в ветке "Кластер" - "Локальный кластер" - "Информационные базы" по имени базы и "Сеансы". Имя базы можно найти в "Справка" - "О программе", "Имя базы" или в списке запуска баз, внизу формы списка. Выделяются строки с отдельными сеансами работы или несколько подряд. Правой кнопкой мыши вызывается контекстное меню, в котором необходимо выбрать пункт "Удалить".

1С 8 удаление пользователей из базы

Согласится с предупреждением о том, что удаление сеанса может привести к потере не сохраненных изменений в справочниках и документах. Мера вынужденная, поэтому нажимается кнопка "ОК".

как завершить работу пользователей в базе 1с 8

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

1C 8 удаление сеансов работы пользователей

Может возникнуть ситуация, что в списке пользователей окажется пользователь "DefUser" - это значит, что в базе отрабатывает регламентное (фоновое) задание. Необходимо дождаться, когда фоновое здание закончит выполнение и пользователь DefUser сам автоматически отключиться. Иначе, если в настройке фонового задания установлена настройка запускать повторно при аварийном завершении, то пользователь после удаления его сеанса работы практически мгновенно тут же появится. И, если исходная цель была в получении монопольного доступа, то это сделать не получится из-за мгновенно снова запускающегося после завершения работы сеанса фонового задания. Необходимо дождаться самостоятельного завершения.

Защита от опасных действий появилась в платформе 1с, начиная с версии 8.3.8. Эта защита включена по умолчанию и включает в себя:

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

Почему её стоит отключить для обновлятора

Эта защита полезна для обычных пользователей, но администратор базы (которого мы прописываем в настройках обновлятора) обычно понимает, что делает.

Поэтому для него эту защиту я рекомендую отключить. Иначе некоторые из операций (например, управление расширениями или выполнение обработчиков обновления) будут заканчиваться с ошибкой.

Вот пример такой ошибки:


Здесь мы видим, что появилось предупреждение (из-за защиты от опасных действий) при изменении расширения. А так как операция выполняется в пакетном режиме - это привело к ошибке.

Как её можно отключить

Способ 1

Этот способ предпочтителен.

1. Зайдите в конфигуратор базы:


2. Из меню выберите пункт "Администрирование"-"Пользователи":


3. Сделайте двойной щелчок на пользователе, который прописан в обновляторе:


Способ 2

Этот способ предназначен только для опытных пользователей.

Есть возможность раз и навсегда отключить "Защиту от опасных действий" для всех баз (и для всех пользователей) . Это можно сделать на уровне настроек платформы.

1. Зайдите в папку, куда установлена 1с. Обычно это "c:\Program Files\1cv8".

2. В этой папке найдите подпапку с именем "conf". Зайдите в неё.

3. Здесь найдите и откройте на редактирование файл "conf.cfg".

4. Добавьте в конец этого файла строчку:
DisableUnsafeActionProtection= .*

В моём случае содержимое файла получилось таким:


Сохраните и закройте файл. Готово.

С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).

Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.

Читайте также: