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