1С 8.3 БСП ПрочитатьСобытияЖурналаРегистрации
Данные > 1С 8.3 БСП > Журнал регистрации
Перейти в раздел примеры кода 1С 8.3:
1С 8.3 БСП ПрочитатьСобытияЖурналаРегистрации. Процедура чтения сообщений в журнале регистрации.
Официальная документация ИТС по функционалу (данная процедура не документирована)
Примера кода
&НаСервере
Функция ПолучитьПараметрыОтчета()
ОтборЖР = Новый Структура("ДатаНачала, ДатаОкончания");
ОтборЖР.ДатаНачала = НачалоДня(ТекущаяДата());
ОтборЖР.ДатаОкончания = КонецДня(ТекущаяДата());
Результат = Новый Структура;
Результат.Вставить("ОтборЖурналаРегистрации", ОтборЖР);
Результат.Вставить("КоличествоПоказываемыхСобытий", 2000);
Результат.Вставить("УникальныйИдентификатор", УникальныйИдентификатор);
Результат.Вставить("МенеджерВладельца", Обработки.ЖурналРегистрации);
Результат.Вставить("ДобавлятьДополнительныеКолонки", Ложь);
//Результат.Вставить("Журнал", РеквизитФормыВЗначение("Журнал"));
Возврат Результат;
КонецФункции
&НаСервере
Процедура СобытияЖурнала()
Отчет = ПолучитьПараметрыОтчета();
Выполнение = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
Выполнение.ОжидатьЗавершение = 0;
Выполнение.НаименованиеФоновогоЗадания = НСтр("ru = 'Обновление журнала регистрации'");
Результат = ДлительныеОперации.ВыполнитьВФоне("ЖурналРегистрации.ПрочитатьСобытияЖурналаРегистрации", Отчет, Выполнение);
СтруктураЗаписейЖурнала = ПолучитьИЗВременногоХранилища(Результат.АдресРезультата);
КонецПроцедуры
Функция ПолучитьПараметрыОтчета()
ОтборЖР = Новый Структура("ДатаНачала, ДатаОкончания");
ОтборЖР.ДатаНачала = НачалоДня(ТекущаяДата());
ОтборЖР.ДатаОкончания = КонецДня(ТекущаяДата());
Результат = Новый Структура;
Результат.Вставить("ОтборЖурналаРегистрации", ОтборЖР);
Результат.Вставить("КоличествоПоказываемыхСобытий", 2000);
Результат.Вставить("УникальныйИдентификатор", УникальныйИдентификатор);
Результат.Вставить("МенеджерВладельца", Обработки.ЖурналРегистрации);
Результат.Вставить("ДобавлятьДополнительныеКолонки", Ложь);
//Результат.Вставить("Журнал", РеквизитФормыВЗначение("Журнал"));
Возврат Результат;
КонецФункции
&НаСервере
Процедура СобытияЖурнала()
Отчет = ПолучитьПараметрыОтчета();
Выполнение = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
Выполнение.ОжидатьЗавершение = 0;
Выполнение.НаименованиеФоновогоЗадания = НСтр("ru = 'Обновление журнала регистрации'");
Результат = ДлительныеОперации.ВыполнитьВФоне("ЖурналРегистрации.ПрочитатьСобытияЖурналаРегистрации", Отчет, Выполнение);
СтруктураЗаписейЖурнала = ПолучитьИЗВременногоХранилища(Результат.АдресРезультата);
КонецПроцедуры
Типовая процедура БСП
// Выполняет чтение событий журнала регистрации в соответствии с установленным отбором.
//
// Параметры:
//
// ПараметрыОтчета - Структура - содержит параметры для чтения событий журнала регистрации. Содержит поля:
// * Журнал - ТаблицаЗначений - содержит записи журнала регистрации.
// * ОтборЖурналаРегистрации - Структура - настройки отбора для чтения записей журнала регистрации:
// ** ДатаНачала - Дата - дата начала событий (опционально).
// ** ДатаОкончания - Дата - дата окончания событий (опционально).
// * КоличествоСобытий - Число - ограничение числа считываемых событий журнала.
// * УникальныйИдентификатор - УникальныйИдентификатор - уникальный идентификатор формы.
// * МенеджерВладельца - Произвольный - менеджер объекта, в форме которого отображается журнал
// регистрации, необходим для обратного вызова функций
// оформления.
// * ДобавлятьДополнительныеКолонки - Булево - определяет необходимость обратного вызова для добавления
// дополнительных колонок.
// АдресХранилища - Строка
// - УникальныйИдентификатор - адрес временного хранилища для результата.
//
// Результат представляет собой структуру с полями:
// СобытияЖурнала - ТаблицаЗначений - Отобранные события.
//
Процедура ПрочитатьСобытияЖурналаРегистрации(ПараметрыОтчета, АдресХранилища) Экспорт
ОтборЖурналаНаКлиенте = ПараметрыОтчета.ОтборЖурналаРегистрации;
КоличествоСобытий = ПараметрыОтчета.КоличествоПоказываемыхСобытий;
МенеджерВладельца = ПараметрыОтчета.МенеджерВладельца;
ДобавлятьДополнительныеКолонки = ПараметрыОтчета.ДобавлятьДополнительныеКолонки;
// Проверяем параметры на корректность.
ДатаНачала = Неопределено;
ДатаОкончания = Неопределено;
ДатыОтбораУказаны = ОтборЖурналаНаКлиенте.Свойство("ДатаНачала", ДатаНачала) И ОтборЖурналаНаКлиенте.Свойство("ДатаОкончания", ДатаОкончания)
И ЗначениеЗаполнено(ДатаНачала) И ЗначениеЗаполнено(ОтборЖурналаНаКлиенте.ДатаОкончания);
Если ДатыОтбораУказаны И ДатаНачала > ДатаОкончания Тогда
ВызватьИсключение НСтр("ru = 'Некорректно заданы условия отбора журнала регистрации. Дата начала больше даты окончания.'");
КонецЕсли;
СмещениеВремениСервера = СмещениеВремениСервера();
// Подготовка отбора
Отбор = Новый Структура;
Для Каждого ЭлементОтбора Из ОтборЖурналаНаКлиенте Цикл
Отбор.Вставить(ЭлементОтбора.Ключ, ЭлементОтбора.Значение);
КонецЦикла;
ПреобразованиеОтбора(Отбор, СмещениеВремениСервера);
// Выгрузка отбираемых событий и формирование структуры таблицы.
СобытияЖурнала = Новый ТаблицаЗначений;
ВыгрузитьЖурналРегистрации(СобытияЖурнала, Отбор, , , КоличествоСобытий);
СобытияЖурнала.Колонки.Дата.Имя = "ДатаНаСервере";
СобытияЖурнала.Колонки.Добавить("Дата", Новый ОписаниеТипов("Дата"));
СобытияЖурнала.Колонки.Добавить("НомерРисунка", Новый ОписаниеТипов("Число"));
СобытияЖурнала.Колонки.Добавить("АдресДанных", Новый ОписаниеТипов("Строка"));
Если ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда
СобытияЖурнала.Колонки.Добавить("РазделениеДанныхСеанса", Новый ОписаниеТипов("Строка"));
СобытияЖурнала.Колонки.Добавить("ПредставлениеРазделенияДанныхСеанса", Новый ОписаниеТипов("Строка"));
КонецЕсли;
Если ДобавлятьДополнительныеКолонки Тогда
МенеджерВладельца.ДобавитьДополнительныеКолонкиСобытия(СобытияЖурнала);
КонецЕсли;
Если ОбщегоНазначения.РазделениеВключено()
И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных()
И ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда
МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса");
ПсевдонимыПользователей = Новый Соответствие();
Иначе
МодульРаботаВМоделиСервиса = Неопределено;
ПсевдонимыПользователей = Неопределено;
КонецЕсли;
Для Каждого СобытиеЖурнала Из СобытияЖурнала Цикл
СобытиеЖурнала.Дата = СобытиеЖурнала.ДатаНаСервере - СмещениеВремениСервера;
// Заполнение номеров картинок строк.
МенеджерВладельца.УстановитьНомерРисунка(СобытиеЖурнала);
Если ДобавлятьДополнительныеКолонки Тогда
// Заполнение дополнительных полей, определенных только у владельца.
МенеджерВладельца.ЗаполнитьДополнительныеКолонкиСобытия(СобытиеЖурнала);
КонецЕсли;
// Преобразование массива метаданных в список значений.
СписокПредставленийМетаданных = Новый СписокЗначений;
Если ТипЗнч(СобытиеЖурнала.ПредставлениеМетаданных) = Тип("Массив") Тогда
СписокПредставленийМетаданных.ЗагрузитьЗначения(СобытиеЖурнала.ПредставлениеМетаданных);
СобытиеЖурнала.ПредставлениеМетаданных = СписокПредставленийМетаданных;
Иначе
СобытиеЖурнала.ПредставлениеМетаданных = Строка(СобытиеЖурнала.ПредставлениеМетаданных);
КонецЕсли;
// Преобразование массива "ПредставлениеРазделенияДанныхСеанса" в список значений.
Если ОбщегоНазначения.РазделениеВключено()
И Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда
ПолноеПредставлениеРазделенияДанныхСеанса = "";
РазделениеДанныхСеанса = СобытиеЖурнала.РазделениеДанныхСеанса;
СписокРеквизитовРазделенияДанных = Новый СписокЗначений;
Для Каждого РазделительСеанса Из РазделениеДанныхСеанса Цикл
ПредставлениеРазделителя = Метаданные.ОбщиеРеквизиты.Найти(РазделительСеанса.Ключ).Синоним;
ПредставлениеРазделителя = ПредставлениеРазделителя + " = " + РазделительСеанса.Значение;
ЗначениеРазделителя = РазделительСеанса.Ключ + "=" + РазделительСеанса.Значение;
СписокРеквизитовРазделенияДанных.Добавить(ЗначениеРазделителя, ПредставлениеРазделителя);
ПолноеПредставлениеРазделенияДанныхСеанса = ?(Не ПустаяСтрока(ПолноеПредставлениеРазделенияДанныхСеанса),
ПолноеПредставлениеРазделенияДанныхСеанса + "; ", "")
+ ПредставлениеРазделителя;
КонецЦикла;
СобытиеЖурнала.РазделениеДанныхСеанса = СписокРеквизитовРазделенияДанных;
СобытиеЖурнала.ПредставлениеРазделенияДанныхСеанса = ПолноеПредставлениеРазделенияДанныхСеанса;
КонецЕсли;
// Обработка данных специальных событий.
Если СобытиеЖурнала.Событие = "_$Access$_.Access" Тогда
УстановитьСтрокуАдресаДанных(СобытиеЖурнала);
Если СобытиеЖурнала.Данные <> Неопределено Тогда
СобытиеЖурнала.Данные = ?(СобытиеЖурнала.Данные.Данные = Неопределено, "", "...");
КонецЕсли;
ИначеЕсли СобытиеЖурнала.Событие = "_$Access$_.AccessDenied" Тогда
УстановитьСтрокуАдресаДанных(СобытиеЖурнала);
Если СобытиеЖурнала.Данные <> Неопределено Тогда
Если СобытиеЖурнала.Данные.Свойство("Право") Тогда
СобытиеЖурнала.Данные = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Право: %1'"),
СобытиеЖурнала.Данные.Право);
Иначе
ДанныеЖурнала = СобытиеЖурнала.Данные; // Структура
СобытиеЖурнала.Данные = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Действие: %1%2'"),
ДанныеЖурнала.Действие, ?(СобытиеЖурнала.Данные.Данные = Неопределено, "", ", ...") );
КонецЕсли;
КонецЕсли;
ИначеЕсли СобытиеЖурнала.Событие = "_$Session$_.Authentication"
Или СобытиеЖурнала.Событие = "_$Session$_.AuthenticationError" Тогда
УстановитьСтрокуАдресаДанных(СобытиеЖурнала);
СобытиеЖурналаДанные = "";
Если СобытиеЖурнала.Данные <> Неопределено Тогда
Для Каждого КлючИЗначение Из СобытиеЖурнала.Данные Цикл
Если ЗначениеЗаполнено(СобытиеЖурналаДанные) Тогда
СобытиеЖурналаДанные = СобытиеЖурналаДанные + ", ...";
Прервать;
КонецЕсли;
СобытиеЖурналаДанные = КлючИЗначение.Ключ + ": " + КлючИЗначение.Значение;
КонецЦикла;
КонецЕсли;
СобытиеЖурнала.Данные = СобытиеЖурналаДанные;
ИначеЕсли СобытиеЖурнала.Событие = "_$User$_.Delete" Тогда
УстановитьСтрокуАдресаДанных(СобытиеЖурнала);
СобытиеЖурналаДанные = "";
Если СобытиеЖурнала.Данные <> Неопределено Тогда
Для Каждого КлючИЗначение Из СобытиеЖурнала.Данные Цикл
СобытиеЖурналаДанные = КлючИЗначение.Ключ + ": " + КлючИЗначение.Значение;
Прервать;
КонецЦикла;
КонецЕсли;
СобытиеЖурнала.Данные = СобытиеЖурналаДанные;
ИначеЕсли СобытиеЖурнала.Событие = "_$User$_.New"
Или СобытиеЖурнала.Событие = "_$User$_.Update" Тогда
УстановитьСтрокуАдресаДанных(СобытиеЖурнала);
ИмяПользователяИБ = "";
Если СобытиеЖурнала.Данные <> Неопределено Тогда
СобытиеЖурнала.Данные.Свойство("Имя", ИмяПользователяИБ);
КонецЕсли;
СобытиеЖурнала.Данные = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Имя: %1, ...'"), ИмяПользователяИБ);
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
// Уточнение имени пользователя.
Если СобытиеЖурнала.Пользователь = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000") Тогда
СобытиеЖурнала.ИмяПользователя = НСтр("ru = ''");
ИначеЕсли СобытиеЖурнала.ИмяПользователя = "" Тогда
СобытиеЖурнала.ИмяПользователя = Пользователи.ПолноеИмяНеУказанногоПользователя();
ИначеЕсли ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(СобытиеЖурнала.Пользователь) = Неопределено Тогда
СобытиеЖурнала.ИмяПользователя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 '"), СобытиеЖурнала.ИмяПользователя);
КонецЕсли;
Если МодульРаботаВМоделиСервиса <> Неопределено Тогда
Если ПсевдонимыПользователей.Получить(СобытиеЖурнала.Пользователь) = Неопределено Тогда
ПсевдонимПользователя = МодульРаботаВМоделиСервиса.ПсевдонимПользователяИнформационнойБазы(СобытиеЖурнала.Пользователь);
ПсевдонимыПользователей.Вставить(СобытиеЖурнала.Пользователь, ПсевдонимПользователя);
Иначе
ПсевдонимПользователя = ПсевдонимыПользователей.Получить(СобытиеЖурнала.Пользователь);
КонецЕсли;
Если ЗначениеЗаполнено(ПсевдонимПользователя) Тогда
СобытиеЖурнала.ИмяПользователя = ПсевдонимПользователя;
КонецЕсли;
КонецЕсли;
// Преобразование идентификатора в имя для использования в дальнейшем при установке отборе.
ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(СобытиеЖурнала.Пользователь);
Если ПользовательИБ <> Неопределено Тогда
СобытиеЖурнала.Пользователь = ПользовательИБ.Имя;
КонецЕсли;
УстановитьПривилегированныйРежим(Ложь);
КонецЦикла;
// Успешное завершение
Результат = Новый Структура;
Результат.Вставить("СобытияЖурнала", СобытияЖурнала);
ПоместитьВоВременноеХранилище(Результат, АдресХранилища);
КонецПроцедуры
//
// Параметры:
//
// ПараметрыОтчета - Структура - содержит параметры для чтения событий журнала регистрации. Содержит поля:
// * Журнал - ТаблицаЗначений - содержит записи журнала регистрации.
// * ОтборЖурналаРегистрации - Структура - настройки отбора для чтения записей журнала регистрации:
// ** ДатаНачала - Дата - дата начала событий (опционально).
// ** ДатаОкончания - Дата - дата окончания событий (опционально).
// * КоличествоСобытий - Число - ограничение числа считываемых событий журнала.
// * УникальныйИдентификатор - УникальныйИдентификатор - уникальный идентификатор формы.
// * МенеджерВладельца - Произвольный - менеджер объекта, в форме которого отображается журнал
// регистрации, необходим для обратного вызова функций
// оформления.
// * ДобавлятьДополнительныеКолонки - Булево - определяет необходимость обратного вызова для добавления
// дополнительных колонок.
// АдресХранилища - Строка
// - УникальныйИдентификатор - адрес временного хранилища для результата.
//
// Результат представляет собой структуру с полями:
// СобытияЖурнала - ТаблицаЗначений - Отобранные события.
//
Процедура ПрочитатьСобытияЖурналаРегистрации(ПараметрыОтчета, АдресХранилища) Экспорт
ОтборЖурналаНаКлиенте = ПараметрыОтчета.ОтборЖурналаРегистрации;
КоличествоСобытий = ПараметрыОтчета.КоличествоПоказываемыхСобытий;
МенеджерВладельца = ПараметрыОтчета.МенеджерВладельца;
ДобавлятьДополнительныеКолонки = ПараметрыОтчета.ДобавлятьДополнительныеКолонки;
// Проверяем параметры на корректность.
ДатаНачала = Неопределено;
ДатаОкончания = Неопределено;
ДатыОтбораУказаны = ОтборЖурналаНаКлиенте.Свойство("ДатаНачала", ДатаНачала) И ОтборЖурналаНаКлиенте.Свойство("ДатаОкончания", ДатаОкончания)
И ЗначениеЗаполнено(ДатаНачала) И ЗначениеЗаполнено(ОтборЖурналаНаКлиенте.ДатаОкончания);
Если ДатыОтбораУказаны И ДатаНачала > ДатаОкончания Тогда
ВызватьИсключение НСтр("ru = 'Некорректно заданы условия отбора журнала регистрации. Дата начала больше даты окончания.'");
КонецЕсли;
СмещениеВремениСервера = СмещениеВремениСервера();
// Подготовка отбора
Отбор = Новый Структура;
Для Каждого ЭлементОтбора Из ОтборЖурналаНаКлиенте Цикл
Отбор.Вставить(ЭлементОтбора.Ключ, ЭлементОтбора.Значение);
КонецЦикла;
ПреобразованиеОтбора(Отбор, СмещениеВремениСервера);
// Выгрузка отбираемых событий и формирование структуры таблицы.
СобытияЖурнала = Новый ТаблицаЗначений;
ВыгрузитьЖурналРегистрации(СобытияЖурнала, Отбор, , , КоличествоСобытий);
СобытияЖурнала.Колонки.Дата.Имя = "ДатаНаСервере";
СобытияЖурнала.Колонки.Добавить("Дата", Новый ОписаниеТипов("Дата"));
СобытияЖурнала.Колонки.Добавить("НомерРисунка", Новый ОписаниеТипов("Число"));
СобытияЖурнала.Колонки.Добавить("АдресДанных", Новый ОписаниеТипов("Строка"));
Если ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда
СобытияЖурнала.Колонки.Добавить("РазделениеДанныхСеанса", Новый ОписаниеТипов("Строка"));
СобытияЖурнала.Колонки.Добавить("ПредставлениеРазделенияДанныхСеанса", Новый ОписаниеТипов("Строка"));
КонецЕсли;
Если ДобавлятьДополнительныеКолонки Тогда
МенеджерВладельца.ДобавитьДополнительныеКолонкиСобытия(СобытияЖурнала);
КонецЕсли;
Если ОбщегоНазначения.РазделениеВключено()
И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных()
И ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда
МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса");
ПсевдонимыПользователей = Новый Соответствие();
Иначе
МодульРаботаВМоделиСервиса = Неопределено;
ПсевдонимыПользователей = Неопределено;
КонецЕсли;
Для Каждого СобытиеЖурнала Из СобытияЖурнала Цикл
СобытиеЖурнала.Дата = СобытиеЖурнала.ДатаНаСервере - СмещениеВремениСервера;
// Заполнение номеров картинок строк.
МенеджерВладельца.УстановитьНомерРисунка(СобытиеЖурнала);
Если ДобавлятьДополнительныеКолонки Тогда
// Заполнение дополнительных полей, определенных только у владельца.
МенеджерВладельца.ЗаполнитьДополнительныеКолонкиСобытия(СобытиеЖурнала);
КонецЕсли;
// Преобразование массива метаданных в список значений.
СписокПредставленийМетаданных = Новый СписокЗначений;
Если ТипЗнч(СобытиеЖурнала.ПредставлениеМетаданных) = Тип("Массив") Тогда
СписокПредставленийМетаданных.ЗагрузитьЗначения(СобытиеЖурнала.ПредставлениеМетаданных);
СобытиеЖурнала.ПредставлениеМетаданных = СписокПредставленийМетаданных;
Иначе
СобытиеЖурнала.ПредставлениеМетаданных = Строка(СобытиеЖурнала.ПредставлениеМетаданных);
КонецЕсли;
// Преобразование массива "ПредставлениеРазделенияДанныхСеанса" в список значений.
Если ОбщегоНазначения.РазделениеВключено()
И Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда
ПолноеПредставлениеРазделенияДанныхСеанса = "";
РазделениеДанныхСеанса = СобытиеЖурнала.РазделениеДанныхСеанса;
СписокРеквизитовРазделенияДанных = Новый СписокЗначений;
Для Каждого РазделительСеанса Из РазделениеДанныхСеанса Цикл
ПредставлениеРазделителя = Метаданные.ОбщиеРеквизиты.Найти(РазделительСеанса.Ключ).Синоним;
ПредставлениеРазделителя = ПредставлениеРазделителя + " = " + РазделительСеанса.Значение;
ЗначениеРазделителя = РазделительСеанса.Ключ + "=" + РазделительСеанса.Значение;
СписокРеквизитовРазделенияДанных.Добавить(ЗначениеРазделителя, ПредставлениеРазделителя);
ПолноеПредставлениеРазделенияДанныхСеанса = ?(Не ПустаяСтрока(ПолноеПредставлениеРазделенияДанныхСеанса),
ПолноеПредставлениеРазделенияДанныхСеанса + "; ", "")
+ ПредставлениеРазделителя;
КонецЦикла;
СобытиеЖурнала.РазделениеДанныхСеанса = СписокРеквизитовРазделенияДанных;
СобытиеЖурнала.ПредставлениеРазделенияДанныхСеанса = ПолноеПредставлениеРазделенияДанныхСеанса;
КонецЕсли;
// Обработка данных специальных событий.
Если СобытиеЖурнала.Событие = "_$Access$_.Access" Тогда
УстановитьСтрокуАдресаДанных(СобытиеЖурнала);
Если СобытиеЖурнала.Данные <> Неопределено Тогда
СобытиеЖурнала.Данные = ?(СобытиеЖурнала.Данные.Данные = Неопределено, "", "...");
КонецЕсли;
ИначеЕсли СобытиеЖурнала.Событие = "_$Access$_.AccessDenied" Тогда
УстановитьСтрокуАдресаДанных(СобытиеЖурнала);
Если СобытиеЖурнала.Данные <> Неопределено Тогда
Если СобытиеЖурнала.Данные.Свойство("Право") Тогда
СобытиеЖурнала.Данные = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Право: %1'"),
СобытиеЖурнала.Данные.Право);
Иначе
ДанныеЖурнала = СобытиеЖурнала.Данные; // Структура
СобытиеЖурнала.Данные = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Действие: %1%2'"),
ДанныеЖурнала.Действие, ?(СобытиеЖурнала.Данные.Данные = Неопределено, "", ", ...") );
КонецЕсли;
КонецЕсли;
ИначеЕсли СобытиеЖурнала.Событие = "_$Session$_.Authentication"
Или СобытиеЖурнала.Событие = "_$Session$_.AuthenticationError" Тогда
УстановитьСтрокуАдресаДанных(СобытиеЖурнала);
СобытиеЖурналаДанные = "";
Если СобытиеЖурнала.Данные <> Неопределено Тогда
Для Каждого КлючИЗначение Из СобытиеЖурнала.Данные Цикл
Если ЗначениеЗаполнено(СобытиеЖурналаДанные) Тогда
СобытиеЖурналаДанные = СобытиеЖурналаДанные + ", ...";
Прервать;
КонецЕсли;
СобытиеЖурналаДанные = КлючИЗначение.Ключ + ": " + КлючИЗначение.Значение;
КонецЦикла;
КонецЕсли;
СобытиеЖурнала.Данные = СобытиеЖурналаДанные;
ИначеЕсли СобытиеЖурнала.Событие = "_$User$_.Delete" Тогда
УстановитьСтрокуАдресаДанных(СобытиеЖурнала);
СобытиеЖурналаДанные = "";
Если СобытиеЖурнала.Данные <> Неопределено Тогда
Для Каждого КлючИЗначение Из СобытиеЖурнала.Данные Цикл
СобытиеЖурналаДанные = КлючИЗначение.Ключ + ": " + КлючИЗначение.Значение;
Прервать;
КонецЦикла;
КонецЕсли;
СобытиеЖурнала.Данные = СобытиеЖурналаДанные;
ИначеЕсли СобытиеЖурнала.Событие = "_$User$_.New"
Или СобытиеЖурнала.Событие = "_$User$_.Update" Тогда
УстановитьСтрокуАдресаДанных(СобытиеЖурнала);
ИмяПользователяИБ = "";
Если СобытиеЖурнала.Данные <> Неопределено Тогда
СобытиеЖурнала.Данные.Свойство("Имя", ИмяПользователяИБ);
КонецЕсли;
СобытиеЖурнала.Данные = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Имя: %1, ...'"), ИмяПользователяИБ);
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
// Уточнение имени пользователя.
Если СобытиеЖурнала.Пользователь = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000") Тогда
СобытиеЖурнала.ИмяПользователя = НСтр("ru = ''");
ИначеЕсли СобытиеЖурнала.ИмяПользователя = "" Тогда
СобытиеЖурнала.ИмяПользователя = Пользователи.ПолноеИмяНеУказанногоПользователя();
ИначеЕсли ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(СобытиеЖурнала.Пользователь) = Неопределено Тогда
СобытиеЖурнала.ИмяПользователя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 '"), СобытиеЖурнала.ИмяПользователя);
КонецЕсли;
Если МодульРаботаВМоделиСервиса <> Неопределено Тогда
Если ПсевдонимыПользователей.Получить(СобытиеЖурнала.Пользователь) = Неопределено Тогда
ПсевдонимПользователя = МодульРаботаВМоделиСервиса.ПсевдонимПользователяИнформационнойБазы(СобытиеЖурнала.Пользователь);
ПсевдонимыПользователей.Вставить(СобытиеЖурнала.Пользователь, ПсевдонимПользователя);
Иначе
ПсевдонимПользователя = ПсевдонимыПользователей.Получить(СобытиеЖурнала.Пользователь);
КонецЕсли;
Если ЗначениеЗаполнено(ПсевдонимПользователя) Тогда
СобытиеЖурнала.ИмяПользователя = ПсевдонимПользователя;
КонецЕсли;
КонецЕсли;
// Преобразование идентификатора в имя для использования в дальнейшем при установке отборе.
ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(СобытиеЖурнала.Пользователь);
Если ПользовательИБ <> Неопределено Тогда
СобытиеЖурнала.Пользователь = ПользовательИБ.Имя;
КонецЕсли;
УстановитьПривилегированныйРежим(Ложь);
КонецЦикла;
// Успешное завершение
Результат = Новый Структура;
Результат.Вставить("СобытияЖурнала", СобытияЖурнала);
ПоместитьВоВременноеХранилище(Результат, АдресХранилища);
КонецПроцедуры
// Автор библиотеки: ООО "1С-Софт". Все права защищены © 2021
// Типовая конфигурация Библиотека стандартных подсистем (далее - БСП)
// Код БСП распространяется по лицензии Attribution 4.0 International (CC BY 4.0):
// ссылка на лицензию: https://creativecommons.org/licenses/by/4.0/legalcode
// Код БСП распространяется по лицензии Attribution 4.0 International (CC BY 4.0):
// ссылка на лицензию: https://creativecommons.org/licenses/by/4.0/legalcode
0
комментарии
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник