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

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

В процессе работы с 1С часто возникает необходимость ограничить доступ к сеансу, если пользователь отлучился от рабочего места на 5–10 минут. Это критично для обеспечения информационной безопасности компании. Разберем по шагам, как реализовать механизм временной блокировки или завершения работы неактивного сеанса с помощью программного кода и штатных средств платформы.

Программный способ: использование обработчика ожидания

Основная идея программного решения заключается в периодическом вызове процедуры проверки времени простоя. Для этого в платформе 1С предусмотрен метод ПодключитьОбработчикОжидания. Проверку обычно запускают в модуле приложения при старте системы.

Рассмотрим порядок настройки процедуры разберем по шагам:

  1. В модуле обычного приложения (или управляемого приложения) при старте системы подключаем периодический обработчик.
  2. Создаем экспортную процедуру в глобальном общем модуле или модуле приложения, которая проверяет длительность отсутствия действий.
  3. При превышении допустимого порога простоя вызываем метод ЗаблокироватьРаботуПользователя() или ЗавершитьРаботуСистемы().

Посмотрим на пример кода подключения обработчика в модуле приложения:


Процедура ПриНачалеРаботыСистемы()
    // Подключаем проверку простоя каждые 30 секунд
    ПодключитьОбработчикОжидания("ПроверитьПростойВРаботеПользователя", 30);
КонецПроцедуры

Далее разберем пример процедуры проверки простоя и вызова действия при превышении лимита времени:


Процедура ПроверитьПростойВРаботеПользователя() Экспорт
    Действие = Константы.ДействиеПриПростое.Получить();
    Если Действие.Пустая() Тогда
        Возврат;
    КонецЕсли;

    // Запрашиваем время простоя через специализированный объект или обработку
    Блокиратор = Обработки.Блокиратор.Создать();
    ВремяПростоя = Блокиратор.ПолучитьВремяПростоя() / 1000; // перевод в секунды
    МаксВремяПростоя = Константы.ВремяПростоя.Получить();

    Если ВремяПростоя > МаксВремяПростоя Тогда
        Если Не ПараметрыСеанса.ПревышениеОбработано Тогда
            ОбработатьПревышениеВремениПростоя(Действие);
        КонецЕсли;
    Иначе
        ПараметрыСеанса.ПревышениеОбработано = Ложь;
    КонецЕсли;
КонецПроцедуры

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

Важные нюансы и возможные ошибки при программной блокировке

При использовании программных алгоритмов блокировки необходимо учитывать следующие особенности работы платформы:

  1. Отсутствие пароля у пользователя: Метод ЗаблокироватьРаботуПользователя() вызывает встроенное окно блокировки 1С, для снятия которой требуется пароль. Если у пользователя в 1С пароль не задан, блокировка снимется простым нажатием кнопки «OK» или клавиши Enter.
  2. Использование модальных окон: В режиме управляемого приложения с запретом модальности вызовы методов вроде ОткрытьМодально() приведут к аварийному завершению работы. Следует использовать метод ЗаблокироватьРаботуПользователя() или асинхронный вывод форм.
  3. Ограничения веб-клиента: Внешние компоненты для отслеживания системного ввода Windows не работают в веб-клиенте из-за политики безопасности браузеров.
  4. Фоновые таймеры: Если в открытых формах работают периодические фоновые запросы или собственные таймеры, платформа может сбрасывать счетчик активности.

Штатные механизмы платформы и Библиотеки Стандартных Подсистем (БСП)

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

  1. Параметры информационной базы: В параметрах ИБ (через Конфигуратор или режим Предприятия) можно настроить время засыпания пассивного сеанса и время завершения спящего сеанса. Начиная с платформы 8.3.26, в платформу встроен функционал завершения неактивных сеансов с предупреждением.
  2. Подсистема БСП «Завершение работы пользователей»: В типовых конфигурациях (УТ, ERP, КА, БП) уже встроен штатный механизм. Он позволяет настраивать автоматическое завершение работы неактивных пользователей, корректно отключая торговое оборудование и сохраняя данные.
  3. Групповые политики операционной системы (GPO): Во многих случаях эффективнее настраивать блокировку на уровне Windows. Блокировка рабочего стола ОС при бездействии 5–10 минут защищает не только 1С, но и все остальные персональные данные на ПК.
← На главную