#Область ОписаниеПеременных
&НаКлиенте
Перем ПодтверждениеЗакрытияФормы;
#КонецОбласти
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
УстановитьУсловноеОформление();
Если ОбщегоНазначения.РазделениеВключено() Тогда
Отказ = Истина;
КонецЕсли;
ПоказыватьТолькоЗагруженныеРегионы = Истина;
ОпределитьЗагруженныеРегионы();
СохраняемыеВНастройкахДанныеМодифицированы = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Если Не АдресныйКлассификаторСодержитЗагруженныеСведения Тогда
Отказ = Истина;
ПоказатьПредупреждение(, НСтр("ru='Адресные сведения для очистки отсутствуют'"));
Иначе
ОбновитьИнтерфейсПоКоличествуОчищаемых();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
Если Элементы.ШагиОчистки.ТекущаяСтраница <> Элементы.ОжиданиеОчистки
Или ПодтверждениеЗакрытияФормы = Истина Тогда
Возврат;
КонецЕсли;
Отказ = Истина;
Если ЗавершениеРаботы Тогда
Возврат;
КонецЕсли;
Оповещение = Новый ОписаниеОповещения("ЗакрытиеФормыЗавершение", ЭтотОбъект);
Текст = НСтр("ru = 'Прервать очистку адресного классификатора?'");
ПоказатьВопрос(Оповещение, Текст, РежимДиалогаВопрос.ДаНет);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура СубъектыРФВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если Поле = Элементы.СубъектыРФПредставление Тогда
ТекущиеДанные = СубъектыРФ.НайтиПоИдентификатору(ВыбраннаяСтрока);
Если ТекущиеДанные <> Неопределено Тогда
ТекущиеДанные.Очищать = Не ТекущиеДанные.Очищать;
ОбновитьИнтерфейсПоКоличествуОчищаемых();
КонецЕсли
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СубъектыРФОчищатьПриИзменении(Элемент)
ОбновитьИнтерфейсПоКоличествуОчищаемых();
КонецПроцедуры
&НаКлиенте
Процедура ПоказыватьТолькоЗагруженныеРегионыПриИзменении(Элемент)
ОпределитьЗагруженныеРегионы();
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура УстановитьФлажки(Команда)
УстановитьПометкиСпискаРегионов(Истина);
КонецПроцедуры
&НаКлиенте
Процедура СнятьФлажки(Команда)
УстановитьПометкиСпискаРегионов(Ложь);
КонецПроцедуры
&НаКлиенте
Процедура Очистить(Команда)
ОчиститьКлассификатор();
КонецПроцедуры
&НаКлиенте
Процедура ПрерватьОчистку(Команда)
Оповещение = Новый ОписаниеОповещения("ПослеВопросаПрерватьОчистку", ЭтотОбъект);
Текст = НСтр("ru = 'Прервать очистку адресного классификатора?'");
ПоказатьВопрос(Оповещение, Текст, РежимДиалогаВопрос.ДаНет);
КонецПроцедуры
&НаКлиенте
Процедура ОтметитьЗагруженные(Команда)
Для каждого Регион Из СубъектыРФ Цикл
Регион.Очищать = Регион.Загружено;
КонецЦикла;
ОбновитьИнтерфейсПоКоличествуОчищаемых();
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаКлиенте
Процедура ЗакрытиеФормыЗавершение(Знач РезультатВопроса, Знач ДополнительныеПараметры) Экспорт
Если РезультатВопроса = КодВозвратаДиалога.Да Тогда
ПодтверждениеЗакрытияФормы = Истина;
Закрыть();
Иначе
ПодтверждениеЗакрытияФормы = Неопределено;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УстановитьРазрешениеОчистки(Знач КоличествоОчищаемых = Неопределено)
Если КоличествоОчищаемых = Неопределено Тогда
КоличествоОчищаемых = СубъектыРФ.НайтиСтроки( Новый Структура("Очищать", Истина) ).Количество();
КонецЕсли;
Элементы.Очистить.Доступность = КоличествоОчищаемых > 0
КонецПроцедуры
&НаСервере
Процедура УстановитьУсловноеОформление()
УсловноеОформление.Элементы.Очистить();
Элемент = УсловноеОформление.Элементы.Добавить();
Поля = Элемент.Поля.Элементы;
Поля.Добавить().Поле = Новый ПолеКомпоновкиДанных("СубъектыРФКодСубъектаРФ");
Поля.Добавить().Поле = Новый ПолеКомпоновкиДанных("СубъектыРФПредставление");
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СубъектыРФ.Загружено");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет);
КонецПроцедуры
&НаКлиенте
Процедура УстановитьПометкиСпискаРегионов(Знач Пометка)
ЭлементТаблицы = Элементы.СубъектыРФ;
Для Каждого СтрокаРегиона Из СубъектыРФ Цикл
Если ЭлементТаблицы.ДанныеСтроки( СтрокаРегиона.ПолучитьИдентификатор() ) <> Неопределено Тогда
СтрокаРегиона.Очищать = Пометка;
КонецЕсли;
КонецЦикла;
ОбновитьИнтерфейсПоКоличествуОчищаемых();
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьИнтерфейсПоКоличествуОчищаемых()
ВыбраноРегионовДляОчистки = СубъектыРФ.НайтиСтроки( Новый Структура("Очищать", Истина) ).Количество();
ТекстОписанияОчистки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Очищаются данные выбранных регионов (%1)'"), ВыбраноРегионовДляОчистки);
УстановитьРазрешениеОчистки(ВыбраноРегионовДляОчистки);
КонецПроцедуры
&НаКлиенте
Процедура ОчиститьКлассификатор()
ОчиститьСообщения();
Элементы.ШагиОчистки.ТекущаяСтраница = Элементы.ОжиданиеОчистки;
ТекстСостоянияОчистки = НСтр("ru = 'Очистка адресного классификатора ...'");
Элементы.ПрерватьОчистку.Доступность = Истина;
ОповещениеОПрогрессеВыполнения = Новый ОписаниеОповещения("ПрогрессВыполнения", ЭтотОбъект);
ДлительнаяОперация = ЗапуститьФоновуюОчисткуНаСервере(КодыРегионовДляОчистки(), УникальныйИдентификатор);
ИдентификаторЗадания = ДлительнаяОперация.ИдентификаторЗадания;
НастройкиОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
НастройкиОжидания.ВыводитьОкноОжидания = Ложь;
НастройкиОжидания.ОповещениеОПрогрессеВыполнения = ОповещениеОПрогрессеВыполнения;
Обработчик = Новый ОписаниеОповещения("ПослеФоновойОчистки", ЭтотОбъект);
ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, Обработчик, НастройкиОжидания);
КонецПроцедуры
&НаКлиенте
Процедура ПослеФоновойОчистки(Результат, ДополнительныеПараметры) Экспорт
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
Если Результат.Статус = "Ошибка" Тогда
Элементы.ШагиОчистки.ТекущаяСтраница = Элементы.ВыборРегионовОчистки;
СтандартныеПодсистемыКлиент.ВывестиИнформациюОбОшибке(
Результат.ИнформацияОбОшибке);
Возврат;
КонецЕсли;
Элементы.ШагиОчистки.ТекущаяСтраница = Элементы.УспешноеЗавершение;
ТекстОписанияОчистки = НСтр("ru = 'Адресный классификатор успешно очищен.'");
ОбновитьПовторноИспользуемыеЗначения();
Оповестить("ОчищенАдресныйКлассификатор", КлассификаторСодержитЗагруженныеАдресныеСведения(), ЭтотОбъект);
Элементы.Закрыть.КнопкаПоУмолчанию = Истина;
ТекущийЭлемент = Элементы.Закрыть;
ПодтверждениеЗакрытияФормы = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ПрогрессВыполнения(Результат, ДополнительныеПараметры) Экспорт
Если Результат.Статус = "Выполняется" И Результат.Прогресс <> Неопределено Тогда
ТекстСостоянияОчистки = Результат.Прогресс.Текст;
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция КлассификаторСодержитЗагруженныеАдресныеСведения()
ИспользоватьЗагруженные = АдресныйКлассификаторСлужебный.СведенияОДоступностиАдресныхСведений().Получить("ИспользоватьЗагруженные");
Возврат ИспользоватьЗагруженные = Истина;
КонецФункции
&НаСервереБезКонтекста
Функция ЗапуститьФоновуюОчисткуНаСервере(Знач КодыРегионов, Знач УникальныйИдентификатор)
ПараметрыМетода = Новый Массив;
ПараметрыМетода.Добавить(КодыРегионов);
ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Очистка адресного классификатора'");
ПараметрыВыполнения.УточнениеОшибки = НСтр("ru = 'Не удалось очистить адресный классификатор по причине:'");
Возврат ДлительныеОперации.ВыполнитьВФоне(
"АдресныйКлассификаторСлужебный.ФоновоеЗаданиеОчисткиКлассификатораАдресов",
ПараметрыМетода,
ПараметрыВыполнения);
КонецФункции
&НаКлиенте
Процедура ПослеВопросаПрерватьОчистку(Результат, ДополнительныеПараметры) Экспорт
Если Результат = КодВозвратаДиалога.Да Тогда
ОтменитьФоновоеЗадание(ИдентификаторЗадания);
Элементы.ШагиОчистки.ТекущаяСтраница = Элементы.ВыборРегионовОчистки;
ОпределитьЗагруженныеРегионы();
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ОтменитьФоновоеЗадание(Знач Идентификатор)
Если Идентификатор <> Неопределено Тогда
ДлительныеОперации.ОтменитьВыполнениеЗадания(Идентификатор);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОпределитьЗагруженныеРегионы()
ТаблицаРегионов = АдресныйКлассификаторСлужебный.СведенияОЗагрузкеСубъектовРФ();
ТаблицаРегионов.Колонки.Добавить("Очищать", Новый ОписаниеТипов("Булево"));
АдресныйКлассификаторСодержитЗагруженныеСведения = Ложь;
Для Каждого Регион Из ТаблицаРегионов Цикл
Регион.Представление = Формат(Регион.КодСубъектаРФ, "ЧЦ=2; ЧН=; ЧВН=; ЧГ=") + ", " + Регион.Представление;
КонецЦикла;
Если ПоказыватьТолькоЗагруженныеРегионы Тогда
Индекс = ТаблицаРегионов.Количество() - 1;
Пока Индекс >= 0 Цикл
СтрокаТаблицы = ТаблицаРегионов.Получить(Индекс);
Если НЕ СтрокаТаблицы.Загружено Тогда
ТаблицаРегионов.Удалить(СтрокаТаблицы);
Иначе
АдресныйКлассификаторСодержитЗагруженныеСведения = Истина;
КонецЕсли;
Индекс = Индекс - 1;
КонецЦикла;
КонецЕсли;
ЗначениеВРеквизитФормы(ТаблицаРегионов, "СубъектыРФ");
КонецПроцедуры
&НаКлиенте
Функция КодыРегионовДляОчистки()
Результат = Новый Массив;
Для Каждого Регион Из СубъектыРФ.НайтиСтроки( Новый Структура("Очищать", Истина) ) Цикл
Результат.Добавить(Регион.КодСубъектаРФ);
КонецЦикла;
Возврат Результат;
КонецФункции
#КонецОбласти