Бизнес-сеть / Подбор регионов / Модуль формы

файл

#Область ОбработчикиСобытийФормы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	Параметры.Свойство("Организация", Организация);
	
	Адреса = БизнесСеть.АдресаОрганизации(Организация);
	
	СжатьДоРегиона = Параметры.Свойство("РежимВыбора") И Параметры.РежимВыбора = "Регионы";
	СжатьАдресаКонтактнойИнформации(Адреса, СжатьДоРегиона);
	
	Список.Загрузить(Адреса);
	Если Список.Количество() = 0 Тогда
		Возврат;
	КонецЕсли;
	
	// Отметить ранее указанные адреса.
	Если Параметры.Свойство("АдресТаблицыАдресов") Тогда
		ТаблицаАдресов = ПолучитьИзВременногоХранилища(Параметры.АдресТаблицыАдресов);
		Для Каждого СтрокаАдреса Из ТаблицаАдресов Цикл
			НайденныеСтроки = Список.НайтиСтроки(Новый Структура("Представление", СтрокаАдреса.Представление));
			Для Каждого СтрокаПометки Из НайденныеСтроки Цикл
				СтрокаПометки.Пометка = Истина;
			КонецЦикла;
		КонецЦикла;
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	Если Список.Количество() = 0 Тогда
		ПоказатьПредупреждение(, НСтр("ru = 'Отсутствуют данные для выбора.'"));
		Отказ = Истина;
		Закрыть();
	КонецЕсли;
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовТаблицыФормыСписок

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

#КонецОбласти

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура Выбрать(Команда)
	
	ПараметрыЗакрытия = Новый Структура("АдресТаблицыАдресов", АдресСписка());
	Закрыть(ПараметрыЗакрытия);
	
КонецПроцедуры

&НаКлиенте
Процедура УстановитьПометки(Команда)
	
	УстановитьПометкиСписка(Истина);
	
КонецПроцедуры

&НаКлиенте
Процедура СнятьПометки(Команда)
	
	УстановитьПометкиСписка(Ложь);
	
КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

&НаСервере
Функция АдресСписка()
	
	Возврат ПоместитьВоВременноеХранилище(Список.Выгрузить());
	
КонецФункции

&НаСервереБезКонтекста
Процедура СжатьАдресаКонтактнойИнформации(АдресаАбонента, СжатьДоРегиона = Ложь)
	
	Если СжатьДоРегиона Тогда
		Для Каждого СтрокаАдреса Из АдресаАбонента Цикл
			БизнесСеть.ПолучитьРегионыКонтактнойИнформации(СтрокаАдреса.ЗначенияПолей, СтрокаАдреса.Представление);
		КонецЦикла;
	КонецЕсли;
	
	Для Каждого СтрокаАдреса Из АдресаАбонента Цикл
		
		ДублиСтрок = АдресаАбонента.НайтиСтроки(Новый Структура("Представление", СтрокаАдреса.Представление));
		Если ДублиСтрок.Количество() Тогда
			
			СписокСсылок = Новый СписокЗначений;
			СтрокаОписания = "";
			Для Каждого СтрокаДубля Из ДублиСтрок Цикл
				СписокСсылок.Добавить(СтрокаДубля.Ссылка, СтрокаДубля.Описание);
				СтрокаОписания = СтрокаОписания + ?(СтрокаОписания = "", "", ", ") + СтрокаДубля.Описание;
				Если СтрокаДубля <> СтрокаАдреса Тогда
					АдресаАбонента.Удалить(СтрокаДубля);
				КонецЕсли;
			КонецЦикла;
			СтрокаАдреса.Ссылка = СписокСсылок;
			СтрокаАдреса.Описание = СтрокаОписания;
		КонецЕсли;
		
	КонецЦикла;

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

&НаКлиенте
Процедура ПоказатьВыборИзСпискаЗавершение(Результат, ДополнительныеПараметры) Экспорт
	
	Если ТипЗнч(Результат) = Тип("ЭлементСпискаЗначений") Тогда
		ПоказатьЗначение(, Результат.Значение);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура УстановитьПометкиСписка(РежимПометки)
	
	Для Каждого СтрокаСписка Из Список Цикл
		СтрокаСписка.Пометка = РежимПометки;
	КонецЦикла;
	
КонецПроцедуры

#КонецОбласти

Связанные материалы