В процессе административной работы с конфигурациями на платформе 1С:Предприятие 7.7 часто возникает необходимость узнать точные дату и время входа каждого пользователя в информационную базу. Это нужно для контроля работы персонала, выявления неактивных («зависших») сеансов и настройки механизмов автоматического завершения работы. Рассмотрим подробнее основные варианты решения этой задачи.
Самый простой и легко реализуемый вариант — фиксировать факт входа программно прямо в момент запуска сеанса. Для этого используется предопределенная процедура глобального модуля ПриНачалеРаботыСистемы().
При запуске 1С можно записывать текущее время и имя пользователя в отдельный текстовый файл, внешнюю базу данных или элементы специально созданного справочника.
Разберем пример кода для записи факта входа в текстовый лог-файл:
Процедура ПриНачалеРаботыСистемы()
ИмяФайлаЛога = КаталогИБ() + "logins.txt";
ТекстФайл = СоздатьОбъект("Текст");
Если ФС.СуществуетФайл(ИмяФайлаЛога) = 1 Тогда
ТекстФайл.Открыть(ИмяФайлаЛога);
КонецЕсли;
СтрокаЗаписи = Строка(ТекущаяДата()) + " " + Строка(ТекущееВремя()) + " | Пользователь: " + ИмяПользователя();
ТекстФайл.ДобавитьСтроку(СтрокаЗаписи);
ТекстФайл.Записать(ИмяФайлаЛога);
КонецПроцедуры
Преимущества: простота реализации, минимальная нагрузка на систему.
Ограничения: при нештатном аварийном завершении работы 1С (падение процесса, отключение питания) записи о выходе не создадутся, поэтому отслеживать корректно можно именно момент входа.
Платформа 1С 7.7 автоматически ведет журнал регистрации событий, который сохраняется в каталоге SYSLOG базы данных в файле с расширением .mlg. В нем фиксируются все действия, включая вход пользователей в систему.
Проанализируем алгоритм работы с журналом регистрации:
SYSLOG информационной базы.Текст.Данный подход позволяет узнать время входа без внесения изменений в стандартную логику конфигурации и создания дополнительных справочников.
Платформа 1С 7.7 при работе пользователей создает служебные файлы, по параметрам которых можно судить о времени старта сеанса:
SYSLOG рабочей базы. Файл содержит список активных соединений и используется встроенным «Монитором пользователей». Чтение данного файла позволяет получить список текущих сеансов.1Cv7.LCK при входе. Дата и время создания этого файла операционной системой соответствуют точному времени запуска 1С.Проверить время создания файла можно с помощью системных объектов или работы с ФС (файловой системой):
КаталогЮзера = КаталогПользователя();
ФайлБлокировки = КаталогЮзера + "1Cv7.LCK";
Если ФС.СуществуетФайл(ФайлБлокировки) = 1 Тогда
// Время создания файла соответствует времени запуска сеанса
ВремяВхода = ФС.ВремяСозданияФайла(ФайлБлокировки);
КонецЕсли;
Для точного определения активных сеансов (и исключения «зависших» пользователей) применяется метод динамической блокировки элементов справочника:
Пользователи или Сессии.ПриНачалеРаботыСистемы() программа позиционируется на элементе текущего пользователя, записывает реквизиты ДатаВхода и ВремяВхода, после чего вызывается метод Блокировать(1).Если 1С 7.7 работает в режиме MS SQL Server, дату и время подключения к серверу БД можно получить напрямую из системных представлений SQL:
Запрос к системной таблице sysprocesses или представлению sys.dm_exec_sessions возвращает точное время открытия сетевого соединения (столбец login_time) и имя хоста для каждого активного SPID.
Выяснив особенности всех методов, можно выбрать наиболее подходящий под конкретные задачи:
Если требуется простая фиксация времени для отчетов — достаточно использовать процедуру ПриНачалеРаботыСистемы() с записью в файл или справочник. Если необходимо корректно отслеживать активных пользователей и принудительно завершать их работу в ночное время — рекомендуется комбинировать запись времени входа с механизмом периодических отметок активности («Heartbeat») или использовать терминальные политики отключения неактивных RDP-сессий на уровне ОС.