Основная цель выгонялок, которые приходилось видеть здесь — закрытие базы на обслуживание. Здесь же основной идеей проходит высвобождение лицензий.
Сразу прошу — строго не судить. Сделана работа была на заре знакомства с 1С, поэтому на теперяшний ум многое можно было сделать по другому. Но т.к. она работает и есть масса иной работы, то переделывать не брался. Публиковать не собирался — прижало.
В свое время на предприятии сложилась следующая ситуация: имелось 30 лицензий на рабочие места, а учеток более 100. Из-за специфики работы в пиковое время (начало месяца) количество желающих работать в системе переваливало за 30 и начинались звонки от пользователей с сообщениями о невозможности войти в систему, т.к. нет свободных лицензий. Средств на новые лицензии не выделялось. Посему пришлось что-нибудь придумывать. Сразу скажу — не под каждую специфику подойдет. Вся эта задумка не будет работать, если пользователи используют автообновление (в списках документов и т.п.). Но опять же — по нашей специфике использование автообновления не требуется (во всяком случае пока).
Буду рад — если кому-нибудь пригодится идея.
А идея на самом деле проста:
1. Создаем регламентное задание (у меня выполняется раз в 180 секунд), в котором высчитываем «время простоя» пользователей. Если время превышает заданный нами эталон (у меня 1000 секунд), то создаем запись в регистре сведений.
2. В модуле приложения подключаем обработчик ожидания (у меня интервал опроса 1200 секунд).
3. Процедура обработчика анализирует регистр сведений из п.1 и выдает предупреждение пользователю (предупреждение выдается даже если 1С свернута в панель). При отсутсвии реакции на предупреждение в течение некоторого времени (у меня это 600 секунд) 1С завершает свою работу.
В итоге с такими настроенными интервалами выгоняются пользователи, которые не работают с 1С на протяжении 30 минут (+- несколько минут).
P.s.: алгоритм был разработан под 8.1. Адаптация под 8.2 (в режиме совместимости) — изменение версии COMConnector. Не ожидается никаких проблем при адаптации под другие режимы работы и другие конфигурации.
Код и рекомендации по его использованию в прилагаемом файле.
Выгонялка неактивных пользователей (высвобождалка лицензий) для УПП и не только (клиент-сервер). Платформа 8.1, 8.2. Легко адаптируется под другие конфигурации.
Перейти к публикации
Спасибо! Особенно понравилась картинка 🙂
Ну, выбор картинки был самым тяжелым этапом разработки 🙂
Ошибку поправь
Спасибо — поправил.
Я так понимаю, регистр сведений пухнет не по-дням, а по-часам…
(5) fomix, смотря о каком регистре речь. Служебный (т.е. обязательный) «Сообщения пользователям» либо после реакции пользователя на предупреждение либо после автоматического завершения работы пользователя — очищается. Т.е. в нем нет никакой «истории» — он можно сказать для временного хранения и практически всегда либо пуст либо ограничивается не более чем 10 записями. А второй регистр — «История неактивных пользователей» мне нужен был просто для сбора статистики. Его заполнение в коде можно просто закомментировать. Либо если история нужна например за месяц — регламентно чистить и оставлять лишь записи за последний месяц.
Данную обработку есть смысл запускать, когда количество используемых лицензий достигает своего предела или порога. Предусмотрено ли приостанавливать обработку, если нет пиковой нагрузки?
(7) МимохожийОднако, не предусмотрено. Но код открыт — каждый вправе «допиливать» по своему усмотрению
(5) fomix, а что, 5-10-50 миллионов записей в таблице, — такая большая проблема?
(9) Я так понимаю это ирония в мою сторону — если да — то в (6) я ответ написал. По-моему очевидно, что никаких проблем с размерами регистров быть не может.
(9) ldma1979, Дело не в количестве записей, а в том, что хранить этот «мусор» или нет! А если такая настоятельная потребность гасить неработающих пользователей — можно и настройки терминальных сессий поюзать
(11) У нас пользователи не работают в терминалах. И опять же — обязательный регистр — всегда практически пуст. А вспомогательный — так не пишите туда ничего (да и не создавайте его — если история не нужна).
(10) вы неправильно поняли, это ирония в сторону противников записи в базу данных )) мое мнение такое — при правильной организации базы, любая история может иметь важность. На моей практике у меня попросили историю ВСЕХ изменений по заказ-наряду полуторалетней давности…
(11) fomix, Вы решаете, что есть мусор, а что-нет? Я думал, что это определяется задачей…
1)Создание регламентного задания (раз в 180 секунд), не тормозит работу 1С ?
И еще, речь шла о «создаем запись в регистре сведений», по ответу оказалось, что регистров несколько:
Служебный (т.е. обязательный) «Сообщения пользователям», второй регистр — «История неактивных пользователей».
2)Как у вас происходит регламентная чистка (оставлять лишь записи за последний месяц)
3)Что приходится делать при обновлении программы (поскольку конфа изменена)?
(15) i-sever,
1. Нет. А с чего оно должно тормозить — алгоритм процедуры регламентного задания достаточно прост. Но опять же — на наших объемах не тормозит. Как будет себя вести когда одновременных подключений 200 и более — не знаю. Но мое мнение, что на быстродействии не скажется никак.
Что до регистров — то да, как описано в (6), под создаем запись в регистре в описании публикации имелось в виду создание записи в служебном регистре т.к. второй необязательный.
2. У нас регламентной чистки нет, это было предложено тем, кто боится «роста» регистра. Реализовывать можно по разному. Через те же регламентные задания, например.
3. У нас вопрос так не стоит — обновления происходят очень редко, только критические. Например, как сейчас, при переходе с 8.1 УПП 1.2 на 8.2 УПП 1.3. Конфигурация у нас сильно переработана.
Автор молодец.Сильно помогло,а то без прав администратора фиг кого выкинешь с терминалки.
(17) zigomodo, комментарий хорош, только как было определено, что автор молодец, если комментатором не была скачана обработка?
Просьба комментировать тем у кого действительно есть вопросы или публикация принесла пользу, а не тем кому нужны $m за комментарии на форуме.
Проверки на модифицируемость открытых у пользователя документов нету так понимаю? А если бухгалтер редактирует большой документ, ушел на обед — с обеда вернулся и там ничего нет и все заново забивать?
понравилась картинка :
(19) Совершенно верно. У нас нет таких объемных документов, чтобы их начинать вводить до обеда — а заканчивать после.
Так интересно надо скачать попробовать, всплыла такая же проблема с лицензиями
(21) кладовщики инвентаризацию за 5 минут заполняют? Или нет складов? Ну не принципиально, конечно, но не универсально уже получается.
(23) Так я же без претензий на универсальность 🙂 Я в преамбуле писал — что подойдет далеко не для всех. о своих пользователей найдет.
Доброго времени суток!
выдается ошибка Недопустимое значение параметра (параметр номер ‘1’)
В процедуре СообщениеНеактивномуПользователю()
на
Вы забыли указать, что у измерения «Кому» в РС «СообщенияПользователям» необходимо установить Индексировать.
P.S: просто все так разжевали, какое измерение, какой ресурс и уже на автомате просто под копирку делаешь и в итоге ошибка…
За идею спасибо!
(25) Спасибо за уточнение.
Как сделать,чтобы время простоя пользователя не включало обеденный перерыв? Прописывать в обработчике или можно настроить в регламентном задании ?
(27) Если не путаю — то сделать это с помощью настройки расписания регламентного задания сделать это не удастся. Посему только добавлять код в обработку. Только не совсем понимаю зачем это делать? Неужели пользователь уходя на обед не может сохранить например документ и спокойно закрыть программу?