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