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

файл
#Область ОписаниеПеременных

&НаКлиенте 
Перем КонтекстЭДОКлиент Экспорт;


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

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

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

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	ОписаниеОповещения = Новый ОписаниеОповещения("ПриОткрытии_ПослеПолученияКонтекста", ЭтотОбъект);
	ДокументооборотСКОКлиент.ПолучитьКонтекстЭДО(ОписаниеОповещения);
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
	
	Если ЗапретитьИзменение Тогда
		Возврат;
	КонецЕсли;
	
	ЭтоЗаписьФизЛица = 
		СтрНайти(ИмяСобытия, "Запись_ФизическиеЛица") 
		И (Источник = ФизическоеЛицо ИЛИ Параметр = ФизическоеЛицо);
	
	Если ЭтоЗаписьФизЛица Тогда
		МультирежимКлиент.ОбновитьСНИЛСФизЛица(ЭтотОбъект, ФизическоеЛицо);
	КонецЕсли;
	
	ЭтоЗаписьПользователя = 
		СтрНайти(ИмяСобытия, "Запись_Пользователи") 
		И Источник = Пользователь;
		
	Если ЭтоЗаписьПользователя Тогда
		ОбновитьДанныеПользователя();
	КонецЕсли;
		
КонецПроцедуры

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

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

&НаКлиенте
Процедура ВывестиОшибку(Элемент)
	
	ПоказатьПредупреждение(, Элемент.Подсказка);
	
КонецПроцедуры

&НаКлиенте
Процедура ПолучатьУведомленияПриИзменении(Элемент)
	
	ОбработкаЗаявленийАбонентаКлиентСервер.УстановитьМодифицированность(ЭтотОбъект);
	ТекущаяСтрока = ТекущаяСтрока(ЭтотОбъект);
	ТекущаяСтрока.ПолучатьУведомленияОбИзмененииПрав = ПолучатьУведомленияОбИзмененииПрав;
	
	Если НЕ ПолучатьУведомленияОбИзмененииПрав Тогда
		ТекущаяСтрока.ЭлектроннаяПочта = "";
	КонецЕсли;
	
	УправлениеФормой();
	
КонецПроцедуры

&НаКлиенте
Процедура ЭлектроннаяПочтаОчистка(Элемент, СтандартнаяОбработка)
	
	ПриИзмененииЭлектроннойПочты();
	
КонецПроцедуры

&НаКлиенте
Процедура ЭлектроннаяПочтаПриИзменении(Элемент)
	
	ПриИзмененииЭлектроннойПочты();
	
КонецПроцедуры

&НаКлиенте
Процедура ФизическоеЛицоПриИзменении(Элемент)
	Модифицированность = Истина;
	ФизическоеЛицоПриИзмененииНаСервере();
КонецПроцедуры

&НаКлиенте
Процедура ПредставлениеОргановНажатие(Элемент)
	
	ОписаниеОповещения = Новый ОписаниеОповещения(
		"ПредставлениеОргановНажатие_Завершение", 
		ЭтотОбъект);
		
	ОбработкаЗаявленийАбонентаКлиент.УказатьНаправленияВЗаявлении(ЭтотОбъект, ОписаниеОповещения);

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

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

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура Сохранить(Команда)

	УправлениеФормой();
	
	Если НЕ ДанныеУказаныКорректно() Тогда
		Возврат;
	КонецЕсли;
	
	ДополнительныеПараметры = ПараметрыСохранения();
	
	Модифицированность = Ложь;
	
	Закрыть(ДополнительныеПараметры);
	
КонецПроцедуры

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

#Область СлужебныеПроцедурыИФункции

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

&НаСервере
Функция ДанныеУказаныКорректно()
	
	ДанныеКорректны = Истина;
	
	Мультирежим.ПроверитьПользователя(
		ЭтотОбъект,
		ФизическоеЛицо, 
		Ложь,
		ДанныеКорректны);
		
	Возврат ДанныеКорректны;
	
КонецФункции

&НаСервере
Функция ПараметрыФормыНаправленийСервер() Экспорт
	
	ТекущаяСтрока = ТекущаяСтрока(ЭтотОбъект);
	Результат = Мультирежим.ПараметрыФормыНаправленийПользователя(ЭтотОбъект, ТекущаяСтрока);
	
	Возврат Результат;
	
КонецФункции

&НаСервере
Функция ПараметрыСохранения()
	
	ДополнительныеПараметры = Новый Структура();
	
	Адрес = Мультирежим.АдресТаблицы(ЭтотОбъект, "ТаблицаПользователей");
	ДополнительныеПараметры.Вставить("АдресТаблицы", Адрес);
	
	ДополнительныеПараметры.Вставить("ВсеГосОрганыУчетнойЗаписи", ВсеГосОрганыУчетнойЗаписи);
	ДополнительныеПараметры.Вставить("Модифицированность", 	Модифицированность);
	ДополнительныеПараметры.Вставить("ЭтоВызовИзГлавногоОкна", 	ЭтоВызовИзГлавногоОкна);
	ДополнительныеПараметры.Вставить("ВладелецЭЦПРасширилСебеПрава", ВладелецЭЦПРасширилСебеПрава);
	
	Возврат ДополнительныеПараметры;
	
КонецФункции

&НаКлиентеНаСервереБезКонтекста
Функция ТекущаяСтрока(Форма)

	Возврат МультирежимКлиентСервер.СтрокаТаблицыПользователей(
		Форма, 
		Форма.Пользователь, 
		Истина);
	
КонецФункции

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

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

&НаКлиенте
Процедура ПриОткрытии_ПослеПолученияКонтекста(Результат, ДополнительныеПараметры) Экспорт
	
	КонтекстЭДОКлиент = Результат.КонтекстЭДО;
	
КонецПроцедуры

&НаКлиенте
Процедура ПредставлениеОргановНажатие_Завершение(Результат, ВходящийКонтекст) Экспорт

	ОбработатьВыбранныеНаправленияСервер(Результат);
	
КонецПроцедуры

&НаСервере
Процедура ОбработатьВыбранныеНаправленияСервер(Результат) Экспорт

	Если Результат = Неопределено ИЛИ НЕ Результат.Модифицированность Тогда
		Возврат;
	КонецЕсли;
	
	ОбработкаЗаявленийАбонентаКлиентСервер.УстановитьМодифицированность(ЭтотОбъект);
	
	ТаблицаИзАдреса(Результат.АдресТаблицы, "ТаблицаПользователей");
	ВсеГосОрганыУчетнойЗаписи = Результат.ВсеГосОрганыУчетнойЗаписи;
	
	УправлениеФормой();
	
КонецПроцедуры

&НаКлиенте
Процедура РольПриИзменении(Элемент)
	
	Если ВладелецХочетРасширитьСебеПрава() Тогда
		
		ОписаниеОповещения = Новый ОписаниеОповещения(
			"РольПриИзменении_ПослеПодтверждения", 
			ЭтотОбъект);

		МультирежимКлиент.ПоказатьПредупреждениеОбратитесьКАдминистратору(
			ЭтотОбъект,
			НСтр("ru = 'Для изменения роли'"),
			ОписаниеОповещения);
			
	Иначе
		
		ОбработкаЗаявленийАбонентаКлиентСервер.УстановитьМодифицированность(ЭтотОбъект);
	
		ТекущаяСтрока = ТекущаяСтрока(ЭтотОбъект);
		ТекущаяСтрока.ЭтоАдмин = ЭтоАдмин;

	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Функция ВладелецХочетРасширитьСебеПрава()

	ЭтоЛичныеНастройки = ТекущийПользователь = Пользователь;
	СделалСебяАдмином  = 
		НЕ ВладелецЭЦПЭтоАдмин 
		И ЭтоАдмин
		И НЕ МультирежимКлиентСервер.БылАдминомСталПользователем(ЭтотОбъект, ФизическоеЛицо)
		И НЕ МультирежимКлиентСервер.ЭтоПодключениеМультирежима(ЭтотОбъект);
	
	Возврат 
		ЭтоЛичныеНастройки 
		И НЕ ВладелецЭЦПРасширилСебеПрава 
		И СделалСебяАдмином;

КонецФункции

&НаКлиенте
Процедура РольПриИзменении_ПослеПодтверждения(РасширитьПрава, ВходящийКонтекст = Неопределено) Экспорт
	
	Если РасширитьПрава = Истина Тогда
		// Все нужно уже сделано в МультирежимКлиент.ПоказатьПредупреждениеОбратитесьКАдминистратору_Завершение
		ОбработкаЗаявленийАбонентаКлиентСервер.УстановитьМодифицированность(ЭтотОбъект);
	Иначе
		ЭтоАдмин = 0;
		Возврат;
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Функция ПоказыватьПолныйИнтерфейс()
	
	ЭтоПолныйИнтерфейс = МультирежимКлиентСервер.ПоказыватьПолныйИнтерфейсПравПользователя(
		ЭтотОбъект,
		ЭтоВызовИзГлавногоОкна);
		
	Возврат ЭтоПолныйИнтерфейс;
	
КонецФункции

