Выгонялка неактивных пользователей — высвобождалка лицензий 8.1, 8.2 (клиент-сервер).



Выгонялка неактивных пользователей (высвобождалка лицензий) для УПП и не только (клиент-сервер). Платформа 8.1, 8.2. Легко адаптируется под другие конфигурации.

Основная цель выгонялок, которые приходилось видеть здесь — закрытие базы на обслуживание. Здесь же основной идеей проходит высвобождение лицензий.

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

В свое время на предприятии сложилась следующая ситуация: имелось 30 лицензий на рабочие места, а учеток более 100. Из-за специфики работы в пиковое время (начало месяца) количество желающих работать в системе переваливало за 30 и начинались звонки от пользователей с сообщениями о невозможности войти в систему, т.к. нет свободных лицензий. Средств на новые лицензии не выделялось. Посему пришлось что-нибудь придумывать. Сразу скажу — не под каждую специфику подойдет. Вся эта задумка не будет работать, если пользователи используют автообновление (в списках документов и т.п.). Но опять же — по нашей специфике использование автообновления не требуется (во всяком случае пока).

Буду рад — если кому-нибудь пригодится идея.

 

А идея на самом деле проста:

1. Создаем регламентное задание (у меня выполняется раз в 180 секунд), в котором высчитываем «время простоя» пользователей. Если время превышает заданный нами эталон (у меня 1000 секунд), то создаем запись в регистре сведений.

2. В модуле приложения подключаем обработчик ожидания (у меня интервал опроса 1200 секунд).

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

 В итоге с такими настроенными интервалами выгоняются пользователи, которые не работают с 1С на протяжении 30 минут (+- несколько минут).

P.s.: алгоритм был разработан под 8.1. Адаптация под 8.2 (в режиме совместимости) — изменение версии COMConnector. Не ожидается никаких проблем при адаптации под другие режимы работы и другие конфигурации.

Код и рекомендации по его использованию в прилагаемом файле.

