История работы пользователей


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

Изучая записи Журнала Регистрации в поисках намеков на действия пользователей, в очередной раз, поймал себя на мысли, что хорошо было бы посмотреть не только сухие данные по изменению объектов ИБ, но и увидеть как пользователь работает с интерфейсом системы. Какими вариантами отчетов пользуется, какие разделы открывает, какие документы открывал. Часто эта информация нужна, чтобы оперативно получить ссылку на объект с которым пользователь работал и у него возникли проблемы.

Опытные разработчики знают, что можно зайти под любым пользователем, подменив на время входа пароль, и все увидеть самому. Но это всегда долго. Нужно запустить инструменты, найти пользователя, дождаться открытия программы и т.д. И я решил изучить вопрос истории работы пользователей детальней.

Читая документацию 1С стало ясно, что последние 200 записей истории каждого пользователя хранятся в ИБ на сервере в таблице _usersworkhistory.

UsersWorkHistory

Документация поведала мне, что есть замечательный метод ИсторияРаботыПользователя.Получить(). Но описание к нему дало ясно понять, что метод этот очень недоработан, т.к. менеджер ИсторияРаботыПользователей позволяет очистить всю историю всех пользователей, но получить всю историю или по какому-либо отдельно взятому пользователю — невозможно. Только под Текущим!

Я подумал, неужели в 1С нет никаких методов запустить отдельно взятую процедуру под нужным мне пользователем? И оказалось, что легких путей — нет! Но есть Регламентные задания, которые умеют выполняться под любым пользователем…

Оставалось понять как решить следующие потянувшиеся проблемы:

— как в рамках обработки не редактируя конфигурацию создать нужное мне регламентное задание, которое будет выполнять процедуру из этой обработки;

— регламентные задания невозможно запустить по щелчку мыши в отличие от фоновых;

— нет никакой возможности передать параметры регламентному заданию, т.к. конфигурация не знает ничего о моей обработке;

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

— нужно как-то ловить момент завершения регламентного задания;

 

Все эти проблемы были решены через трюки и уловки. Скажу только, что обработку обязательно необходимо подключать через механизм БСП: ДополнительныеОтчетыИОбработки, под пользователем с правами Администратора, обязателен Клиент-Серверный вариант базы (иначе рег.задания не работают), обработка в процессе выборки истории создает рег.задание в ИБ, пишет данные в Справочник.ДополнительныеОтчетыИОбработки, удаляет рег.задание по окончании. Никакие внешние компоненты, shell скрипты или COM объекты не используются.

Пользуйтесь на свой страх и риск, на здоровье! Ничего такого серьезного и криминального она не делает. Советы по улучшению приветствуются.

 

16 Comments

  1. user929348

    При выборе любого пользователя вылетает с ошибкой

    {ВнешняяОбработка.ПросмотрИсторииРаботыПользователя.Форма.ОсновнаяФорма.Форма(93)}: Ошибка при вызове метода контекста (ОжидатьЗавершения)

    Задания[0].ОжидатьЗавершения();

    по причине:

    Выполнение одного или нескольких заданий завершилось с ошибкой

    Reply
  2. PerlAmutor

    (1) В ЖР пишет что-нибудь?

    Reply
  3. user929348

    Только такая

    РегламентноеЗаданиеПолученияИсторииПользователя, Предупреждение безопасности

    Открывается «Просмотр истории работы пользователя».

    Рекомендуется обращать внимание на источник, из которого был получен данный файл. Если с источником нет договоренности о разработке дополнительных модулей, или есть сомнения в содержимом файла, то его не рекомендуется открывать, поскольку это может нанести вред компьютеру и данным.

    Разрешить открывать данный файл?

    Reply
  4. PerlAmutor

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

    Reply
  5. user929348

    Я в курсе. Вопрос в первом сообщении

    Reply
  6. PerlAmutor

    (5) Уточните версию платформы и конфигурацию.

    Reply
  7. user929348

    Управление торговлей, редакция 11.1 (11.1.10.167)

    1С:Предприятие 8.3 (8.3.10.2580)

    Аналогичная ошибка в 1С:ERP Управление предприятием 2 (2.4.5.54)

    Reply
  8. PerlAmutor

    (7) Проверил на платформе 8.3.11. Ошибок не обнаружил, однако сделал некоторые изменения для подстраховки некоторых моментов. Ссылку на новую версию обработки отправил в личку. Также обновил обработку в публикации.

    Reply
  9. user929348

    Та же ошибка, проверил на платформе 8.3.12.1440 в файловом варианте.

    Интересно, у других 21 скачавших нет таких ошибок?

    Reply
  10. PerlAmutor

    (9) Развернул файловую демо-базу ERP, все работает. Обратил внимание на то, что в файловой базе история пользователя на УФ может появиться не сразу, а спустя несколько секунд (возможно даже больше 10-20). Видимо для файловых баз есть какая-то задержка в запуске регламентных заданий.

    Reply
  11. TreeDogNight

    В последних версиях платформы можно обойтись без использования Регламентных заданий, используя Систему взаимодействия. Можно дать запрос всем активным пользователям на получение истории работы, либо записи ей в какой-нибудь регистр.

    Reply
  12. PerlAmutor

    (11) Как Вы и сказали новая возможность ограничена списком активных пользователей и новой версией платформы. Еще там вроде бы нужно ставить отдельный корпоративный сервер взаимодействий, который тоже немалых денег стоит. В общем нужно тему изучить детальней, может быть пригодится еще в чем-то.

    Reply
  13. romankoav

    Вопрос немного не по теме.

    Никто не сталкивался с тем, что по одним объектам метод ИсторияРаботыПользователя.Получить() выдает инфу, а по другим нет?

    У меня в частности по справочнику пользователей работает, а по справочнику, например ВидыБюджета, — нет!!

    Платформа 1С:Предприятие 8.3 (8.3.12.1567). Конфигурация УПП 1.3. База файловая

    Reply
  14. romankoav

    Нда… применение аналитических способностей выявило, что у этих объектов управляемые формы… вот косяк. Получается в обычных формах не работает?

    Reply
  15. PerlAmutor

    (14) Похоже на то:

    Reply
  16. romankoav

    в документы при открытии еще можно просто (в 1 месте) принудительно поставить запись в историю, а вот в отчеты, справочники — уже нет. Печалька ((((

    Reply

Leave a Comment

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