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