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

файл

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	СтруктураГеоСхемы = Константы.ГеографическаяСхемаДляОтчетов.Получить().Получить();
	Если СтруктураГеоСхемы <> Неопределено Тогда
		СтруктураГеоСхемы.Свойство("ГеоСхема", ГеоСхема);
		ЗаполнитьОбъектыГеоСхемы();
	Иначе
		СообщениеПользователю = НСтр("ru = 'Для заполнения списка регионов необходимо выбрать карту в разделе администрирования ""Маркетинг и CRM"".'");
		ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеПользователю);
	КонецЕсли;
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура ГеографическиеРегионыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	
	Элемент.ТекущиеДанные.Пометка = Не Элемент.ТекущиеДанные.Пометка;
	
КонецПроцедуры

&НаКлиенте
Процедура ГеографическиеРегионыПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
	
	ВыбраноРегионов = ВыбраноРегионов();
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура ВыделитьВсеВыполнить()
	
	ЭлементыГеографическиеРегионы = ГеографическиеРегионы.ПолучитьЭлементы();
	Для Каждого ЭлементГеографическийРегион Из ЭлементыГеографическиеРегионы Цикл
		ЭлементГеографическийРегион.Пометка = Истина;
		ПодЭлементыГеографическиеРегионы = ЭлементГеографическийРегион.ПолучитьЭлементы();
		Для Каждого ПодЭлементГеографическийРегион Из ПодЭлементыГеографическиеРегионы Цикл
			ПодЭлементГеографическийРегион.Пометка = Истина;
		КонецЦикла;
	КонецЦикла;
	
	ВыбраноРегионов = ВыбраноРегионов();
	
КонецПроцедуры

&НаКлиенте
Процедура ОтменитьВыделитьВсеВыполнить()
	
	ЭлементыГеографическиеРегионы = ГеографическиеРегионы.ПолучитьЭлементы();
	Для Каждого ЭлементГеографическийРегион Из ЭлементыГеографическиеРегионы Цикл
		ЭлементГеографическийРегион.Пометка = Ложь;
		ПодЭлементыГеографическиеРегионы = ЭлементГеографическийРегион.ПолучитьЭлементы();
		Для Каждого ПодЭлементГеографическийРегион Из ПодЭлементыГеографическиеРегионы Цикл
			ПодЭлементГеографическийРегион.Пометка = Ложь;
		КонецЦикла;
	КонецЦикла;
	
	ВыбраноРегионов = 0;
	
КонецПроцедуры

&НаКлиенте
Процедура Заполнить(Команда)
	
	Если ВыбраноРегионов() Тогда
		ЧислоНовыхРегионов = ЗаполнитьБизнесРегионы();
		Закрыть(ЧислоНовыхРегионов);
	Иначе
		СообщениеПользователю = НСтр("ru = 'Необходимо выбрать хотя бы один географический регион для заполнения бизнес-регионов.'");
		ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеПользователю, , "ГеографическиеРегионы");
	КонецЕсли;
	
КонецПроцедуры

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

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

&НаСервере
Функция ЗаполнитьБизнесРегионы()
	
	ЧислоНовыхРегионов = 0;
	
	ДеревоРегионов = РеквизитФормыВЗначение("ГеографическиеРегионы");
	СписокРегионов = ДеревоРегионов.Строки.НайтиСтроки(Новый Структура("Пометка", Истина), Истина);
	
	Для каждого Регион Из СписокРегионов Цикл
		БизнесРегион = НайтиБизнесРегион(Регион.ЗначениеГеографическогоРегиона, Регион.НазваниеГеографическогоРегиона);
		Если БизнесРегион = Справочники.БизнесРегионы.ПустаяСсылка() Тогда
			НовыйБизнесРегион = Справочники.БизнесРегионы.СоздатьЭлемент();
			НовыйБизнесРегион.Наименование = Регион.НазваниеГеографическогоРегиона;
			НовыйБизнесРегион.ГеографическийРегион = Регион.НазваниеГеографическогоРегиона;
			НовыйБизнесРегион.ЗначениеГеографическогоРегиона = Регион.ЗначениеГеографическогоРегиона;
			Если Регион.Родитель <> Неопределено Тогда
				РегионРодитель = НайтиБизнесРегион(Регион.Родитель.ЗначениеГеографическогоРегиона,
					Регион.Родитель.НазваниеГеографическогоРегиона);
				НовыйБизнесРегион.Родитель = РегионРодитель;
			КонецЕсли;
			НовыйБизнесРегион.Записать();
			ЧислоНовыхРегионов = ЧислоНовыхРегионов + 1;
		КонецЕсли;
	КонецЦикла;
	
	Возврат ЧислоНовыхРегионов;
	
КонецФункции

&НаСервере
Функция НайтиБизнесРегион(ЗначениеГеографическогоРегиона, ГеографическийРегион)
	
	НайденныйБизнесРегион = Справочники.БизнесРегионы.ПустаяСсылка();
	
	НайденныйБизнесРегион = Справочники.БизнесРегионы.НайтиПоРеквизиту("ЗначениеГеографическогоРегиона", ЗначениеГеографическогоРегиона);
	
	Если НайденныйБизнесРегион = Справочники.БизнесРегионы.ПустаяСсылка() Тогда
		НайденныйБизнесРегион = Справочники.БизнесРегионы.НайтиПоНаименованию(ГеографическийРегион, Истина);
	КонецЕсли;
	
	Возврат НайденныйБизнесРегион;

КонецФункции

&НаСервере
Процедура ЗаполнитьОбъектыГеоСхемы()
	
	ВыбиратьГорода = Ложь; // Города будут выбраны только для схемы регионов России со всеми городами
	Если ГеоСхема.Слои.Найти("Регионы России") <> Неопределено
		И ГеоСхема.Слои.Найти("Города") <> Неопределено Тогда
		Города = ГеоСхема.Слои.Города; // СлойГеографическойСхемы
		Столица = Города.Серии.Столица; // СерияДанныхСлояГеографическойСхемы
		НеСтолицы = Города.ВыбратьОбъекты(Новый Структура(Столица.Имя, Ложь));
		Если НеСтолицы.Количество() Тогда
			ВыбиратьГорода = Истина;
		КонецЕсли;
	КонецЕсли;
	
	Дерево = Новый ДеревоЗначений;
	
	Массив = Новый Массив;
	КС = Новый КвалификаторыСтроки(255);
	Массив.Добавить(Тип("Строка"));
	ОписаниеТипов = Новый ОписаниеТипов(Массив, , КС);
	Дерево.Колонки.Добавить("НазваниеГеографическогоРегиона", ОписаниеТипов);
	КЧ = Новый КвалификаторыЧисла(25,0);
	Массив.Добавить(Тип("Число"));
	ОписаниеТипов = Новый ОписаниеТипов(Массив, КЧ, КС);
	Дерево.Колонки.Добавить("ЗначениеГеографическогоРегиона", ОписаниеТипов);
	Массив = Новый Массив;
	Массив.Добавить(Тип("Булево"));
	ОписаниеТипов = Новый ОписаниеТипов(Массив, , );
	Дерево.Колонки.Добавить("Пометка", ОписаниеТипов);
	
	
	Слой = ГеоСхема.Слои[0];
	
	ЕстьСерияНазвание = Ложь;
	СерияНазвание = Слой.Серии.Найти("Название");
	Если СерияНазвание <> Неопределено Тогда
		ЕстьСерияНазвание = Истина;
	КонецЕсли;
	
	Для каждого Объект Из Слой.Объекты Цикл
		
		НовыйРегион = Дерево.Строки.Добавить();
		Если ЕстьСерияНазвание Тогда
			НазваниеОбъекта = Слой.ПолучитьЗначение(Объект, СерияНазвание);
			НовыйРегион.НазваниеГеографическогоРегиона = НазваниеОбъекта.Значение;
			НовыйРегион.ЗначениеГеографическогоРегиона = Объект.Значение;
		Иначе
			НовыйРегион.НазваниеГеографическогоРегиона = Объект.Значение;
			НовыйРегион.ЗначениеГеографическогоРегиона = Объект.Значение;
		КонецЕсли;
		
		Если ВыбиратьГорода Тогда
			ЕстьСерияНазваниеГорода = Ложь;
			СерияНазваниеГорода = Города.Серии.Найти("Название");
			Если СерияНазваниеГорода <> Неопределено Тогда
				ЕстьСерияНазваниеГорода = Истина;
			КонецЕсли;
			
			КОД_КЛАДР_РЕГИОНА = Города.Серии.КОД_КЛАДР_РЕГИОНА; // СерияДанныхСлояГеографическойСхемы
			ГородаРегиона = Города.ВыбратьОбъекты(Новый Структура(КОД_КЛАДР_РЕГИОНА.Имя, Объект.Значение));
			Для каждого ГородРегиона Из ГородаРегиона Цикл
				НовыйГород = НовыйРегион.Строки.Добавить();
				Если ЕстьСерияНазваниеГорода Тогда
					НазваниеГорода = Города.ПолучитьЗначение(ГородРегиона, СерияНазваниеГорода);
					НовыйГород.НазваниеГеографическогоРегиона = НазваниеГорода.Значение;
					НовыйГород.ЗначениеГеографическогоРегиона = ГородРегиона.Значение;
				Иначе
					НовыйГород.НазваниеГеографическогоРегиона = ГородРегиона.Значение;
					НовыйГород.ЗначениеГеографическогоРегиона = ГородРегиона.Значение;
				КонецЕсли;
			КонецЦикла;
		КонецЕсли;
	КонецЦикла;
	
	Дерево.Строки.Сортировать("НазваниеГеографическогоРегиона", Истина);
	
	ЗначениеВРеквизитФормы(Дерево, "ГеографическиеРегионы");
	
КонецПроцедуры

// Возвращает количество помеченных географических регионов
//
&НаКлиенте
Функция ВыбраноРегионов()
	
	ВыбраноРегионов = 0;
	
	ЭлементыГеографическиеРегионы = ГеографическиеРегионы.ПолучитьЭлементы();
	Для Каждого ЭлементГеографическийРегион Из ЭлементыГеографическиеРегионы Цикл
		Если ЭлементГеографическийРегион.Пометка Тогда
			ВыбраноРегионов = ВыбраноРегионов + 1;
		КонецЕсли;
		ПодЭлементыГеографическиеРегионы = ЭлементГеографическийРегион.ПолучитьЭлементы();
		Для Каждого ПодЭлементГеографическийРегион Из ПодЭлементыГеографическиеРегионы Цикл
			Если ПодЭлементГеографическийРегион.Пометка Тогда
				ВыбраноРегионов = ВыбраноРегионов + 1;
			КонецЕсли;
		КонецЦикла;
	КонецЦикла;
	
	Возврат ВыбраноРегионов;
	
КонецФункции

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

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