Глава 22. Журнал регистрации
страницаГлава 22. Журнал регистрации
22.1. Общая информация
Для выполнения административных задач часто требуется выяснить, какие события происходили в определенный момент времени или какие действия выполнял тот или иной пользователь.
Для этих целей предназначен журнал регистрации. В этом журнале могут фиксироваться различные события. С его помощью администратор может получить историю работы пользователей с системой.
Журнал регистрации не хранится в базе данных и не сохраняется при операциях загрузки/выгрузки информационной базы.
При работе пользователей система «1С:Предприятие» фиксирует в журнале основные действия, выполняемые пользователем по модификации данных информационной базы, доступу и отказу доступа к данным, выполнению регламентных операций, подключению и отключению от системы и т. д.
Кроме средств интерактивной работы с журналом, которые предоставляются в конфигураторе, доступна также и программная работа с журналом.
В данной главе описываются средства программной работы с журналом регистрации.
22.2. Управление детализацией
Имеется возможность управления уровнем детализации сообщений, которые попадают в журнал регистрации. Для этого существуют методы ПолучитьИспользованиеЖурналаРегистрации() и УстановитьИспользованиеЖурналаРегистрации().
// установим регистрацию всех событий журнала Уровни = Новый Массив; Уровни.Добавить(УровеньЖурналаРегистрации.Ошибка); Уровни.Добавить(УровеньЖурналаРегистрации.Информация); Уровни.Добавить(УровеньЖурналаРегистрации.Предупреждение); Уровни.Добавить(УровеньЖурналаРегистрации.Примечание); УстановитьИспользованиеЖурналаРегистрации(Уровни);
22.3. Запись событий
При выполнении различных операций возникает необходимость фиксировать выполняемые действия для последующего анализа. Для такой фиксации можно использовать журнал регистрации. Запись событий в него осуществляется с помощью метода глобального контекста ЗаписьЖурналаРегистрации().
Примечание. С помощью данного метода невозможно записать в журнал регистрации системные события.
Имена пользовательских событий могут содержать точку в своих названиях, тем самым образуя группы пользовательских событий.
22.4. Управление регистрацией событий
22.4.1. Общая информация
Регистрацию любого события журнала регистрации можно включить или выключить. Для этого служат методы глобального контекста ПолучитьИспользованиеСобытияЖурналаРегистрации() и УстановитьИспользованиеСобытияЖурналаРегистрации() и объект ИспользованиеСобытияЖурналаРегистрации. Следующий пример показывает, как можно выключить регистрацию события Ошибка выполнения (_$``PerformError``$_):
ИспользованиеСобытия = Новый ИспользованиеСобытияЖурналаРегистрации(); ИспользованиеСобытия.Использование = Ложь; УстановитьИспользованиеСобытияЖурналаРегистрации("$PerformError$", ИспользованиеСобытия);
Следует отметить, что существует два события, настройка регистрации которых имеет дополнительные возможности. Это события Доступ (_$``Access``$_.``Access) и Отказ в доступе (_$``Access``$_.``AccessDenied). Далее работа с этими событиями будет описана более подробно. Однако, при настройке регистрации этих событий следует иметь ввиду следующие особенности:
● Изменять настройки регистрации следует при включенном монопольном режиме.
● Изменение настройки регистрации, выполненное в текущем сеансе, гарантированно применяется только после перезапуска всех активных сеансов данной информационной базы.
Примечание. События, связанные с транзакциями (_$``Transaction``$_``.``Begin, _$``Transaction``$_.``Commit, _$``Transaction``$_.``Rollback), не могут быть отключены с помощью метода УстановитьИспользованиеСобытияЖурналаРегистрации().
22.4.2. Настройка параметров события «Доступ»
Событие Доступ предназначено для регистрации фактов доступа пользователей системы к тем или иным данным. Для настройки регистрации события Доступ следует задать:
● необходимость регистрации события;
● перечень объектов метаданных, доступ к которым необходимо регистрировать;
● перечень полей объекта метаданных, чтение которых следует регистрировать (поля доступа);
● перечень полей объекта метаданных, значения которых необходимо зарегистрировать (поля регистрации).
Общая схема работы при этом выглядит следующим образом (при условии, что событие регистрируется). Если в процессе работы с данными (выбранного объекта метаданных) произошло чтение одного из заданных полей доступа, происходит фиксация в журнале регистрации полей регистрации по заданным правилам. При этом фиксация факта доступа происходит при любом доступе к данным, совершенным из сеанса пользователя, включая доступ из кода на встроенном языке, совершенного на стороне сервера «1С:Предприятия».
Объем данных, которые будут записаны в журнал регистрации, зависит от того, как настроена регистрация события:
|
Использование |
Поля доступа |
Поля регистрации |
Результат |
|
Не задано |
|
|
Событие не регистрируется |
|
Задано |
Не заданы |
Не заданы |
Событие не регистрируется |
|
Задано |
Заданы |
Не заданы |
Событие регистрируется без детализации |
|
Задано |
Заданы |
Заданы |
Событие регистрируется с указанием полей регистрации |
Событие формируется только в случае успешного чтения данных.
Рассмотрим настройки параметров на конкретном примере:
НастройкаСправочника = Новый ОписаниеИспользованияСобытияДоступЖурналаРегистрации(); // Укажем объект, доступ к которому будет регистрироваться НастройкаСправочника.Объект = "Справочник.ФизическиеЛица"; // Укажем поля доступа НастройкаСправочника.ПоляДоступа.Добавить("ПаспортныеДанные"); НастройкаСправочника.ПоляДоступа.Добавить("Дети.СвидетельствоОРождении"); // Укажем поля регистрации НастройкаСправочника.ПоляРегистрации.Добавить("ПаспортныеДанные"); НастройкаСправочника.ПоляРегистрации.Добавить("Дети.ИмяРебенка"); АльтернативыПолей = Новый Массив(); АльтернативыПолей.Добавить("Фамилия"); АльтернативыПолей.Добавить("Имя"); НастройкаСправочника.ПоляРегистрации.Добавить(АльтернативыПолей); НастройкаОбъектовМетаданных = Новый Массив(); НастройкаОбъектовМетаданных.Добавить(НастройкаСправочника);
В данном примере будет выполняться регистрация доступа к элементам справочника ФизическиеЛица.
При этом события журнала регистрации будут формироваться в том случае, если в запросе к данным справочника ФизическиеЛица будут участвовать:
● поле ПаспортныеДанные;
● поле СвидетельствоОРождении табличной части Дети.
Если в запросе к данным описанные поля не присутствуют, событие доступа к данным не будет записано в журнал регистрации.
После того как система определит доступ к контролируемым полям, в журнал регистрации будут записаны данные о следующих полях справочника ФизическиеЛица:
● Поле ПаспортныеДанные.
● Поле ИмяРебенка из табличной части Дети.
● Какое-либо из полей Фамилия или Имя. Какое из полей будет записано в журнал регистрации, определяется наличием этих данных в запросе к данным. Причем если используются все перечисленные поля, то в журнал регистрации попадет поле, заданное с меньшим индексом (в примере ‑ Фамилия). Если из указанной пары в запросе используется какое-либо одно поле, в журнал регистрации попадет именно оно.
Рассмотрим еще один пример настройки события Доступ:
НастройкаРегистраСведений = Новый ОписаниеИспользованияСобытияДоступЖурналаРегистрации(); // Укажем объект, доступ к которому будет регистрироваться НастройкаРегистраСведений.Объект = "РегистрСведений.ОкладыСотрудников"; // Укажем поля доступа НастройкаРегистраСведений.ПоляДоступа.Добавить("Оклад"); // Укажем поля регистрации НастройкаРегистраСведений.ПоляРегистрации.Добавить("Сотрудник"); НастройкаОбъектовМетаданных.Добавить(НастройкаРегистраСведений);
В данном примере при обращении к полю РегистрСведений.ОкладыСотрудников.Оклад будет происходить регистрация события Доступ со следующим составом поля Данные.Данные:
● если в результате запроса будет поле РегистрСведений.ОкладыСотрудников.Сотрудник (и поле Ссылка задано в настройке полей регистрации справочника ФизическиеЛица, на который ссылается поле Сотрудник), то в событие журнала регистрации будет записано:
● в поле Данные будет записана таблица значений, содержащая колонку СправочникФизическиеЛицаСсылка, в которой будут значения ссылок на объекты справочника ФизическиеЛица;
● в поле Метаданные будет записан массив, содержащий строку РегистрСведений.ОкладыСотрудников, т. е. имя объекта, который послужил поводом регистрации события доступа;
● в поле ПредставлениеМетаданных будет записан массив, содержащий строку РегистрСведений. Оклады сотрудников ‑ представление объекта метаданных;
● если поле Ссылка не участвует в полях регистрации справочника ФизическиеЛица, то она не будет зафиксирована в запросе к регистру сведений;
● если в запросе будет использовано получение данных по ссылке типа Справочник.ФизическиеЛица, хранящейся в регистре сведений, то регистрация будет применяться к полям, которые получены через ссылку, хранящуюся в поле регистра Сотрудник:
● Имя, Фамилия и ПаспортныеДанные (все ‑ полученные через ссылку, хранящуюся в поле регистра Сотрудник), то в журнал регистрации попадут поля ПаспортныеДанные и Фамилия (описание регистрации для справочника Сотрудники можно посмотреть в предыдущем примере).
22.4.3. Настройка параметров события «Отказ в доступе»
Событие Отказ в доступе предназначено для регистрации фактов отказа в доступе к тем или иным данным пользователям системы. Для настройки регистрации события Отказ в доступе, следует задать:
● необходимость регистрации события;
● перечень объектов метаданных, для которых необходимо регистрировать поля регистрации при отказе в доступе (для остальных объектов отказы в доступе будут регистрироваться без детализации);
● перечень полей объекта метаданных, значения которых необходимо зарегистрировать (поля регистрации) при отказе в доступе.
Общая схема работы при этом выглядит следующим образом (при условии, что событие регистрируется). Если в процессе работы с данными (выбранного объекта метаданных) произошел отказ в доступе, происходит фиксация в журнале регистрации полей регистрации по заданным правилам.
Объем данных, которые будут записаны в журнал регистрации, зависит от того, как настроена регистрация события:
|
Использование |
Поля |
Результат |
|
Не задано |
|
Событие не регистрируется |
|
Задано |
Не заданы |
Событие регистрируется
без детализации (поле |
|
Задано |
Заданы |
Событие регистрируется с указанием
полей регистрации в поле |
Событие формируется в следующих случаях:
● при проверке доступа к объекту данных целиком:
● в случае нарушения прав при обращении к методам и свойствам прикладного объекта из встроенного языка или из стандартных интерфейсных функций (форм, команд);
● в случае отказов в доступе при проверке прав на конфигурацию;
● при возникновении события в поле Данные записи журнала будет помещена структура со свойством Право, содержащим действие, в выполнении которого было отказано;
● при проверке ограничений доступа к данным:
● в случае нарушения условий ограничения доступа к данным;
● при возникновении события в поле Данные записи журнала будет помещена структура, содержащая два свойства:
● Действие ‑ указано действие, при попытке выполнения которого произошел отказ в доступе;
● Данные ‑ содержит информацию о полях регистрации (если настроено).
Примечание. При считывании данных во временную таблицу поле Данные.Данные события журнала регистрации не заполняется.
Рассмотрим настройки параметров на конкретном примере:
НастройкаСправочника = Новый ОписаниеИспользованияСобытияОтказВДоступеЖурналаРегистрации(); // Укажем объект, доступ к которому будет регистрироваться НастройкаСправочника.Объект = "Справочник.ФизическиеЛица"; // Укажем поля регистрации НастройкаСправочника.ПоляРегистрации.Добавить("ПаспортныеДанные"); НастройкаСправочника.ПоляРегистрации.Добавить("Дети.ИмяРебенка"); АльтернативыПолей = Новый Массив(); АльтернативыПолей.Добавить("Фамилия"); АльтернативыПолей.Добавить("Имя"); НастройкаСправочника.ПоляРегистрации.Добавить(АльтернативыПолей);
При нарушении доступа к данным в операции Чтение будет происходить регистрация события Отказ в доступе и выполняться запись поля регистрации по правилам, описанным для полей регистрации события Доступ. Для других действий (Изменение, Удаление, Добавление) событие регистрируется, но запись данных не происходит.
22.5. События аудита прав доступа
Примечание. Доступно только для лицензии КОРП. Подробнее о видах лицензий см. здесь.
В процессе работы информационной системы может возникнуть необходимость получить информацию о том, кто изменял некоторые административные параметры системы: изменял роли, профили безопасности, права доступа пользователей, административные настройки и т. д. Для фиксации этой информации система «1С:Предприятие» предлагает так называемые «события аудита прав доступа» и механизм управления формированием этих событий. К событиям аудита прав доступа относятся следующие события:
● _$InfoBase$_.RoleUpdate,
● _$User$_.PermissionChange,
● _$InfoBase$_.AdministrationParametersChange,
● _$InfoBase$_.SecurityProfileChange.
Формирование этих событий управляется следующим образом:
● В клиент-серверном варианте информационной базы: флажок Разрешать запись событий аудита прав доступа в настройках кластера серверов или свойство АдминистрированиеКластер.РазрешитьЗаписьСобытийАудитаПравДоступа.
● В файловой варианте информационной базы: параметры EnableAccessRightAuditEventsWrite файла conf.cfg, который располагается в каталоге информационной базы.
Следует помнить, что подготовка данных для указанных событий занимается достаточно много времени, поэтому не стоит включать данные события «просто так», без конкретной причины.
Рассмотрим события аудита более подробно. Имена объектов конфигурации в данных событий приводятся в таком же виде, в каком они приводятся в XML-файлах выгрузки конфигурации.
Событие _$InfoBase$_.RoleUpdate (Информационная база. Изменение роли) возникает в том случае, когда при сохранении конфигурации базы данных выясняется, что изменен один или несколько объектов Роль. Для каждого измененного объекта записывается свое событие журнала регистрации. Изменения в объекте отражается в данных события. Данные представлены объектом типа Структура, которая содержит записи со следующими ключами:
● Права ‑ значение типа ФиксированнаяСтруктура, которые содержат объекты конфигурации для которых включены или выключены права доступа. Структура содержит следующие свойства:
● ДоступВключен ‑ данные типа ФиксированноеСоответствие, которое содержит список объектов конфигурации, для которых установлены какие-либо права доступа. При этом для каждого объекта формируется отдельная запись, где поле Ключ содержит имя объекта, для которого включены права доступа, а поле Значение содержит фиксированный массив, в котором перечислены добавленные права доступа.
● ДоступВыключен ‑ значение свойства аналогично значению свойства ДоступВключен (по типам и способу формирования), кроме того, что свойство содержит объекты конфигурации, для которых выключены какие-либо права доступа.
● Ограничения ‑ значение типа ФиксированноеСоответствие, которые содержат изменения ограничений доступа к данным в разрезе вида изменения и по объектам конфигурации. Соответствие содержит следующие свойства:
● Добавлены ‑ значение типа ФиксированноеСоответствие, которое содержит добавленные ограничения доступа. При этом поле Ключ содержит имя объекта конфигурации, а поле Значение содержит ФиксированноеСоответствие, описывающее сделанные добавления. В этом соответствии поле Ключ содержит ФиксированныйМассив с именами полей (в терминах языка запросов), включая служебное поле <Прочие поля>, а поле Значение содержит ФиксированныйМассив, в котором каждый элемент содержит выражение ограничения на языке запросов ограничения доступа к данным.
● Изменены ‑ значение типа ФиксированноеСоответствие, которое содержит измененные ограничения доступа к данным. Структура и способ заполнения аналогичен свойству Добавлены. Информации о содержимом ограничения доступа к данным, которое было до выполнения изменения, не предоставляется.
● Удалены ‑ значение типа ФиксированноеСоответствие, которое содержит удаленные ограничения доступа к данным. Структура и способ заполнения аналогичен свойству Добавлены.
● ШаблоныОграничений ‑ значение типа ФиксированнаяСтруктура, которая содержит информацию о добавленных, измененных и удаленных шаблонах ограничения доступа к данным. Структура содержит следующие свойства:
● Добавлены ‑ значение типа ФиксированныйМассив, которые содержит список добавленных шаблонов ограничений. Каждый шаблон описывается объектов типа ФиксированнаяСтруктура, которая состоит из записей Наименование (имя шаблона) и ТекстШаблона (собственно текст ограничения на языке запроса ограничения доступа к данным).
● Изменены ‑ значение типа ФиксированныйМассив, которые содержит список измененных шаблонов ограничений. Структура и способ заполнения аналогичен свойству Добавлены. Информации о содержимом ограничения доступа к данным, которое было до выполнения изменения, не предоставляется.
● Удалены ‑ значение типа ФиксированныйМассив, которые содержит список удаленных шаблонов ограничений. Структура и способ заполнения аналогичен свойству Добавлены.
Событие _$User$_.PermissionChange (Пользователи. Изменение прав доступа) возникает в том случае, когда изменение прав доступа (событие _$InfoBase$_.RoleUpdate) приводит к тому, что для некоторых пользователей изменяется набор доступных объектов информационной базы. В этом случае в журнал регистрации записывается событие _$User$_.PermissionChange, которое содержит суть изменений в данных события. Данные события представляют из себя значение типа Структура, которая содержит записи со следующими ключами:
● Пользователи ‑ значение типа ФиксированныйМассив, который содержит имена пользователей, для которых произошло изменение набора доступных объектов.
● РазделениеДанных ‑ значение типа ФиксированнаяСтруктура. Описывает область данных, в которой доступны пользователи, для которых зафиксированы изменения.
● ПрофильБезопасности ‑ имя текущего профиля безопасности, назначенного для информационной базы.
● Права, Ограничения, ШаблоныОграничений ‑ содержимое полностью аналогично аналогичным записям из данных события _$InfoBase$_.RoleUpdate.
Событие _$InfoBase$_.SecurityProfileChange (Информационная база. Изменение профиля безопасности) формируется в том случае, когда изменяются настройки профиля безопасности, который указан в параметрах информационной базы. Такое событие будет возникать для каждой базы, которая подконтрольна измененному профилю безопасности. Профиль безопасности может быть указан как в качестве значения свойства Профиль безопасности, так и в качестве значения свойства Профиль безопасности безопасного режима. Данные события представляют собой значение типа ФиксированнаяСтруктура, которое содержит записи со следующими ключами:
● АдминистраторКластера ‑ имя администратора кластера, который выполнил изменение.
● ПрофильБезопасности ‑ значение типа ФиксированнаяСтруктура, которое содержит новые значения для измененного профиля безопасности. Записи в структуре имеют ключи, аналогичные именам свойств объекта АдминистрированиеПрофильБезопасности.
Запись события _$``InfoBase``$_.``SecurityProfileChange выполняется отложено, с помощью системного фонового задания InfoBaseSecurityProfileChange.
При изменении параметров информационной базы в кластере серверов, для информационной базы формируется событие _$InfoBase$_.AdministrationParametersChange (Информационная база. Изменение административных параметров). Событие записывается от имени пользователя, который выполнил изменение свойств информационной базы. Данные события содержат новые параметры информационной базы в значении типа ФиксированнаяСтруктура. Каждое свойство описывается отдельной записью. Записи в структуре имеют ключи, аналогичные именам свойств объекта АдминистрированиеИнформационнаяБаза.
Запись события _$``InfoBase``$_.``AdministrationParametersChange выполняется отложено, с помощью системного фонового задания InfoBaseAdministrationParametersChange.
Смотри также:
● Выгрузка конфигурации в XML-файлы (см. здесь).
● Параметры кластера (см. здесь).
● Параметр EnableAccessRightAuditEventsWrite (см. здесь).
● Системные фоновые задания (см. здесь).
22.6. Получение записей журнала регистрации
В процессе эксплуатации прикладного решения могут возникать ситуации, которые требуют программного анализа журнала регистрации, в том числе и получение событий журнала регистрации по некоторым критериям (отбору). Для программного получения записей журнала регистрации необходимо воспользоваться методом глобального контекста ВыгрузитьЖурналРегистрации(). Программно получать можно как записи журнала регистрации информационной базы, где выполняется код на встроенном языке, так и другой информационной базы (даже если с этой базой работают другие экземпляры «1С:Предприятия»), если у метода ВыгрузитьЖурналРегистрации() указан параметр ИмяВходногоФайла. Следует помнить, что такое чтение рекомендуется выполнять только в том случае, если файлы журнала регистрации другой информационной базы доступны локально для экземпляра «1С:Предприятия», выполняющего чтение журнала. Если такого доступа нет, то необходимо разрабатывать другие способы получения журнала регистрации.
Необходимо понимать, что получение записей журнала регистрации может занимать существенное время. Это особенно важно понимать, если получаются записи за большой период или с каким-либо отбором. Чтобы предотвратить потери производительности системы, предпринимаются несколько действий:
1. В клиент-серверном варианте ограничивается количество сеансов, которые одновременно получают данные журнала регистрации:
● не более 4 одновременных запроса данных из журнала регистрации на одну информационную базу;
● если используется разделенная информационная база, то вводится дополнительное ограничение в 1 сеанс получения данных журнала регистрации на одну область данных.
В файловом варианте ограничений на получаемые данные нет.
2. Журнал регистрации, по умолчанию, хранится с разбиением по неделям. Рекомендуется выбирать такой интервал разбиения журнала регистрации, чтобы размер одного файла журнала (с расширением .``lgp) не превышал 100 Мбайт.
3. Индексация файлов журнала регистрации. Индексация позволит существенно повысить скорость отбора данных в журнале регистрации. Однако нужно понимать, что скорость выборки вырастет только в том случае, если используется отбор по индексируемым полям журнала. Индекс будет использоваться, если для отбора используются следующие поля:
● Дата;
● Важность;
● Пользователь;
● Компьютер;
● ИмяПриложения;
● Событие;
● Данные (только в том случае, если данными выступает объект ссылочного типа);
● Метаданные;
● РазделениеДанныхСеанса.
При работе с журналом регистрации, строка представления данных, записанная в журнал при регистрации события, показывается пользователю только в том случае, если можно точно определить, что у этого пользователя есть права на просмотр этого представления или право Администрирование. Если у пользователя нет права Администрирование и невозможно точно определить, что у пользователя есть права на просмотр представления то представление данных от него скрывается. Таким образом, колонка ПредставлениеДанных будет пустой в следующих случаях:
● В конфигураторе: при просмотре журнала регистрации, если у пользователя нет права Администрирование;
● В режиме 1С:Предприятие, при просмотре и при использовании метода ВыгрузитьЖурналРегистрации(), при выполнении всех следующих условий:
● у пользователя нет права Администрирование;
● не установлен привилегированный режим;
● актуальное представление данных для этой ссылки недоступно, по любой из причин:
● объект данных удален;
● в сеансе используются не все независимые разделители, в состав которых входит объект данных;
● у пользователя недостаточно прав для получения представления объекта данных.
● для соответствующего объекта метаданных выполняется любое из условий:
● у пользователя нет права Просмотр;
● имеется ограничение доступа к данным для полей представления.
Для задания условий отбора выборки необходимо воспользоваться параметром Фильтр метода ВыгрузитьЖурналРегистрации(). Данный параметр может содержать либо одиночное значение отбора, заданное с помощью объекта Структура особого формата (формат структуры подробно описан в синтакс-помощнике: Глобальный контекст``‑ Процедуры и функции работы с журналом регистрации``‑ ВыгрузитьЖурналРегистрации), либо массив таких структур.
При этом если отбор задан одним элементом типа Структура, то в результирующую выборку попадут все записи, которые удовлетворяют всем условиям, заданным в структуре (условие сочетаются «по И»). Если отбор задан массивом, то в результирующую выборку попадут записи, которые удовлетворяют хотя бы одному условию, перечисленному в элементах массива (условия сочетаются «по ИЛИ»).
Обратим особое внимание на возможность задания отбора по полю Данные записи журнала регистрации. В качестве отбора по этому полю могут выступать значения типа Строка, Число, Дата, Ссылка, Структура (для событий Доступ, Отказ в доступе, Аутентификация, Ошибка аутентификации, Добавление пользователя, Изменение пользователя и Удаление пользователя), а также массив структур.
Значением элемента структуры, переданной в параметр Фильтр, может выступать конкретное значение, Структура или Массив. Проверка соответствия данных записи журнала на соответствие параметрам фильтра выполняется следующим образом:
● Если передано конкретное значение, то производится сравнение значений в данных записи и в значении фильтра.
● Если передан массив значений, то выполняется сравнение значения из данных записи журнала регистрации и всех значений массива, переданного в качестве значения фильтра. Условие считается выполненным, если значение, указанное в записи журнала, совпадает хотя бы с одним значением переданного массива.
● Если в качестве значения передана структура, то условие считается выполненным при условии, что для всех элементов структуры, переданной в качестве элемента фильтра, будет установлено соответствие с данными записи журнала регистрации.
Рассмотрим это подробнее.
1. В поле Данные записи журнала регистрации находится структура, в поле Данные фильтра также указана структура. В этом случае запись будет удовлетворять условию, если в поле Данные записи журнала присутствуют все ключи из одноименного поля фильтра и значения для этих ключей соответствуют друг другу.
2. В поле Данные записи журнала регистрации находится таблица значений, в поле Данные фильтра указана структура. В этом случае запись будет удовлетворять условию, если в таблице значений есть все колонки с именами, равными именам ключей структуры фильтра, и есть строки, в которых значения соответствующих колонок равны значениям структуры из фильтра.
3. В поле Данные записи журнала регистрации находится значение типа Структура, Массив или ТаблицаЗначений, в поле Данные фильтра указан массив. В этом случае запись будет удовлетворять условию, если в данных записи журнала будет найдено хотя бы одно значение из массива, переданного в качестве значения фильтра.
4. В поле Данные записи журнала регистрации находится какое-либо значение (не структура, не массив и не таблица значений), в поле Данные фильтра указан массив. В этом случае запись будет удовлетворять условию, если значение из записи журнала равно хотя бы одному значению из переданного массива.
5. В поле Данные записи журнала находится элемент со значением типа ТаблицаЗначений, в поле Данные фильтра находится элемент со значением типом Массив, при этом ключи элементов совпадают. В этом случае запись журнала регистрации будет удовлетворять условию, если хотя бы одна ячейка таблицы значений равна хотя бы одному значению из переданного массива.
6. В элементе поля Данные записи журнала находится значение типа Структура, Массив или ТаблицаЗначений, в поле Данные фильтра находится значение типа Структура или Массив. Запись журнала будет удовлетворять условию, если во вложенных данных будет обнаружена запись, удовлетворяющая условию по пунктам 1 и 5. Однако если в фильтре задана структура, то поиск элементов в структуре или колонках таблицы значений записи журнала регистрации, соответствующих элементам этой структуры, будет выполняться только на конкретном уровне вложенности, соответствующем уровню вложенности в фильтре. Таким образом, отдельные значения и значения из массивов в фильтре ищутся на всю глубину, а элементы структуры фильтра только на конкретном уровне.
Если при формировании таблицы значений, находящейся в поле Данные записи журнала регистрации, присутствуют колонки с одинаковым именем, то происходит объединение этих колонок в одну. При этом количество строк в этой таблице увеличивается таким образом, чтобы в результирующей колонке присутствовали все уникальные значения из одноименных колонок. Значения, указанные в остальных колонках, дублируются в создаваемых строках.
Покажем это на примере. Допустим, прикладное решение содержит запрос, который возвращает таблицу со следующими колонками:
● СправочникСсылка.Товары,
● СправочникСсылка.Товары,
● Строка.
При формировании записи журнала регистрации будет выполнено следующее преобразование:
● Первые две колонки будут объединены в одну.
● Для каждой строки, в которой значения Товары.Ссылка и Номенклатура.Ссылка не равны, будет создана еще одна строка.
● Строки будут отличаться значением объединенной колонки, где будут располагаться значения ссылок. Остальные значения колонок будут одинаковыми.
Исходная таблица:
|
Ссылка |
Ссылка |
Артикул |
|
Сосиски |
Перец |
16-АВ-1675 |
Результирующая таблица:
|
Ссылка |
Артикул |
|
Сосиски |
16-АВ-1675 |
|
Перец |
16-АВ-1675 |
Также приведем примеры, показывающие работу отборов при получении записей журнала регистрации:
Пример 1:
● значение поля Данные записи журнала регистрации для события Аутентификация:
● тип: Структура:
● ключ: ПользовательОС, значение: Ivanov;
● значение поля Данные фильтра метода ВыгрузитьЖурналРегистрации():
● тип: Структура:
● ключ: ПользовательОС, значение: Ivanov;
● результат: запись соответствует.
Пример 2:
● значение поля Данные записи журнала регистрации для события Доступ:
● тип: Структура:
● ключ: Данные, значение: ТаблицаЗначений:
|
Фамилия |
Город |
Телефон |
|
Петров |
Тула |
111-22-33 |
|
Иванов |
Москва |
222-33-44 |
● значение поля Данные фильтра метода ВыгрузитьЖурналРегистрации():
● тип: Массив:
● элемент 1: тип Структура:
● ключ: ПользовательОС, значение: Ivanov;
● элемент 2: тип Структура:
● ключ: Данные, значение: Структура;
● ключ: Фамилия, значение: Иванов;
● ключ: Город, значение: Москва;
● результат: запись соответствует отбору, т. к. при сравнении элемента 2 массива отбора найдено соответствие с данными записи (строка 2). В записи журнала регистрации есть таблица значений, у которой существуют колонки Имя и Город и оба значения в колонках равны соответствующим значениям в структуре отбора.
Пример 3:
● значение поля Данные записи журнала регистрации для события Добавление пользователя:
● тип: Структура:
● ключ: Роли, значение: Массив:
● значение 1: Роли.Администратор;
● значение 2: Роли.Кладовщик;
● значение 3: Роли.Продавец;
● значение поля Данные фильтра метода ВыгрузитьЖурналРегистрации():
● тип: Структура:
● ключ: Роли, значение: Роли.Кладовщик;
● результат: запись соответствует отбору, т. к. в поле Данные существует элемент Роли, а среди значений элемента есть значение Роли.Кладовщик.
Пример 4:
● значение поля Данные записи журнала регистрации для события Добавление пользователя:
● тип: Структура:
● ключ: Роли, значение: Массив:
● значение 1: Роли.Администратор;
● значение 2: Роли.Кладовщик;
● значение 3: Роли.Продавец;
● значение поля Данные фильтра метода ВыгрузитьЖурналРегистрации():
● тип: Структура:
● ключ: Роли, значение: Массив:
● значение 1: Роли.Менеджер;
● значение 2: Роли.Продавец;
● результат: запись соответствует отбору, т. к. в поле Данные существует элемент Роли, а среди значений элемента есть значение, перечисленное в массиве отбора (значение Роли.Продавец).
Пример 5:
● значение поля Данные записи журнала регистрации для события Доступ:
● тип: Структура:
● ключ: Данные, значение: ТаблицаЗначений:
|
Фамилия |
Город |
|
Петров |
Тула |
|
Иванов |
Москва |
● значение поля Данные фильтра метода ВыгрузитьЖурналРегистрации():
● тип: Массив:
● тип Структура:
● ключ: Данные, значение: Тула;
● результат: запись соответствует отбору, т. к. искомое значение (Тула) найдено в одной из ячеек таблицы значений, находящейся в свойстве Данные поля Данные записи журнала регистрации.
Для поля Метаданные записи журнала регистрации, у которого в событии хранится массив метаданных, запись соответствует отбору, если хотя бы один элемент массива из поля Метаданные отбора равен хотя бы одному элементу массива записи журнала.
22.7. Дополнительные методы
Для облегчения интерактивного формирования отборов журнала регистрации полезно использовать метод ПолучитьЗначенияОтбораЖурналаРегистрации(). С помощью данного метода можно получать доступные значения отборов для следующих параметров отбора: Пользователь, Компьютер, ИмяПриложения, Событие, Метаданные, РабочийСервер, Основной``IP``Порт, Вспомогательный``IP``Порт. Так, при необходимости установить отбор по событию журнала регистрации можно вначале получить список событий, которые реально присутствуют в данном журнале, а затем выбрать из полученного списка.
Для формирования представлений событий журнала регистрации на языке интерфейса платформы служит метод ПредставлениеСобытияЖурналаРегистрации().
В том случае, если необходимо выполнить копирование фрагмента журнала регистрации с определенным фильтром, следует использовать метод СкопироватьЖурналРегистрации().
Для управления периодом разделения журнала регистрации предназначены методы ПолучитьПериодРазделенияХраненияДанныхЖурналаРегистрации() и УстановитьПериодРазделенияХраненияДанныхЖурналаРегистрации(). Собственно период разделения задается с помощью системного перечисления ПериодРазделенияХраненияДанныхЖурналаРегистрации. Установка периода разделения журнала регистрации поддерживается только для журнала регистрации формата .``lgf (последовательный формат).
При необходимости получения интервала времени, за который хранит данные журнал регистрации, следует использовать метод ПолучитьПериодЖурналаРегистрации(). Даты хранения будут размещены в соответствующих свойствах типа Диапазон, который вернет метод.
Для того, чтобы сократить журнал регистрации, служит метод СократитьЖурналРегистрации(). Сокращение поддерживается для обеих форматов журнала регистрации.