Как узнать даты начала сеанса конкретного сотрудника в 1С за длительный период?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При администрировании и аудите информационных систем на базе платформы 1С часто возникает необходимость проанализировать активность конкретного сотрудника. Типичная задача — быстро и точно получить список всех дат и времени, когда пользователь запускал программу за длительный промежуток времени (месяц, квартал или год). Если база данных активно используется, журнал регистрации разрастается до огромных размеров, и простой просмотр всех событий становится неэффективным. В этой статье мы подробно разберем, как решить эту задачу различными методами — от штатных средств интерфейса до прямого анализа файлов данных.

Решение 1. Настройка стандартного интерактивного отбора в журнале регистрации

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

  1. Откроем Журнал регистрации. Перейдем в раздел Администрирование — Обслуживание — Журнал регистрации (в типовых конфигурациях на базе БСП).
  2. На панели инструментов нажмем кнопку Установить отбор.
  3. В открывшемся окне на вкладке основных параметров выберем нужный Период и укажем конкретного Пользователя.
  4. Перейдем к поиску поля события. В дереве событий найдем и развернем ветку Сеанс.
  5. Внутри ветки отметим флажком событие Начало. На уровне платформы это событие регистрируется под системным именем _$Session$_.Start.
  6. Нажмем кнопку Применить.

После применения отбора система скроет все технологические операции, транзакции, проведение документов и оставит на экране исключительно строки запуска программы выбранным сотрудником. Однако этот способ имеет ограничение: если журнал регистрации слишком велик, интерактивное окно может "зависнуть" из-за нехватки оперативной памяти клиента. Для просмотра входов и начала сеансов выбранного пользователя по сохранившемуся журналу подойдёт график работы пользователей. Он показывает даты, время и компьютеры, но полнота истории ограничена журналом, а совместимость с 8.3 не проверена.

Решение 2. Программная выгрузка данных через встроенный язык 1С

Для обхода ограничений интерфейса и быстрой обработки больших объемов данных мы можем написать простую внешнюю обработку. Платформа 1С предоставляет мощный метод ВыгрузитьЖурналРегистрации(), который позволяет применить жесткий фильтр еще на этапе чтения физического файла журнала с диска, что значительно ускоряет процесс.

Рассмотрим пример кода, реализующий такую выгрузку:


Фильтр = Новый Структура;
Фильтр.Вставить("ДатаНачала", НачалоПериода);
Фильтр.Вставить("ДатаОкончания", КонецПериода);
Фильтр.Вставить("Пользователь", ИмяСотрудника); // Имя пользователя в ИБ
Фильтр.Вставить("Событие", "_$Session$_.Start"); // Системное имя начала сеанса

ТаблицаСобытий = Новый TablicaZnacheniy;
// Выгружаем только необходимые нам колонки для экономии памяти сервера
ВыгрузитьЖурналРегистрации(ТаблицаСобытий, Фильтр, "Дата, Пользователь, Компьютер");

Проанализируем этот код подробнее. Передавая третьим параметром строку "Дата, Пользователь, Компьютер", мы сообщаем платформе, что нам не нужны тяжелые метаданные (например, комментарии или данные транзакций). Метод возвращает легкую таблицу значений, которую мы можем моментально вывести на форму или сохранить в файл.

Решение 3. Использование встроенных отчетов БСП

Если в вашей конфигурации используется Библиотека стандартных подсистем (БСП), вам не нужно изобретать велосипед. В программе уже заложены готовые специализированные отчеты администратора. Давайте посмотрим, где их найти:

  1. Перейдем в раздел Администрирование — Обслуживание.
  2. Откроем ссылку Отчеты администратора.
  3. Выберем отчет Анализ активности пользователей или Контроль работы пользователей.

Эти отчеты автоматически обращаются к журналу регистрации, выбирают события типа Сеанс.Начало и формируют наглядную статистику в разрезе дней, рабочих мест и времени активности сотрудников. Это наиболее удобный вариант для бизнес-аналитиков и руководителей подразделений.

Решение 4. Прямой SQL-запрос к файлу журнала регистрации SQLite (.lgd)

В современных версиях платформы 1С (начиная с 8.3.5 и до версии 8.3.22 по умолчанию) журнал регистрации хранится в формате базы данных SQLite в файле 1Cv8.lgd. Если у вас файловая база или есть доступ к каталогу логов сервера, мы можем прочитать данные напрямую в обход запуска 1С.

Для этого выполним следующие действия:

  1. Установим любую бесплатную утилиту для работы с SQLite (например, DB Browser for SQLite).
  2. Откроем в ней файл 1Cv8.lgd, расположенный в папке 1Cv8Log вашей информационной базы.
  3. Перейдем к написанию прямого SQL-запроса к таблице событий EventLog.

Пример высокоэффективного SQL-запроса для мгновенной выборки дат запуска программы:


SELECT datetime(date/10000 - 11644473600, 'unixepoch') AS EventTime, userCode
FROM EventLog
WHERE eventId = (SELECT id FROM EventCodes WHERE name = '_$Session$_.Start')
AND userCode = (SELECT id FROM UserCodes WHERE name = 'ИмяСотрудника')
ORDER BY date DESC;

Этот метод работает со скоростью СУБД и позволяет извлечь даты входов за секунды даже из логов объемом в десятки гигабайт. Также этот файл можно подключить в конфигураторе через механизм Внешних источников данных и писать аналогичные запросы на встроенном языке 1С.

Решение 5. Быстрый поиск через PowerShell для текстового формата (.lgp)

Если ваша база данных использует классический текстовый формат журнала регистрации (файлы с расширением .lgp), то совет выгрузить все логи в Microsoft Excel окажется нежизнеспособным — файлы за длительный период могут весить гигабайты, а Excel имеет жесткий лимит в 1 048 576 строк. Вместо этого задействуем консоль PowerShell, которая умеет выполнять потоковый поиск по файлам на диске.

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


Select-String -Path "C:\PathToBase\1Cv8Log\*.lgp" -Pattern "ИмяПользователя" | Select-String -Pattern "_$Session$_.Start"

Выясним причину эффективности этого способа: PowerShell не загружает файл целиком в оперативную память. Он сканирует текстовые файлы построчно, сначала отбирая строки с именем нужного сотрудника, а затем фильтруя их по маркеру начала сеанса. Вы получите готовый текстовый список дат входов за считанные секунды.

← На главную