Таблица журнала событий в языке запросов

Журнал событий доступен в языке запросов.

Колонки

Колонками в журнале событий являются свойства события. Если свойство не установлено, то значение в колонке — Null. Таким образом, название колонки может быть любым, даже если в журнале нет ни одного события с соответствующим свойством.

Select * выбирает все обязательные колонки журнала (_Идентификатор, _Дата, _Имя, _Тип, _Уровень), а так же динамически поддерживаемый список пользовательских колонок.

Не гарантируется, что список колонок будет верным в момент выполнения запроса. Старые колонки могут быть еще не удалены, а новые не добавлены. Поэтому имена колонок в коде проекта нужно использовать осторожно.

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

Типы

Пользовательские колонки имеют составной тип Строка|Число|ДатаВремя|ИдентификаторСобытия.

Обязательные колонки имеют тот тип, который имеет соответствующее свойство в журнале.

Ограничения

Нельзя писать update / delete запросы, использующие ЖурналСобытий в списке Из. Insert запросы — можно.

Другими словами можно, например, вставить во временную таблицу результат запроса, использующего ЖурналСобытий и другие таблицы. А обновить или удалить значения во временной таблице с помощью подзапроса, использующего ЖурналСобытий, нельзя.

Примеры

Выбор первых 10 событий между заданными моментами времени.

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

Использование «обычных» таблиц вместе с журналом событий. Например, пусть у событий журнала в данном проекте определяется ИмяПользователя из таблицы Пользователи и хочется узнать, какие группы пользователей писали в журнал в данный промежуток времени, тогда подойдет следующий запрос.

ВЫБРАТЬ РАЗЛИЧНЫЕ
    Т.ГруппаПользователей
ИЗ
    ЖурналСобытий КАК Журнал
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Пользователи КАК Т
        ПО Журнал.ИмяПользователя = Т.ИмяПользователя
ГДЕ 
    Журнал._Дата МЕЖДУ &ДатаНачала И &ДатаОкончания