0. postovalov 173 11.10.18 10:36 Сейчас в теме

Мониторинг активности пользователя

Работает ли пользователь с программой? Сколько времени пользователь работает в программе? Что пользователь делает в программе? - эти вопросы стандартно решаются или просмотром журнала регистрации, или с помощью внешних программ. В данной статье будет предложен способ, как следить за активностью пользователей, используя небольшую доработку конфигурации. Бонусом системы мониторинга является автоматическое завершение сеансов пользователей, не работающих с программой длительное время.

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

Комментарии
Избранное Подписка Сортировка: Древо
1. Darklight 19 11.10.18 16:24 Сейчас в теме
Хорошее решение. Я как раз сейчас делаю аналогичное (!) по завершению сеансов, тоже включающее отслеживание окон (но у меня гораздо больше функционала заложено, поэтому пока не выкладываю, хотя об отслеживании окон уже писал тут недавно в комментариях к другой публикации тоже на тему закрытия неактивных сеансов).

У Вас подсмотрел идею о хешировании строки открытых форм (хотя уже, в общем-то, тоже об этом думал) - не знаю пока - будут ли использовать - у меня иное хранение текущего состояния, думал просто хранить идентификаторы форм списком, т.к. я делаю расширение конфигурации в режиме совместимости для платформы 1С 8.3.9 - а там ещё пока нельзя в расширение изменять структуру данных БД.

Не пойму только, почему Вы применили свою функцию хеширования, а не взяли типовой объект из 8.3 "ХешированиеДанных"?

Ну и жаль, что Вы не привели в описании алгоритм завершения работы системы - там тоже есть свои нюансы.
3. postovalov 173 12.10.18 04:32 Сейчас в теме
(1)
Не пойму только, почему Вы применили свою функцию хеширования, а не взяли типовой объект из 8.3 "ХешированиеДанных"?


Функцию хеширования я взял отсюда: https://infostart.ru/public/70030/. Встроенную функцию не проверял, но думаю, что тоже можно использовать, но заранее не могу сказать, какой вариант будет быстрее, т.к. алгоритмы хеширования разные.
2. shurik_shurik 11.10.18 17:08 Сейчас в теме
Идея интересная, но вопрос, зачем делать обращение к срезПоследних регистра, если у Вас и так есть
"создаем в глобальном клиентском общем модуле (это означает, что у общего модуля должны стоять флажки "глобальный" и "клиент")"

Не проще хранить последние данные в глобальных переменных объявленных в этом модуле ? и не дергать каждый раз базу "по пустякам" ?
4. postovalov 173 12.10.18 04:35 Сейчас в теме
(2) Глобальных переменных в управляемом приложении нет, но использование параметра сеанса должно ускорить работу программы.
5. Darklight 19 12.10.18 09:13 Сейчас в теме
(4)Вот поэтому я храню по-другому, т.к. в расширениях и параметров сеансов нет, которые, всё-равно, доступные только в серверном контексте :-( поэтому, приходится извращаться.
9. azhilichev 12.10.18 16:18 Сейчас в теме
(4)
Глобальных переменных в управляемом приложении нет, но использование параметра сеанса должно ускорить работу программы.


Глобальные клиентские переменные можно задавать в модуле управляемого приложения.
postovalov; +1 Ответить
13. postovalov 173 17.10.18 14:18 Сейчас в теме
(9) Попробовал так сделать. Переменная в модуле управляемого приложения действительно сохраняет значение, но пришлось процедуру-обработчик ожидания также перенести также в этот модуль.
6. Иваныч 23 12.10.18 10:12 Сейчас в теме
Нравится, но пока на 7.7 пользуюсь другим. А вам ставлю плюс
7. astracrypt 53 12.10.18 11:12 Сейчас в теме
У нас используют приложение для Windows. Которое измеряет расстояние курсора в метрах пройденное по экрану. Те у кого больше 20 км за месяц тому премию дают.
8. azhilichev 12.10.18 16:13 Сейчас в теме
Если Переменная<>Неопределено 
		И ТипЗнч(Переменная)<>Тип("Null")
		И ТипЗнч(Переменная)<>Тип("Строка")
		И ТипЗнч(Переменная)<>Тип("Число")
		И ТипЗнч(Переменная)<>Тип("Дата")
		И ТипЗнч(Переменная)<>Тип("Булево")
		И ТипЗнч(Переменная)<>Тип("ДекорацияФормы")
		Тогда


Зачем вы заставляете систему делать лишние действия? Так ведь лучше, правда?

ТипЗначения = ТипЗнч(Переменная)
Если Переменная <> Неопределено
   И ТипЗначения <> Тип("NULL") И ТипЗначения <> Тип("Строка")
   И ТипЗначения <> Тип("Число") И ТипЗначения <> Тип("Дата")
   И ТипЗначения <> Тип("Булево") И ТипЗначения <> Тип("ДекорацияФормы") Тогда


Чтобы гарантированно выкинуть пользователя, лучше использовать не ЗавершитьРаботуСистемы(), а ПрекратитьРаботуСистемы(). Если у вас есть модальный диалог, ЗавершитьРаботуСистемы() не отработает.
10. cssprite 27 13.10.18 15:26 Сейчас в теме
(8)
Зачем вы заставляете систему делать лишние действия? Так ведь лучше, правда?
:))