29 Comments

  1. iRounder

    Выгонялка неактивных пользователей (высвобождалка лицензий) для УПП и не только (клиент-сервер). Платформа 8.1, 8.2. Легко адаптируется под другие конфигурации.

    Перейти к публикации

    Reply
  2. adhocprog

    Спасибо! Особенно понравилась картинка 🙂

    Reply
  3. iRounder

    Ну, выбор картинки был самым тяжелым этапом разработки 🙂

    Reply
  4. babys

    Ошибку поправь

    которые на работают
    Reply
  5. iRounder

    Спасибо — поправил.

    Reply
  6. fomix

    Я так понимаю, регистр сведений пухнет не по-дням, а по-часам…

    Reply
  7. iRounder

    (5) fomix, смотря о каком регистре речь. Служебный (т.е. обязательный) «Сообщения пользователям» либо после реакции пользователя на предупреждение либо после автоматического завершения работы пользователя — очищается. Т.е. в нем нет никакой «истории» — он можно сказать для временного хранения и практически всегда либо пуст либо ограничивается не более чем 10 записями. А второй регистр — «История неактивных пользователей» мне нужен был просто для сбора статистики. Его заполнение в коде можно просто закомментировать. Либо если история нужна например за месяц — регламентно чистить и оставлять лишь записи за последний месяц.

    Reply
  8. МимохожийОднако

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

    Reply
  9. iRounder

    (7) МимохожийОднако, не предусмотрено. Но код открыт — каждый вправе «допиливать» по своему усмотрению

    Reply
  10. ldma1979

    (5) fomix, а что, 5-10-50 миллионов записей в таблице, — такая большая проблема?

    Reply
  11. iRounder

    (9) Я так понимаю это ирония в мою сторону — если да — то в (6) я ответ написал. По-моему очевидно, что никаких проблем с размерами регистров быть не может.

    Reply
  12. fomix

    (9) ldma1979, Дело не в количестве записей, а в том, что хранить этот «мусор» или нет! А если такая настоятельная потребность гасить неработающих пользователей — можно и настройки терминальных сессий поюзать

    Reply
  13. iRounder

    (11) У нас пользователи не работают в терминалах. И опять же — обязательный регистр — всегда практически пуст. А вспомогательный — так не пишите туда ничего (да и не создавайте его — если история не нужна).

    Reply
  14. ldma1979

    (10) вы неправильно поняли, это ирония в сторону противников записи в базу данных )) мое мнение такое — при правильной организации базы, любая история может иметь важность. На моей практике у меня попросили историю ВСЕХ изменений по заказ-наряду полуторалетней давности…

    Reply
  15. ldma1979

    (11) fomix, Вы решаете, что есть мусор, а что-нет? Я думал, что это определяется задачей…

    Reply
  16. i-sever

    1)Создание регламентного задания (раз в 180 секунд), не тормозит работу 1С ?

    И еще, речь шла о «создаем запись в регистре сведений», по ответу оказалось, что регистров несколько:

    Служебный (т.е. обязательный) «Сообщения пользователям», второй регистр — «История неактивных пользователей».

    2)Как у вас происходит регламентная чистка (оставлять лишь записи за последний месяц)

    3)Что приходится делать при обновлении программы (поскольку конфа изменена)?

    Reply
  17. iRounder

    (15) i-sever,

    1. Нет. А с чего оно должно тормозить — алгоритм процедуры регламентного задания достаточно прост. Но опять же — на наших объемах не тормозит. Как будет себя вести когда одновременных подключений 200 и более — не знаю. Но мое мнение, что на быстродействии не скажется никак.

    Что до регистров — то да, как описано в (6), под создаем запись в регистре в описании публикации имелось в виду создание записи в служебном регистре т.к. второй необязательный.

    2. У нас регламентной чистки нет, это было предложено тем, кто боится «роста» регистра. Реализовывать можно по разному. Через те же регламентные задания, например.

    3. У нас вопрос так не стоит — обновления происходят очень редко, только критические. Например, как сейчас, при переходе с 8.1 УПП 1.2 на 8.2 УПП 1.3. Конфигурация у нас сильно переработана.

    Reply
  18. zigomodo

    Автор молодец.Сильно помогло,а то без прав администратора фиг кого выкинешь с терминалки.

    Reply
  19. iRounder

    (17) zigomodo, комментарий хорош, только как было определено, что автор молодец, если комментатором не была скачана обработка?

    Просьба комментировать тем у кого действительно есть вопросы или публикация принесла пользу, а не тем кому нужны $m за комментарии на форуме.

    Reply
  20. insurgut

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

    Reply
  21. electronik

    понравилась картинка :

    Reply
  22. iRounder

    (19) Совершенно верно. У нас нет таких объемных документов, чтобы их начинать вводить до обеда — а заканчивать после.

    Reply
  23. roma03v1

    Так интересно надо скачать попробовать, всплыла такая же проблема с лицензиями

    Reply
  24. insurgut

    (21) кладовщики инвентаризацию за 5 минут заполняют? Или нет складов? Ну не принципиально, конечно, но не универсально уже получается.

    Reply
  25. iRounder

    (23) Так я же без претензий на универсальность 🙂 Я в преамбуле писал — что подойдет далеко не для всех. о своих пользователей найдет.

    Reply
  26. Santur

    Доброго времени суток!

    выдается ошибка Недопустимое значение параметра (параметр номер ‘1’)

    В процедуре СообщениеНеактивномуПользователю()

    на

    НеактивныйПользователь = РегистрыСведений.СообщенияПользователям.Выбрать(ОтборПользователя);

    Вы забыли указать, что у измерения «Кому» в РС «СообщенияПользователям» необходимо установить Индексировать.

    P.S: просто все так разжевали, какое измерение, какой ресурс и уже на автомате просто под копирку делаешь и в итоге ошибка…

    За идею спасибо!

    Reply
  27. iRounder

    (25) Спасибо за уточнение.

    Reply
  28. i-sever

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

    Reply
  29. iRounder

    (27) Если не путаю — то сделать это с помощью настройки расписания регламентного задания сделать это не удастся. Посему только добавлять код в обработку. Только не совсем понимаю зачем это делать? Неужели пользователь уходя на обед не может сохранить например документ и спокойно закрыть программу?

    Reply

Leave a Comment

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