Как временно заблокировать сеанс пользователя в 1С:Предприятие 8.3 без закрытия программы?

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

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

Решение 1. Использование встроенного метода «ЗаблокироватьРаботуПользователя()»

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

Давайте проанализируем синтаксис и особенности работы метода ЗаблокироватьРаботуПользователя():

Для вызова блокировки достаточно выполнить простую команду на клиенте:


&НаКлиенте
Процедура ЗаблокироватьСеансВыполнить()
    ЗаблокироватьРаботуПользователя();
КонецПроцедуры

Решение 2. Вывод кнопки блокировки в интерфейс (для толстого и тонкого клиента)

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

Для толстого клиента (обычные формы):

В старых конфигурациях или при работе в режиме толстого клиента кнопка блокировки доступна на уровне платформы. Если она скрыта, пользователь может добавить ее самостоятельно:

  1. В правом верхнем углу панели инструментов нажмите на стрелочку «Добавить или удалить кнопки».
  2. Перейдите в настройки панели инструментов.
  3. Найдите и вынесите кнопку «Блокировка работы» (иконка в виде замка) на панель инструментов.

Для тонкого клиента (управляемые формы, БСП):

В современных конфигурациях на платформе 8.3 (таких как Управление торговлей 11, ERP, Комплексная автоматизация) стандартной кнопки блокировки на панели разделов нет. Чтобы решить эту задачу для пользователей, мы можем создать простейшее расширение конфигурации. Разберем по шагам, как это сделать:

  1. Откройте конфигуратор вашей информационной базы и добавьте новое расширение.
  2. В расширении создайте общую команду (например, БлокировкаЭкрана) и назначьте ей понятную картинку (например, изображение замка или ключа).
  3. В модуле команды пропишите вызов блокировки:
    
    &НаКлиенте
    Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
        ЗаблокироватьРаботуПользователя();
    КонецПроцедуры
    
  4. Разместите созданную команду в области командной панели главного окна программы или добавьте ее на начальную страницу, чтобы она всегда была под рукой у пользователя.

Решение 3. Автоматическое завершение сеанса при бездействии (для платформы 8.3.26 и выше)

Если безопасность вашей компании требует, чтобы программа блокировалась или закрывалась автоматически, когда сотрудник забывает это сделать сам, обратим внимание на новые возможности платформы 1С.

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

Управлять этими настройками можно и программно из кода вашей конфигурации с помощью следующих методов:


// Установка времени бездействия (в секундах)
УстановитьВремяЗавершенияСеансаПриБездействии(900); // 15 минут

// Установка времени вывода предупреждения (в секундах)
УстановитьВремяПредупрежденияОЗавершенииСеансаПриБездействии(60); // 1 минута

Важное примечание: Обратите внимание, что использование этого автоматического механизма на уровне платформы требует наличия лицензии уровня КОРП.

Решение 4. Настройка «спящих» сеансов на сервере (для более ранних версий платформы)

Если ваша компания использует версии платформы ниже 8.3.26 или у вас нет КОРП-лицензии, то для автоматического освобождения лицензий и завершения неактивных сеансов можно настроить параметры на уровне кластера серверов 1С:

  1. Откройте консоль администрирования кластера серверов 1С:Предприятия.
  2. В свойствах вашей информационной базы найдите параметры «Время засыпания пассивного сеанса» (IdleTimeout) и «Время завершения спящего сеанса» (SleepTimeout).
  3. Задайте необходимые интервалы времени в секундах. Например, если установить время засыпания 1200 секунд (20 минут), сеанс пользователя перейдет в спящий режим и освободит занятую им лицензию. Если по истечении времени завершения спящего сеанса активность не возобновится, сервер принудительно закроет данное подключение.

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

Решение 5. Создание собственной формы-блокировщика для веб-клиента

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

Для этого потребуется разработать собственную форму блокировки экрана. Алгоритм реализации выглядит следующим образом:

  1. Создайте в конфигурации или расширении новую общую форму с именем БлокировкаЭкрана.
  2. Сделайте эту форму модальной (или открывайте ее в режиме блокирования всего интерфейса приложения). На форме не должно быть стандартных кнопок закрытия и системного меню.
  3. Разместите на форме поле ввода для пароля и кнопку «Разблокировать».
  4. При открытии формы запоминайте хэш пароля текущего пользователя.
  5. В обработчике кнопки «Разблокировать» выполняйте проверку введенного текста. Если пароль совпадает, форма закрывается, возвращая управление основному интерфейсу. Если пароль введен неверно, выводите предупреждение и очищайте поле ввода.

Пример кода вызова такой формы из управляемого интерфейса:


&НаКлиенте
Процедура ЗапуститьЛокальнуюБлокировку()
    ПараметрыОткрытия = Новый Структура;
    ПараметрыОткрытия.Вставить("РежимБлокировки", Истина);
    
    // Открываем форму блокировки модально, чтобы перекрыть весь интерфейс
    ОткрытьФорму("ОбщаяФорма.БлокировкаЭкрана", ПараметрыОткрытия, , Истина);
КонецПроцедуры

Альтернативный вариант: Использование возможностей операционной системы

Проанализируем еще один простой, но надежный способ — блокировку на уровне операционной системы Windows. Для этого пользователю достаточно нажать комбинацию горячих клавиш Win + L перед тем, как встать из-за стола.

Преимущества данного подхода:

Недостатки и ограничения:

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

← На главную