#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
УстановитьУсловноеОформление();
ЗаполнитьОтборЖурналаРегистрацииПоУмолчанию();
ОтборЖурналаРегистрации = ОбщегоНазначения.СкопироватьРекурсивно(ОтборЖурналаРегистрацииПоУмолчанию);
КоличествоПоказываемыхСобытий = 200;
Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ГруппаПросмотрЗарегистрированныхСобытий",
"ОтображатьЗаголовок", Ложь);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ГруппаОтбора", "Группировка",
ГруппировкаПодчиненныхЭлементовФормы.Вертикальная);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "КоличествоПоказываемыхСобытий",
"Заголовок", НСтр("ru = 'Показывать'"));
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "КомандыОтбора", "Отображение",
ОтображениеГруппыКнопок.Компактное);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "КомандыПоиска", "Отображение",
ОтображениеГруппыКнопок.Компактное);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаНайти", "Отображение",
ОтображениеКнопки.Картинка);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаОтменитьПоиск", "Отображение",
ОтображениеКнопки.Картинка);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ПросмотрТекущегоСобытияВОтдельномОкне",
"ТолькоВоВсехДействиях", Истина);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ОбновитьТекущийСписок",
"ТолькоВоВсехДействиях", Истина);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаОтменитьПоиск",
"ТолькоВоВсехДействиях", Истина);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Справка", "ТолькоВоВсехДействиях",
Истина);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ПодключитьОбработчикОжидания("ОбновитьТекущийСписок", 0.1, Истина);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура ЖурналВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
ПараметрыВыбора = Новый Структура;
ПараметрыВыбора.Вставить("ТекущиеДанные", Элементы.Журнал.ТекущиеДанные);
ПараметрыВыбора.Вставить("Поле", Поле);
ПараметрыВыбора.Вставить("ИнтервалДат", ИнтервалДат);
ПараметрыВыбора.Вставить("ОтборЖурналаРегистрации", ОтборЖурналаРегистрации);
ПараметрыВыбора.Вставить("ОбработчикОповещенияУстановкиИнтервалаДат",
Новый ОписаниеОповещения("УстановитьИнтервалДатДляПросмотраЗавершение", ЭтотОбъект));
ЖурналРегистрацииКлиент.СобытияВыбор(ПараметрыВыбора);
КонецПроцедуры
&НаКлиенте
Процедура КоличествоПоказываемыхСобытийПриИзменении(Элемент)
#Если ВебКлиент ИЛИ МобильныйКлиент Тогда
КоличествоПоказываемыхСобытий = ?(КоличествоПоказываемыхСобытий > 1000, 1000, КоличествоПоказываемыхСобытий);
#КонецЕсли
ОбновитьТекущийСписок();
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура ОбновитьТекущийСписок()
ДлительнаяОперация = ПрочитатьЖурнал(ОтборЖурналаРегистрации);
Если ДлительнаяОперация = Неопределено Тогда
Возврат;
КонецЕсли;
Элементы.Страницы.ТекущаяСтраница = Элементы.ИндикаторДлительныхОпераций;
ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента(
Элементы.ПолеИндикаторДлительныхОпераций, "ФормированиеОтчета");
ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
ПараметрыОжидания.ВыводитьОкноОжидания = Ложь;
ОповещениеОЗавершении = Новый ОписаниеОповещения("ОбновитьТекущийСписокЗавершение", ЭтотОбъект);
ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, ОповещениеОЗавершении, ПараметрыОжидания);
КонецПроцедуры
&НаКлиенте
Процедура ОтключитьОтбор()
ОтборЖурналаРегистрации = ОбщегоНазначенияКлиент.СкопироватьРекурсивно(ОтборЖурналаРегистрацииПоУмолчанию);
ОбновитьТекущийСписок();
КонецПроцедуры
&НаКлиенте
Процедура ПросмотрТекущегоСобытияВОтдельномОкне()
ЖурналРегистрацииКлиент.ПросмотрТекущегоСобытияВОтдельномОкне(Элементы.Журнал.ТекущиеДанные);
КонецПроцедуры
&НаКлиенте
Процедура УстановитьИнтервалДатДляПросмотра()
Оповещение = Новый ОписаниеОповещения("УстановитьИнтервалДатДляПросмотраЗавершение", ЭтотОбъект);
ЖурналРегистрацииКлиент.УстановитьИнтервалДатДляПросмотра(ИнтервалДат, ОтборЖурналаРегистрации, Оповещение)
КонецПроцедуры
&НаКлиенте
Процедура УстановитьОтборПоЗначениюВТекущейКолонке()
УдалитьИзОтбораЗначенияПоУмолчанию();
КолонкиИсключения = Новый Массив;
КолонкиИсключения.Добавить("Дата");
КолонкиИсключения.Добавить("СведенияОСобытии");
Элемент = Элементы.Журнал;
ОбновлятьСписок = ЖурналРегистрацииКлиент.УстановитьОтборПоЗначениюВТекущейКолонке(Элемент.ТекущиеДанные,
Элемент.ТекущийЭлемент.Имя, ОтборЖурналаРегистрации, КолонкиИсключения);
ДополнитьОтборЗначениямиПоУмолчанию();
Если ОбновлятьСписок Тогда
ОбновитьТекущийСписок();
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаСервере
Процедура УстановитьУсловноеОформление()
УсловноеОформление.Элементы.Очистить();
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Журнал.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Журнал.Событие");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
СписокЗначений = Новый СписокЗначений;
СписокЗначений.Добавить("_$Session$_.AuthenticationError");
СписокЗначений.Добавить("_$Access$_.AccessDenied");
ОтборЭлемента.ПравоеЗначение = СписокЗначений;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", ЦветаСтиля.СобытиеОтказ);
КонецПроцедуры
&НаКлиенте
Процедура УстановитьИнтервалДатДляПросмотраЗавершение(ИнтервалУстановлен, ДополнительныеПараметры) Экспорт
Если ИнтервалУстановлен Тогда
ОбновитьТекущийСписок();
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПараметрыОтчета(ОтборЖурналаНаКлиенте)
ПараметрыОтчета = Новый Структура;
ПараметрыОтчета.Вставить("Журнал", РеквизитФормыВЗначение("Журнал"));
ПараметрыОтчета.Вставить("ОтборЖурналаРегистрации", ОтборЖурналаНаКлиенте);
ПараметрыОтчета.Вставить("КоличествоПоказываемыхСобытий", КоличествоПоказываемыхСобытий);
ПараметрыОтчета.Вставить("УникальныйИдентификатор", УникальныйИдентификатор);
ПараметрыОтчета.Вставить("МенеджерВладельца", Обработки.ЗащитаПерсональныхДанных);
ПараметрыОтчета.Вставить("ДобавлятьДополнительныеКолонки", Истина);
Возврат ПараметрыОтчета;
КонецФункции
&НаСервере
Процедура ЗаполнитьОтборЖурналаРегистрацииПоУмолчанию()
ОтборЖурналаРегистрацииПоУмолчанию = Новый Структура;
ОтборЖурналаРегистрацииПоУмолчанию.Вставить("Событие", СписокКонтролируемыхСобытий152ФЗ());
ОтборЖурналаРегистрацииПоУмолчанию.Вставить("ИмяПриложения", СписокКонтролируемыхПриложений152ФЗ());
КонецПроцедуры
&НаСервере
Функция СписокКонтролируемыхСобытий152ФЗ()
СписокСобытий = Новый СписокЗначений;
ОбщегоНазначенияКлиентСервер.ДополнитьСписок(СписокСобытий,
ЗащитаПерсональныхДанных.КонтролируемыеСобытияДоступа());
ОбщегоНазначенияКлиентСервер.ДополнитьСписок(СписокСобытий,
ЗащитаПерсональныхДанных.КонтролируемыеСобытияАутентификации());
Возврат СписокСобытий;
КонецФункции
&НаСервере
Функция СписокКонтролируемыхПриложений152ФЗ()
Возврат ЗащитаПерсональныхДанных.КонтролируемыеПриложенияДоступа();
КонецФункции
&НаСервере
Функция ПрочитатьЖурнал(ОтборЖурналаНаКлиенте)
ПараметрыОтчета = ПараметрыОтчета(ОтборЖурналаНаКлиенте);
Если Не ПроверитьЗаполнение() Тогда
Возврат Неопределено;
КонецЕсли;
Если ЗначениеЗаполнено(ИдентификаторЗадания) Тогда
ДлительныеОперации.ОтменитьВыполнениеЗадания(ИдентификаторЗадания);
ИдентификаторЗадания = Неопределено;
КонецЕсли;
ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента(Элементы.ПолеИндикаторДлительныхОпераций,
"НеИспользовать");
ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Защита персональных данных'");
ДлительнаяОперация = ДлительныеОперации.ВыполнитьВФоне(
"ЗащитаПерсональныхДанных.ПрочитатьСобытияДоступаКПерсональнымДанным", ПараметрыОтчета, ПараметрыВыполнения);
Если ДлительнаяОперация.Статус = "Выполняется" Тогда
ИдентификаторЗадания = ДлительнаяОперация.ИдентификаторЗадания;
КонецЕсли;
Если ДлительнаяОперация.Статус = "Выполняется"
Или ДлительнаяОперация.Статус = "Выполнено" Тогда
ЖурналРегистрации.СформироватьПредставлениеОтбора(ПредставлениеОтбора,
ОтборЖурналаНаКлиенте, ОтборЖурналаРегистрацииПоУмолчанию);
КонецЕсли;
Возврат ДлительнаяОперация;
КонецФункции
&НаКлиенте
Процедура ДополнитьОтборЗначениямиПоУмолчанию()
Для Каждого ЭлементОтбора Из ОтборЖурналаРегистрацииПоУмолчанию Цикл
ЗначениеОтбораПоУмолчанию = ЭлементОтбора.Значение;
Если НЕ ОтборЖурналаРегистрации.Свойство(ЭлементОтбора.Ключ) Тогда
Если ТипЗнч(ЗначениеОтбораПоУмолчанию) = Тип("СписокЗначений") Тогда
ОтборЖурналаРегистрации.Вставить(ЭлементОтбора.Ключ, ЗначениеОтбораПоУмолчанию.Скопировать());
Иначе
ОтборЖурналаРегистрации.Вставить(ЭлементОтбора.Ключ, ЗначениеОтбораПоУмолчанию);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура УдалитьИзОтбораЗначенияПоУмолчанию()
Для Каждого ЭлементОтбораПоУмолчанию Из ОтборЖурналаРегистрацииПоУмолчанию Цикл
ЗначениеОтбора = "";
Если ОтборЖурналаРегистрации.Свойство(ЭлементОтбораПоУмолчанию.Ключ, ЗначениеОтбора) Тогда
Если ТипЗнч(ЗначениеОтбора) = Тип("СписокЗначений") Тогда
УдалятьОтбор = ОбщегоНазначенияКлиентСервер.СпискиЗначенийИдентичны(ЗначениеОтбора,
ЭлементОтбораПоУмолчанию.Значение);
Иначе
УдалятьОтбор = ЭлементОтбораПоУмолчанию.Значение = ЗначениеОтбора;
КонецЕсли;
Если УдалятьОтбор Тогда
ОтборЖурналаРегистрации.Удалить(ЭлементОтбораПоУмолчанию.Ключ);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ЗагрузитьПодготовленныеДанные(АдресХранилища)
РезультатВыполнения = ПолучитьИзВременногоХранилища(АдресХранилища);
СобытияЖурнала = РезультатВыполнения.СобытияЖурнала;
Если ЗначениеЗаполнено(СобытияЖурнала) Тогда
ЗначениеВДанныеФормы(СобытияЖурнала, Журнал);
Иначе
Журнал.Очистить();
КонецЕсли;
ИдентификаторЗадания = Неопределено;
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьТекущийСписокЗавершение(Результат, ДополнительныеПараметры) Экспорт
Элементы.Страницы.ТекущаяСтраница = Элементы.ЖурналРегистрации;
ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента(
Элементы.ПолеИндикаторДлительныхОпераций, "НеИспользовать");
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
Если Результат.Статус = "Выполнено" Тогда
ЗагрузитьПодготовленныеДанные(Результат.АдресРезультата);
ПролистатьВКонецСписка();
ИначеЕсли Результат.Статус = "Ошибка" Тогда
ПролистатьВКонецСписка();
СтандартныеПодсистемыКлиент.ВывестиИнформациюОбОшибке(Результат.ИнформацияОбОшибке);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПролистатьВКонецСписка()
Если Журнал.Количество() > 0 Тогда
Элементы.Журнал.ТекущаяСтрока = Журнал[Журнал.Количество() - 1].ПолучитьИдентификатор();
КонецЕсли;
КонецПроцедуры
#КонецОбласти