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