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