Один пользователь — один сеанс: настройка лимита входов в 1С:Предприятие 8.3

· 9 мин

Содержание

Готовой галочки «не больше N сеансов на пользователя» в платформе 1С:Предприятие 8.3 нет. Ограничить количество сеансов пользователя можно тремя рабочими способами: проверкой при входе в небольшом расширении конфигурации (через ПолучитьСеансыИнформационнойБазы()), запретом лишних способов подключения через роли и ограничением одного RDP-сеанса на терминальном сервере. Консоль администрирования кластера дополняет их: в ней видно и завершают лишние сеансы, а на время работ блокируют вход для всех.

Всё ниже относится к платформе 8.3 в целом, а не к конкретной конфигурации. Для клиент-серверного варианта доступны все способы, для файловой базы — всё, кроме консоли кластера и rac.

Что проверить перед тем, как ограничивать сеансы

Начните не с настроек, а с вопроса: почему у пользователя несколько сеансов. От ответа зависит способ.

  • 🔁 Пользователь сам открывает второе окно. Например, держит один сеанс для отчётов, второй для документов. Здесь нужен лимит при входе.
  • 👥 Под одной учётной записью работают несколько человек. Лимит решит проблему лишь отчасти. Правильнее завести каждому свою учётку.
  • 💤 Сеансы «зависли» после обрыва связи. Человек уже не работает , а сеанс висит и держит лицензию. Здесь помогают настройки спящих сеансов и чистка в консоли.
  • 🔌 Сеансы открывает не человек. COM-соединения, веб-сервисы, обмены, фоновые задания. Их нельзя резать общим лимитом, иначе сломаются обмены.

Подготовьте до начала работ:

  1. Права администратора кластера (имя и пароль, если кластер защищён).
  2. Права с полными полномочиями в самой информационной базе.
  3. Список служебных пользователей: под кем идут обмены, интеграции, регламентные задания. Их нужно будет исключить из ограничения.

Сначала соберите статистику за 2–3 дня: сколько сеансов в среднем держит каждый сотрудник. Так вы выберете лимит, который не помешает нормальной работе. Для бухгалтера с отчётами разумны 2 сеанса, для оператора склада — 1.

Как посмотреть и завершить сеансы пользователя в консоли кластера

Консоль администрирования серверов 1С — первый инструмент. В ней видно, кто сколько сеансов открыл, с какого компьютера и каким клиентом.

Через консоль кластера

  1. Откройте консоль администрирования серверов 1С.
  2. Разверните Центральные серверы 1С:Предприятия → <сервер> → Кластеры → <кластер> → Информационные базы → <база> → Сеансы.
  3. Отсортируйте список по колонке пользователя. Сразу видно, у кого 3–4 сеанса вместо одного.
  4. Посмотрите колонки с приложением и компьютером. Тонкий клиент, веб-клиент, Конфигуратор, COM-соединение отображаются по-разному.
  5. Лишний сеанс выделите и удалите через контекстное меню.

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

Если консоль не открывается или не видит сервер, проверьте регистрацию radmin.dll той же версии, что и платформа. После обновления платформы консоль часто «теряется» именно из-за этого. Регистрацию выполняют из каталога bin нужной версии командой regsvr32 radmin.dll, запустив командную строку от имени администратора.

Через утилиту rac

На сервере без графической консоли и для скриптов используйте rac. Она работает через сервер администрирования ras (по умолчанию порт 1545).

rem Узнать идентификатор кластера
rac cluster list

rem Список сеансов кластера
rac session list --cluster=<uuid-кластера>

rem Какие лицензии заняты сеансами
rac session list --cluster=<uuid-кластера> --licenses

rem Завершить конкретный сеанс
rac session terminate --cluster=<uuid-кластера> --session=<uuid-сеанса>

Если кластер защищён паролем, добавьте --cluster-user и --cluster-pwd. Полный список параметров для вашей версии покажет rac help session.

На rac удобно собрать ночной скрипт: выгрузить список сеансов, найти пользователей с превышением и отправить администратору отчёт. Автоматически завершать сеансы днём таким скриптом не стоит — по той же причине, что и вручную.

Блокировка начала сеансов в свойствах информационной базы

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

Где включить:

  1. В консоли кластера откройте свойства информационной базы.
  2. Включите флажок блокировки начала сеансов.
  3. Задайте начало и окончание блокировки, текст сообщения для пользователей и код разрешения.
  4. Сохраните. Новые сеансы не откроются, уже открытые продолжат работать.

Код разрешения администратор указывает при входе в параметре строки запуска /UC<код>. Например, при коде obnovlenie ярлык выглядит так:

