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

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

Колонки

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

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

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

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

Типы

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

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

Ограничения

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

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

Примеры

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

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

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

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