Перем мПлатформа;

Процедура КоманднаяПанель1ОбновитьКэш(Кнопка)
	Ответ = Вопрос("Обновление кэша ролей использует конфигуратор текущей базы и может занять до нескольких минут в зависимости от числа выбранных ролей. Продолжить?", РежимДиалогаВопрос.ОКОтмена);
	Если Ответ = КодВозвратаДиалога.Отмена Тогда
		Возврат;
	КонецЕсли;
	УдалитьФайлы(КаталогКэша, "*");
	ВсеРоли = Новый Массив;
	Для Каждого Роль Из Метаданные.Роли Цикл
		ВсеРоли.Добавить(Роль.ПолноеИмя());
	КонецЦикла;
	ФормаВыбораОбъектаБД = ирКлиент.ФормаВыбораОбъектаМетаданныхЛкс(,, ВсеРоли, Истина,,,,,,,,,,,,,,,,,, Истина);
	РезультатВыбора = ФормаВыбораОбъектаБД.ОткрытьМодально(); // Массив из Строка
	Если РезультатВыбора = Неопределено Тогда
		Возврат;
	КонецЕсли;
	ИменаРолейКонфигурации = Новый Массив;
	Для Каждого ПолноеИмяРоли Из РезультатВыбора Цикл
		РасширениеОтРоли = Метаданные.НайтиПоПолномуИмени(ПолноеИмяРоли).РасширениеКонфигурации();
		Если РасширениеОтРоли = Неопределено Тогда
			ИменаРолейКонфигурации.Добавить(ПолноеИмяРоли);
		Иначе
			ирОбщий.СообщитьЛкс(ирОбщий.СтрШаблонЛкс("%1 пропущена, т.к. принадлежит расширению ""%2""", ПолноеИмяРоли, РасширениеОтРоли.Имя));
		КонецЕсли;
	КонецЦикла;
	Успех = ирОбщий.ВыгрузитьОбъектыМетаданныхЛкс(ИменаРолейКонфигурации, КаталогКэша,,,, Ложь);
	ОбновитьИнфоПапкиКэша();
КонецПроцедуры

Процедура ПриОткрытии()
	
	#Если Сервер И Не Сервер Тогда
		мПлатформа = Обработки.ирПлатформа.Создать();
	#КонецЕсли
	ЭтаФорма.КаталогКэша = мПлатформа.ПапкаКэшаРолей.ПолноеИмя;
	ОбновитьИнфоПапкиКэша();
	
КонецПроцедуры

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

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

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

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

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

Процедура ОсновныеДействияФормыОК(Кнопка)
	
	#Если Сервер И Не Сервер Тогда
		мПлатформа = Обработки.ирПлатформа.Создать();
	#КонецЕсли
	Если ЭтаФорма.КаталогКэша = мПлатформа.ПапкаКэшаРолей.ПолноеИмя Тогда
		ирОбщий.СохранитьЗначениеЛкс("ПапкаКэшаРолей", Неопределено,, Истина);
	Иначе
		ирОбщий.СохранитьЗначениеЛкс("ПапкаКэшаРолей", КаталогКэша,, Истина);
	КонецЕсли; 
	мПлатформа.ПапкаКэшаРолей = Новый Файл(КаталогКэша);
	Закрыть();
	
КонецПроцедуры

// Каталог кэша

Процедура ОбновитьИнфоПапкиКэша()
	
	МаскаПоискаФайлаДатыИзменения = "*";
	ПапкаКэша = Новый Файл(ЭтаФорма.КаталогКэша);
	ЭтаФорма.ДатаОбновленияКэша = Неопределено;
	ЭтаФорма.РазмерКэша = Неопределено;
	Если ПапкаКэша.Существует() Тогда
		ФайлыКэша = НайтиФайлы(КаталогКэша, МаскаПоискаФайлаДатыИзменения);
		Если ФайлыКэша.Количество() > 0 Тогда
			ЭтаФорма.ДатаОбновленияКэша = ФайлыКэша[0].ПолучитьВремяИзменения();
		КонецЕсли; 
		ЭтаФорма.РазмерКэша = Неопределено;
		ПодключитьОбработчикОжидания("ВычислитьРазмерПапкиКэша", 0.1, Истина);
	КонецЕсли;

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

Процедура ВычислитьРазмерПапкиКэша()
	ЭтаФорма.РазмерКэша = ирОбщий.ВычислитьРазмерКаталогаЛкс(КаталогКэша,, Истина);
КонецПроцедуры

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

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

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

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

Процедура КаталогКэшаОткрытие(Элемент, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	ЗапуститьПриложение(КаталогКэша);
	
КонецПроцедуры

ирКлиент.ИнициироватьФормуЛкс(ЭтаФорма, "Обработка.ирРедакторОграниченияДоступа.Форма.КэшРолей");
мПлатформа = ирКэш.Получить();