"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /S"srv1c\buh" /UCobnovlenie

Тот же режим включается через rac infobase update с параметрами --sessions-deny, --denied-message и --permission-code. Для этой команды нужны ещё имя и пароль администратора самой базы (--infobase-user, --infobase-pwd).

В типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) есть свой интерфейс для того же: Администрирование → Обслуживание → Блокировка работы пользователей. Он удобнее тем, что показывает пользователям предупреждение и сам завершает их сеансы к назначенному времени.

В тех же свойствах базы в консоли есть параметры спящих сеансов: время засыпания пассивного сеанса и время завершения спящего сеанса. Именно они решают, через сколько секунд после обрыва связи сеанс уснёт, а потом будет закрыт. Если зависшие сеансы копятся часами, уменьшите время завершения, например, до 600–1200 секунд.

Лимит сеансов на одного пользователя через расширение

Это основной способ. Небольшое расширение при старте считает сеансы текущего пользователя и закрывает программу, если лимит превышен. Типовую конфигурацию с поддержки снимать не нужно: расширение подключается отдельно и переживает обновления.

Что понадобится в расширении

Создайте расширение в Конфигураторе (Конфигурация → Расширения конфигурации) и добавьте:

  • 📦 общий модуль ОграничениеСеансовСервер с флажками «Сервер», «Вызов сервера» и «Привилегированный»;
  • 📦 общий модуль ОграничениеСеансовКлиент с флажком «Клиент (управляемое приложение)»;
  • 📦 заимствованный модуль управляемого приложения с перехватом ПриНачалеРаботыСистемы.

Серверная проверка

Функция считает только интерактивные сеансы: тонкий, толстый и веб-клиент. COM-соединения, фоновые задания и Конфигуратор не учитываются, поэтому обмены не пострадают. Администраторов проверка не трогает.

Функция ТекстОтказаПоЛимиту() Экспорт

	Если ПравоДоступа("Администрирование", Метаданные) Тогда
		Возврат "";
	КонецЕсли;

	Лимит = 1; // допустимое число сеансов на пользователя

	ИнтерактивныеКлиенты = Новый Массив;
	ИнтерактивныеКлиенты.Добавить("1CV8C");     // тонкий клиент
	ИнтерактивныеКлиенты.Добавить("1CV8");      // толстый клиент
	ИнтерактивныеКлиенты.Добавить("WebClient"); // веб-клиент

	ИдТекущего = ПользователиИнформационнойБазы.ТекущийПользователь().УникальныйИдентификатор;
	Счетчик = 0;

	Для Каждого Сеанс Из ПолучитьСеансыИнформационнойБазы() Цикл
		Если Сеанс.Пользователь = Неопределено Тогда
			Продолжить;
		КонецЕсли;
		Если Сеанс.Пользователь.УникальныйИдентификатор <> ИдТекущего Тогда
			Продолжить;
		КонецЕсли;
		Если ИнтерактивныеКлиенты.Найти(Сеанс.ИмяПриложения) = Неопределено Тогда
			Продолжить;
		КонецЕсли;
		Счетчик = Счетчик + 1;
	КонецЦикла;

	// Текущий сеанс уже есть в списке, поэтому сравниваем строго «больше»
	Если Счетчик > Лимит Тогда
		Возврат СтрШаблон("У вас уже открыто сеансов: %1 (допустимо %2). Закройте лишнее окно 1С и войдите снова.",
			Формат(Счетчик - 1, "ЧГ=0"), Формат(Лимит, "ЧГ=0"));
	КонецЕсли;

	Возврат "";

КонецФункции

Клиентская часть

В модуле ОграничениеСеансовКлиент:

Процедура ПроверитьЛимитСеансов() Экспорт
	Текст = ОграничениеСеансовСервер.ТекстОтказаПоЛимиту();
	Если ЗначениеЗаполнено(Текст) Тогда
		ПоказатьПредупреждение(Новый ОписаниеОповещения("ЗавершитьПослеПредупреждения", ОграничениеСеансовКлиент), Текст);
	КонецЕсли;
КонецПроцедуры

Процедура ЗавершитьПослеПредупреждения(ДополнительныеПараметры) Экспорт
	ЗавершитьРаботуСистемы(Ложь);
КонецПроцедуры

В заимствованном модуле управляемого приложения:

&После("ПриНачалеРаботыСистемы")
Процедура ОграничениеСеансов_ПриНачалеРаботыСистемы()
	ОграничениеСеансовКлиент.ПроверитьЛимитСеансов();
КонецПроцедуры

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

