Выгонялка неактивных пользователей — высвобождалка лицензий 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 не будет опубликован. Обязательные поля помечены *