ТипЗначения = ТипЗнч(Переменная);
ЧтотоСделать = НЕ (Переменная = Неопределено
   ИЛИ ТипЗначения = Тип("NULL") ИЛИ ТипЗначения = Тип("Строка")
   ИЛИ ТипЗначения = Тип("Число") ИЛИ ТипЗначения = Тип("Дата")
   ИЛИ ТипЗначения = Тип("Булево") ИЛИ ТипЗначения = Тип("ДекорацияФормы"));
Если ЧтотоСделать  Тогда ...
12. postovalov 173 15.10.18 01:21 Сейчас в теме
(10) не уверен, что так оптимальнее, чем в (8). Насколько я помню, логическое "И" вычисляется до первого ложного значения. А вот для логического "ИЛИ" нужно вычислить все условия.
16. cssprite 27 18.10.18 22:48 Сейчас в теме
(12)
А вот для логического "ИЛИ" нужно вычислить все условия
Зачем, если первое ИСТИНА даст всему выражению ИЛИ - ИСТИНА ?
Про оптимальность прямо не скажешь, зависит от того, какие значения чаще принимает Переменная, просто для выполнения данного условия с использованием И НЕ РАВНО И НЕ РАВНО ... надо проверить все условия И, а для РАВНО ИЛИ РАВНО ... до первой ИСТИНЫ ...

Вообще извиняюсь, прямо к теме отношения не имеет, тут больше субъективное отношение - длинное И НЕ РАВНО И НЕ РАВНО ... режет глаз ))
17. postovalov 173 19.10.18 10:23 Сейчас в теме
(16) Да, вы правы, с точки зрения количества сравнений их будет ровно столько же. Единственное, что вы добавляете еще одну логическую операцию (НЕ) и вспомогательную переменную.

Вообще извиняюсь, прямо к теме отношения не имеет, тут больше субъективное отношение - длинное И НЕ РАВНО И НЕ РАВНО ... режет глаз ))


Мне, наоборот, удобнее, когда условия находятся на разных строках. Так и нагляднее, и добавлять проще. В общем на "вкус и цвет товарищей нет".
11. postovalov 173 15.10.18 01:17 Сейчас в теме
(8) Спасибо за замечание, конечно, нужно поправить. Что касается, ЗавершитьРаботуСистемы() или ПрекратитьРаботуСистемы(), то выбор зависит от того, какая поставлена цель. Если надо убрать сеансы, в которых пользователи открыли программу и не работают, то достаточно ЗавершитьРаботуСистемы(). Если же цель завершить сеанс, даже если имеется открытый (не сохраненный) документ, то да тогда нужно использовать ПрекратитьРаботуСистемы().
14. Vyatcheslav 13 17.10.18 14:29 Сейчас в теме
Интересный подход. Но концептуально странный и даже опасный, если пользователи поймут что к чему. Ведь важно не то, сколько сотрудник ДЕЛАЛ, а то, сколько он СДЕЛАЛ. Почувствуйте разницу. Неопытный сотрудник может очень бурно изображать деятельность, но выхлопа от этого будет мало. Это относится к любой работе и профессии.

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

У нас есть отчет по пользователям в базах 1С, который показывает, кто сколько документов в базе создал за период, сгруппированные по типам документов и с указанием количества строк в ТЧ документов. Дает представление о объеме выполненной работы. Конечно, сильно зависит от должностных обязанностей работников, слепо количественно позволяет только оценивать тех, кто чисто на первичке сидит. У кого обязанности налоговый учет, декларации, закрытие месяца, всякая другая отчетность и т.д., понятно, так не оценить, документов они вводят не много.

