Процедура ПриОткрытии()
	ирКлиент.Форма_ПриОткрытииЛкс(ЭтаФорма);
	ТаблицаВидовПрав = ирКэш.ВсеВидыПравДоступаЛкс();
	ТаблицаВидовПрав = ТаблицаВидовПрав.Скопировать(ирОбщий.ОтобратьКоллекциюЛкс(ТаблицаВидовПрав, "Э.Применение <> П1",, "Конфигурация"));
	ДоступныеПрава.Загрузить(ТаблицаВидовПрав);
	ЗаполнитьПометки();
КонецПроцедуры

Процедура ЗаполнитьПометки()
	
	ирОбщий.УстановитьСвойствоВКоллекцииЛкс(ДоступныеПрава, "Пометка", Ложь);
	Для Каждого ВыбранноеПраво Из НаборПрав Цикл
		СтрокаПрава = ДоступныеПрава.Найти(ВыбранноеПраво.Значение, "Имя");
		Если СтрокаПрава <> Неопределено Тогда
			СтрокаПрава.Пометка = Истина;
		КонецЕсли;
	КонецЦикла;

КонецПроцедуры 

Процедура ПриЗакрытии()
	ирКлиент.Форма_ПриЗакрытииЛкс(ЭтаФорма);
КонецПроцедуры      

Процедура ВнешнееСобытие(Источник, Событие, Данные) Экспорт
	
	ирКлиент.Форма_ВнешнееСобытиеЛкс(ЭтаФорма, Источник, Событие, Данные);

КонецПроцедуры

Процедура КлсКомандаНажатие(Кнопка) Экспорт 
	
	ирКлиент.УниверсальнаяКомандаФормыЛкс(ЭтаФорма, Кнопка);
	
КонецПроцедуры

Процедура ДействияФормыОК(Кнопка)
	
	Если ДоступныеПрава.Найти(Истина, "Пометка") = Неопределено Тогда
		ДействияФормыСтандартные();
	КонецЕсли;
	Результат = Новый СписокЗначений;
	Результат.ТипЗначения = Новый ОписаниеТипов("Строка");
	Для Каждого Строка Из ДоступныеПрава.НайтиСтроки(Новый Структура("Пометка", Истина)) Цикл
		Результат.Добавить(Строка.Имя, Строка.Представление);
	КонецЦикла;
	ОповеститьОВыборе(Результат);
	
КонецПроцедуры

Процедура ДоступныеПраваПриАктивизацииСтроки(Элемент)
	ирКлиент.ТабличноеПолеПриАктивизацииСтрокиЛкс(ЭтаФорма, Элемент);
КонецПроцедуры

Процедура ДоступныеПраваПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки) Экспорт 
	ирКлиент.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки);
КонецПроцедуры

Процедура ДоступныеПраваПриИзмененииФлажка(Элемент, Колонка)
	ирКлиент.ТабличноеПолеПриИзмененииФлажкаЛкс(ЭтаФорма, Элемент, Колонка, ЭлементыФормы.ДействияФормы.Кнопки.ТолькоПомеченные);
КонецПроцедуры

Процедура ДействияФормыТолькоПомеченные(Кнопка)
	ЭлементОтбора = ЭлементыФормы.ДоступныеПрава.ОтборСтрок.Пометка;
	ЭлементОтбора.ВидСравнения = ВидСравнения.Равно;
	ЭлементОтбора.Значение = Истина;
	ЭлементОтбора.Использование = Не ЭлементОтбора.Использование;
	Кнопка.Пометка = ЭлементОтбора.Использование;
КонецПроцедуры

Процедура ОбновитьОтбор()
	
	Реквизиты = Метаданные().ТабличныеЧасти.ДоступныеПрава.Реквизиты;
	КолонкиПоиска = Новый Структура;
	КолонкиПоиска.Вставить(Реквизиты.Описание.Имя);
	КолонкиПоиска.Вставить(Реквизиты.Представление.Имя);
	ирКлиент.ТабличноеПолеСДаннымиПоискаУстановитьОтборПоПодстрокеЛкс(ЭтаФорма, ЭлементыФормы.ДоступныеПрава, ПодстрокаПоиска, КолонкиПоиска);

КонецПроцедуры

Процедура ПодстрокаПоискаПриИзменении(Элемент)
	ирКлиент.ПолеВводаСИсториейВыбора_ПриИзмененииЛкс(Элемент, ЭтаФорма);
	ОбновитьОтбор();
КонецПроцедуры

Процедура ПодстрокаПоискаНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка)
	ирОбщий.ПолеВводаСИсториейВыбора_ОбновитьСписокЛкс(Элемент, ЭтаФорма);
КонецПроцедуры

Процедура ПодстрокаПоискаАвтоПодборТекста(Элемент, Текст, ТекстАвтоПодбора, СтандартнаяОбработка)
	Если ирКлиент.ПромежуточноеОбновлениеСтроковогоЗначенияПоляВводаЛкс(ЭтаФорма, Элемент, Текст) Тогда 
		ОбновитьОтбор();
	КонецЕсли;
КонецПроцедуры

Процедура ДействияФормыСтандартные(Кнопка = Неопределено)
	ВыбратьПраваПоУмолчанию();
	ЗаполнитьПометки();
КонецПроцедуры

ирКлиент.ИнициироватьФормуЛкс(ЭтаФорма, "Отчет.ирАнализПравДоступа.Форма.ВыборПрав");
