Таблица журнала событий в языке запросов
Журнал событий доступен в языке запросов.
Колонки
Колонками в журнале событий являются свойства события. Если свойство не установлено, то значение в колонке — Null. Таким образом, название колонки может быть любым, даже если в журнале нет ни одного события с соответствующим свойством.
Select * выбирает все обязательные колонки журнала (_Идентификатор, _Дата, _Имя, _Тип, _Уровень), а так же динамически поддерживаемый список пользовательских колонок.
Не гарантируется, что список колонок будет верным в момент выполнения запроса. Старые колонки могут быть еще не удалены, а новые не добавлены. Поэтому имена колонок в коде проекта нужно использовать осторожно.
Динамическая поддержка списка пользовательских колонок осуществляется в реальном времени самим журналом и изменяется при регистрации новых событий или при очищении журнала. В некоторых случаях изначально список может не существовать и будет строиться в отдельном потоке с полным чтением журнала.
Типы
Пользовательские колонки имеют составной тип Строка|Число|ДатаВремя|ИдентификаторСобытия.
Обязательные колонки имеют тот тип, который имеет соответствующее свойство в журнале.
Ограничения
Нельзя писать update / delete запросы, использующие ЖурналСобытий в списке ИЗ. Insert запросы — можно.
Другими словами можно, например, вставить во временную таблицу результат запроса, использующего ЖурналСобытий и другие таблицы. А обновить или удалить значения во временной таблице с помощью подзапроса, использующего ЖурналСобытий, нельзя.
Примеры
Выбор первых 10 событий между заданными моментами времени.
знч Запрос = Запрос{ВЫБРАТЬ ПЕРВЫЕ 10
_Идентификатор,
_Дата,
ЕстьNull(_Номер, Неопределено) КАК _Номер,
_Длительность,
_Уровень,
_Тип,
ЕстьNull(Описание, Неопределено) Как Описание,
ПользовательскоеСвойство1
ИЗ
ЖурналСобытий
ГДЕ
_Дата МЕЖДУ %ДатаНачала И %ДатаОкончания
УПОРЯДОЧИТЬ ПО _Дата}
исп Результат = Запрос.Выполнить()
для СтрокаРезультата из Результат
// Работа с переменной СтрокаРезультата
;
Использование «обычных» таблиц вместе с журналом событий. Например, пусть у событий журнала в данном проекте определяется ИмяПользователя из таблицы Пользователи и хочется узнать, какие группы пользователей писали в журнал в данный промежуток времени, тогда подойдет следующий запрос.
ВЫБРАТЬ РАЗЛИЧНЫЕ
Т.ГруппаПользователей
ИЗ
ЖурналСобытий КАК Журнал
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Пользователи КАК Т
ПО Журнал.ИмяПользователя = Т.ИмяПользователя
ГДЕ
Журнал._Дата МЕЖДУ %ДатаНачала И %ДатаОкончания