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