Как программно определить время входа пользователя в 1С 7.7?

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

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

Способ 1. Запись даты и времени при запуске системы

Самый простой и легко реализуемый вариант — фиксировать факт входа программно прямо в момент запуска сеанса. Для этого используется предопределенная процедура глобального модуля ПриНачалеРаботыСистемы().

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

Разберем пример кода для записи факта входа в текстовый лог-файл:


Процедура ПриНачалеРаботыСистемы()
    ИмяФайлаЛога = КаталогИБ() + "logins.txt";
    ТекстФайл = СоздатьОбъект("Текст");
    Если ФС.СуществуетФайл(ИмяФайлаЛога) = 1 Тогда
        ТекстФайл.Открыть(ИмяФайлаЛога);
    КонецЕсли;
    
    СтрокаЗаписи = Строка(ТекущаяДата()) + " " + Строка(ТекущееВремя()) + " | Пользователь: " + ИмяПользователя();
    ТекстФайл.ДобавитьСтроку(СтрокаЗаписи);
    ТекстФайл.Записать(ИмяФайлаЛога);
КонецПроцедуры

Преимущества: простота реализации, минимальная нагрузка на систему.

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

Способ 2. Анализ файла журнала регистрации (MLG)

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

Проанализируем алгоритм работы с журналом регистрации:

  1. Находим файл журнала регистрации в каталоге SYSLOG информационной базы.
  2. Программно считываем текстовые строки файла с помощью объекта Текст.
  3. Ищем первую запись на текущую дату, содержащую событие входа нужного пользователя (обозначается в логе текстовым идентификатором или кодом события).
  4. Извлекаем значения даты и времени из найденной строки.

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

Способ 3. Чтение системных файлов платформы (links.tmp и 1Cv7.LCK)

Платформа 1С 7.7 при работе пользователей создает служебные файлы, по параметрам которых можно судить о времени старта сеанса:

  1. Файл links.tmp: расположен в подкаталоге SYSLOG рабочей базы. Файл содержит список активных соединений и используется встроенным «Монитором пользователей». Чтение данного файла позволяет получить список текущих сеансов.
  2. Файлы блокировок 1Cv7.LCK: если в настройках пользователей заданы индивидуальные каталоги, платформа создает файл блокировки 1Cv7.LCK при входе. Дата и время создания этого файла операционной системой соответствуют точному времени запуска 1С.

Проверить время создания файла можно с помощью системных объектов или работы с ФС (файловой системой):


КаталогЮзера = КаталогПользователя();
ФайлБлокировки = КаталогЮзера + "1Cv7.LCK";
Если ФС.СуществуетФайл(ФайлБлокировки) = 1 Тогда
    // Время создания файла соответствует времени запуска сеанса
    ВремяВхода = ФС.ВремяСозданияФайла(ФайлБлокировки);
КонецЕсли;

Способ 4. Контроль активных сессий через блокировку справочника

Для точного определения активных сеансов (и исключения «зависших» пользователей) применяется метод динамической блокировки элементов справочника:

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

Способ 5. Прямые запросы к MS SQL Server (для SQL-версии)

Если 1С 7.7 работает в режиме MS SQL Server, дату и время подключения к серверу БД можно получить напрямую из системных представлений SQL:

Запрос к системной таблице sysprocesses или представлению sys.dm_exec_sessions возвращает точное время открытия сетевого соединения (столбец login_time) и имя хоста для каждого активного SPID.

Рекомендации по выбору решения

Выяснив особенности всех методов, можно выбрать наиболее подходящий под конкретные задачи:

Если требуется простая фиксация времени для отчетов — достаточно использовать процедуру ПриНачалеРаботыСистемы() с записью в файл или справочник. Если необходимо корректно отслеживать активных пользователей и принудительно завершать их работу в ночное время — рекомендуется комбинировать запись времени входа с механизмом периодических отметок активности («Heartbeat») или использовать терминальные политики отключения неактивных RDP-сессий на уровне ОС.

← На главную