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