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