Подсистема автоматизированного завершения сеансов 1С при неактивности пользователей


У многих клиентов на сервере терминалов, особенно крупных, часто возникает проблема нехватки лицензий. Часто это связано с тем, что пользователь в удаленном филиале по тем или иным причинам не завершил свой сеанс. Была поставлена задача автоматически завершать сеансы 1С, неактивные в течении определенного промежутка времени. Решение было частично взято из публикации http://infostart.ru/public/16441/ и переделано как под обычные, так и под управляемые формы.

Как и в источнике (//infostart.ru/public/16441/), решения оформлены в виде подсистемы, подключаемой к любой типовой конфигурации. Подсистема имеет две роли: Администрирование системы простоя и  Проверять простой сеанса.

Пользователь с первой ролью может устанавливать значения констант: Период опроса простоя, Время простоя и Действие при простое. При этом, первые две константы задаются в секундах.

Обработка «Блокиратор». Форма служит для редактирования констант.
В качестве проверяющего инструмента для простоя использован скрипт, предоставленный //infostart.ru/profile/12366/
Порядок установки:
  1. Объедините эту конфигурацию с исходной. Обратите внимание на единственное место, где требуется внести изменения в исходную конфигурацию – это модуль обычного приложения (или модуль управляемого приложения).
  2. Откройте в режиме «Предприятия» обработку «Блокиратор» и заполните настройки.
  3. Установите для нужных пользователей в доступных ролях «Проверять простой сеанса».

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

11 Comments

  1. cj512

    А че стандартный способ выкидывания спящих сеансов уже не работает? P.S. настраивается в конфигураторе

    Reply ↓
  2. graphbuh

    Можно ли доработать эту систему, чтобы выдавала предупреждения о том, что работа будет завершена (на случай, если пользователь просто запустил отчет на формирование и ушел покурить на 2 ч.)

    Reply ↓
  3. Protey77

    (2) Сделать можно все. А за дополнительную плату еще больше 🙂

    А с Вашим вопросом, лучше все-таки ввести дополнительную константу типа времени, чтобы отключалась, например, только после 17:00. В результате человек, работающий в вечернее время будет работать, а оставивший сеанс открытым и ушедший домой — будет отключен.

    Reply ↓
  4. Kontakt

    (3) актуально. Можно реализовать от какого времени отключать. Например после 19:00

    Reply ↓
  5. Protey77

    (4)В версиях 1.01 добавлены еще две константы: Время начала проверки (имеет формат времени, если заполнена, то будет выбрасывать пользователей не ранее установленного параметра)

    т.е. уже реализовано.

    Reply ↓
  6. Kontakt

    Из за чего может не срабатывать? Платформа на сервере 1С 8.3.8

    Reply ↓
  7. Kontakt

    Процедура ПроверитьПростойВРаботеПользователя() кем запускается у Вас?

    Reply ↓
  8. DrBlack

    Мы на УПП используем регламентное задание, которое срабатывает раз в сутки (ночью), нас это вполне устраивает, кому интересно, вот код:

    Процедура аск_ЗавершениеСеансовПользователей() Экспорт
    ПараметрыАдминистрированияИБ = СоединенияИБ.ПолучитьПараметрыАдминистрированияИБ();
    СоединенияИБ.ОтключитьСоединенияИБ(ПараметрыАдминистрированияИБ);
    КонецПроцедуры
    

    ЗЫ: Да-да-да, всего пару строк, а столько проблем снимают… 🙂

    Reply ↓
  9. Kontakt

    (8) Если кто по ночам работает? Формирует отчеты, запускает обработки на ночь. Как с ними?

    Reply ↓
  10. Kontakt

    Добавил в модуль СоединенияИБГлобальный строки. Иначе не не запускалась процедура.

    // Выполнить завершение текущего сеанса, если установлена блокировка соединений
    // с информационной базой.
    //
    Процедура КонтрольРежимаЗавершенияРаботыПользователей() Экспорт
    
    //+++Блокировка
    //Для проверка роли, не гоняем лишний раз файл на проверку.
    Если РольДоступна(«Ст_ПроверятьПростойСеанса»)Тогда
    
    ПараметрыСеанса.Ст_ПревышениеОбработано=Ложь;
    ПроверитьПростойВРаботеПользователя();
    
    КонецЕсли;
    //—

    Показать

    Reply ↓
  11. DrBlack

    (9) ну я описал частный случай, даже подчеркнув:

    нас это вполне устраивает

    Мало ли кого это тоже устроит? Решение ведь совсем простое… 🙂

    Reply ↓

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *