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