&НаСервере
Процедура УправлениеФормой()
	
	ЭтоПолныйИнтерфейс = ПоказыватьПолныйИнтерфейс();
	
	Элементы.ГруппаУведомления.Видимость = 
		МультирежимКлиентСервер.ПоказыватьПочтуДляПриглашений(
			ЭтотОбъект, 
			ЭтотОбъект, 
			ЭтоВызовИзГлавногоОкна);
	
	Элементы.ГруппаДоступКГосОрганам.Видимость = ЭтоПолныйИнтерфейс;
	Элементы.ГруппаФизЛица.Видимость = ЭтоПолныйИнтерфейс;
	Элементы.ВертикальныйОтступ1.Видимость = ЭтоПолныйИнтерфейс;
	Элементы.ГруппаРоль.ОтображатьЗаголовок = ЭтоПолныйИнтерфейс;

	ТекущаяСтрока = ТекущаяСтрока(ЭтотОбъект);
	
	Если ЗапретитьИзменение Тогда
		Элементы.ПредставлениеОрганов.Заголовок = МультирежимКлиентСервер.ГосОрганыДляСравнения(ТекущаяСтрока);
		
		Элементы.ПроверкаФизЛица.Видимость = Ложь;
		Элементы.ПроверкаУведомлений.Видимость = Ложь;
		Элементы.ПроверкаНаправление.Видимость = Ложь;
	Иначе
		Результат = Мультирежим.ОформлениеНаправленийПользователя(ЭтотОбъект, ТекущаяСтрока);
		Элементы.ПредставлениеОрганов.Заголовок  = Результат.Заголовок;
		Элементы.ПредставлениеОрганов.ЦветТекста = Результат.ЦветТекста;
	КонецЕсли;
	
	Шаблон = НСтр("ru = 'Права доступа (%1)'");
	Заголовок = СтрШаблон(Шаблон, Строка(Пользователь));
	
	Если ЭтоПолныйИнтерфейс И НЕ ЗапретитьИзменение Тогда
		ВывестиРезультатПроверки();
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура УправлениеФормойПриЗапретеИзменения()

	Элементы.ГруппаФизЛица.ТолькоПросмотр = ЗапретитьИзменение;
	Элементы.ГруппаРоль.ТолькоПросмотр = ЗапретитьИзменение;
	Элементы.ГруппаУведомления.ТолькоПросмотр = ЗапретитьИзменение;
	
	КоманднаяПанель.Видимость = НЕ ЗапретитьИзменение;
	
КонецПроцедуры

&НаСервере
Процедура ВывестиРезультатПроверки()

	ТекущаяСтрока = ТекущаяСтрока(ЭтотОбъект);
	
	// Направления
	НаправленияКорректны = Истина;
	РезультатПроверкиНаправлений = Мультирежим.ПроверитьНаправленияПользователя(
		ЭтотОбъект, 
		ТекущаяСтрока, 
		НаправленияКорректны, 
		Ложь);
	
	Элементы.ПроверкаНаправление.Видимость = НЕ НаправленияКорректны;
	Элементы.ПроверкаНаправление.Подсказка = ОбработкаЗаявленийАбонентаКлиентСервер.ТекстОшибкиРезультатаПроверки(РезультатПроверкиНаправлений);
	
	// Почта
	ПочтаКорректна = Истина;
	Если ПолучатьУведомленияОбИзмененииПрав И Элементы.ГруппаУведомления.Видимость Тогда
		
		РезультатПроверкиПочты = Мультирежим.ПроверитьЭлектроннуюПочту(
			ЭлектроннаяПочта, 
			Неопределено, 
			ПочтаКорректна, 
			Ложь);
			
		Элементы.ПроверкаУведомлений.Подсказка = ОбработкаЗаявленийАбонентаКлиентСервер.ТекстОшибкиРезультатаПроверки(РезультатПроверкиПочты);
	
	КонецЕсли;
	
	Элементы.ПроверкаУведомлений.Видимость = НЕ ПочтаКорректна;
	
	// ФизическоеЛицо
	ФизЛицоКорректно = Истина;
	РезультатПроверки = ОбработкаЗаявленийАбонентаКлиентСервер.ПроверитьФизЛицо(ЭтотОбъект, ЭтотОбъект, ФизЛицоКорректно, Ложь);
	
	Элементы.ПроверкаФизЛица.Видимость = НЕ ФизЛицоКорректно;
	Элементы.ПроверкаФизЛица.Подсказка = ОбработкаЗаявленийАбонентаКлиентСервер.ТекстОшибкиРезультатаПроверки(РезультатПроверки);
		
КонецПроцедуры

&НаКлиенте
Процедура ПриИзмененииЭлектроннойПочты()
	
	ОбработкаЗаявленийАбонентаКлиентСервер.УстановитьМодифицированность(ЭтотОбъект);
	ТекущаяСтрока = ТекущаяСтрока(ЭтотОбъект);
	ТекущаяСтрока.ЭлектроннаяПочта = ЭлектроннаяПочта;
	
	УправлениеФормой();
	
КонецПроцедуры

&НаСервере
Процедура ФизическоеЛицоПриИзмененииНаСервере()
	
	Строка = ТекущаяСтрока(ЭтотОбъект);
	Строка.ФизическоеЛицо = ФизическоеЛицо;
	
	Мультирежим.ЗаполнитьДанныеПользователяИзБазы(ЭтотОбъект, Строка);
	
	ЗаполнитьЗначенияСвойств(ЭтотОбъект, Строка);
	
	УправлениеФормой();
	
КонецПроцедуры

&НаСервере
Функция ПараметрыПредупрежденияОбратитесьКАдминистратору() Экспорт
	
	Возврат Мультирежим.ПараметрыПредупрежденияОбратитесьКАдминистратору(ЭтотОбъект);
	
КонецФункции

&НаСервере
Процедура ТаблицаИзАдреса(Адрес, Имя) Экспорт
	
	Мультирежим.ТаблицаИзАдреса(ЭтотОбъект, Адрес, Имя);
	
КонецПроцедуры

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

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