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

файл

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

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

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

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

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

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

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

&НаСервере
Процедура ДобавитьОрганВДерево(ОрганГруппа, ВыборкаОрганы, Корень, ОрганЭлемент = "")
	
	Если ОрганЭлемент = "" Тогда
		ОрганЭлемент = ОрганГруппа;
	КонецЕсли;
	
	УровеньВидаОргана = Корень.Добавить();
	УровеньВидаОргана.Представление = ОрганГруппа;
	УровеньВидаОргана.ЭтоГруппа 	= Истина;
	
	Пока ВыборкаОрганы.Следующий() Цикл
		
		СтрокаОргана =  УровеньВидаОргана.Строки.Добавить();
		СтрокаОргана.Ссылка = ВыборкаОрганы.Ссылка;
		СтрокаОргана.Представление = 
			ОрганЭлемент 
			+ " " 
			+ СокрЛП(ВыборкаОрганы.Код)
			+ " ("
			+ СокрЛП(ВыборкаОрганы.Наименование)
			+ ")";
		
	КонецЦикла;
	
КонецПроцедуры

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

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

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

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

&НаСервере
Функция ПодключенныеНаправления(ТипПолучателя)

	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
		|	ДополнительныеРеквизитыУчетнойЗаписиПолучатели.КодПолучателя КАК Код
		|ИЗ
		|	РегистрСведений.ДополнительныеРеквизитыУчетнойЗаписиПолучатели КАК ДополнительныеРеквизитыУчетнойЗаписиПолучатели
		|ГДЕ
		|	ДополнительныеРеквизитыУчетнойЗаписиПолучатели.УчетнаяЗапись = &УчетнаяЗапись
		|	И ДополнительныеРеквизитыУчетнойЗаписиПолучатели.ТипПолучателя = &ТипПолучателя";

	Запрос.УстановитьПараметр("УчетнаяЗапись", УчетнаяЗапись);
	Запрос.УстановитьПараметр("ТипПолучателя", ТипПолучателя);
	Результат = Запрос.Выполнить().Выгрузить();
	Возврат Результат.ВыгрузитьКолонку("Код");
	
КонецФункции

&НаСервере
Процедура ПоказатьВсеНаСервере()
	
	ИнициализироватьОрганы();
	
КонецПроцедуры

&НаКлиенте
Процедура ПоказатьВсе(Команда)
	
	Развернутости = КэшРазвернутостей();
	
	Элементы.ФормаПоказатьВсе.Пометка = НЕ Элементы.ФормаПоказатьВсе.Пометка;
	ПоказатьВсеНаСервере();
	
	ВосстановитьРазвернутость(Развернутости);
	
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	РазвернутьДерево();
КонецПроцедуры

&НаКлиенте
Функция КэшРазвернутостей()
	
	Развернутости = Новый Соответствие;
	
	СтрокиДерева = КонтролирующиеОрганы.ПолучитьЭлементы();
	Для Каждого ТекущаяСтрока Из СтрокиДерева Цикл
		
		Развернутость = Элементы.КонтролирующиеОрганы.Развернут(
			ТекущаяСтрока.ПолучитьИдентификатор());
			
		Развернутости.Вставить(ТекущаяСтрока.Представление, Развернутость);
			
	КонецЦикла;
	
	Возврат Развернутости;
	
КонецФункции

&НаКлиенте
Функция ВосстановитьРазвернутость(Развернутости)
	
	Дерево = Элементы.КонтролирующиеОрганы;
	СтрокиДерева = КонтролирующиеОрганы.ПолучитьЭлементы();
	Для Каждого ТекущаяСтрока Из СтрокиДерева Цикл
		
		Развернут = Развернутости.Получить(ТекущаяСтрока.Представление);
		Если Развернут = Неопределено Тогда
			Продолжить;
		КонецЕсли;
		
		ИД = ТекущаяСтрока.ПолучитьИдентификатор();
		
		Если Развернут Тогда
			Дерево.Развернуть(ИД);
		Иначе
			Дерево.Свернуть(ИД);
		КонецЕсли;
			
	КонецЦикла;
	
	Возврат Развернутости;
	
КонецФункции

&НаКлиенте
Процедура РазвернутьДерево()
	
	СтрокиДерева = КонтролирующиеОрганы.ПолучитьЭлементы();
	Для Каждого ТекущаяСтрока Из СтрокиДерева Цикл
		
		Элементы.КонтролирующиеОрганы.Развернуть(
			ТекущаяСтрока.ПолучитьИдентификатор());
			
	КонецЦикла;
	
КонецПроцедуры


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

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