Изучая записи Журнала Регистрации в поисках намеков на действия пользователей, в очередной раз, поймал себя на мысли, что хорошо было бы посмотреть не только сухие данные по изменению объектов ИБ, но и увидеть как пользователь работает с интерфейсом системы. Какими вариантами отчетов пользуется, какие разделы открывает, какие документы открывал. Часто эта информация нужна, чтобы оперативно получить ссылку на объект с которым пользователь работал и у него возникли проблемы.
Опытные разработчики знают, что можно зайти под любым пользователем, подменив на время входа пароль, и все увидеть самому. Но это всегда долго. Нужно запустить инструменты, найти пользователя, дождаться открытия программы и т.д. И я решил изучить вопрос истории работы пользователей детальней.
Читая документацию 1С стало ясно, что последние 200 записей истории каждого пользователя хранятся в ИБ на сервере в таблице _usersworkhistory.
Документация поведала мне, что есть замечательный метод ИсторияРаботыПользователя.Получить(). Но описание к нему дало ясно понять, что метод этот очень недоработан, т.к. менеджер ИсторияРаботыПользователей позволяет очистить всю историю всех пользователей, но получить всю историю или по какому-либо отдельно взятому пользователю - невозможно. Только под Текущим!
Я подумал, неужели в 1С нет никаких методов запустить отдельно взятую процедуру под нужным мне пользователем? И оказалось, что легких путей - нет! Но есть Регламентные задания, которые умеют выполняться под любым пользователем...
Оставалось понять как решить следующие потянувшиеся проблемы:
- как в рамках обработки не редактируя конфигурацию создать нужное мне регламентное задание, которое будет выполнять процедуру из этой обработки;
- регламентные задания невозможно запустить по щелчку мыши в отличие от фоновых;
- нет никакой возможности передать параметры регламентному заданию, т.к. конфигурация не знает ничего о моей обработке;
- регламентное задание не вернет мне никаких данных, т.к. оно не знает по какому адресу ему поместить результат (параметры ведь не передать никак), к тому же между сессиями ВременноеХранилище не передается. (несмотря на то что документация заявляет об обратном. Все сделал по инструкции из документации с передачей пустого значения и адреса хранилища)
- нужно как-то ловить момент завершения регламентного задания;
Все эти проблемы были решены через трюки и уловки. Скажу только, что обработку обязательно необходимо подключать через механизм БСП: ДополнительныеОтчетыИОбработки, под пользователем с правами Администратора, обязателен Клиент-Серверный вариант базы (иначе рег.задания не работают), обработка в процессе выборки истории создает рег.задание в ИБ, пишет данные в Справочник.ДополнительныеОтчетыИОбработки, удаляет рег.задание по окончании. Никакие внешние компоненты, shell скрипты или COM объекты не используются.
Пользуйтесь на свой страх и риск, на здоровье! Ничего такого серьезного и криминального она не делает. Советы по улучшению приветствуются.
UPDATE:
- 26.06.2024
* Исправление ошибки с ключом "Пользователь"
Проверено на следующих конфигурациях и релизах:
- 1С:ERP Управление предприятием 2, релизы 2.5.12.270