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