#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ЗаполнитьВажностьИСтатус();
ЗаполнитьПараметрыОтбора();
СобытияПоУмолчанию = Параметры.СобытияПоУмолчанию;
Если СобытияПоУмолчанию.Количество() <> События.Количество() Тогда
СобытияОтображаемые = События.Скопировать();
КонецЕсли;
ВидимостьРазделения = Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных();
ТолькоСтандартныеРазделители = ЖурналРегистрации.ТолькоСтандартныеРазделители();
Элементы.РазделениеДанныхСеанса.Видимость = ВидимостьРазделения И Не ТолькоСтандартныеРазделители;
Элементы.ОбластиДанных.Видимость = ВидимостьРазделения И ТолькоСтандартныеРазделители;
Если Элементы.ОбластиДанных.Видимость Тогда
Для Каждого ЭлементСписка Из РазделениеДанныхСеанса Цикл
Если СтрНачинаетсяС(ЭлементСписка.Значение, "ОбластьДанныхОсновныеДанные") Тогда
ЧастиСтроки = СтрРазделить(ЭлементСписка.Значение, "=");
ОбластиДанных = ЖурналРегистрации.СписокЗначенийРазделителейИзСтроки(ЧастиСтроки[1]);
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ИмяСобытия = "ВыборЗначенийЭлементовОтбораЖурналаРегистрации"
И Источник.УникальныйИдентификатор = УникальныйИдентификатор Тогда
Если РедакторСоставаСвойстваИмяЭлемента = Элементы.Пользователи.Имя Тогда
СписокПользователей = Параметр;
ИначеЕсли РедакторСоставаСвойстваИмяЭлемента = Элементы.События.Имя Тогда
События = Параметр;
ИначеЕсли РедакторСоставаСвойстваИмяЭлемента = Элементы.Компьютеры.Имя Тогда
Компьютеры = Параметр;
ИначеЕсли РедакторСоставаСвойстваИмяЭлемента = Элементы.Приложения.Имя Тогда
Приложения = Параметр;
ИначеЕсли РедакторСоставаСвойстваИмяЭлемента = Элементы.Метаданные.Имя Тогда
Метаданные = Параметр;
ИначеЕсли РедакторСоставаСвойстваИмяЭлемента = Элементы.РабочиеСерверы.Имя Тогда
РабочиеСерверы = Параметр;
ИначеЕсли РедакторСоставаСвойстваИмяЭлемента = Элементы.ОсновныеIPПорты.Имя Тогда
ОсновныеIPПорты = Параметр;
ИначеЕсли РедакторСоставаСвойстваИмяЭлемента = Элементы.ВспомогательныеIPПорты.Имя Тогда
ВспомогательныеIPПорты = Параметр;
ИначеЕсли РедакторСоставаСвойстваИмяЭлемента = Элементы.ОбластиДанных.Имя Тогда
ОбластиДанных = Параметр;
РазделениеДанныхСеанса = СписокВсехРазделителей(Параметр);
ИначеЕсли РедакторСоставаСвойстваИмяЭлемента = Элементы.РазделениеДанныхСеанса.Имя Тогда
РазделениеДанныхСеанса = Параметр;
КонецЕсли;
КонецЕсли;
СобытияОтображаемые.Очистить();
Если События.Количество() = 0 Тогда
События = СобытияПоУмолчанию;
Возврат;
КонецЕсли;
Если СобытияПоУмолчанию.Количество() <> События.Количество() Тогда
СобытияОтображаемые = События.Скопировать();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки)
СобытияОтображаемые.Очистить();
Если События.Количество() = 0 Тогда
События = СобытияПоУмолчанию;
Возврат;
КонецЕсли;
Если Не ОбщегоНазначенияКлиентСервер.СпискиЗначенийИдентичны(СобытияПоУмолчанию, События) Тогда
СобытияОтображаемые = События.Скопировать();
КонецЕсли;
Элементы.Данные.Видимость = НЕ ДанныеНесколькоЗначений;
Элементы.ДанныеСписок.Видимость = ДанныеНесколькоЗначений;
ОбновитьЗаголовкиГруппФормы();
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура ИсполнениеВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
Перем РедактируемыйСписок, ОтбираемыеПараметры;
ОтключитьСтандартнуюОбработку = Истина;
РедакторСоставаСвойстваИмяЭлемента = Элемент.Имя;
Если РедакторСоставаСвойстваИмяЭлемента = Элементы.Пользователи.Имя Тогда
РедактируемыйСписок = СписокПользователей;
ОтбираемыеПараметры = "Пользователь";
ИначеЕсли РедакторСоставаСвойстваИмяЭлемента = Элементы.События.Имя Тогда
РедактируемыйСписок = События;
ОтбираемыеПараметры = "Событие";
ИначеЕсли РедакторСоставаСвойстваИмяЭлемента = Элементы.Компьютеры.Имя Тогда
РедактируемыйСписок = Компьютеры;
ОтбираемыеПараметры = "Компьютер";
ИначеЕсли РедакторСоставаСвойстваИмяЭлемента = Элементы.Приложения.Имя Тогда
РедактируемыйСписок = Приложения;
ОтбираемыеПараметры = "ИмяПриложения";
ИначеЕсли РедакторСоставаСвойстваИмяЭлемента = Элементы.Метаданные.Имя Тогда
РедактируемыйСписок = Метаданные;
ОтбираемыеПараметры = "Метаданные";
ИначеЕсли РедакторСоставаСвойстваИмяЭлемента = Элементы.РабочиеСерверы.Имя Тогда
РедактируемыйСписок = РабочиеСерверы;
ОтбираемыеПараметры = "РабочийСервер";
ИначеЕсли РедакторСоставаСвойстваИмяЭлемента = Элементы.ОсновныеIPПорты.Имя Тогда
РедактируемыйСписок = ОсновныеIPПорты;
ОтбираемыеПараметры = ОсновнойIPПорт();
ИначеЕсли РедакторСоставаСвойстваИмяЭлемента = Элементы.ВспомогательныеIPПорты.Имя Тогда
РедактируемыйСписок = ВспомогательныеIPПорты;
ОтбираемыеПараметры = "ВспомогательныйIPПорт";
ИначеЕсли РедакторСоставаСвойстваИмяЭлемента = Элементы.ОбластиДанных.Имя Тогда
РедактируемыйСписок = ОбластиДанных;
ОтбираемыеПараметры = "РазделениеДанныхСеансаЗначения" + "." + "ОбластьДанныхОсновныеДанные";
ИначеЕсли РедакторСоставаСвойстваИмяЭлемента = Элементы.РазделениеДанныхСеанса.Имя Тогда
СтандартнаяОбработка = Ложь;
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("УстановленныйОтбор", РазделениеДанныхСеанса);
ОткрытьФорму("Обработка.ЖурналРегистрации.Форма.РазделениеДанныхСеанса", ПараметрыФормы, ЭтотОбъект);
Возврат;
Иначе
ОтключитьСтандартнуюОбработку = Ложь;
Возврат;
КонецЕсли;
Если ОтключитьСтандартнуюОбработку Тогда
СтандартнаяОбработка = Ложь;
КонецЕсли;
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("РедактируемыйСписок", РедактируемыйСписок);
ПараметрыФормы.Вставить("ОтбираемыеПараметры", ОтбираемыеПараметры);
ОткрытьФорму("Обработка.ЖурналРегистрации.Форма.РедакторСоставаСвойства",
ПараметрыФормы,
ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ОбластиДанныхОчистка(Элемент, СтандартнаяОбработка)
РазделениеДанныхСеанса.Очистить();
КонецПроцедуры
&НаКлиенте
Процедура СобытияОчистка(Элемент, СтандартнаяОбработка)
События = СобытияПоУмолчанию;
КонецПроцедуры
&НаКлиенте
Процедура ИнтервалОтбораПриИзменении(Элемент)
ОбработчикОповещения = Новый ОписаниеОповещения("ИнтервалОтбораПриИзмененииЗавершение", ЭтотОбъект);
Диалог = Новый ДиалогРедактированияСтандартногоПериода;
Диалог.Период = ИнтервалОтбора;
Диалог.Показать(ОбработчикОповещения);
КонецПроцедуры
&НаКлиенте
Процедура ИнтервалОтбораПриИзмененииЗавершение(Период, ДополнительныеПараметры) Экспорт
Если Период = Неопределено Тогда
Возврат;
КонецЕсли;
ИнтервалОтбора = Период;
ИнтервалОтбораДатаНачала = ИнтервалОтбора.ДатаНачала;
ИнтервалОтбораДатаОкончания = ИнтервалОтбора.ДатаОкончания;
КонецПроцедуры
&НаКлиенте
Процедура ИнтервалОтбораДатаПриИзменении(Элемент)
ИнтервалОтбора.Вариант = ВариантСтандартногоПериода.ПроизвольныйПериод;
ИнтервалОтбора.ДатаНачала = ИнтервалОтбораДатаНачала;
ИнтервалОтбора.ДатаОкончания = ИнтервалОтбораДатаОкончания;
КонецПроцедуры
&НаКлиенте
Процедура НесколькоЗначенийПриИзменении(Элемент)
ИмяДанных = Элементы.Данные.Имя;
ИмяСпискаДанных = Элементы.ДанныеСписок.Имя;
ОдноЗначение = Не ДанныеНесколькоЗначений;
Элементы[ИмяДанных].Видимость = ОдноЗначение;
Элементы[ИмяСпискаДанных].Видимость = Не ОдноЗначение;
ТекущиеДанные = ЭтотОбъект[ИмяДанных];
ТекущийСписок = ЭтотОбъект[ИмяСпискаДанных];
Если ОдноЗначение Тогда
ЭтотОбъект[ИмяДанных] = ?(ТекущийСписок.Количество() = 0,
Неопределено, ТекущийСписок[0].Значение);
ИначеЕсли ЗначениеЗаполнено(ТекущиеДанные)
Или ТекущийСписок.Количество() > 0 Тогда
Если ТекущийСписок.Количество() = 0 Тогда
ТекущийСписок.Добавить();
КонецЕсли;
ТекущийСписок[0].Значение = ТекущиеДанные;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура КомментарийПриИзменении(Элемент)
ОбновитьПолеКомментарий(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура КомментарийИзменениеТекстаРедактирования(Элемент, Текст, СтандартнаяОбработка)
ОбновитьПолеКомментарий(ЭтотОбъект, Текст);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура УстановитьОтборИЗакрытьФорму(Команда)
ОповеститьОВыборе(
Новый Структура("Событие, Отбор",
"УстановленОтборЖурналаРегистрации",
ПолучитьОтборЖурналаРегистрации()));
КонецПроцедуры
&НаКлиенте
Процедура УстановитьФлажкиВажности(Команда)
Для Каждого ЭлементСписка Из Важность Цикл
ЭлементСписка.Пометка = Истина;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура СнятьФлажкиВажности(Команда)
Для Каждого ЭлементСписка Из Важность Цикл
ЭлементСписка.Пометка = Ложь;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура УстановитьСтатусыТранзакции(Команда)
Для Каждого ЭлементСписка Из СтатусТранзакции Цикл
ЭлементСписка.Пометка = Истина;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура СнятьСтатусыТранзакции(Команда)
Для Каждого ЭлементСписка Из СтатусТранзакции Цикл
ЭлементСписка.Пометка = Ложь;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура СохранитьНастройкиВФайл(Команда)
АдресВременногоХранилища = СохранитьНастройкиВоВременноеХранилище();
ПараметрыСохраненияФайла = ФайловаяСистемаКлиент.ПараметрыСохраненияФайла();
ПараметрыСохраненияФайла.Диалог.Фильтр = НСтр("ru = 'Настройки журнала регистрации'") + "(*.xml)|*.xml";
ФайловаяСистемаКлиент.СохранитьФайл(Неопределено, АдресВременногоХранилища, "Settings.xml", ПараметрыСохраненияФайла);
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьНастройкиИзФайла(Команда)
ПараметрыЗагрузкиФайла = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла();
ПараметрыЗагрузкиФайла.Диалог.Заголовок = НСтр("ru = 'Выберите файл с настройками отбора журнала регистрации'");
ПараметрыЗагрузкиФайла.Диалог.Фильтр = НСтр("ru = 'Файл xml'") + "(*.xml)|*.xml";
ОписаниеОповещения = Новый ОписаниеОповещения("ЗагрузитьНастройкиИзФайлаЗавершение", ЭтотОбъект);
ФайловаяСистемаКлиент.ЗагрузитьФайл(ОписаниеОповещения, ПараметрыЗагрузкиФайла);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаСервере
Процедура ЗаполнитьВажностьИСтатус()
Важность.Добавить("Ошибка", Строка(УровеньЖурналаРегистрации.Ошибка));
Важность.Добавить("Предупреждение", Строка(УровеньЖурналаРегистрации.Предупреждение));
Важность.Добавить("Информация", Строка(УровеньЖурналаРегистрации.Информация));
Важность.Добавить("Примечание", Строка(УровеньЖурналаРегистрации.Примечание));
СтатусТранзакции.Добавить("НетТранзакции", Строка(СтатусТранзакцииЗаписиЖурналаРегистрации.НетТранзакции));
СтатусТранзакции.Добавить("Зафиксирована", Строка(СтатусТранзакцииЗаписиЖурналаРегистрации.Зафиксирована));
СтатусТранзакции.Добавить("НеЗавершена", Строка(СтатусТранзакцииЗаписиЖурналаРегистрации.НеЗавершена));
СтатусТранзакции.Добавить("Отменена", Строка(СтатусТранзакцииЗаписиЖурналаРегистрации.Отменена));
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьПараметрыОтбора()
СписокПараметровОтбора = Параметры.Отбор;
ЕстьОтборПоУровню = Ложь;
ЕстьОтборПоСтатусу = Ложь;
Для Каждого ПараметрОтбора Из СписокПараметровОтбора Цикл
ИмяПараметра = ПараметрОтбора.Представление;
Значение = ПараметрОтбора.Значение;
Если ВРег(ИмяПараметра) = ВРег("ДатаНачала") Тогда
ИнтервалОтбора.ДатаНачала = Значение;
ИнтервалОтбораДатаНачала = Значение;
ИначеЕсли ВРег(ИмяПараметра) = ВРег("ДатаОкончания") Тогда
ИнтервалОтбора.ДатаОкончания = Значение;
ИнтервалОтбораДатаОкончания = Значение;
ИначеЕсли ВРег(ИмяПараметра) = ВРег("Пользователь") Тогда
СписокПользователей = Значение;
ИначеЕсли ВРег(ИмяПараметра) = ВРег("Событие") Тогда
События = Значение;
ИначеЕсли ВРег(ИмяПараметра) = ВРег("Компьютер") Тогда
Компьютеры = Значение;
ИначеЕсли ВРег(ИмяПараметра) = ВРег("ИмяПриложения") Тогда
Приложения = Значение;
ИначеЕсли ВРег(ИмяПараметра) = ВРег("Комментарий") Тогда
Комментарий = Значение;
ОбновитьПолеКомментарий(ЭтотОбъект);
ИначеЕсли ВРег(ИмяПараметра) = ВРег("Метаданные") Тогда
Метаданные = Значение;
ИначеЕсли ВРег(ИмяПараметра) = ВРег("Данные") Тогда
Если ТипЗнч(Значение) = Тип("СписокЗначений") Тогда
ДанныеНесколькоЗначений = Истина;
Элементы.Данные.Видимость = Ложь;
Элементы.ДанныеСписок.Видимость = Истина;
ДанныеСписок = Значение;
Иначе
Данные = Значение;
КонецЕсли;
ИначеЕсли ВРег(ИмяПараметра) = ВРег("ПредставлениеДанных") Тогда
ПредставлениеДанных = Значение;
ИначеЕсли ВРег(ИмяПараметра) = ВРег("Транзакция") Тогда
Транзакция = Значение;
ИначеЕсли ВРег(ИмяПараметра) = ВРег("РабочийСервер") Тогда
РабочиеСерверы = Значение;
ИначеЕсли ВРег(ИмяПараметра) = ВРег("Сеанс") Тогда
Сеансы = Значение;
СтрСеансы = "";
Для Каждого НомерСеанса Из Сеансы Цикл
СтрСеансы = СтрСеансы + ?(СтрСеансы = "", "", "; ") + НомерСеанса;
КонецЦикла;
ИначеЕсли ВРег(ИмяПараметра) = ВРег(ОсновнойIPПорт()) Тогда
ОсновныеIPПорты = Значение;
ИначеЕсли ВРег(ИмяПараметра) = ВРег("ВспомогательныйIPПорт") Тогда
ВспомогательныеIPПорты = Значение;
ИначеЕсли ВРег(ИмяПараметра) = ВРег("Уровень") Тогда
ЕстьОтборПоУровню = Истина;
Для Каждого ЭлементСпискаЗначений Из Важность Цикл
Если Значение.НайтиПоЗначению(ЭлементСпискаЗначений.Значение) <> Неопределено Тогда
ЭлементСпискаЗначений.Пометка = Истина;
КонецЕсли;
КонецЦикла;
ИначеЕсли ВРег(ИмяПараметра) = ВРег("СтатусТранзакции") Тогда
ЕстьОтборПоСтатусу = Истина;
Для Каждого ЭлементСпискаЗначений Из СтатусТранзакции Цикл
Если Значение.НайтиПоЗначению(ЭлементСпискаЗначений.Значение) <> Неопределено Тогда
ЭлементСпискаЗначений.Пометка = Истина;
КонецЕсли;
КонецЦикла;
ИначеЕсли ВРег(ИмяПараметра) = ВРег("РазделениеДанныхСеанса") Тогда
Если ТипЗнч(Значение) = Тип("СписокЗначений") Тогда
РазделениеДанныхСеанса = Значение.Скопировать();
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если Не ЕстьОтборПоУровню Тогда
Для Каждого ЭлементСпискаЗначений Из Важность Цикл
ЭлементСпискаЗначений.Пометка = Истина;
КонецЦикла;
КонецЕсли;
Если Не ЕстьОтборПоСтатусу Тогда
Для Каждого ЭлементСпискаЗначений Из СтатусТранзакции Цикл
ЭлементСпискаЗначений.Пометка = Истина;
КонецЦикла;
ИначеЕсли ЕстьОтборПоСтатусу Или ЗначениеЗаполнено(Транзакция) Тогда
Элементы.ГруппаТранзакции.Заголовок = Элементы.ГруппаТранзакции.Заголовок + " *";
КонецЕсли;
Если ЗначениеЗаполнено(РабочиеСерверы)
Или ЗначениеЗаполнено(ОсновныеIPПорты)
Или ЗначениеЗаполнено(ВспомогательныеIPПорты) Тогда
Элементы.ГруппаПрочее.Заголовок = Элементы.ГруппаПрочее.Заголовок + " *";
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Функция ПолучитьОтборЖурналаРегистрации()
Сеансы.Очистить();
Стр = СтрСеансы;
Стр = СтрЗаменить(Стр, ";", " ");
Стр = СтрЗаменить(Стр, ",", " ");
Стр = СокрЛП(Стр);
ТЧ = Новый ОписаниеТипов("Число");
Пока Не ПустаяСтрока(Стр) Цикл
Поз = СтрНайти(Стр, " ");
Если Поз = 0 Тогда
Значение = ТЧ.ПривестиЗначение(Стр);
Стр = "";
Иначе
Значение = ТЧ.ПривестиЗначение(Лев(Стр, Поз-1));
Стр = СокрЛП(Сред(Стр, Поз+1));
КонецЕсли;
Если Значение <> 0 Тогда
Сеансы.Добавить(Значение);
КонецЕсли;
КонецЦикла;
Отбор = Новый СписокЗначений;
Если ИнтервалОтбораДатаНачала <> '00010101000000' Тогда
Отбор.Добавить(ИнтервалОтбораДатаНачала, "ДатаНачала");
КонецЕсли;
Если ИнтервалОтбораДатаОкончания <> '00010101000000' Тогда
Отбор.Добавить(ИнтервалОтбораДатаОкончания, "ДатаОкончания");
КонецЕсли;
Если СписокПользователей.Количество() > 0 Тогда
Отбор.Добавить(СписокПользователей, "Пользователь");
КонецЕсли;
Если События.Количество() > 0 Тогда
Отбор.Добавить(События, "Событие");
КонецЕсли;
Если Компьютеры.Количество() > 0 Тогда
Отбор.Добавить(Компьютеры, "Компьютер");
КонецЕсли;
Если Приложения.Количество() > 0 Тогда
Отбор.Добавить(Приложения, "ИмяПриложения");
КонецЕсли;
Если Не ПустаяСтрока(Комментарий) Тогда
Отбор.Добавить(Комментарий, "Комментарий");
КонецЕсли;
Если Метаданные.Количество() > 0 Тогда
Отбор.Добавить(Метаданные, "Метаданные");
КонецЕсли;
ЗначениеОтбора = ?(ДанныеНесколькоЗначений, ДанныеСписок, Данные);
Если ЗначениеЗаполнено(ЗначениеОтбора) Тогда
Отбор.Добавить(ЗначениеОтбора, "Данные");
КонецЕсли;
Если Не ПустаяСтрока(ПредставлениеДанных) Тогда
Отбор.Добавить(ПредставлениеДанных, "ПредставлениеДанных");
КонецЕсли;
Если Не ПустаяСтрока(Транзакция) Тогда
Отбор.Добавить(Транзакция, "Транзакция");
КонецЕсли;
Если РабочиеСерверы.Количество() > 0 Тогда
Отбор.Добавить(РабочиеСерверы, "РабочийСервер");
КонецЕсли;
Если Сеансы.Количество() > 0 Тогда
Отбор.Добавить(Сеансы, "Сеанс");
КонецЕсли;
Если ОсновныеIPПорты.Количество() > 0 Тогда
Отбор.Добавить(ОсновныеIPПорты, "ОсновнойIPПорт");
КонецЕсли;
Если ВспомогательныеIPПорты.Количество() > 0 Тогда
Отбор.Добавить(ВспомогательныеIPПорты, "ВспомогательныйIPПорт");
КонецЕсли;
Если РазделениеДанныхСеанса.Количество() > 0 Тогда
Отбор.Добавить(РазделениеДанныхСеанса, "РазделениеДанныхСеанса");
КонецЕсли;
СписокУровней = Новый СписокЗначений;
Для Каждого ЭлементСпискаЗначений Из Важность Цикл
Если ЭлементСпискаЗначений.Пометка Тогда
СписокУровней.Добавить(ЭлементСпискаЗначений.Значение, ЭлементСпискаЗначений.Представление);
КонецЕсли;
КонецЦикла;
Если СписокУровней.Количество() > 0 И СписокУровней.Количество() <> Важность.Количество() Тогда
Отбор.Добавить(СписокУровней, "Уровень");
КонецЕсли;
СписокСтатусов = Новый СписокЗначений;
Для Каждого ЭлементСпискаЗначений Из СтатусТранзакции Цикл
Если ЭлементСпискаЗначений.Пометка Тогда
СписокСтатусов.Добавить(ЭлементСпискаЗначений.Значение, ЭлементСпискаЗначений.Представление);
КонецЕсли;
КонецЦикла;
Если СписокСтатусов.Количество() > 0 И СписокСтатусов.Количество() <> СтатусТранзакции.Количество() Тогда
Отбор.Добавить(СписокСтатусов, "СтатусТранзакции");
КонецЕсли;
Возврат Отбор;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Процедура ОбновитьПолеКомментарий(Форма, Текст = Неопределено)
Если Текст = Неопределено Тогда
Текст = Форма.Комментарий;
КонецЕсли;
Строки = СтрРазделить(Текст, Символы.ПС);
Если Строки.Количество() > 1 Тогда
НоваяВысота = 2;
Иначе
НоваяВысота = 1;
КонецЕсли;
Если Форма.Элементы.Комментарий.Высота <> НоваяВысота Тогда
Форма.Комментарий = Текст;
Форма.Элементы.Комментарий.Высота = НоваяВысота;
КонецЕсли;
МаксимальнаяДлина = 1;
Для Каждого Строка Из Строки Цикл
Если СтрДлина(Строка) > МаксимальнаяДлина Тогда
МаксимальнаяДлина = СтрДлина(Строка);
КонецЕсли;
КонецЦикла;
Если МаксимальнаяДлина > 70 Тогда
НовоеРастягивание = Истина;
Иначе
НовоеРастягивание = Ложь;
КонецЕсли;
Если Форма.Элементы.Комментарий.РастягиватьПоГоризонтали <> НовоеРастягивание Тогда
Форма.Комментарий = Текст;
Форма.Элементы.Комментарий.РастягиватьПоГоризонтали = НовоеРастягивание;
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция СписокВсехРазделителей(Параметр)
Представления = Новый Массив;
Для Каждого ЭлементСписка Из Параметр Цикл
Если ЗначениеЗаполнено(ЭлементСписка.Представление) Тогда
Представления.Добавить(ЭлементСписка.Представление);
Иначе
Представления.Добавить(ЭлементСписка.Значение);
КонецЕсли;
КонецЦикла;
ПредставлениеЗначений = СтрСоединить(Представления, ", ");
ЗначенияСтрокой = СтрСоединить(Параметр.ВыгрузитьЗначения(), ",");
Список = Новый СписокЗначений;
Для Каждого ОбщийРеквизит Из Метаданные.ОбщиеРеквизиты Цикл
Если ОбщийРеквизит.РазделениеДанных = Метаданные.СвойстваОбъектов.РазделениеДанныхОбщегоРеквизита.НеИспользовать Тогда
Продолжить;
КонецЕсли;
ПредставлениеРазделителя = ОбщийРеквизит.Представление() + " = " + ПредставлениеЗначений;
ЗначениеРазделителя = ОбщийРеквизит.Имя + "=" + ЗначенияСтрокой;
Список.Добавить(ЗначениеРазделителя, ПредставлениеРазделителя);
КонецЦикла;
Возврат Список;
КонецФункции
&НаСервере
Процедура ОбновитьЗаголовкиГруппФормы()
КоличествоОтмеченныхСтатусов = ОбщегоНазначенияКлиентСервер.ОтмеченныеЭлементы(СтатусТранзакции).Количество();
Если КоличествоОтмеченныхСтатусов <> СтатусТранзакции.Количество()
Или ЗначениеЗаполнено(Транзакция) Тогда
Элементы.ГруппаТранзакции.Заголовок = Элементы.ГруппаТранзакции.Заголовок + " *";
КонецЕсли;
Если ЗначениеЗаполнено(РабочиеСерверы)
Или ЗначениеЗаполнено(ОсновныеIPПорты)
Или ЗначениеЗаполнено(ВспомогательныеIPПорты) Тогда
Элементы.ГруппаПрочее.Заголовок = Элементы.ГруппаПрочее.Заголовок + " *";
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция СохранитьНастройкиВоВременноеХранилище()
СохраняемыеНастройки = СохраняемыеНастройки();
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку();
ЗаписьXML.ЗаписатьОбъявлениеXML();
ЗаписьXML.ЗаписатьНачалоЭлемента("Filters");
ЗаписьXML.ЗаписатьНачалоЭлемента("MainFilters");
СериализаторXDTO.ЗаписатьXML(ЗаписьXML, СохраняемыеНастройки, НазначениеТипаXML.Явное);
ЗаписьXML.ЗаписатьКонецЭлемента();
Если ДанныеНесколькоЗначений Тогда
Для Каждого ОтбираемыеДанные Из ДанныеСписок Цикл
ЗаписьXML.ЗаписатьНачалоЭлемента("DataFilters");
СериализаторXDTO.ЗаписатьXML(ЗаписьXML, ОтбираемыеДанные.Значение, НазначениеТипаXML.Явное);
ЗаписьXML.ЗаписатьКонецЭлемента();
КонецЦикла;
ИначеЕсли ЗначениеЗаполнено(Данные) Тогда
ЗаписьXML.ЗаписатьНачалоЭлемента("DataFilters");
СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Данные, НазначениеТипаXML.Явное);
ЗаписьXML.ЗаписатьКонецЭлемента();
КонецЕсли;
ЗаписьXML.ЗаписатьКонецЭлемента();
СтрокаXML = ЗаписьXML.Закрыть();
ДвоичныеДанные = ПолучитьДвоичныеДанныеИзСтроки(СтрокаXML);
АдресВременногоХранилищаФайла = ПоместитьВоВременноеХранилище(ДвоичныеДанные, УникальныйИдентификатор);
Возврат АдресВременногоХранилищаФайла;
КонецФункции
&НаСервере
Функция СохраняемыеНастройки()
СохраняемыеНастройки = Новый СписокЗначений();
СохраняемыеНастройки.Добавить(Важность, "Level");
Если ОбщегоНазначенияКлиентСервер.СпискиЗначенийИдентичны(СобытияПоУмолчанию, События) Тогда
СохраняемыеНастройки.Добавить(Новый СписокЗначений(), "Event");
Иначе
СохраняемыеНастройки.Добавить(События, "Event");
КонецЕсли;
СохраняемыеНастройки.Добавить(Метаданные, "Metadata");
СохраняемыеНастройки.Добавить(ИнтервалОтбораДатаНачала, "StartDate");
СохраняемыеНастройки.Добавить(ИнтервалОтбораДатаОкончания, "EndDate");
СохраняемыеНастройки.Добавить(СписокПользователей, "User");
СохраняемыеНастройки.Добавить(Приложения, "ApplicationName");
СохраняемыеНастройки.Добавить(Компьютеры, "Computer");
СохраняемыеНастройки.Добавить(СтрСеансы, "Sessions");
СохраняемыеНастройки.Добавить(ПредставлениеДанных, "DataPresentation");
СохраняемыеНастройки.Добавить(СтатусТранзакции, "TransactionStatus");
СохраняемыеНастройки.Добавить(РабочиеСерверы, "ServerName");
СохраняемыеНастройки.Добавить(РазделениеДанныхСеанса, "SessionDataSeparation");
СохраняемыеНастройки.Добавить(Транзакция, "TransactionID");
СохраняемыеНастройки.Добавить(Комментарий, "Comment");
СохраняемыеНастройки.Добавить(ОсновныеIPПорты, "Port");
СохраняемыеНастройки.Добавить(ВспомогательныеIPПорты, "SyncPort");
СохраняемыеНастройки.Добавить(ОбластиДанных, "DataArea");
Возврат СохраняемыеНастройки;
КонецФункции
&НаКлиенте
Процедура ЗагрузитьНастройкиИзФайлаЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
ЗагрузитьНастройкиИзФайлаНаСервере(Результат.Хранение);
ПоказатьОповещениеПользователя(НСтр("ru = 'Настройки отбора'"),, НСтр("ru = 'Настройки отбора загружены'"));
КонецПроцедуры
&НаСервере
Процедура ЗагрузитьНастройкиИзФайлаНаСервере(АдресВоВременномХранилище)
СписокПараметровОтбораИзФайла = НастройкиИзФайла(АдресВоВременномХранилище);
ПрименитьНастройкиИзФайла(СписокПараметровОтбораИзФайла);
СобытияОтображаемые.Очистить();
Если События.Количество() = 0 Тогда
События = СобытияПоУмолчанию;
Возврат;
КонецЕсли;
Если Не ОбщегоНазначенияКлиентСервер.СпискиЗначенийИдентичны(СобытияПоУмолчанию, События) Тогда
СобытияОтображаемые = События.Скопировать();
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция НастройкиИзФайла(АдресВоВременномХранилище)
ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресВоВременномХранилище);
СтрокаXML = ПолучитьСтрокуИзДвоичныхДанных(ДвоичныеДанные);
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(СтрокаXML);
МассивДанных = Новый Массив;
НастройкиОтбора = Новый СписокЗначений;
Пока ЧтениеXML.Прочитать() Цикл
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
Если ЧтениеXML.Имя = "MainFilters" Тогда
ЧтениеXML.Прочитать();
НастройкиОтбора = СериализаторXDTO.ПрочитатьXML(ЧтениеXML);
ИначеЕсли ЧтениеXML.Имя = "DataFilters" Тогда
ЧтениеXML.Прочитать();
ТипXML = СериализаторXDTO.ПолучитьXMLТип(ЧтениеXML);
Если ТипXML = XMLТип(Тип("Строка"))
Или ТипXML = XMLТип(Тип("Дата"))
Или ТипXML = XMLТип(Тип("Число"))
Или ТипXML = XMLТип(Тип("Булево")) Тогда
МассивДанных.Добавить(СериализаторXDTO.ПрочитатьXML(ЧтениеXML));
Иначе
Значение = СериализаторXDTO.ПрочитатьXML(ЧтениеXML);
Если ЗначениеЗаполнено(Значение)
И ТипЗнч(Значение) <> Тип("Строка")
И ОбщегоНазначения.СсылкаСуществует(Значение) Тогда
МассивДанных.Добавить(Значение);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
НастройкиОтбора.Добавить(МассивДанных, "Data");
ЧтениеXML.Закрыть();
Возврат НастройкиОтбора;
КонецФункции
&НаСервере
Процедура ПрименитьНастройкиИзФайла(СписокПараметровОтбора)
ДоступныеОтборы = ДоступныеОтборыЖурналаРегистрации();
Для Каждого ПараметрОтбора Из СписокПараметровОтбора Цикл
ИмяПараметра = ПараметрОтбора.Представление;
Значение = ПараметрОтбора.Значение;
Если ВРег(ИмяПараметра) = ВРег("StartDate") Тогда
ИнтервалОтбора.ДатаНачала = Значение;
ИнтервалОтбораДатаНачала = Значение;
ИначеЕсли ВРег(ИмяПараметра) = ВРег("EndDate") Тогда
ИнтервалОтбора.ДатаОкончания = Значение;
ИнтервалОтбораДатаОкончания = Значение;
ИначеЕсли ВРег(ИмяПараметра) = ВРег("User") Тогда
СписокПользователей = ДоступныеЗначенияОтбора(Значение, ДоступныеОтборы, "Пользователь");
ИначеЕсли ВРег(ИмяПараметра) = ВРег("Event") Тогда
События = ДоступныеЗначенияОтбора(Значение, ДоступныеОтборы, "Событие");
ИначеЕсли ВРег(ИмяПараметра) = ВРег("Computer") Тогда
Компьютеры = ДоступныеЗначенияОтбора(Значение, ДоступныеОтборы, "Компьютер");
ИначеЕсли ВРег(ИмяПараметра) = ВРег("ApplicationName") Тогда
Приложения = ДоступныеЗначенияОтбора(Значение, ДоступныеОтборы, "ИмяПриложения");
ИначеЕсли ВРег(ИмяПараметра) = ВРег("Comment") Тогда
Комментарий = Значение;
ИначеЕсли ВРег(ИмяПараметра) = ВРег("Metadata") Тогда
Метаданные = ДоступныеЗначенияОтбора(Значение, ДоступныеОтборы, "Метаданные");
ИначеЕсли ВРег(ИмяПараметра) = ВРег("Data") Тогда
Если ЗначениеЗаполнено(Значение) И Значение.Количество() > 1 Тогда
ДанныеНесколькоЗначений = Истина;
ДанныеСписок.ЗагрузитьЗначения(Значение);
ИначеЕсли ЗначениеЗаполнено(Значение) И Значение.Количество() = 1 Тогда
ДанныеНесколькоЗначений = Ложь;
Данные = Значение[0];
Иначе
Данные = Неопределено;
ДанныеСписок.Очистить();
КонецЕсли;
Элементы.Данные.Видимость = НЕ ДанныеНесколькоЗначений;
Элементы.ДанныеСписок.Видимость = ДанныеНесколькоЗначений;
ИначеЕсли ВРег(ИмяПараметра) = ВРег("DataPresentation") Тогда
ПредставлениеДанных = Значение;
ИначеЕсли ВРег(ИмяПараметра) = ВРег("TransactionID") Тогда
Транзакция = Значение;
ИначеЕсли ВРег(ИмяПараметра) = ВРег("ServerName") Тогда
РабочиеСерверы = ДоступныеЗначенияОтбора(Значение, ДоступныеОтборы, "РабочийСервер");
ИначеЕсли ВРег(ИмяПараметра) = ВРег("Sessions") Тогда
СтрСеансы = Значение;
ИначеЕсли ВРег(ИмяПараметра) = ВРег("Port") Тогда
ОсновныеIPПорты = ДоступныеЗначенияОтбора(Значение, ДоступныеОтборы, "ОсновнойIPПорт");
ИначеЕсли ВРег(ИмяПараметра) = ВРег("SyncPort") Тогда
ВспомогательныеIPПорты = ДоступныеЗначенияОтбора(Значение, ДоступныеОтборы, "ВспомогательныйIPПорт");
ИначеЕсли ВРег(ИмяПараметра) = ВРег("Level") Тогда
Для Каждого ЭлементСпискаЗначений Из Важность Цикл
ЗначениеНастройки = Значение.НайтиПоЗначению(ЭлементСпискаЗначений.Значение);
Если ЗначениеНастройки <> Неопределено Тогда
ЭлементСпискаЗначений.Пометка = ЗначениеНастройки.Пометка;
Иначе
ЭлементСпискаЗначений.Пометка = Ложь;
КонецЕсли;
КонецЦикла;
ИначеЕсли ВРег(ИмяПараметра) = ВРег("TransactionStatus") Тогда
Для Каждого ЭлементСпискаЗначений Из СтатусТранзакции Цикл
ЗначениеНастройки = Значение.НайтиПоЗначению(ЭлементСпискаЗначений.Значение);
Если ЗначениеНастройки <> Неопределено Тогда
ЭлементСпискаЗначений.Пометка = ЗначениеНастройки.Пометка;
Иначе
ЭлементСпискаЗначений.Пометка = Ложь;
КонецЕсли;
КонецЦикла;
ИначеЕсли Элементы.РазделениеДанныхСеанса.Видимость И ВРег(ИмяПараметра) = ВРег("SessionDataSeparation") Тогда
Если ТипЗнч(Значение) = Тип("СписокЗначений") Тогда
РазделениеДанныхСеанса = ДоступныеРазделителиДанныхСеанса(Значение);
КонецЕсли;
ИначеЕсли Элементы.ОбластиДанных.Видимость И ВРег(ИмяПараметра) = ВРег("DataArea") Тогда
ОбластиДанных = ДоступныеЗначенияОтбора(Значение, ДоступныеОтборы.РазделениеДанныхСеансаЗначения,
"ОбластьДанныхОсновныеДанные");
РазделениеДанныхСеанса = СписокВсехРазделителей(ОбластиДанных);
КонецЕсли;
КонецЦикла;
ОбновитьЗаголовкиГруппФормы();
КонецПроцедуры
&НаСервере
Функция ДоступныеЗначенияОтбора(ЗначениеОтбора, ДоступныеОтборы, ИмяПараметраОтбора)
Результат = Новый СписокЗначений();
ДоступныеЗначенияОтбора = ДоступныеОтборы[ИмяПараметраОтбора];
Если ТипЗнч(ДоступныеЗначенияОтбора) = Тип("Массив") Тогда
Для Каждого ЭлементОтбора Из ЗначениеОтбора Цикл
Если ДоступныеЗначенияОтбора.Найти(ЭлементОтбора.Значение) <> Неопределено Тогда
Результат.Добавить(ЭлементОтбора.Значение, ЭлементОтбора.Представление);
КонецЕсли;
КонецЦикла;
ИначеЕсли ТипЗнч(ДоступныеЗначенияОтбора) = Тип("Соответствие") Тогда
Для Каждого ЭлементОтбора Из ЗначениеОтбора Цикл
Если ДоступныеЗначенияОтбора[ЭлементОтбора.Значение] <> Неопределено Тогда
Результат.Добавить(ЭлементОтбора.Значение, ЭлементОтбора.Представление);
КонецЕсли;
КонецЦикла;
ИначеЕсли ТипЗнч(ДоступныеЗначенияОтбора) = Тип("СписокЗначений") Тогда
Для Каждого ЭлементОтбора Из ЗначениеОтбора Цикл
НайденноеЗначение = ДоступныеЗначенияОтбора.НайтиПоЗначению(ЭлементОтбора.Представление);
Если НайденноеЗначение <> Неопределено Тогда
Результат.Добавить(НайденноеЗначение.Представление, НайденноеЗначение.Значение);
КонецЕсли;
КонецЦикла;
КонецЕсли;
Возврат Результат;
КонецФункции
&НаСервереБезКонтекста
Функция ДоступныеОтборыЖурналаРегистрации()
ОтбираемыеПараметры = "Пользователь, Событие, Компьютер, ИмяПриложения, Метаданные, РабочийСервер,
| ОсновнойIPПорт, ВспомогательныйIPПорт, РазделениеДанныхСеанса.ОбластьДанныхОсновныеДанные";
ДоступныеПараметрыОтбора = ПолучитьЗначенияОтбораЖурналаРегистрации(ОтбираемыеПараметры);
СписокПользователейДляОтбора = Новый СписокЗначений;
ЗначенияОтбораПользователи = ДоступныеПараметрыОтбора["Пользователь"];
Для Каждого ЭлементСоответствия Из ЗначенияОтбораПользователи Цикл
СписокПользователейДляОтбора.Добавить(ЭлементСоответствия.Значение, Строка(ЭлементСоответствия.Ключ));
КонецЦикла;
УстановитьПривилегированныйРежим(Истина);
ПустойПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени("");
УстановитьПривилегированныйРежим(Ложь);
СписокПользователейДляОтбора.Добавить(Пользователи.ПолноеИмяНеуказанногоПользователя(),
Строка(ПустойПользовательИБ.УникальныйИдентификатор));
ДоступныеПараметрыОтбора["Пользователь"] = СписокПользователейДляОтбора;
Если НЕ ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда
ДоступныеПараметрыОтбора.РазделениеДанныхСеансаЗначения["ОбластьДанныхОсновныеДанные"].Вставить("", НСтр("ru = '<Не задано>'"));
КонецЕсли;
ОбработатьДоступныеПараметрыОтбора(ДоступныеПараметрыОтбора);
Возврат ДоступныеПараметрыОтбора;
КонецФункции
&НаСервереБезКонтекста
Процедура ОбработатьДоступныеПараметрыОтбора(ДоступныеПараметрыОтбора)
Для Каждого ПараметрОтбора Из ДоступныеПараметрыОтбора Цикл
Если ПараметрОтбора.Ключ = "РазделениеДанныхСеансаЗначения" Тогда
ПреобразованныйНабор = Новый Соответствие;
Для Каждого ЭлементСоответствия Из ПараметрОтбора.Значение["ОбластьДанныхОсновныеДанные"] Цикл
ПреобразованныйНабор.Вставить(Формат(ЭлементСоответствия.Ключ, "ЧГ="), ЭлементСоответствия.Значение);
КонецЦикла;
ПараметрОтбора.Значение["ОбластьДанныхОсновныеДанные"] = ПреобразованныйНабор;
КонецЕсли
КонецЦикла;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ДоступныеРазделителиДанныхСеанса(Значение)
Результат = Новый СписокЗначений;
РазделениеДанныхСоответствие = Новый Соответствие;
Если Значение.Количество() > 0 Тогда
Для Каждого РазделительСеанса Из Значение Цикл
РазделениеДанныхМассив = СтрРазделить(РазделительСеанса.Значение, "=");
РазделениеДанныхСоответствие.Вставить(РазделениеДанныхМассив[0], РазделениеДанныхМассив[1]);
КонецЦикла;
КонецЕсли;
Если РазделениеДанныхСоответствие.Количество() = 0 Тогда
Возврат Результат;
КонецЕсли;
Для Каждого ОбщийРеквизит Из Метаданные.ОбщиеРеквизиты Цикл
Если ОбщийРеквизит.РазделениеДанных = Метаданные.СвойстваОбъектов.РазделениеДанныхОбщегоРеквизита.НеИспользовать Тогда
Продолжить;
КонецЕсли;
НайденноеЗначениеРазделителя = РазделениеДанныхСоответствие[ОбщийРеквизит.Имя];
Если НайденноеЗначениеРазделителя <> Неопределено Тогда
ЗначениеРазделителя = ОбщийРеквизит.Имя + "=" + НайденноеЗначениеРазделителя;
ПредставлениеРазделителя = ОбщийРеквизит.Синоним + " = " + НайденноеЗначениеРазделителя;
Результат.Добавить(ЗначениеРазделителя, ПредставлениеРазделителя);
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ОсновнойIPПорт()
Возврат "ОсновнойIPПорт";
КонецФункции
#КонецОбласти