Документооборот с контролирующими органами / Групповая отправка выбор гос органа / Модуль формы

файл

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

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

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

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

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

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

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

&НаСервере
Функция ОрганыОдногоВида(Органы, ОрганГруппа)
	
	ОрганыТаблица = Новый ТаблицаЗначений;
	ОрганыТаблица.Колонки.Добавить("Орган");
	
	ДлинаСтроки = СтрДлина(ОрганГруппа);
	
	Для каждого Орган Из Органы Цикл
		Если Лев(Орган, ДлинаСтроки) = ОрганГруппа 
			И Орган <> ОрганГруппа Тогда
			НоваяСтрока = ОрганыТаблица.Добавить();
			НоваяСтрока.Орган = Орган;
		КонецЕсли;
	КонецЦикла;
	
	ОрганыТаблица.Сортировать("Орган");
	
	Возврат ОрганыТаблица.ВыгрузитьКолонку("Орган");
	
КонецФункции

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

&НаСервере
Процедура ДобавитьОрганРодитель(Корень, Орган)
	
	УровеньВидаОргана = Корень.Добавить();
	УровеньВидаОргана.Представление = Орган;
	УровеньВидаОргана.ЭтоГруппа 	= Истина;
	
КонецПроцедуры

&НаСервере
Процедура ВыделитьТекущийОрган(Параметры)

	ИскомыйИдентификатор = -1;
	ИдентификаторСтрокиДерева(КонтролирующиеОрганы, Параметры.ТекущаяСтрока, ИскомыйИдентификатор);
	
	Если ИскомыйИдентификатор <> -1 Тогда
		Элементы.КонтролирующиеОрганы.ТекущаяСтрока = ИскомыйИдентификатор;
	КонецЕсли;

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

&НаСервере
Процедура ИдентификаторСтрокиДерева(Узел, ИскомоеЗначение, ИскомыйИдентификатор)
	
	ЭлементыУзла = Узел.ПолучитьЭлементы();
	Для каждого ЭлементУзла Из ЭлементыУзла Цикл
		Если ЭлементУзла.Представление = ИскомоеЗначение Тогда
			ИскомыйИдентификатор = ЭлементУзла.ПолучитьИдентификатор();
		Иначе
			ИдентификаторСтрокиДерева(ЭлементУзла, ИскомоеЗначение, ИскомыйИдентификатор);
		КонецЕСли;
	КонецЦикла; 
	
КонецПроцедуры

&НаСервере
Процедура ИнициализироватьПараметры(Параметры)
	
	ДеревоКонтролирующиеОрганы = РеквизитФормыВЗначение("КонтролирующиеОрганы");
	
	Корень = ДеревоКонтролирующиеОрганы.Строки;
	Органы = Параметры.Органы;
	
	ДобавитьОрганы(Корень, Органы);
	
	ЗначениеВРеквизитФормы(ДеревоКонтролирующиеОрганы, "КонтролирующиеОрганы");
	
КонецПроцедуры

&НаСервере
Функция ДобавитьОрганы(Корень, Органы)
	
	РодительскиеОрганы = РодительскиеОрганы();
	
	ДобавленныеОрганы = Новый Массив;
	Для каждого ОрганРодитель Из РодительскиеОрганы Цикл
		
		ДочерниеОрганы = ОрганыОдногоВида(Органы, ОрганРодитель);
		
		Если ДочерниеОрганы.Количество() = 0 Тогда
			ДобавитьОрганРодитель(Корень, ОрганРодитель);
		Иначе
			ДобавитьОрганВДерево(
				ОрганРодитель, 
				ДочерниеОрганы, 
				Корень);
		КонецЕсли;
			
	КонецЦикла;
	
	Возврат ДобавленныеОрганы;
		
КонецФункции

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

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

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