Мне симпатичен способ нормирования, когда на одного расчетчика 200 сотрудников + зуп отчетность, например, или на одного буха 2000-4000 основных средств и т.д., но вообще тема очень сложная, пользователь может реально зашиваться и не успевать только потому, что многие функции не автоматизированы и он не знает, что это можно автоматизировать, или функции автоматизированы, но пользователь не знает, как можно работать эффективнее и никто его не учит. Тут только может помочь желание непосредственного руководителя сделать работу пользователя эффективнее + привлечение консультантов-программистов 1С, аудит рабочих и производственных процессов.

ВЫВОД: Универсального счетчика быть не может в принципе, по которому можно объективно оценить любого пользователя, везде необходимо подходить с умом. Там, где сотр решает бизнес-цели, там проще, можно оценивать просто по принесенной выручке/прибыли/выработке и т.д. Там, где обслуживающие подразделения: бухи, юристы, финансисты-экономисты, айтишники и т.д. все намного сложнее.
15. postovalov 173 18.10.18 06:43 Сейчас в теме
(14) В статье описан метод регистрации активности пользователя, но каждый может использовать его для своих целей. Если премию выписывать, то да, это опасный подход, согласен.

Мне симпатичен способ нормирования, когда на одного расчетчика 200 сотрудников + зуп отчетность, например, или на одного буха 2000-4000 основных средств и т.д., но вообще тема очень сложная, пользователь может реально зашиваться и не успевать только потому, что многие функции не автоматизированы и он не знает, что это можно автоматизировать, или функции автоматизированы, но пользователь не знает, как можно работать эффективнее и никто его не учит. Тут только может помочь желание непосредственного руководителя сделать работу пользователя эффективнее + привлечение консультантов-программистов 1С, аудит рабочих и производственных процессов.


Как раз здесь интересно отношение "Объем выполненной работы (количество введенных документов, справочников, строк табличной части и т.п.)" к продолжительности активной работы пользователя. Если у одного пользователя этот показатель будет существенно выше, а у другого существенно ниже, то это предмет для анализа, что пользователь делает неэффективно, почему тратит больше времени на выполнение одних и тех же действий.
18. Si-ned 5 19.10.18 14:09 Сейчас в теме
Повторил весь код для УПП 1.3 для обычного приложения (код вставлял в ПриНачалеРаботыСистемы() обычного приложения). После запуска окно программы запускается, виден интерфейс, но окно заставки не исчезает и висит. Через диспетчер программу не закроешь, так как все диалоги скрываются за окном заставки 1С. Для обычного приложения не работает эта схема что-ли?
19. postovalov 173 19.10.18 16:39 Сейчас в теме
(18) Весь код разработан для управляемого приложения. На обычном не проверял. Думаю, что надо пройти по всем модулям в режиме отладчика.
20. nano1c 136 24.10.18 09:17 Сейчас в теме
(19) ПолучитьОкна() - в обычном не работает. Я делал свою функцию получающую открытые окна в обычном приложении, но через внешнюю компоненту. Вообще у меня давно сделан полный контроль отработанного времени с автоматической рассылкой т13 и т.п. (см. публикацию), но по данным с карт, на другой организации подключил это решение к данным открытий окон - тоже нормально. Сейчас делаю автоматический анализ всех действий - чтобы понять типовые бизнес-маршруты и нетиповые действия анализировать - собирался публикацию писать, но все времени не найду..
postovalov; +1 Ответить
21. xan333 37 05.12.18 10:54 Сейчас в теме
Сделал Расширение для типовых конфигураций 1С на управляемых формах в режиме совместимости 8.3.12. основанное на данной статье https://infostart.ru/public/931108/
22. sp18s 25.02.19 17:37 Сейчас в теме
Ресурсы: Хеш (тип "Число")
Не указали количество знаков хранения. Необходимо 30, по умолчанию 10.
25. postovalov 173 25.06.19 10:07 Сейчас в теме
(22) От этого поля можно вообще отказаться - см. комментарий (2) и далее.
23. letarch 19.06.19 15:16 Сейчас в теме
а использование параметра /LOGUI разве не тоже самое делает?
24. postovalov 173 25.06.19 10:05 Сейчас в теме
(23) Нет, принцип другой: /LOGUI дает журнал всех действий пользователя в отдельном файле. Предлагаемый подход: регистрация активности пользователя с заданной периодичностью в регистре сведений.
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Бизнес-аналитик 1С
Москва
зарплата от 140 000 руб. до 200 000 руб.
Полный день

Программист 1С
Санкт-Петербург
зарплата от 120 000 руб.
Полный день

Консультант 1С (Бухгалтерия)
Санкт-Петербург
зарплата от 100 000 руб.
Полный день

Программист 1С
Санкт-Петербург
зарплата от 150 000 руб.
Полный день

Программист 1С
Тюмень
зарплата от 70 000 руб.
Полный день