Нужен разный лимит для разных людей? Добавьте в расширение регистр сведений «Пользователь → Лимит» и читайте значение в серверной функции вместо константы 1. Пустая запись — значит, ограничения нет.

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

Ограничение прав пользователя на способы входа

Второй сеанс часто открывают «обходным путём»: через веб-клиент из браузера, толстый клиент или внешнее соединение. Закройте лишние двери правами.

Право в конфигурацииЧто разрешаетКому оставить
Запуск тонкого клиентаОбычная работа в программеВсем сотрудникам
Запуск веб-клиентаВход через браузерТолько удалённым сотрудникам
Запуск толстого клиентаТолстый клиентОбычно никому, кроме разработчиков
Внешнее соединениеCOM-подключение из других программСлужебным пользователям обменов
АвтоматизацияУправление 1С как OLE-серверомСлужебным пользователям

В конфигурациях на БСП эти права выданы отдельными ролями с теми же названиями. Их включают и снимают через профили групп доступа: Администрирование → Настройки пользователей и прав → Группы доступа.

Для конкретного человека есть ещё два рычага в карточке пользователя:

  • 🚫 снять флажок «Вход в программу разрешён» — человек не сможет войти совсем, данные и история сохранятся;
  • 🔐 оставить только один вид аутентификации, например, аутентификацию операционной системы. Тогда учётку не получится использовать с чужого компьютера под тем же логином.

Если сотрудники работают на терминальном сервере

На RDP-ферме лишние сеансы 1С часто растут из лишних сеансов Windows. Человек подключился с работы, потом из дома — и у него две копии рабочего стола, в каждой открыта 1С.

Включите групповую политику «Ограничить пользователей служб удалённых рабочих столов одним сеансом»: Конфигурация компьютера → Административные шаблоны → Компоненты Windows → Службы удалённых рабочих столов → Узел сеансов удалённых рабочих столов → Подключения. После этого повторный вход подхватывает уже открытый сеанс, а не создаёт новый.

Лицензии и количество подключений к базе

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

Что важно знать:

  • 🖥 при работе через терминальный сервер каждый RDP-сеанс Windows считается отдельным рабочим местом;
  • 🔑 лицензия может быть получена клиентом (ключ или программная лицензия на компьютере) или сервером 1С — от этого зависит, как сеансы расходуют лицензии;
  • 📊 точную картину показывает rac session list --licenses: у каждого сеанса видно, какая лицензия ему досталась и откуда.

Поэтому ограничение сеансов на пользователя — самый дешёвый способ сэкономить лицензии. Три лишних окна у одного бухгалтера могут отнять место у кладовщика, которому 1С нужна прямо сейчас.

Без лицензии платформа не запускает базу вообще. Исключение — учебная версия. Покупать дополнительные лицензии под «лишние окна» нет смысла: дешевле один раз настроить лимит.

Почему ограничение не срабатывает: диагностика

Диагностика: выберите симптом

Ещё два места, где стоит смотреть:

  1. Журнал регистрации (Все функции → Стандартные → Журнал регистрации). Отбор по событиям начала и завершения сеанса покажет, когда и с какого компьютера человек входил.
  2. Активные пользователи (Все функции → Стандартные → Активные пользователи). Список сеансов прямо из базы, без доступа к консоли кластера. Удобно в файловом варианте, где консоли нет.

Если пункт «Все функции» не виден в меню, включите его: Сервис и настройки → Параметры → Отображать команду «Все функции».

Частые вопросы

Можно ли ограничить сеансы в файловой базе?
Да. Расширение с проверкой при входе работает и в файловом варианте: функция ПолучитьСеансыИнформационнойБазы() возвращает сеансы и там. Недоступны только консоль кластера и rac.
Сколько сеансов разрешать одному пользователю?
Для большинства сотрудников хватает одного. Бухгалтеру, который параллельно формирует тяжёлые отчёты, разумно разрешить два. Больше двух обычно говорит о том, что под одной учёткой работают несколько человек.
Учитывает ли ограничение открытый Конфигуратор?
В приведённом коде — нет: в подсчёт попадают только тонкий, толстый и веб-клиент. Если нужно считать и Конфигуратор, добавьте в массив приложение Designer.
Слетит ли расширение после обновления типовой конфигурации?
Нет, расширение остаётся подключённым. После крупного обновления проверьте, что оно применяется без ошибок: если в новом релизе изменился модуль управляемого приложения, платформа сообщит об этом при запуске.
Как завершить все сеансы одного человека сразу?
В консоли кластера отфильтруйте список сеансов базы по пользователю, выделите все его строки и удалите. Через rac — выполните session terminate для каждого найденного идентификатора сеанса.