Контроль над количеством одновременных подключений пользователей в 1С:Предприятие — критически важная задача для администраторов систем. Без ограничений один сотрудник может случайно или намеренно заблокировать все доступные лицензии, парализовав работу остальных коллег. Особенно актуальна проблема в компаниях с клиент-серверной архитектурой, где количество сеансов напрямую влияет на производительность сервера и стоимость лицензирования.
В этой статье разберём пять проверенных методов ограничения сеансов, включая настройки через конфигуратор, использование RLS (Row-Level Security), регламентные задания и даже программные решения на встроенном языке. Каждый способ подходит для разных версий платформы (8.3, 8.3.20+) и типов баз — от файлового варианта до распределённой инфраструктуры с кластером серверов. Вы узнаете не только как технически реализовать ограничения, но и как это влияет на безопасность данных и оптимизацию затрат на лицензии.
Почему важно ограничивать количество сеансов в 1С
На первый взгляд, отсутствие ограничений кажется удобным: сотрудники могут открывать столько окон программы, сколько им необходимо. Однако на практике это ведёт к серьёзным проблемам:
- 💰 Перерасход лицензий. Каждый сеанс занимает одну лицензию (в клиент-серверном варианте). Если пользователь открыл 10 окон, но работает только в одном — остальные 9 лицензий простаивают, блокируя доступ другим.
- ⚡ Нагрузка на сервер. Каждый сеанс потребляет оперативную память и процессорное время. При большом количестве "зависших" подключений производительность системы падает в разы.
- 🔒 Риски безопасности. Забытые открытые сеансы (например, после ухода сотрудника с рабочего места) могут быть использованы злоумышленниками для несанкционированного доступа.
- 📊 Искажение отчётности. В некоторых конфигурациях (например, 1С:ЗУП) открытые сеансы блокируют редактирование документов, что приводит к ошибкам в расчётах.
По статистике, в компаниях с более чем 50 пользователями до 30% лицензий расходуется впустую из-за неконтролируемых сеансов. Ограничение их количества позволяет сэкономить на покупке дополнительных лицензий и повысить стабильность работы системы.
Способ 1: Ограничение через настройки конфигуратора (для файлового и клиент-серверного вариантов)
Самый простой метод — использовать встроенные возможности конфигуратора. Он подходит для всех версий платформы 1С:Предприятие 8.3 и не требует программирования. Инструкция:
- Откройте конфигуратор в режиме
Администратор(права должны позволять редактировать параметры информационной базы). - Перейдите в меню
Администрирование → Поддержка и обслуживание → Настройка сеансов. - В разделе
Ограничение количества сеансовустановите флажокОграничивать количество сеансов пользователя. - Укажите максимальное число сеансов (рекомендуемое значение — 2-3 для обычных пользователей и 5 для администраторов).
- Сохраните настройки и перезапустите сервер 1С:Предприятия (для клиент-серверного варианта).
Этот метод работает на уровне платформы и блокирует создание новых сеансов, если лимит превышен. Однако у него есть ограничения:
- 🔄 Не учитывает "зависшие" сеансы (например, при аварийном закрытии программы).
- 📛 Не позволяет гибко настраивать правила для разных групп пользователей.
Если после настройки ограничения пользователи жалуются на ошибку "Превышено максимальное количество сеансов", проверьте, не остались ли открытыми старые подключения. Их можно принудительно закрыть через Администрирование → Активные пользователи
Способ 2: Использование RLS (Row-Level Security) для гибкого контроля
RLS (Управление доступом на уровне строк) — мощный инструмент, который позволяет не только ограничивать данные, но и контролировать сеансы. Этот метод требует знания встроенного языка, но даёт максимальную гибкость. Например, можно установить разные лимиты для бухгалтеров и менеджеров.
Алгоритм реализации:
- Создайте новый объект конфигурации
Регламентное заданиес периодичностью выполнения1 минута. - В модуле задания добавьте код, который будет проверять количество сеансов текущего пользователя:
Процедура Выполнить() ЭкспортЗапрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СеансыРаботыСистемы.Пользователь КАК Пользователь,
| КОЛИЧЕСТВО(*) КАК КоличествоСеансов
|ИЗ
| РегистрСведений.СеансыРаботыСистемы КАК СеансыРаботыСистемы
|ГДЕ
| СеансыРаботыСистемы.Активен = ИСТИНА
|СГРУППИРОВАТЬ ПО
| СеансыРаботыСистемы.Пользователь";
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Если Выборка.КоличествоСеансов > 3 Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Превышено количество сеансов (" + Выборка.КоличествоСеансов + "). Закройте лишние окна.";
Сообщение.Пользователь = Выборка.Пользователь;
Сообщение.Сообщить();
КонецЕсли;
КонецЦикла;
КонецПроцедуры
- Настройте права доступа к регистру
СеансыРаботыСистемыдля регламентного задания.
Преимущества RLS-метода:
- 🎯 Гибкая настройка лимитов для разных ролей (например, 5 сеансов для администраторов и 2 для обычных пользователей).
- 📢 Автоматические уведомления пользователям о превышении лимита.
- 🔄 Возможность принудительного закрытия лишних сеансов через код.
Как принудительно закрыть сеанс через код?
Используйте метод глобального контекста ЗакрытьСеансыПользователя(). Пример:
Процедура ЗакрытьЛишниеСеансы(Пользователь, МаксКоличество = 3)
Сеансы = ПолучаемСписокСеансовПользователя(Пользователь); // Реализуйте самостоятельно
Если Сеансы.Количество() > МаксКоличество Тогда
Для Каждого Сеанс Из Сеансы Цикл
Если Сеансы.Индекс(Сеанс) >= МаксКоличество Тогда
ЗакрытьСеанс(Сеанс.Идентификатор); // Требует прав администратора
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Внимание! Принудительное закрытие может привести к потере несохранённых данных.!Способ 3: Настройка через кластер серверов 1С (для клиент-серверного варианта)
Если вы используете клиент-серверную архитектуру с кластером 1С:Предприятия, ограничить сеансы можно на уровне сервера. Этот метод наиболее надёжен, так как работает до запуска самой базы данных.
Инструкция для Windows-сервера:
- Откройте
Консоль администрирования кластера серверов 1С(ras.exe). - Подключитесь к центральному серверу кластера.
- Выберите нужный рабочий процесс и откройте его свойства.
- В разделе
Ограниченияустановите параметрМаксимальное количество сеансов на пользователя. - Примените настройки и перезапустите рабочий процесс.
Для Linux-серверов настройка выполняется через файл конфигурации conf.cfg (расположен в каталоге кластера). Добавьте строку:
maxUserSessions = 3
Особенности метода:
| Параметр | Windows | Linux |
|---|---|---|
| Требует перезапуска сервера | ✅ Да | ✅ Да |
| Поддерживает гибкие правила | ❌ Нет (один лимит для всех) | ❌ Нет |
| Работает для файлового варианта | ❌ Нет | ❌ Нет |
| Блокирует "зависшие" сеансы | ✅ Да | ✅ Да |
⚠️ Внимание! Настройки кластера применяются ко всем базам данных, подключённым к этому рабочему процессу. Если вам нужны разные лимиты для разных баз — используйте другие методы (например, RLS).
Способ 4: Программное ограничение через обработку "ПроверкаСеансов"
Для компаний с уникальными требованиями (например, разные лимиты для разных отделов) можно разработать кастомную обработку, которая будет запускаться при старте сеанса. Этот метод требует участия программиста 1С, но даёт полный контроль над логикой.
Пример кода для обработки ПриНачалеРаботыСистемы:
Процедура ПриНачалеРаботыСистемы()
ТекущийПользователь = ТекущийПользователь();
ТекущиеСеансы = ПолучаемКоличествоСеансовПользователя(ТекущийПользователь);
// Получаем лимит из справочника "ЛимитыСеансов" по группе пользователя
ГруппаПользователя = ТекущийПользователь.ГруппаДоступа;
Лимит = ПолучаемЛимитСеансовДляГруппы(ГруппаПользователя);
Если ТекущиеСеансы >= Лимит Тогда
Предупреждение("Превышен лимит сеансов (" + Лимит + "). Закройте лишние окна или обратитесь к администратору.");
ЗавершитьРаботуСистемы(Ложь); // Закрываем текущий сеанс
КонецЕсли;
КонецПроцедуры
Для реализации потребуется:
- 📝 Создать справочник
ЛимитыСеансовс полямиГруппаПользователейиМаксКоличество. - 🔧 Написать функции
ПолучаемКоличествоСеансовПользователя()иПолучаемЛимитСеансовДляГруппы(). - 🔒 Настроить права доступа к обработке (чтобы пользователи не могли её обойти).
Создать справочник лимитов|Написать код для обработки ПриНачалеРаботыСистемы|Настроить права доступа|Протестировать на тестовой базе|Обновить рабочую базу-->
Способ 5: Сторонние решения (1C:Fresh, Web-клиент, Cloud)
Если ваша компания использует 1С:Fresh, Web-клиент или облачные решения (например, 1С:ГК в облаке), стандартные методы могут не работать. В этом случае стоит рассмотреть:
- 🌐 1С:Fresh. Ограничения настраиваются в личном кабинете на сайте 1cfresh.com в разделе
Управление пользователями → Лимиты сеансов. Здесь можно установить глобальный лимит для всех пользователей или индивидуальные значения. - ☁️ Облачные сервисы (например, 1С:Линк). Обратитесь к провайдеру — многие хостинг-провайдеры предоставляют инструменты для контроля сеансов через панель управления.
- 🛠️ Сторонние модули. Существуют готовые решения, например:
- 1С:Администрирование сервера (входит в комплекс 1С:ИТС).
- Infostart Monitor — инструмент для мониторинга и управления сеансами.
⚠️ Внимание! В облачных решениях настройки могут отличаться от локальных версий. Например, в 1С:Fresh нельзя использовать регламентные задания для контроля сеансов — только встроенные инструменты личного кабинета.
Преимущества сторонних решений:
- 📊 Визуализация активных сеансов в реальном времени.
- 🔔 Автоматические оповещения о превышении лимитов (по email или в мессенджеры).
- 🔧 Возможность принудительного закрытия сеансов без программирования.
Частые ошибки и как их избежать
При настройке ограничений администраторы часто сталкиваются с типичными проблемами. Вот самые распространённые из них и способы их решения:
| Ошибка | Причина | Решение |
|---|---|---|
| Ограничение не работает для администраторов | В конфигураторе не установлен флажок "Применять к администраторам" | В настройках сеансов включите опцию Ограничивать сеансы администраторов |
| Пользователи жалуются на внезапное закрытие сеансов | Слишком агрессивные настройки регламентного задания | Увеличьте интервал проверки (например, до 5 минут) и добавьте предупреждения |
| После обновления платформы ограничения сбросились | Настройки хранятся в конфигурации, которая перезаписывается при обновлении | Вынесите логику в отдельную обработку или используйте RLS |
| Не видно активных сеансов в консоли администрирования | Недостаточно прав у текущего пользователя | Запустите консоль от имени администратора кластера |
Ещё одна распространённая проблема — "зависшие" сеансы, которые не закрываются даже после выхода пользователя. Чтобы их удалить:
- Откройте
Администрирование → Активные пользователи. - Найдите сеансы с статусом
НеактивенилиОшибка. - Выделите их и нажмите
Завершить сеанс.
Перед массовым закрытием сеансов всегда предупреждайте пользователей — это поможет избежать потери несохранённых данных.
FAQ: Ответы на частые вопросы
Можно ли ограничить сеансы только для определённых пользователей?
Да, для этого подходит метод с RLS или кастомной обработкой. В первом случае настройте регламентное задание так, чтобы оно проверяло только нужных пользователей (по группе доступа или логину). Во втором — добавьте в обработку ПриНачалеРаботыСистемы проверку по списку исключений.
Как узнать, кто превысил лимит сеансов?
Используйте запрос к регистру СеансыРаботыСистемы:
ВЫБРАТЬ
СеансыРаботыСистемы.Пользователь КАК Пользователь,
КОЛИЧЕСТВО(*) КАК Количество
ИЗ
РегистрСведений.СеансыРаботыСистемы КАК СеансыРаботыСистемы
ГДЕ
СеансыРаботыСистемы.Активен = ИСТИНА
СГРУППИРОВАТЬ ПО
СеансыРаботыСистемы.Пользователь
УПОРЯДОЧИТЬ ПО
Количество УБЫВ
Этот запрос вернёт список пользователей, отсортированный по количеству активных сеансов.
Будет ли работать ограничение в файловом варианте 1С?
Да, но с оговорками:
- Метод через конфигуратор работает и в файловом варианте.
- RLS и регламентные задания тоже поддерживаются, но требуют запущенного фонового процесса (например, через Агент сервера 1С).
- Настройки кластера серверов в файловом варианте не применяются.
Для файловой базы оптимально комбинировать настройки конфигуратора и кастомную обработку.
Как ограничить сеансы в мобильном приложении 1С?
Для мобильных клиентов (например, 1С:Мобильная платформа) стандартные методы не работают. Варианты решения:
- Использовать облачный сервис (например, 1С:Fresh), где лимиты настраиваются в личном кабинете.
- Разработать собственный бэкенд, который будет контролировать количество подключений к базе.
- Ограничить доступ на уровне маршрутизатора (например, через MikroTik или Cisco).
В мобильных приложениях также стоит настроить автоматическое закрытие сеансов при бездействии (параметр Timeout в настройках подключения).
Что делать, если после ограничения сеансов пользователи не могут войти в систему?
Вероятные причины и решения:
- Слишком жёсткий лимит (например, 1 сеанс). Увеличьте значение до 2-3.
- Ошибка в коде обработки. Проверьте логи сервера на наличие исключений.
- Конфликт с другими расширениями. Отключите все сторонние модули и проверьте работу системы.
- Кэш метаданных. Очистите кэш на клиентских машинах (
%APPDATA%\1C\1Cv8\).
Если проблема сохраняется, временно отключите ограничения и проверьте настройки пошагово.