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

файл

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

&НаКлиенте
Перем ПрисоединенныйФайлЗаявления;

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

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

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

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

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

&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура УдаленноПриИзменении(Элемент)
	
	УЦ = ПредопределенноеЗначение("Перечисление.УдостоверяющиеЦентрыБРО.УЦАналитическийЦентр");
	УправлениеФормой();
	
КонецПроцедуры

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

&НаКлиенте
Процедура ИнструкцияСканаПодтверждениеПравОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
	
	СохранитьЗаявление(Истина);

	СтандартнаяОбработка = Ложь;
	КонтекстЭДОКлиент.НапечататьПодтверждениеПраваАдмин(ДокументЗаявление.Ссылка);
	
КонецПроцедуры

&НаКлиенте
Процедура ОчиститьНажатие(Элемент)
	
	ДругойСотрудник = Неопределено;
	НовыйТипВладельца = ПредопределенноеЗначение("Перечисление.ТипыВладельцевЭЦП.ДругойСотрудник");
	УстановитьНовогоВладельцаЭЦП(НовыйТипВладельца); // Асинхронно
	
КонецПроцедуры

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

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

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

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

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

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

&НаКлиенте
Процедура ПодсказкаИзменитьНастройкиУведомленийНажатие(Элемент)
	
	ПоказатьИзменившиесяРеквизиты(
		ИзмененныеРеквизитыУведомлений(), 
		НСтр("ru = 'Изменившиеся настройки уведомлений'"));
	
КонецПроцедуры
	
&НаКлиенте
Процедура КартинкаРеквизитыОрганизацииНажатие(Элемент)
	
	ПоказатьИзменившиесяРеквизиты(
		ИзмененныеРеквизитыОрганизации(), 
		НСтр("ru = 'Изменившиеся реквизиты организации'"));
	
КонецПроцедуры

&НаКлиенте
Процедура ПодсказкаВыбораМестаХраненияНажатие(Элемент)
	
	ПоказатьИзменившиесяРеквизиты(
		ИзмененныеНастройкиХраненияКлюча(), 
		НСтр("ru = 'Изменившиеся настройки хранения ключа'"));

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

&НаКлиенте
Процедура ПодсказкаИзменитьНаправленияНажатие(Элемент)
	
	ПоказатьИзменившиесяРеквизиты(
		ИзмененныеНаправления(), 
		НСтр("ru = 'Изменения в составе гос. органов'"));
		
КонецПроцедуры

&НаКлиенте
Процедура ПодсказкаИзменитьРеквизитыСертификатаНажатие(Элемент)
	
	Реквизиты = ИзмененныеРеквизитыСертификата();
	
	ПоказатьИзменившиесяРеквизиты(
		Реквизиты, 
		НСтр("ru = 'Изменившиеся реквизиты сертификата'"));

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

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

&НаКлиенте
Процедура ВБумажномВидеПриИзменении(Элемент)

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

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

&НаКлиенте
Процедура ВыбратьВсеОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
	
	КонтекстЭДОКлиент.ВыбратьВсеОбработкаНавигационнойСсылки(ЭтотОбъект, СтандартнаяОбработка);
	
КонецПроцедуры

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

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

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

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

&НаКлиенте
Процедура ПоказатьФормуВыбораМестаХраненияНажатие(Элемент)

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

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

&НаКлиенте
Процедура ИзменитьРеквизитыПодключенияК1СОтчетностиПриИзменении(Элемент)
	
	ИзмененныеРеквизиты = ИзмененныеРеквизитыОрганизации();
	
	ЕстьИзменения = ИзмененныеРеквизиты.Количество() > 0;

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

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

&НаКлиенте
Процедура ДекорацияВладелецЭЦПНажатие(Элемент)
	
	ОткрытьФормуВыбораВладельцаЭЦП();

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

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

&НаКлиенте
Процедура ОрганизацияПриИзменении_ПриОтказеОтПервичного(Результат, ВходящийКонтекст) Экспорт
	
	Организация = Неопределено;
	УправлениеФормой();
	
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура ИзменитьВладельцаСертификатаПриИзменении(Элемент)

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

&НаКлиенте
Процедура ИзменитьСоставКонтролирующихОргановПриИзменении(Элемент)
	
	ОбработкаЗаявленийАбонентаКлиентСервер.УстановитьМодифицированность(ЭтотОбъект);
	// Чтобы серверный вызов были за один раз
	ИзменитьСоставКонтролирующихОргановПриИзмененииНаСервере();
	
КонецПроцедуры
	
&НаКлиенте
Процедура ПоказатьФормуВыбораМестаХраненияОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	Если НавигационнаяСсылкаФорматированнойСтроки = "ВыборМестаХранения" Тогда
		ПоказатьФормуВыбораМестаХраненияНажатие(Элемент);
		
	ИначеЕсли НавигационнаяСсылкаФорматированнойСтроки = "НастройкиОблачнойПодписи" Тогда
		ОткрытьНастрокиDSS();
		
	ИначеЕсли НавигационнаяСсылкаФорматированнойСтроки = "Описание" Тогда
		ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку("https://help.astral.ru/v/147062851");
		
	КонецЕсли;
	
КонецПроцедуры

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

&НаКлиенте
Процедура ПроверкаУЦОбработкаНавигационнойСсылки(Элемент, Ссылка, СтандартнаяОбработка)
	ОбработкаЗаявленийАбонентаКлиент.ПроверкаУЦОбработкаНавигационнойСсылки(ЭтотОбъект, Ссылка, СтандартнаяОбработка);
КонецПроцедуры

&НаКлиенте
Процедура УЦПриИзменении(Элемент)
	
	ОбработкаЗаявленийАбонентаКлиент.УЦПриИзменении(ЭтотОбъект);
	
КонецПроцедуры

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

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

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

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

&НаКлиенте
Процедура ПоказатьФормуВыбораМестаХраненияРасширеннаяПодсказкаОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	Если НавигационнаяСсылкаФорматированнойСтроки = "Описание" Тогда
		ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку("https://help.astral.ru/v/147062851");
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ТребуетсяПомощьНажатие(Элемент)
	
	ФИО = СокрЛП(ВладелецЭЦПИмя + " " + ВладелецЭЦПОтчество);
	
	ОбработкаЗаявленийАбонентаКлиент.ОткрытьФормуПомощи(
		ЭтотОбъект, 
		ФИО, 
		ТелефонМобильный, 
		"https://its.1c.ru/db/elreps#content:52:hdoc");
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура ТаблицаДанныхЗаявленияНаПодключениеВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	
	Если Элемент.ТекущиеДанные = Неопределено ИЛИ НЕ Элемент.ТекущиеДанные.РеквизитРедактируется Тогда
		Возврат;
	КонецЕсли;
	
	ТекущийРеквизит 		= Элемент.ТекущиеДанные.ИзмененныйРеквизит;
	НаименованиеРеквизита 	= Строка(ТекущийРеквизит);
	
	// Если это реквизит, который отсутствует у организации, то он должен редактироваться напрямую в таблице.
	Если Элемент.ТекущиеДанные.ЭтоРеквизитНеХранящийсяВБазе Тогда
		
		Маска = Неопределено;
		Если ТекущийРеквизит = ПредопределенноеЗначение("Перечисление.ПараметрыПодключенияК1СОтчетности.ВладелецЭЦПСНИЛС") Тогда
			Маска = "999-999-999 99";
		ИначеЕсли ТекущийРеквизит = ПредопределенноеЗначение("Перечисление.ПараметрыПодключенияК1СОтчетности.ВладелецЭЦПКодПодразделения") Тогда
			Маска = "999-999";
		КонецЕсли; 
		
		ИмяРеквизита = ИмяПеречисленияПараметрыПодключенияК1СОтчетности(ТекущийРеквизит);
		ЗадатьНовоеЗначениеРеквизиту(ИмяРеквизита, НаименованиеРеквизита, ЭтаФорма[ИмяРеквизита], Маска);
		
	ИначеЕсли Элемент.ТекущиеДанные.СодержитОшибку Тогда // Это реквизит Владельца ЭП
		
		Если ЗначениеЗаполнено(Элемент.ТекущиеДанные.ВладелецРеквизита) Тогда
			Если Элемент.ТекущиеДанные.ИзмененныйРеквизит = ПредопределенноеЗначение("Перечисление.ПараметрыПодключенияК1СОтчетности.ВладелецЭЦПДолжность") Тогда
				
				ОписаниеОповещения = Новый ОписаниеОповещения(
					"ТаблицаДанныхЗаявленияНаПодключениеВыбор_ПослеЗаполненияДолжности", 
					ЭтотОбъект);
					
				ЭлектронныйДокументооборотСКонтролирующимиОрганамиКлиентПереопределяемый.ОткрытьФормуРедактированияДолжности(Организация, ВладелецЭЦП, ОписаниеОповещения);
					
			Иначе
				ПоказатьЗначение(, Элемент.ТекущиеДанные.ВладелецРеквизита);
			КонецЕсли;
		Иначе
			ТекстСообщения = НСтр("ru = 'Не удалось определить сотрудника-владельца сертификата.
                                   |Укажите сотрудника-владельца сертификата на первом шаге помощника'");
			ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения);
		КонецЕсли;
		
	КонецЕсли;
		
КонецПроцедуры

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

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

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

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

&НаКлиенте
Процедура ОткрытьСписокПартнеров1С(Команда)
	ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку("http://www.1c.ru/rus/partners/onecrep.jsp");
КонецПроцедуры

&НаКлиенте
Процедура ОткрытьСсылкуНаСтатьюПоПодключению(Команда)
	
	ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку("http://its.1c.ru/bmk/elreps/settings");
	
КонецПроцедуры

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

&НаКлиенте
Процедура НапечататьЗаявление(Команда = Неопределено)
	
	СохранитьЗаявлениеКлиент();
	КонтекстЭДОКлиент.НапечататьЗаявлениеПо1СОтчетности(ДокументЗаявление.Ссылка);
	
КонецПроцедуры

&НаКлиенте
Процедура ЗакрытьМастер(Команда)
	Закрыть();
КонецПроцедуры

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

&НаКлиенте
Процедура КоманднаяПанельМастерНазад(Команда)
	ПоказатьПредыдущуюСтраницу();
КонецПроцедуры

&НаКлиенте
Процедура ВыбратьДиректора(Команда)
	
	НовыйТипВладельца = ПредопределенноеЗначение("Перечисление.ТипыВладельцевЭЦП.Руководитель");
	УстановитьНовогоВладельцаЭЦП(НовыйТипВладельца); // Асинхронно
	
КонецПроцедуры

&НаКлиенте
Процедура ВыбратьГлБухгалтера(Команда)
	
	НовыйТипВладельца = ПредопределенноеЗначение("Перечисление.ТипыВладельцевЭЦП.ГлавныйБухгалтер");
	УстановитьНовогоВладельцаЭЦП(НовыйТипВладельца); // Асинхронно
	
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура СкрытьИнформациюКриптопровайдера(Команда)
	
	ИзменитьОформлениеПанелиРекламыDSS(Ложь);
	
КонецПроцедуры

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

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

#Область Проверки

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

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

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

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

		Иначе
			
			ВыполнитьОбработкуОповещения(ВыполняемоеОповещение, ПоддерживаетсяВторичноеЗаявление);

		КонецЕсли;
	Иначе
		
		ВыполнитьОбработкуОповещения(ВыполняемоеОповещение, ПоддерживаетсяВторичноеЗаявление);
		
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Процедура ЗапомнитьПризнакУстановкиКомпоненты(Форма, Подключена)
	
	Форма.КомпонентаДляРаботыСКриптографиейПодключена = Подключена;
	Форма.КомпонентаУстановлена = Подключена;
	
КонецПроцедуры	

&НаСервере
Процедура Проверить1СЭДОПоНовойСхеме(МастерДалее)
	
	Если ПодключитьЭДО И Элементы.ГруппаПодключитьЭДО.Видимость Тогда
		
		НастройкиКорректны = Неопределено;
		ЭлектронныйДокументооборотСКонтролирующимиОрганамиПереопределяемый.ПроверитьНастройкиРегистрацииЭДО(НастройкиДляЭДО, НастройкиКорректны);

		Если НЕ НастройкиКорректны Тогда
			
			ОбщегоНазначения.СообщитьПользователю(НСтр("ru = 'Уточните настройки подключения 1С-ЭДО'"), ,"ПодключитьЭДО");
			МастерДалее = Ложь;
			
		КонецЕсли;
		
	КонецЕсли;

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

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

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

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

	Если НЕ ПодтверждениеКонтактовВыполнено() Тогда
		
		Сообщение = НСтр("ru = 'Подтвердите контактные данные.'");
		ОбщегоНазначенияКлиент.СообщитьПользователю(Сообщение,,"НомерТелефонаПриПереходеВОблако");
		МастерДалее = Ложь;
		
	КонецЕсли;
	
	Возврат МастерДалее;
		
КонецФункции

&НаКлиенте
Процедура ПроверитьКриптопровайдерИМестоХраненияКлючей_ПослеВопроса(Ответ, ВходящийКонтекст) Экспорт
	
	Если Ответ = КодВозвратаДиалога.Да Тогда
		ПроверитьКриптопровайдер_УстановитьКомпонентуИОпределитьКриптопровайдер(ВходящийКонтекст.ВыполняемоеОповещение);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПроверитьКриптопровайдерИМестоХраненияКлючей_Завершение(Результат, ВходящийКонтекст) Экспорт
	
	ВыбранCryptoPro = ВыбранноеМестоХраненияКлюча = ПредопределенноеЗначение("Перечисление.ТипыКриптоПровайдеров.CryptoPro");
	ВыбранVipNet    = ВыбранноеМестоХраненияКлюча = ПредопределенноеЗначение("Перечисление.ТипыКриптоПровайдеров.VipNet");
	
	НеУстановленНиОдинКриптопровайдер = НЕ CryptoProCSPУстановлен И НЕ ViPNetCSPУстановлен;
	
	УстановленыОбаКриптопровайдера = 
		(ВыбранCryptoPro ИЛИ ВыбранVipNet) 
		И CryptoProCSPУстановлен 
		И ViPNetCSPУстановлен 
		И НЕ ИгнорироватьКонфликт;
		
	ВыбранНеустановленныйКриптопровайдер = 
		(ВыбранCryptoPro И НЕ CryptoProCSPУстановлен 
		ИЛИ ВыбранVipNet И НЕ ViPNetCSPУстановлен) 
		И НЕ ИспользоватьСуществующий(ЭтотОбъект);
	
	МастерДалее = Истина;
	
	Если НЕ КомпонентаУстановлена Тогда 
		
		ОписаниеОповещения = Новый ОписаниеОповещения(
			"ПроверитьКриптопровайдерИМестоХраненияКлючей_ПослеВопроса", 
			ЭтотОбъект, 
			ВходящийКонтекст);
			
		ПоказатьВопрос(ОписаниеОповещения, НСтр("ru = 'Не удалось установить компоненту криптографии. Повторить попытку?'"),РежимДиалогаВопрос.ДаНетОтмена);
		
	ИначеЕсли НеУстановленНиОдинКриптопровайдер Тогда
		
		// Ни одного криптопровайдера
		ОткрытьФорму(КонтекстЭДОКлиент.ПутьКОбъекту + ".Форма.Мастер_ОтсуствиеКриптопровайдеров",,,,,,,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
		
		МастерДалее = Ложь;
		
	ИначеЕсли УстановленыОбаКриптопровайдера Тогда
		
		// Два криптопровайдера
		
		ОписаниеОповещения = Новый ОписаниеОповещения(
			"ПослеПоказаПредупрежденияОКонфликте", 
			ЭтотОбъект);
			
		ДополнительныеПараметры = Новый Структура();
		ДополнительныеПараметры.Вставить("КриптопровайдерПриКонфликте", ВыбранноеМестоХраненияКлюча);
		ДополнительныеПараметры.Вставить("ЭтоЗаявлениеНаИзменение", 	Истина);
			
		ОткрытьФорму(КонтекстЭДОКлиент.ПутьКОбъекту + ".Форма.Мастер_КонфликтКриптопровайдеров",
			ДополнительныеПараметры,
			,
			,
			,
			,
			ОписаниеОповещения,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
		
		МастерДалее = Ложь;
	
	ИначеЕсли ВыбранНеустановленныйКриптопровайдер Тогда
		
		ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Выбранный криптопровайдер не установлен на рабочий компьютер'"), ,"ВыбранноеМестоХраненияКлюча");
		МастерДалее = Ложь;
		
	КонецЕсли;
	
	Если МастерДалее Тогда
		МастерДалее = ПроверитьТелефонИМестоХранения();
	КонецЕсли;
	
	ВыполнитьОбработкуОповещения(ВходящийКонтекст.ВыполняемоеОповещение, МастерДалее); 

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

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

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

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

&НаКлиенте
Процедура ПроверитьРеквизитыЗаявленияНаКлиенте(МастерДалее)
	
	ПроверитьРеквизитыПриПереизданииСертификата(МастерДалее);
	ПроверитьЧтоВыбраноХотяБыОдноДействие(МастерДалее);
	
КонецПроцедуры

&НаСервере
Процедура ПроверитьРеквизитыЗаявленияНаСервере(МастерДалее)
	
	ПроверитьНаправления(МастерДалее);
	ПроверитьТаблицуДанныхЗаявления(МастерДалее);
	ПроверитьСертификат(МастерДалее);
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура ПроверитьЧтоВыбраноХотяБыОдноДействие(МастерДалее)
	
	// Проверяем, что пользователь отправляет не пустое заявление
	ПараметрыОтбора = Новый Структура;
	ПараметрыОтбора.Вставить("ЭтотПараметрИзменился", Истина);
	ПараметрыОтбора.Вставить("ВыделятьСтрокуЖелтым", Истина);
	
	Если ТаблицаДанныхЗаявленияНаПодключение.НайтиСтроки(ПараметрыОтбора).Количество() = 0 Тогда
		
		ТекстОшибки = НСтр("ru = 'Не изменено ни одной настройки подключения к 1С-Отчетности'"); 
		Поле 		= "ТаблицаДанныхЗаявленияНаПодключение[0].ЗначениеРеквизита";
		ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстОшибки, , Поле);
		
		МастерДалее = Ложь;
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПроверитьРеквизитыПриПереизданииСертификата(МастерДалее)
	
	// юридический адрес
	ПроверитьАдресОрганизацииЗаявленияНаСервере(МастерДалее);
	
КонецПроцедуры

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

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

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

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

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

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

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

	Если ТипЗнч(Результат) = Тип("Структура")
		И Результат.Свойство("ИгнорироватьКонфликт")
		И Результат.ИгнорироватьКонфликт Тогда
		
		ИгнорироватьКонфликт = Истина;
		ОтправитьВБумажномВиде();
		
	КонецЕсли;

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

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

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

#Область ПроверкаПереходногоПериода

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

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

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

&НаКлиенте
Процедура ОсуществитьОбменПоОрганизацииЗавершение(Результат, ДополнительныеПараметры) Экспорт
	
	ДлительнаяОтправкаКлиент.ОповеститьОЗавершенииОбмена();
	ПриНажатииДалееНаОсновнойСтранице(Истина);
	
КонецПроцедуры

#КонецОбласти
 
#Область ПроверитьНаличиеИзменений

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

&НаСервере
Функция ИзмененныеРеквизитыСертификата(УчитыватьФлаг = Ложь)
	
	Если ИзменилисьНастрокиDSS() Тогда
		Возврат Новый Массив;
	КонецЕсли;
	
	ВсеИзмененныеРеквизиты = Новый Массив;
	
	// Реквизиты организации
	ИзмененныеРеквизиты = ИзмененныеРеквизитыОрганизации(УчитыватьФлаг);
	ДополнитьРеквизитамиВлияющимиНаСертификат(ВсеИзмененныеРеквизиты, ИзмененныеРеквизиты);
		
	// Реквизиты владельца
	ИзмененныеРеквизиты = ИзмененныеРеквизитыВладельца(УчитыватьФлаг);
	ДополнитьРеквизитамиВлияющимиНаСертификат(ВсеИзмененныеРеквизиты, ИзмененныеРеквизиты);
	
	// Уведомления	
	ИзмененныеРеквизиты = ИзмененныеРеквизитыУведомлений(УчитыватьФлаг);
	ДополнитьРеквизитамиВлияющимиНаСертификат(ВсеИзмененныеРеквизиты, ИзмененныеРеквизиты);	
	
	// Криптография
	ИзмененныеРеквизиты = ИзмененныеНастройкиХраненияКлюча(УчитыватьФлаг);
	ДополнитьРеквизитамиВлияющимиНаСертификат(ВсеИзмененныеРеквизиты, ИзмененныеРеквизиты);
	
	// Сведения сертификата
	ИзмененныеРеквизиты = ИзмененныеРеквизитыСамогоСертификата(УчитыватьФлаг);
	ДополнитьРеквизитамиВлияющимиНаСертификат(ВсеИзмененныеРеквизиты, ИзмененныеРеквизиты);
	
	Возврат ВсеИзмененныеРеквизиты;
		
КонецФункции

&НаСервере
Функция ИзмененныеРеквизитыСамогоСертификата(УчитыватьФлаг = Ложь)
	
	Если ИзменилисьНастрокиDSS() Тогда
		Возврат Новый Массив;
	КонецЕсли;
	
	УчитыватьРеквизитСертификата = ПереиздатьСертификат И УчитыватьФлаг ИЛИ НЕ УчитыватьФлаг; 
	
	ИзмененныеРеквизиты = Новый Массив;
	
	Изменился = УчитыватьРеквизитСертификата И СертификатДоступен И СертификатПросрочен(ЭтотОбъект);
		
	ДополнитьИзменившиесяРеквизиты(
		НСтр("ru = 'Срок действия'"), 
		Изменился,
		ИзмененныеРеквизиты,
		"",
		НачалоДня(СертификатДействителенПо),
		Рекомендовано);
		
	ДополнитьИзменившиесяРеквизиты(
		НСтр("ru = 'Доступность сертификата'"), 
		НЕ СертификатДоступен,
		ИзмененныеРеквизиты,
		НСтр("ru = 'Доступен'"),
		НСтр("ru = 'Недоступен'"),
		Обязательно);
		
	ЭтоРуководитель = ОбработкаЗаявленийАбонентаКлиентСервер.ЭтоРуководитель(ЭтотОбъект);
	ЭтоСертификатСотрудника = 
		НЕ ЭтоРуководитель 
		И СертификатДоступен 
		И ОбработкаЗаявленийАбонентаКлиентСервер.ЭтоСертификатСотрудника(СвойстваСертификата.Владелец);
	
	Если ЭтоСертификатСотрудника Тогда
		
		ДополнитьИзменившиесяРеквизиты(
			НСтр("ru = 'Срок действия'"),
			ЭтоСертификатСотрудника,
			ИзмененныеРеквизиты,
			"",
			НСтр("ru = 'Запрещено использовать с 01.09.2024 (ФЗ № 476-ФЗ от 27.12.2019)'"),
			Обязательно);
			
	КонецЕсли;
	
	Возврат ИзмененныеРеквизиты;
		
КонецФункции

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Функция СпособПодтвержденияКриптооперацийИзменился(Форма)
	
	Возврат ЭтоОблако(Форма) И Форма.СпособПодтвержденияКриптооперацийИсходный <> Форма.СпособПодтвержденияКриптоопераций;
	
КонецФункции

&НаСервере
Функция ИзмененныеРеквизитыВладельца(
		УчитыватьФлаг_ВладелецСертификата = Ложь,
		УчитыватьФлаг_Сертификат = Ложь)
		
	Если ИзменилисьНастрокиDSS() Тогда
		Возврат Новый Массив;
	КонецЕсли;
	
	УчитыватьРеквизитВладельца = 
		ИзменитьВладельцаСертификата И УчитыватьФлаг_ВладелецСертификата 
		ИЛИ НЕ УчитыватьФлаг_ВладелецСертификата;
		
	УчитыватьРеквизитСертификата = 
		ПереиздатьСертификат И УчитыватьФлаг_Сертификат;
		
	// Паспортные данные
	ИзмененныеРеквизиты = ИзмененныеРеквизитыПаспорта(
		УчитыватьФлаг_ВладелецСертификата, 
		УчитыватьФлаг_Сертификат, 
		Истина);
		
	// СНИЛС
	ВладелецЭЦПСНИЛСИзменился = Форматировать(ВладелецЭЦПСНИЛС) <> Форматировать(ВладелецЭЦПСНИЛСИсходный);
	Изменилось = ВладелецЭЦПСНИЛСИзменился И (УчитыватьРеквизитВладельца ИЛИ УчитыватьРеквизитСертификата);
	
	ДополнитьИзменившиесяРеквизиты(
		Перечисления.ПараметрыПодключенияК1СОтчетности.ВладелецЭЦПСНИЛС, 
		Изменилось,
		ИзмененныеРеквизиты,
		ВладелецЭЦПСНИЛСИсходный,
		ВладелецЭЦПСНИЛС,
		Требует,
		Требует,
		Препятствует);
		
	// ИНН
	Если ЭтоЮридическоеЛицо Тогда

		ВладелецЭЦПИННИзменился = 
			Форматировать(ВладелецЭЦПИНН) <> Форматировать(ВладелецЭЦПИННИсходный)
			И ЗначениеЗаполнено(Форматировать(ВладелецЭЦПИННИсходный));

		Изменилось = ВладелецЭЦПИННИзменился И (УчитыватьРеквизитВладельца ИЛИ УчитыватьРеквизитСертификата);

		ДополнитьИзменившиесяРеквизиты(
			Перечисления.ПараметрыПодключенияК1СОтчетности.ВладелецЭЦПИНН, 
			Изменилось,
			ИзмененныеРеквизиты,
			ВладелецЭЦПИННИсходный,
			ВладелецЭЦПИНН,
			Требует,
			Требует,
			Препятствует);

	КонецЕсли;
	
	// Подразделение
	ВладелецЭЦППодразделениеИзменилось = 
		СравниватьДолжностьИПодразделение()
		И Форматировать(ВладелецЭЦППодразделение) <> Форматировать(ВладелецЭЦППодразделениеИсходное);
	
	ДополнитьИзменившиесяРеквизиты(
		Перечисления.ПараметрыПодключенияК1СОтчетности.ВладелецЭЦППодразделение, 
		Изменилось,
		ИзмененныеРеквизиты,
		ВладелецЭЦППодразделениеИсходное,
		ВладелецЭЦППодразделение);
		
	// Должность
	ВладелецЭЦПДолжностьИзменилась = 
		СравниватьДолжностьИПодразделение()
		И Форматировать(ВладелецЭЦПДолжность) <> Форматировать(ВладелецЭЦПДолжностьИсходная);
	
	ДополнитьИзменившиесяРеквизиты(
		Перечисления.ПараметрыПодключенияК1СОтчетности.ВладелецЭЦПДолжность, 
		Изменилось,
		ИзмененныеРеквизиты,
		ВладелецЭЦПДолжностьИсходная,
		ВладелецЭЦПДолжность);
		
	Возврат ИзмененныеРеквизиты;
		
КонецФункции

&НаСервере
Функция СравниватьДолжностьИПодразделение()
	
	// Фактически должность и подразделение сейчас не сравниваются
	Возврат 
		ЭтоЮридическоеЛицо
		И НЕ ВладелецЭЦПЭтоФизЛицо // т.к. для них не идет в сертификат
		И НЕ ЭтоРуководитель(ЭтотОбъект) // т.к. для них идет в сертификат, но его формируем не мы, а ФНС, так что нет смысла сравнивать

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

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

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

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

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

&НаСервере
Функция ТаблицаИзменилась(Таблица1, Таблица2) Экспорт

	Возврат ОбработкаЗаявленийАбонента.ТаблицаИзменилась(ЭтотОбъект, Таблица1, Таблица2);
	
КонецФункции

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

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

&НаКлиентеНаСервереБезКонтекста
Функция СравниватьАдрес(Форма)
	
	ЭтоСУЦ = Форма.ЭтоСертификатДругогоУЦИсходный
		ИЛИ Форма.ПереиздатьСертификат И Форма.ЭтоСертификатДругогоУЦ;
	
	Сравнивать = НЕ ЭтоСУЦ // В СУЦ поля могут быть заполнены по-другому
		И НЕ Форма.ВладелецЭЦПЭтоФизЛицо
		И Форма.ВладелецЭЦПТип = Форма.ВладелецЭЦПТипИсходный; // В сертфиикате ФЛ нет адреса, а в сертфиикате руководителя есть
		
	Возврат Сравнивать;
	
КонецФункции

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

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

	// Область
	ДополнитьИзменившиесяРеквизиты(
		ПредопределенноеЗначение("Перечисление.ПараметрыПодключенияК1СОтчетности.Область"), 
		ОбластьИзменилась И (УчитыватьФлагОрганизации ИЛИ УчитыватьРеквизитСертификата),
		ИзмененныеРеквизиты,
		ОбластьИсходная,
		Область,
		ТребуетЕслиНеФизЛицо,
		ТребуетЕслиНеФизЛицо,
		Препятствует);
		
	// Город
	ДополнитьИзменившиесяРеквизиты(
		ПредопределенноеЗначение("Перечисление.ПараметрыПодключенияК1СОтчетности.Город"), 
		ГородИзменился И УчитыватьФлагОрганизации,
		ИзмененныеРеквизиты,
		ГородИсходный,
		Город,
		ТребуетЕслиНеФизЛицо);
		
	// Улица
	ДополнитьИзменившиесяРеквизиты(
		ПредопределенноеЗначение("Перечисление.ПараметрыПодключенияК1СОтчетности.Улица"), 
		УлицаИзменилась И УчитыватьФлагОрганизации,
		ИзмененныеРеквизиты,
		УлицаИсходная,
		Улица,
		ТребуетЕслиНеФизЛицо);

	// Телефон основной
	ДополнитьИзменившиесяРеквизиты(
		ПредопределенноеЗначение("Перечисление.ПараметрыПодключенияК1СОтчетности.ТелефонОсновной"), 
		ТелефонОсновнойИзменился И УчитыватьФлагОрганизации,
		ИзмененныеРеквизиты,
		ТелефонОсновнойИсходный,
		ТелефонОсновной);
		
	// Эл почта организации
	ДополнитьИзменившиесяРеквизиты(
		ПредопределенноеЗначение("Перечисление.ПараметрыПодключенияК1СОтчетности.ЭлектроннаяПочтаОрганизации"), 
		ЭлектроннаяПочтаОрганизацииИзменилась И УчитыватьФлагОрганизации,
		ИзмененныеРеквизиты,
		ЭлектроннаяПочтаОрганизацииИсходная,
		ЭлектроннаяПочтаОрганизации);
	
	Возврат ИзмененныеРеквизиты;
		
КонецФункции

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

&НаСервере
Процедура ПолучитьСведенияИзСертификата()
	
	Если ЭтоУчетнаяЗаписьВМоделиСервиса Тогда
		КонтекстЭДОСервер    = ДокументооборотСКО.ПолучитьОбработкуЭДО();
		СвойстваСертификата  = КонтекстЭДОСервер.ПолучитьСвойстваСертификатаПоОтпечаткуНаСервере(ОтпечатокСертификата(), "MY");
	ИначеЕсли КриптографияЭДКОКлиентСервер.ЭтоОблачнаяПодпись(МестоХраненияКлюча) Тогда
		СвойстваСертификата  = КриптографияЭДКО.НайтиОблачныйСертификат(Новый Структура("Отпечаток", ОтпечатокСертификата()), Ложь, Истина);
	КонецЕсли;
	
	Если СвойстваСертификата = Неопределено Тогда
		
		СерийныйНомер = "";
		СертификатДействителенПо = Неопределено;
		
	Иначе
		
		СертификатДействителенПо = СвойстваСертификата.ДействителенПо;
		СекундВОдномДне = 24 * 60 * 60;
		// Прибавляем один день, так как в день окончания сертификат еще действует.
		СертификатДействителенПо = СертификатДействителенПо + СекундВОдномДне;
		
		СертификатДействителенПоМестноеВремя = СвойстваСертификата.ДействителенПо;
		
		ОсталосьДней = (НачалоДня(СертификатДействителенПо) - НачалоДня(ТекущаяДатаСервер))/СекундВОдномДне;
		
		ПродлитьСертификатИсходный = ОсталосьДней <= ТридцатьДней;
		
		СерийныйНомер = СвойстваСертификата.СерийныйНомер;
		
	КонецЕсли;
	
	СертификатДоступен = ЗначениеЗаполнено(СертификатДействителенПо);
	
КонецПроцедуры

&НаСервере
Функция ЗапрещеноУдаленноеПереизданиеСертификата() Экспорт

	Запрещено = ПричиныЗапретаУдаленногоПереизданияСертификата().Количество() > 0;
		
	Возврат Запрещено;

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

&НаСервере
Функция ПричиныЗапретаУдаленногоПереизданияСертификата() Экспорт

	Ошибки = Новый Массив;
	
	Если НЕ СертификатДоступен Тогда
		
		РезультатПроверки = ДокументооборотСКОКлиентСервер.РезультатПроверкиРеквизитов();
		РезультатПроверки.ТекстОшибки = НСтр("ru = '- Ваш текущий сертификат недоступен'");
		
		Ошибки.Добавить(РезультатПроверки);
		
	КонецЕсли;
	
	Если СертификатДействителенПоМестноеВремя - ТекущаяДатаСеанса() < 48*60*60 Тогда
		
		РезультатПроверки = ДокументооборотСКОКлиентСервер.РезультатПроверкиРеквизитов();
		
		Если СертификатДействителенПоМестноеВремя - ТекущаяДатаСеанса() < 0 Тогда
			ТекстОшибки = НСтр("ru = '- Ваш текущий сертификат уже истек (%1)'");
		Иначе
			ТекстОшибки = НСтр("ru = '- Ваш текущий сертификат истечет менее чем через 48 часа (%1)'");
		КонецЕсли;
		
		ТекстОшибки = СтрШаблон(ТекстОшибки, Строка(СертификатДействителенПоМестноеВремя));
		
		РезультатПроверки.ТекстОшибки = ТекстОшибки;
		
		Ошибки.Добавить(РезультатПроверки);
		
	КонецЕсли;
	
	Если ЭтоНотариусАдвокатИлиГКФХ Тогда
		
		РезультатПроверки = ДокументооборотСКОКлиентСервер.РезультатПроверкиРеквизитов();
		РезультатПроверки.ТекстОшибки = НСтр("ru = '- Не поддерживается для адвокатов и нотариусов'");
		
		Ошибки.Добавить(РезультатПроверки);
		
	КонецЕсли;
		
		
	Возврат Ошибки;

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

&НаСервере
Функция ТекстПричиныЗапретаУдаленногоПереизданияСертификата() Экспорт
	
	Причины = ПричиныЗапретаУдаленногоПереизданияСертификата();
	Текст   = "";
	
	Если Причины.Количество() > 0 Тогда
		Текст = НСтр("ru = 'Удаленное переиздание сертификата невозможно, поскольку:'");
		
		Для каждого Причина Из Причины Цикл
			Текст = Текст + Символы.ПС + Причина.ТекстОшибки;
		КонецЦикла;
		
	КонецЕсли;
	
	Возврат Текст;
	
КонецФункции

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

&НаКлиенте
Процедура НастройкиОблачнойПодписи_Завершение(РезультатВыбора, ДополнительныеПараметры) Экспорт
	
	Если ИзменилисьНастрокиDSS() Тогда
		
		ПроверитьНеобходимостьУстановкиГалки_ИзменитьВладельцаСертификата();
		ПроверитьНеобходимостьУстановкиГалки_ИзменитьРеквизитыОрганизации();
		ПроверитьНеобходимостьУстановкиГалки_ПереиздатьСертификат();
		
	КонецЕсли;
	
	УправлениеФормой();
	
КонецПроцедуры

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

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

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

#Область КопированиеИзИсходногоЗаявления

&НаСервере
Процедура СкопироватьРеквизитыИзИсходногоЗаявления_Криптография()
	
	СкопироватьРеквизитыИзИсходногоЗаявления_МестоХранения();
	СкопироватьРеквизитыИзИсходногоЗаявления_СертификатИСпособПолученияСертификата();
	
	// Реквизит ВключитьЛицензиюКриптоПро не берем из документа, 
	// так как он расчитывается по особому алгоритму.

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

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

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

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

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

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

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

&НаСервере
Процедура СкопироватьРеквизитыИзИсходногоЗаявления_Организация()
	
	ТелефонОсновной	= Реквизит.ТелефонОсновной;
	ОГРН			= Реквизит.ОГРН;
	
	СкопироватьРеквизитыИзИсходногоЗаявления_КодыРегиона();
	
	ЭлектроннаяПочтаОрганизации	= Реквизит.ЭлектроннаяПочтаОрганизации;
	ЭтоБюджетополучатель        = Реквизит.ЭтоБюджетополучатель;
	ЭтоНотариусАдвокатИлиГКФХ   = Реквизит.ЭтоНотариусАдвокатИлиГКФХ;
	
	ИнициализироватьРеквизиты1СОтчетности_ОбработатьПрочитанноеИзБД_Сервер();
	
КонецПроцедуры

&НаСервере
Процедура СкопироватьРеквизитыИзИсходногоЗаявления_КодыРегиона()
	
	КодРегиона		= Реквизит.КодРегионаФСРАР;
	КодРегионаФСРАР = Реквизит.КодРегионаФСРАР;
	
	Если НЕ ЗначениеЗаполнено(КодРегиона) И НЕ ЗначениеЗаполнено(КодРегионаФСРАР) Тогда
		
		КонтекстЭДОСервер = ДокументооборотСКО.ПолучитьОбработкуЭДО();
		КодРегионаФСРАР   = КонтекстЭДОСервер.КодРегионаФСРАР(АдресЮридическийЗначение);
		КодРегиона        = КодРегионаФСРАР;
		
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура СкопироватьРеквизитыИзИсходногоЗаявления_Владелец()
	
	ОбработкаЗаявленийАбонента.СкопироватьРеквизитыВладельцаИзИсходногоЗаявления(ЭтотОбъект, Реквизит);
	
КонецПроцедуры

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

&НаСервере
Процедура СкопироватьРеквизитыИзИсходногоЗаявления_Пользователи()
	
	ОбработкаЗаявленийАбонента.ЗаполнитьТаблицуПользователейИзКопии(ЭтотОбъект);
	
КонецПроцедуры

&НаСервере
Процедура СкопироватьВключаемыйСертификатИзИсходногоЗаявления()
	
	Если ИспользоватьСуществующий(Реквизит) Тогда
		
		ВключаемыйСертификат         = Реквизит.Сертификат.Получить();
		ВключаемыйСертификатОблачный = Реквизит.ЭлектроннаяПодписьВМоделиСервиса;
		ЭтоСертификатДругогоУЦ       = Реквизит.ЭтоСертификатДругогоУЦ;
		
		ЗалогироватьВключаемыйСертификат("СкопироватьВключаемыйСертификатИзИсходногоЗаявления1");
		
	ИначеЕсли ЗначениеЗаполнено(НовыйСертификат) Тогда
		
		// При открытии из формы предупреждения об изменении реквизитов сертификата будет заполнен альтернативный сертификат
		СпособПолученияСертификата = Перечисления.СпособПолученияСертификата.ИспользоватьСуществующий;
		
		Если ЗначениеЗаполнено(НовыйСертификат.НовыйСертификат) Тогда
			
			ВключаемыйСертификат = НовыйСертификат.НовыйСертификат;
			
			ЗалогироватьВключаемыйСертификат("СкопироватьВключаемыйСертификатИзИсходногоЗаявления2");
			
			Результат = МенеджерСервисаКриптографии.ПоискСертификатаПоОтпечаткуИлиСерийномуНомеру(
				НовыйСертификат.НовыйСертификат.Отпечаток,
				, 
				Ложь);
				
			Если Результат.Выполнено И Результат.Сертификаты.Количество() > 0 Тогда
				ВключаемыйСертификатОблачный = Истина;
				ВключаемыйСертификат = Неопределено;
			Иначе
				ВключаемыйСертификатОблачный = Ложь;
			Конецесли;
			
			ЗалогироватьВключаемыйСертификат("СкопироватьВключаемыйСертификатИзИсходногоЗаявления3");
			
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры

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

&НаСервере
Процедура СкопироватьФлажкиИзИсходногоЗаявления()
	
	СкопироватьФлажкиИзИсходногоЗаявления_ВосстановитьФлаги();
	СкопироватьФлажкиИзИсходногоЗаявления_ВосстановитьИзмененияИзИзмененныхРеквизитов();
	СкопироватьФлажкиИзИсходногоЗаявления_ПроверитьФлагиСТремяСостояниями();

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

&НаСервере
Процедура СкопироватьФлажкиИзИсходногоЗаявления_ПроверитьФлагиСТремяСостояниями()
	
	Если ИзменитьНастройкиУведомлений = Рекомендовано Тогда

		// Проверяем, возможно требуется значение Требует 
		ПроверитьНеобходимостьУстановкиГалки_ИзменитьНастройкиУведомлений();
		
		Если ИзменитьНастройкиУведомлений = НеТребуется Тогда
			ИзменитьНастройкиУведомлений = Рекомендовано;
		КонецЕсли;
		
	КонецЕсли;
	
	Если ПереиздатьСертификат = Рекомендовано Тогда

		// Проверяем, возможно требуется значение Требует
		ПроверитьНеобходимостьУстановкиГалки_ПереиздатьСертификат();
		
		Если ПереиздатьСертификат = НеТребуется Тогда
			ПереиздатьСертификат = Рекомендовано;
		КонецЕсли;
	КонецЕсли;
	
КОнецПроцедуры

&НаСервере
Процедура СкопироватьФлажкиИзИсходногоЗаявления_ВосстановитьИзмененияИзИзмененныхРеквизитов()
	
	ПараметрыПодключения = Перечисления.ПараметрыПодключенияК1СОтчетности;
	
	ИзменившиесяРеквизиты = Реквизит.ИзменившиесяРеквизитыВторичногоЗаявления;
	
 	ИзменитьРеквизитыПодключенияК1СОтчетности = 
		ИзменитьРеквизитыПодключенияК1СОтчетности 
		ИЛИ БылиИзменененыРеквизитыПодключенияК1СОтчетности();
		
	ИзменитьСоставКонтролирующихОрганов = 
		ИзменитьСоставКонтролирующихОрганов 
		ИЛИ БылИзмененСоставКонтролирующихОрганов(ИзменившиесяРеквизиты);
		
	ИзменитьВладельцаСертификата = ИзменитьВладельцаСертификата 
		ИЛИ ЭтотПараметрИзменился(ИзменившиесяРеквизиты, ПараметрыПодключения.ВладелецЭЦП);
		
	ПродлитьЛицензиюНа1СОтчетность = ПродлитьЛицензиюНа1СОтчетность 
		ИЛИ ЭтотПараметрИзменился(ИзменившиесяРеквизиты, ПараметрыПодключения.ПродлениеЛицензии);
		
	ПереиздатьСертификат = ПереиздатьСертификат 
		ИЛИ ?(ЭтотПараметрИзменился(ИзменившиесяРеквизиты, ПараметрыПодключения.ПереизданиеСертификата), Требует, НеТребуется);
		
	ЭтоПереходВКоробку = ЭтоПереходВКоробку 
		ИЛИ ЭтотПараметрИзменился(ИзменившиесяРеквизиты, ПараметрыПодключения.ПереходВКоробку);
		
	ЭтоПереходВОблако = ЭтоПереходВОблако 
		ИЛИ ЭтотПараметрИзменился(ИзменившиесяРеквизиты, ПараметрыПодключения.ПереходВОблако);
		
	ПодтверждениеОперацийСКлючомИзменилось = ЭтотПараметрИзменился(ИзменившиесяРеквизиты, ПараметрыПодключения.ПодтверждениеОперацийСКлючом);
		
	ИзменитьМестоХранения = 
		ИзменитьМестоХранения 
		ИЛИ ЭтоПереходВКоробку 
		ИЛИ ЭтоПереходВОблако 
		ИЛИ ПодтверждениеОперацийСКлючомИзменилось;
		
КОнецПроцедуры

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

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

&НаСервере
Функция БылИзмененСоставКонтролирующихОрганов(ТабличнаяЧасть) Экспорт
	
	СдаватьВФНСИзменился 		= ЭтотПараметрИзменился(ТабличнаяЧасть, Перечисления.ПараметрыПодключенияК1СОтчетности.СдаватьВФНС);
	КодыФНСИзменились 			= ЭтотПараметрИзменился(ТабличнаяЧасть, Перечисления.ПараметрыПодключенияК1СОтчетности.КодыФНС);
	
	СдаватьВПФРИзменился 		= ЭтотПараметрИзменился(ТабличнаяЧасть, Перечисления.ПараметрыПодключенияК1СОтчетности.СдаватьВПФР)
								ИЛИ ЭтотПараметрИзменился(ТабличнаяЧасть, Перечисления.ПараметрыПодключенияК1СОтчетности.СдаватьВФСС);
	КодПФРИзменился 			= ЭтотПараметрИзменился(ТабличнаяЧасть, Перечисления.ПараметрыПодключенияК1СОтчетности.КодПФР); 
	РегНомерПФРИзменился 		= ЭтотПараметрИзменился(ТабличнаяЧасть, Перечисления.ПараметрыПодключенияК1СОтчетности.РегНомерПФР);
	РегНомерСФРИзменился 		= ЭтотПараметрИзменился(ТабличнаяЧасть, Перечисления.ПараметрыПодключенияК1СОтчетности.РегНомерСФР);
	
	СдаватьВРосстатИзменился 	= ЭтотПараметрИзменился(ТабличнаяЧасть, Перечисления.ПараметрыПодключенияК1СОтчетности.СдаватьВРосстат);
	КодРосстатаИзменился		= ЭтотПараметрИзменился(ТабличнаяЧасть, Перечисления.ПараметрыПодключенияК1СОтчетности.КодРосстата); 
	
	СдаватьВФСРАРИзменился 		= ЭтотПараметрИзменился(ТабличнаяЧасть, Перечисления.ПараметрыПодключенияК1СОтчетности.СдаватьВФСРАР);
	КодРегионаФСРАРИзменился 	= ЭтотПараметрИзменился(ТабличнаяЧасть, Перечисления.ПараметрыПодключенияК1СОтчетности.КодРегионаФСРАР);
	
	СдаватьВРПНИзменился 		= ЭтотПараметрИзменился(ТабличнаяЧасть, Перечисления.ПараметрыПодключенияК1СОтчетности.СдаватьВРПН);
	СдаватьВФТСИзменился 		= ЭтотПараметрИзменился(ТабличнаяЧасть, Перечисления.ПараметрыПодключенияК1СОтчетности.СдаватьВФТС);
	СдаватьВЦБИзменился 		= ЭтотПараметрИзменился(ТабличнаяЧасть, Перечисления.ПараметрыПодключенияК1СОтчетности.СдаватьВЦБ);
	
	Возврат
		СдаватьВФНСИзменился ИЛИ КодыФНСИзменились
		ИЛИ СдаватьВПФРИзменился ИЛИ КодПФРИзменился ИЛИ РегНомерПФРИзменился ИЛИ РегНомерСФРИзменился
		ИЛИ СдаватьВРосстатИзменился ИЛИ КодРосстатаИзменился
		ИЛИ СдаватьВФСРАРИзменился ИЛИ КодРегионаФСРАРИзменился
		ИЛИ СдаватьВРПНИзменился ИЛИ СдаватьВФТСИзменился ИЛИ СдаватьВЦБИзменился;
	
КонецФункции

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

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

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

#Область  УстановитьГалку

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

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

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

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

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

		ДополнитьИзменившиесяРеквизиты(
			Перечисления.ПараметрыПодключенияК1СОтчетности.ТелефонМобильныйДляПаролей, 
			Изменилось,
			ИзмененныеРеквизиты,
			ПроверкаТелефонДляПаролей.ИсходноеЗначение,
			ТелефонМобильныйДляПаролей,
			,,,
			Требует);
		
		Изменилось = 
			ЭлектроннаяПочтаДляПаролейИзменена() 
			И УчитыватьРеквизит;

		ДополнитьИзменившиесяРеквизиты(
			Перечисления.ПараметрыПодключенияК1СОтчетности.ЭлектроннаяПочтаДляПаролей, 
			Изменилось,
			ИзмененныеРеквизиты,
			ПроверкаЭлектроннаяПочтаДляПаролей.ИсходноеЗначение,
			ЭлектроннаяПочтаДляПаролей,
			,,,
			Требует);
			
	Иначе
		
		Изменилось = 
			ЭлектроннаяПочта <> ЭлектроннаяПочтаИсходная
			И УчитыватьРеквизит;

		ДополнитьИзменившиесяРеквизиты(
			Перечисления.ПараметрыПодключенияК1СОтчетности.ЭлектроннаяПочта, 
			Изменилось,
			ИзмененныеРеквизиты,
			ЭлектроннаяПочтаИсходная,
			ЭлектроннаяПочта,
			,,,
			Требует);

	КонецЕсли;
	
	ТелефонМобильныйПредставление = ПолучитьПредставлениеТелефона(ТелефонМобильный);
	ТелефонМобильныйИсходныйПредставление = ПолучитьПредставлениеТелефона(ТелефонМобильныйИсходный);
		
	Изменилось = 
		ТелефонМобильныйПредставление <> ТелефонМобильныйИсходныйПредставление
		И УчитыватьРеквизит;
		
	ДополнитьИзменившиесяРеквизиты(
		Перечисления.ПараметрыПодключенияК1СОтчетности.ТелефонМобильный, 
		Изменилось,
		ИзмененныеРеквизиты,
		ТелефонМобильныйИсходныйПредставление,
		ТелефонМобильныйПредставление,
		,,,
		Требует);
		
	Изменилось = 
		ПолучатьСМСУведомления <> ПолучатьСМСУведомленияИсходный
		И УчитыватьРеквизит;
		
	ДополнитьИзменившиесяРеквизиты(
		Перечисления.ПараметрыПодключенияК1СОтчетности.ПолучатьСМСУведомления, 
		Изменилось,
		ИзмененныеРеквизиты,
		ПолучатьСМСУведомленияИсходный,
		ПолучатьСМСУведомления);
		
	Возврат ИзмененныеРеквизиты;
	
КонецФункции

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

&НаСервере
Процедура ПроверитьНеобходимостьУстановкиГалки_ИзменитьСоставКонтролирующихОрганов() Экспорт
	
	ИзменитьСоставКонтролирующихОрганов = 
		ИзмененныеНаправления().Количество() > 0;
	
КонецПроцедуры

&НаСервере
Процедура ПроверитьНеобходимостьУстановкиГалки_ИзменитьРеквизитыОрганизации() Экспорт
	
	Если ИзменилисьНастрокиDSS() Тогда
		ИзменитьРеквизитыПодключенияК1СОтчетности = Ложь;
		Возврат;
	КонецЕсли;
	
	ИзменитьРеквизитыПодключенияК1СОтчетности = 
		ИзмененныеРеквизитыОрганизации().Количество() > 0;
	
КОнецПроцедуры
	
&НаСервере
Процедура ПроверитьНеобходимостьУстановкиГалки_ИзменитьВладельцаСертификата() Экспорт
	
	Если ИзменилисьНастрокиDSS() Тогда
		
		ИзменитьВладельцаСертификата = Ложь;
		
	ИначеЕсли НЕ ЗначениеЗаполнено(ВладелецЭЦПИсходный) И НЕ ЗначениеЗаполнено(ВладелецЭЦП) Тогда
		
		ИзменитьВладельцаСертификата = Истина;
		
	ИначеЕсли НЕ ЗначениеЗаполнено(ВладелецЭЦП) Тогда
		
		ИзменитьВладельцаСертификата = Истина;
		
	Иначе
		
		ИзмененныеРеквизитыВладельца = ИзмененныеРеквизитыВладельца();
		
		ИзменитьВладельцаСертификата = 
			ИзмененныеРеквизитыВладельца.Количество() > 0;
		
	КонецЕсли;

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

&НаСервере
Процедура ПроверитьНеобходимостьУстановкиГалки_ФлагПодключитьЭДО()
	
	ПодключитьЭДО = 
		НЕ ЭтоУчетнаяЗаписьВМоделиСервиса 
		И НЕ ЭтоПереходВОблако 
		И ПодключениеЭДОВозможно
		И ЕстьПравоНастройкиЭДО
		И НЕ ИзменилисьНастрокиDSS()
		И НЕ ЭтоМультиРежим; 

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

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

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

#Область ВладелецЭП

&НаСервере
Процедура ИнициализироватьИсходныеРеквизиты1СОтчетности_ПаспортныеДанные(ДопРеквизитыУчетнойЗаписи)
	
	ВладелецЭЦПВидДокументаКодИсходный = ДопРеквизитыУчетнойЗаписи.ВладелецЭЦПВидДокументаКод;
	ВладелецЭЦПСерияДокументаИсходный = ДопРеквизитыУчетнойЗаписи.ВладелецЭЦПСерияДокумента;
	ВладелецЭЦПНомерДокументаИсходный = ДопРеквизитыУчетнойЗаписи.ВладелецЭЦПНомерДокумента;
	ВладелецЭЦПДатаВыдачиДокументаИсходный = ДопРеквизитыУчетнойЗаписи.ВладелецЭЦПДатаВыдачиДокумента;
	ВладелецЭЦПКемВыданДокументИсходный = ДопРеквизитыУчетнойЗаписи.ВладелецЭЦПКемВыданДокумент;
	ВладелецЭЦПКодПодразделенияИсходный = ДопРеквизитыУчетнойЗаписи.ВладелецЭЦПКодПодразделения;
		
КонецПроцедуры

&НаСервере
Функция ВладелецПоТипу()
	
	Если ВладелецЭЦПТип = Перечисления.ТипыВладельцевЭЦП.ПустаяСсылка() И ЭтоЮридическоеЛицо Тогда
		Возврат Неопределено;
	ИначеЕсли ВладелецЭЦПТип = Перечисления.ТипыВладельцевЭЦП.Руководитель
		ИЛИ ВладелецЭЦПТип = Перечисления.ТипыВладельцевЭЦП.ПустаяСсылка() И НЕ ЭтоЮридическоеЛицо Тогда
		Возврат Руководитель;
	ИначеЕсли ВладелецЭЦПТип = Перечисления.ТипыВладельцевЭЦП.ГлавныйБухгалтер Тогда
		Возврат ГлБухгалтер;
	ИначеЕсли ВладелецЭЦПТип = Перечисления.ТипыВладельцевЭЦП.ДругойСотрудник Тогда
		Возврат ДругойСотрудник;
	Иначе
		Возврат Неопределено;
	КонецЕсли;
	
КонецФункции

&НаСервере
Процедура ЗаполнитьДанныеСотрудника(ПеречитатьДанныеОСотруднике = Истина)
	
	ЗаполнитьВладельцаЭЦППоТипу();
	
	Если НЕ ЗначениеЗаполнено(ВладелецЭЦП) Тогда
		Возврат;
	КонецЕсли;

	// Обновляем данные о сотрудниках
	Если ПеречитатьДанныеОСотруднике Тогда
		ПеречитатьДанныеОСотруднике();
	КонецЕсли;
	
	Если ЗаявлениеСозданоКопированием Тогда
		СкопироватьРеквизитыИзИсходногоЗаявления_Пользователи();
	КонецЕсли;
	ОбработкаЗаявленийАбонента.ЗаполнитьДанныеСотрудника(ЭтотОбъект);
	
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьВладельцаЭЦППоТипу()
	
	НетДанныхДляЗаполненияВладельца = 
		НЕ ЗначениеЗаполнено(Организация)
		ИЛИ ВладелецЭЦПТип = Перечисления.ТипыВладельцевЭЦП.ПустаяСсылка() И ЭтоЮридическоеЛицо;
	
	Если НетДанныхДляЗаполненияВладельца Тогда
		Возврат;
	КонецЕсли;
	
	ВладелецЭЦП = ВладелецПоТипу();
	
КонецПроцедуры

&НаСервере
Процедура ПеречитатьДанныеОСотруднике()
	
	КонтекстЭДОСервер = ДокументооборотСКО.ПолучитьОбработкуЭДО();
	КонтекстЭДОСервер.ЗаполнитьДанныеОрганизации(СтруктураРеквизитов);
	ДанныеЗаполнения = КонтекстЭДОСервер.ДополнитьДанныеОрганизацииДаннымиПоОтветственнымЛицам(СтруктураРеквизитов);
	Если ДанныеЗаполнения.Свойство("СтруктураДанныхОрганизации") Тогда
		ДанныеОрганизации = ДанныеЗаполнения.СтруктураДанныхОрганизации;
	КонецЕсли;
	
КонецПроцедуры

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

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

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

&НаСервере
Процедура ПересчитатьМестоХранения(ПриОткрытии, ПринудительнаяМодель = Неопределено, ЭтоВыборСертификата = Ложь)

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

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

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

&НаКлиенте
Процедура Подключаемый_ОбновитьДанныеГлБухгалтера()
	
	ОтключитьОбработчикОжидания("Подключаемый_ОбновитьДанныеГлБухгалтера");
	НовыйГлБухгалтер = ЭлектронныйДокументооборотСКонтролирующимиОрганамиВызовСервераПереопределяемый.ГлБухгалтер(Организация);
	
	Если ГлБухгалтер = НовыйГлБухгалтер Тогда
		Возврат;
	КонецЕсли;
	
	ГлБухгалтер = НовыйГлБухгалтер;
	НовыйТипВладельца 	= ПредопределенноеЗначение("Перечисление.ТипыВладельцевЭЦП.ГлавныйБухгалтер");
	УстановитьНовогоВладельцаЭЦП(НовыйТипВладельца); // Асинхронно
	
КонецПроцедуры

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

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

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

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

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

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

&НаКлиенте
Процедура ОткрытьФормуГлБухгалтера()
	ЭлектронныйДокументооборотСКонтролирующимиОрганамиКлиентПереопределяемый.ОткрытьФормуГлБухгалтера(Организация);
	ПодключитьОбработчикОжидания("Подключаемый_ОбновитьДанныеГлБухгалтера",1);
КонецПроцедуры

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

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

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

#Область Очистка

&НаСервере
Процедура ОчиститьРеквизитыФормы() 

	ОбработкаЗаявленийАбонента.ОчиститьРеквизитыЗаявления(ЭтотОбъект);

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

&НаСервере
Процедура СброситьНаправленияСдачиОтчетности() 
	
	РеквизитыФормы = ПолучитьРеквизиты();
	Для каждого РеквизитФормы Из РеквизитыФормы Цикл
		Имя = РеквизитФормы.Имя;
		
		Если ТипЗнч(ЭтотОбъект[Имя]) = Тип("ДанныеФормыКоллекция") Тогда
			Продолжить;
		КонецЕсли;
		
		Если СтрНайти(Имя, "ФНС") > 0 
			ИЛИ СтрНайти(Имя, "ПФР") > 0
			ИЛИ СтрНайти(Имя, "Росстат") > 0
			ИЛИ СтрНайти(Имя, "ФСС") > 0
			ИЛИ СтрНайти(Имя, "ФТС") > 0
			ИЛИ СтрНайти(Имя, "РПН") > 0
			ИЛИ СтрНайти(Имя, "ЦБ") > 0 Тогда
			
			ЭтотОбъект[Имя] = Неопределено;
			
		КонецЕсли;
	КонецЦикла;
	
	ПолучателиФНС.Очистить();
	ПолучателиФСГС.Очистить();
	
КонецПроцедуры

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

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

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

#Область СделатьРавнымИсходному

&НаСервере
Процедура СделатьНехранящиесяВБазеРеквизитыРавнымиИсходным()

	// Если мобильный телефон не хранится в базе, то приравниваем его исходному
	Если ЭтоРеквизитНеХранящийсяВБазе(ПредопределенноеЗначение("Перечисление.ПараметрыПодключенияК1СОтчетности.ТелефонМобильный")) Тогда

		ТелефонМобильный = ТелефонМобильныйИсходный;
	КонецЕсли;
	
	// Если основной телефон не хранится в базе, то приравниваем его исходному
	Если ЭтоРеквизитНеХранящийсяВБазе(ПредопределенноеЗначение("Перечисление.ПараметрыПодключенияК1СОтчетности.ТелефонОсновной")) Тогда

		ТелефонОсновной = ТелефонОсновнойИсходный;
	КонецЕсли;
	
	// Если электронная не хранится в базе, то приравниваем ее исходному значению
	Если ЭтоРеквизитНеХранящийсяВБазе(ПредопределенноеЗначение("Перечисление.ПараметрыПодключенияК1СОтчетности.ЭлектроннаяПочта")) Тогда

		ЭлектроннаяПочтаОрганизации = ЭлектроннаяПочтаОрганизацииИсходная;
	КонецЕсли;
	
	// Если СНИЛС не хранится в базе, то приравниваем его к исходному
	Если ЭтоРеквизитНеХранящийсяВБазе(ПредопределенноеЗначение("Перечисление.ПараметрыПодключенияК1СОтчетности.ВладелецЭЦПСНИЛС")) Тогда

		ВладелецЭЦПСНИЛС = ВладелецЭЦПСНИЛСИсходный;
	КонецЕсли;
	
	ПродлитьЛицензиюНа1СОтчетность = ПродлитьЛицензиюНа1СОтчетностьИсходный;
	
КонецПроцедуры

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

	// ФСРАР
	КонтекстЭДОСервер = ДокументооборотСКО.ПолучитьОбработкуЭДО();
	ПодатьЗаявкуНаСертификатДляФСРАР = ПодатьЗаявкуНаСертификатДляФСРАРИсходный;
	КодРегионаФСРАР = КонтекстЭДОСервер.КодРегионаФСРАР(АдресЮридическийЗначение);
	
	// РПН
	ПодатьЗаявкуНаПодключениеРПН = ПодатьЗаявкуНаПодключениеРПНИсходный;
	
	// ФТС
	ПодатьЗаявкуНаПодключениеФТС = ПодатьЗаявкуНаПодключениеФТСИсходный;
	
	// ЦБ
	СдаватьВЦБ = СдаватьВЦБИсходный;
	
КонецПроцедуры

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

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

#Область Направления

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

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

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

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

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

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

&НаКлиентеНаСервереБезКонтекста 
Функция КодПФР(ДанныеОрганизации)
	
	ПолученыйКодПФР = "";
	
	Если ДанныеОрганизации = Неопределено 
		ИЛИ ПустаяСтрока(ДанныеОрганизации.КодОрганаПФР) 
		ИЛИ СтрДлина(ДанныеОрганизации.КодОрганаПФР) < 7 Тогда
		
		ПолученыйКодПФР = Лев(ДанныеОрганизации.КодОрганаПФР,7); 
		
	Иначе
		
		ПолученыйКодПФР = ДанныеОрганизации.КодОрганаПФР;
		
	КонецЕсли;
	
	Возврат ПолученыйКодПФР;
	
КонецФункции

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

#Область Навигация

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

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

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

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

&НаСервере
Процедура УстановитьСвойстваКнопок(ВидимостьНазад, ВидимостьДалее, ВидимостьЗакрыть)
	
	Элементы.Назад.Видимость = ВидимостьНазад;
	Элементы.Далее.Видимость = ВидимостьДалее;
	Элементы.Закрыть.Видимость = ВидимостьЗакрыть;
	
	Элементы.Далее.КнопкаПоУмолчанию = Истина;
	
КонецПроцедуры

&НаКлиенте
Процедура ПоказатьПредыдущуюСтраницу()
	ПоказатьДругуюСтраницу(Ложь);
КонецПроцедуры

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

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

&НаСервере
Процедура УведомитьПартнераОЗаявлении()
	
	ОбработкаЗаявленийАбонента.УведомитьПартнераОЗаявлении(ЭтотОбъект);
	
КонецПроцедуры

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

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

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

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

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

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

&НаКлиенте
Процедура СравнитьРеквизитыПоЕГРЮЛ(ОповещениеОЗавершении)
	
	ОписаниеОповещения = Новый ОписаниеОповещения(
		"СравнитьРеквизитыПоЕГРЮЛ_Завершение", 
		ЭтотОбъект,
		ОповещениеОЗавершении); 
		
	ОбработкаЗаявленийАбонентаКлиент.СравнитьЗаявлениеПоЕГРЮЛ(ЭтотОбъект, ОписаниеОповещения);
	
КонецПроцедуры

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

	КонецЕсли;
	
	РазблокироватьКнопку();
	
КонецПроцедуры

&НаКлиенте
Процедура ПослеСравненияРеквизитовПоЕГРЮЛ(Результат = Неопределено, ВходящийКонтекст = Неопределено) Экспорт
	
	ОписаниеОповещения = Новый ОписаниеОповещения(
		"КоманднаяПанельМастерДалее_ВыборДействия_Завершение", 
		ЭтотОбъект);
	
	ПроверитьКриптопровайдерИМестоХраненияКлючей(ОписаниеОповещения); // асинхр
	
КонецПроцедуры

&НаСервере
Процедура ИсправитьОшибкиЕГРЮЛСервер() Экспорт
	
	ОбработкаЗаявленийАбонента.ИсправитьОшибкиЕГРЮЛ(ЭтотОбъект);
	
КонецПроцедуры

&НаСервере
Процедура ПроверитьПользователей(МастерДалее)
	
	Мультирежим.ПроверитьПользователей(
		ЭтотОбъект, 
		МастерДалее);

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

&НаКлиенте
Процедура ПриНажатииДалееНаСтраницеПроверкиЗаявления(МастерДалее)

	ЗаблокироватьКнопку();
	
	ОчиститьСообщения();
	
	СохранитьЗаявлениеКлиент();
	
	ПроверитьРеквизитыЗаявления(МастерДалее); 
	
	Если НЕ МастерДалее Тогда
		РазблокироватьКнопку();
		Возврат;
	КонецЕсли;
		
	ОтключитьОбработчикОжидания("Подключаемый_ОбновитьДанныеГлБухгалтера");
	ОтключитьОбработчикОжидания("Подключаемый_ОбновитьДанныеРуководителя");
	ОповеститьОбИзменении(ДокументЗаявление.Ссылка);
	
	СформироватьИОтправитьЗаявление();
	
КонецПроцедуры

&НаКлиенте
Функция ЭтоИзменениеПользователейБезОтправкиЗаявления()

	ИзмененныеРеквизиты = ДокументЗаявление.ИзменившиесяРеквизитыВторичногоЗаявления;
	НастройкиПользователей = ПредопределенноеЗначение("Перечисление.ПараметрыПодключенияК1СОтчетности.НастройкиПользователей");
	
	Результат = 
		ЭтоОднопользовательскийРежим(ЭтотОбъект)
		И ИзмененныеРеквизиты.Количество() = 1 
		И ИзмененныеРеквизиты[0].ИзмененныйРеквизит = НастройкиПользователей;
		
	Возврат Результат;

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

&НаСервере
Функция ОдобритьЗаявлениеБезОтправки()

	ОбработкаЗаявленийАбонентаВызовСервера.ДобавитьПользователей1ПРежимаВУчетнуюЗаписьИзЗаявления(
		ДокументЗаявление.Ссылка, 
		УчетнаяЗапись);
			
	ЗаписатьСостояниеЗаявления();
	
	ЭтотОбъект.Прочитать();
		
КонецФункции

&НаКлиентеНаСервереБезКонтекста
Функция ЭтоОднопользовательскийРежим(Форма)
	
	Результат = НЕ ЭтоМногопользовательскийРежим(Форма);
		
	Возврат Результат;
	
КонецФункции

&НаКлиентеНаСервереБезКонтекста
Функция ЭтоМногопользовательскийРежим(Форма)
	
	Результат = Форма.ЭтоМультиРежим
		ИЛИ МультирежимКлиентСервер.ЭтоПодключениеМультирежима(Форма)
		ИЛИ МультирежимКлиентСервер.ЭтоОтключениеМультирежима(Форма);
		
	Возврат Результат;
	
КонецФункции

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

#Область Таблица

#Область ИтоговыеДанные

&НаСервере
Функция ИтоговыеДанныеОрганизации_Адрес(ЕстьИзменение, НовоеЗначение, ИсходноеЗначение)
	
	Изменилось = ИзменитьРеквизитыПодключенияК1СОтчетности И ЕстьИзменение 
		ИЛИ ПереиздатьСертификат;
	
	Возврат ?(Изменилось, 
		НовоеЗначение, 
		ИсходноеЗначение);
	
КонецФункции

&НаСервере
Функция ИтоговыеДанныеОрганизации_КраткоеНаименование()
	
	Изменилось = 
		ИзменитьРеквизитыПодключенияК1СОтчетности И КраткоеНаименованиеИзменилось 
		ИЛИ ПереиздатьСертификат;
	
	Возврат ?(Изменилось, 
		КраткоеНаименование, 
		КраткоеНаименованиеИсходное);
	
КонецФункции

&НаСервере
Функция ИтоговыеДанныеОрганизации_КПП()
	
	Возврат ?(ИзменитьРеквизитыПодключенияК1СОтчетности И КППИзменился, КПП, КППИсходный);
	
КонецФункции

&НаСервере
Функция ИтоговыеДанныеОрганизации_ОГРН()
	
	Изменилось = ИзменитьРеквизитыПодключенияК1СОтчетности И ОГРНИзменился
		ИЛИ ПереиздатьСертификат;
	
	Возврат ?(Изменилось, 
		ОГРН, 
		ОГРНИсходный);
	
КонецФункции

&НаСервере
Функция ИтоговыеДанныеОрганизации_РегНомерПФР() Экспорт
	
	Возврат ?(ИзменитьСоставКонтролирующихОрганов И (РегНомерПФРИзменился ИЛИ СдаватьВПФРИзменился), РегНомерПФР, РегНомерПФРИсходный);
	
КонецФункции

&НаСервере
Функция ИтоговыеДанныеОрганизации_РегНомерСФР() Экспорт
	
	Возврат ?(ИзменитьСоставКонтролирующихОрганов И (РегНомерСФРИзменился ИЛИ СдаватьВПФРИзменился), РегНомерСФР, РегНомерСФРИсходный);
	
КонецФункции

&НаСервере
Функция ИтоговыеДанныеОрганизации_КодРегионаФСРАР() Экспорт
	
	Возврат ?(ИзменитьСоставКонтролирующихОрганов И КодРегионаФСРАРИзменился, КодРегионаФСРАР, КодРегионаФСРАРИсходный);
	
КонецФункции

&НаСервере
Функция ИтоговыеДанныеОрганизации_ТелефонОсновной()
	
	Возврат ?(ИзменитьРеквизитыПодключенияК1СОтчетности И ТелефонОсновнойИзменился, ТелефонОсновной, ТелефонОсновнойИсходный);
	
КонецФункции

&НаСервере
Функция ИтоговыеДанныеОрганизации_ЭлектроннаяПочтаОрганизации()
	
	Возврат ?(ИзменитьРеквизитыПодключенияК1СОтчетности И ЭлектроннаяПочтаОрганизацииИзменилась, ЭлектроннаяПочтаОрганизации, ЭлектроннаяПочтаОрганизацииИсходная);
	
КонецФункции

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

&НаСервере
Функция ИтоговыеДанныеВладельца_ВладелецЭЦП()
	
	Изменилось = ИзменитьВладельцаСертификата И ИзменилосьФИО()
		ИЛИ ПереиздатьСертификат;
	
	Возврат ?(Изменилось, ВладелецЭЦП, ВладелецЭЦПИсходный);
	
КонецФункции

&НаСервере
Функция ИтоговыеДанныеВладельца_ПолучатьСМСУведомления()
	
	Результат = 
		?(ИзменитьНастройкиУведомлений И ПолучатьСМСУведомления <> ПолучатьСМСУведомленияИсходный, 
		ПолучатьСМСУведомления, 
		ПолучатьСМСУведомленияИсходный);
		
	Возврат Результат;
	
КонецФункции

&НаСервере
Функция ИтоговыеДанныеВладельца_ВладелецЭЦПДолжность()
	
	Если СравниватьДолжностьИПодразделение() И НЕ ЭтоУдаленноеПереизданиеСертификата Тогда
	
		Изменилось = ИзменитьВладельцаСертификата И ВладелецЭЦПДолжностьИзменилась 
			ИЛИ ПереиздатьСертификат;

		Возврат ?(Изменилось, ВладелецЭЦПДолжность, ВладелецЭЦПДолжностьИсходная);
		
	Иначе
		
		Возврат ВладелецЭЦПДолжность;
		
	КонецЕсли;
	
КонецФункции

&НаСервере
Функция ИтоговыеДанныеВладельца_ВладелецЭЦППодразделение()
	
	Если СравниватьДолжностьИПодразделение() Тогда
		
		Изменилось = ИзменитьВладельцаСертификата И ВладелецЭЦППодразделениеИзменилось
			ИЛИ ПереиздатьСертификат;

		Возврат ?(Изменилось, ВладелецЭЦППодразделение, ВладелецЭЦППодразделениеИсходное);
		
	Иначе
		
		Возврат ВладелецЭЦППодразделение;
		
	КонецЕсли;
	
КонецФункции

&НаСервере
Функция ИтоговыеДанныеВладельца_ВладелецЭЦПСНИЛС()
	
	Изменилось = ИзменитьВладельцаСертификата И ВладелецЭЦПСНИЛСИзменился 
		ИЛИ ПереиздатьСертификат;
	
	Возврат ?(Изменилось, ВладелецЭЦПСНИЛС, ВладелецЭЦПСНИЛСИсходный);
	
КонецФункции

&НаСервере
Функция ИтоговыеДанныеВладельца_ВладелецЭЦПИНН()

	Изменилось = ИзменитьВладельцаСертификата И ВладелецЭЦПИННИзменился 
		ИЛИ ПереиздатьСертификат;

	Возврат ?(Изменилось, ВладелецЭЦПИНН, ВладелецЭЦПИННИсходный);
	
КонецФункции

&НаСервере
Функция ИтоговыеДанныеГосОрганы_СдаватьВОрган(Орган)
	
	Исходный = ЭтотОбъект["СдаватьВ" + Орган+ "Исходный"];
	Изменившийся = ЭтотОбъект["СдаватьВ" + Орган];
	Изменился = ЭтотОбъект["СдаватьВ" + Орган+ "Изменился"];
	
	Возврат ?(ИзменитьСоставКонтролирующихОрганов И Изменился, Изменившийся, Исходный);
	
КонецФункции

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

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

&НаСервере
Функция ИтоговыеДанныеГосОрганы_КодПФР()
	
	Если ИзменитьСоставКонтролирующихОрганов Тогда
		Если СдаватьВПФР Тогда
			Возврат КодПФР;
		Иначе
			Возврат "";
		КонецЕсли;
	Иначе
		Возврат КодПФРИсходный;
	КонецЕсли;
	
КонецФункции

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

#Область РезультатПроверки

&НаСервере
Функция РезультатПроверки_Шаблон()
	
	ДополнительныеПараметры = Новый Структура();
	ДополнительныеПараметры.Вставить("СодержитОшибку", Ложь);
	ДополнительныеПараметры.Вставить("РеквизитРедактируется", Ложь);
	ДополнительныеПараметры.Вставить("ТекстОшибки", "");
	
	Возврат ДополнительныеПараметры;
	
КонецФункции

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

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

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

&НаСервере
Функция РезультатПроверки_ВладелецЭЦПФИО()
	
	Результат = РезультатПроверки_Шаблон();
	
	Если ПроверятьДанныеВладельца() Тогда
		
		// фамилия
		Если ПустаяСтрока(ВладелецЭЦПФамилия) Тогда
			
			Результат.ТекстОшибки 		= НСтр("ru = 'Заполните фамилию сотрудника-владельца ЭП'");
			Результат.СодержитОшибку = Истина;
			
		КонецЕсли;
		
		// имя
		Если ПустаяСтрока(ВладелецЭЦПИмя) Тогда
			
			Результат.ТекстОшибки 		= НСтр("ru = 'Заполните имя сотрудника-владельца ЭП'");
			Результат.СодержитОшибку = Истина;
			
		КонецЕсли;
		
		Результат.РеквизитРедактируется = Истина;

	КонецЕсли;
	
	Возврат Результат;
	
КонецФункции

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

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

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

		КонецЕсли;
		
		Результат.РеквизитРедактируется = Истина;
		
	КонецЕсли;
		
	Возврат Результат;
	
КонецФункции

&НаСервере
Функция ПроверятьДанныеВладельца()
	
	Возврат ИзменитьВладельцаСертификата ИЛИ ПереиздатьСертификат;
	
КонецФункции

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

		Результат.РеквизитРедактируется = Истина;
		
	КонецЕсли;
	
	Возврат Результат;
	
КонецФункции

&НаСервере
Функция РезультатПроверки_ВладелецЭЦПДатаВыдачиДокумента()
	
	Результат = РезультатПроверки_Шаблон();
	
	Если ПроверятьДанныеВладельца() Тогда
		
		Если НЕ ЗначениеЗаполнено(ВладелецЭЦПДатаВыдачиДокумента) Тогда
				
			Результат.ТекстОшибки = НСтр("ru = 'Заполните дату выдачи документа, удостоверяющего личность сотрудника-владельца ЭП'");
			Результат.СодержитОшибку = Истина;
			
		ИначеЕсли ВладелецЭЦПДатаВыдачиДокумента > ТекущаяДатаСервер ИЛИ Год(ВладелецЭЦПДатаВыдачиДокумента) < 1900 Тогда	
			
			Результат.ТекстОшибки = НСтр("ru = 'Некорректно указана дата выдачи документа, удостоверяющего личность сотрудника-владельца ЭП'");
			Результат.СодержитОшибку = Истина;
			
		КонецЕсли;
		
		Результат.РеквизитРедактируется = Истина;
		
	КонецЕсли;
	
	Возврат Результат;
	
КонецФункции

&НаСервере
Функция РезультатПроверки_ВладелецЭЦПКодПодразделения()
	
	Результат = РезультатПроверки_Шаблон();
	ЭтоПаспортРФ = ЭлектронныйДокументооборотСКонтролирующимиОрганамиВызовСервера.ЭтоПаспортРФ(ВладелецЭЦПВидДокумента);
	
	Если ПроверятьДанныеВладельца() И ЭтоПаспортРФ Тогда
		
		КодПодразделенияБезТире = СтрЗаменить(ВладелецЭЦПКодПодразделения, "-","");
		Если ПустаяСтрока(КодПодразделенияБезТире) Тогда
			
			Результат.ТекстОшибки = НСтр("ru = 'Заполните код подразделения, выдавшего документ, удостоверяющего личность сотрудника-владельца ЭП'");
			Результат.СодержитОшибку = Истина;
			
		ИначеЕсли СтрДлина(ВладелецЭЦПКодПодразделения) <> 7
			ИЛИ НЕ ДокументооборотСКОКлиентСервер.ПроверитьЦифровойКодЗаданнойДлины(КодПодразделенияБезТире, 6, Истина) Тогда
			
			Результат.ТекстОшибки = НСтр("ru = 'Некорректно указан код подразделения, выдавшего документ, удостоверяющего личность сотрудника-владельца ЭП. 
				|Не соответствует маске ХХХ-ХХХ, где X – любая цифра'");
			Результат.СодержитОшибку = Истина;
			
		КонецЕсли;

		Результат.РеквизитРедактируется = Истина;
		
	КонецЕсли;
	
	Возврат Результат;
	
КонецФункции

&НаСервере
Функция РезультатПроверки_ВладелецЭЦПМестоРождения()
	
	Результат = РезультатПроверки_Шаблон();
		
	Если НЕ ИспользоватьСуществующий(ЭтотОбъект)
		И (ИзменитьВладельцаСертификата ИЛИ ПереиздатьСертификат) 
		И ПустаяСтрока(ВладелецЭЦПМестоРождения) Тогда
		
		Результат.ТекстОшибки 		= НСтр("ru = 'Заполните место рождения сотрудника-владельца ЭП'");
		Результат.СодержитОшибку = Истина;
		
		Результат.РеквизитРедактируется = Истина;
		
	КонецЕсли;
	
	Возврат Результат;
	
КонецФункции

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

&НаСервере
Функция РезультатПроверки_ВладелецЭЦППол()
	
	Результат = РезультатПроверки_Шаблон();
	
	Если (ИзменитьВладельцаСертификата ИЛИ ПереиздатьСертификат) И НЕ ЗначениеЗаполнено(ВладелецЭЦППол) Тогда
			
		Результат.ТекстОшибки 	 = НСтр("ru = 'Заполните пол сотрудника-владельца ЭП'");
		Результат.СодержитОшибку = Истина;
		
	КонецЕсли;
	
	Результат.РеквизитРедактируется = ИзменитьВладельцаСертификата ИЛИ ПереиздатьСертификат;
	
	Возврат Результат;
	
КонецФункции

&НаСервере
Функция РезультатПроверки_ВладелецЭЦПДатаРождения()
	
	Результат = РезультатПроверки_Шаблон();
	
	Если (ИзменитьВладельцаСертификата ИЛИ ПереиздатьСертификат) И НЕ ЗначениеЗаполнено(ВладелецЭЦПДатаРождения) Тогда
			
		Результат.ТекстОшибки 	 = НСтр("ru = 'Заполните дату рождения сотрудника-владельца ЭП'");
		Результат.СодержитОшибку = Истина;
		
	КонецЕсли;
	
	Результат.РеквизитРедактируется = ИзменитьВладельцаСертификата ИЛИ ПереиздатьСертификат;
	
	Возврат Результат;
	
КонецФункции

&НаСервере
Функция РезультатПроверки_Должность()
	
	Результат = РезультатПроверки_Шаблон();
	
	Если ПереиздатьСертификат ИЛИ ИзменитьВладельцаСертификата Тогда
		Если ЭтоЮридическоеЛицо И ПустаяСтрока(ВладелецЭЦПДолжность) И НЕ ВладелецЭЦПЭтоФизЛицо Тогда
			
			Результат.ТекстОшибки 		= НСтр("ru = 'Заполните должность сотрудника-владельца ЭП'");
			Результат.СодержитОшибку = Истина;
			
		КонецЕсли;
	КонецЕсли;
	
	Результат.РеквизитРедактируется = ПереиздатьСертификат ИЛИ ИзменитьВладельцаСертификата;
	
	Возврат Результат;
	
КонецФункции

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

&НаСервере
Функция РезультатПроверки_ЭлектроннаяПочтаОрганизации()
	
	Результат = РезультатПроверки_Шаблон();
	
	КонтекстЭДОСервер = ДокументооборотСКО.ПолучитьОбработкуЭДО();
	
	СодержитОшибку = НЕ КонтекстЭДОСервер.ЭлектроннаяПочтаВведенаКорректно(
		ИтоговыеДанныеОрганизации_ЭлектроннаяПочтаОрганизации(),
		Перечисления.ТипыЗаявленияАбонентаСпецоператораСвязи.Изменение,
		Ложь);
	
	Если СодержитОшибку Тогда
		Результат.ТекстОшибки = НСтр("ru = 'Эл. почта организации содержит ошибки или не заполнена'");
		Результат.СодержитОшибку = Истина;
	КонецЕсли;
	
	Результат.РеквизитРедактируется = ИзменитьРеквизитыПодключенияК1СОтчетности И ЭлектроннаяПочтаОрганизацииИзменилась;
	
	Возврат Результат;
	
КонецФункции

&НаСервере
Функция РезультатПроверки_ТелефонОсновной()
	
	Результат = РезультатПроверки_Шаблон();
	
	Если ТелефонОсновнойИзменился И ИзменитьРеквизитыПодключенияК1СОтчетности Тогда
		Если СтрДлина(СокрЛП(ТелефонОсновной)) = 0 Тогда
			Результат.ТекстОшибки = НСтр("ru = 'Заполните телефон организации'");
			Результат.СодержитОшибку = Истина;
		КонецЕсли;
		
		Результат.РеквизитРедактируется = Истина;
		
	КонецЕсли;
	
	Возврат Результат;
	
КонецФункции

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

&НаСервере
Функция РезультатПроверки_КПП()
	
	Результат = РезультатПроверки_Шаблон();
	
	Если КППИзменился И ИзменитьРеквизитыПодключенияК1СОтчетности И ЭтоЮридическоеЛицо Тогда
		
		Если ПустаяСтрока(КПП) Тогда
			
			Результат.ТекстОшибки = НСтр("ru = 'Заполните КПП'");
			Результат.СодержитОшибку = Истина;
			
		ИначеЕсли НЕ (ДокументооборотСКОКлиентСервер.ПроверитьКПП(КПП)) Тогда
			
			Результат.ТекстОшибки = НСтр("ru = 'КПП должен состоять из 9 цифр'");
			Результат.СодержитОшибку = Истина;
			
		КонецЕсли;
		
	КонецЕсли;
		
	Возврат Результат;
	
КонецФункции

&НаСервере
Функция РезультатПроверки_ОГРН()
	
	Результат = РезультатПроверки_Шаблон();
	
	Если ОГРНИзменился И (ИзменитьРеквизитыПодключенияК1СОтчетности ИЛИ ПереиздатьСертификат) Тогда
		Если ПустаяСтрока(ОГРН) И НЕ ЭтоНотариусАдвокатИлиГКФХ Тогда
					
			Результат.ТекстОшибки = НСтр("ru = 'Заполните ОГРН'");
			Результат.СодержитОшибку = Истина;

			Возврат Результат;
			
		КонецЕсли;
			
		Длина = ?(ЭтоЮридическоеЛицо, 13, 15);

		Если НЕ ПустаяСтрока(ОГРН) И НЕ (ДокументооборотСКОКлиентСервер.ПроверитьЦифровойКодЗаданнойДлины(ОГРН, Длина)) Тогда
			
			Результат.ТекстОшибки = НСтр("ru = 'ОГРН должен состоять из 13 цифр'");
			Результат.СодержитОшибку = Истина;
			
		КонецЕсли;
		
	КонецЕсли;
		
	Возврат Результат;
	
КонецФункции

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

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

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

&НаКлиенте
Процедура ТаблицаДанныхЗаявленияНаПодключениеВыбор_ПослеЗаполненияДолжности(Результат, ВходящийКонтекст) Экспорт
	
	ОбработкаОповещения("Запись_ФизическиеЛица", ВладелецЭЦП, ВладелецЭЦП);
	
КонецПроцедуры

&НаСервере
Функция ИмяПеречисленияПараметрыПодключенияК1СОтчетности(ЭлементПеречисления)
	
	ИмяПеречисления = ЭлементПеречисления.Метаданные().Имя;
	ИндексЗначенияПеречисления = Перечисления.ПараметрыПодключенияК1СОтчетности.Индекс(ЭлементПеречисления);
	Возврат Метаданные.Перечисления.ПараметрыПодключенияК1СОтчетности.ЗначенияПеречисления[ИндексЗначенияПеречисления].Имя;

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

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

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

&НаСервере
Процедура СформироватьТаблицуДляПодтвержденияДанных_ДанныеОрганизации()
	
	ДобавитьЗаголовокВТаблицу("Сведения об организации");
	
	ДобавитьВТаблицуПроверки(
		Перечисления.ПараметрыПодключенияК1СОтчетности.КраткоеНаименование, 
		ИтоговыеДанныеОрганизации_КраткоеНаименование(), 
		КраткоеНаименованиеИзменилось И (ИзменитьРеквизитыПодключенияК1СОтчетности ИЛИ ПереиздатьСертификат),
		Организация);
		
	ДобавитьВТаблицуПроверки(
		Перечисления.ПараметрыПодключенияК1СОтчетности.ИНН, 
		ИНН, 
		Ложь,// ИНН запрещено менять
		Организация,
		РезультатПроверки_ИНН()); 
		
	Если ЭтоЮридическоеЛицо Тогда
		ДобавитьВТаблицуПроверки(
			Перечисления.ПараметрыПодключенияК1СОтчетности.КПП, 
			ИтоговыеДанныеОрганизации_КПП(),
			КППИзменился И ИзменитьРеквизитыПодключенияК1СОтчетности,
			Организация,
			РезультатПроверки_КПП());
	КонецЕсли;
	
	Если НЕ ВладелецЭЦПЭтоФизЛицо Тогда
		
		// Область
		Если ЭтоУдаленноеПереизданиеСертификата Тогда
			ИтоговоеЗначение = ОбработкаЗаявленийАбонента.ПолеСертификата_2_5_4_8(АдресЮридический_JSON);
		Иначе
			ИтоговоеЗначение = ИтоговыеДанныеОрганизации_Адрес(ОбластьИзменилась, Область, ОбластьИсходная);
		КонецЕсли;
		
		ДобавитьВТаблицуПроверки(
			Перечисления.ПараметрыПодключенияК1СОтчетности.Область, 
			ИтоговоеЗначение,
			ОбластьИзменилась И (ИзменитьРеквизитыПодключенияК1СОтчетности ИЛИ ПереиздатьСертификат),
			Организация,
			РезультатПроверки_Шаблон());
			
		// Город
		Если ЭтоУдаленноеПереизданиеСертификата Тогда
			ИтоговоеЗначение = ОбработкаЗаявленийАбонента.ПолеСертификата_2_5_4_7(АдресЮридический_JSON);
		Иначе
			ИтоговоеЗначение = ИтоговыеДанныеОрганизации_Адрес(ГородИзменился, Город, ГородИсходный);
		КонецЕсли;
		
		ДобавитьВТаблицуПроверки(
			Перечисления.ПараметрыПодключенияК1СОтчетности.Город, 
			ИтоговоеЗначение,
			ГородИзменился И (ИзменитьРеквизитыПодключенияК1СОтчетности ИЛИ ПереиздатьСертификат),
			Организация,
			РезультатПроверки_Шаблон());
			
		// Улица
		Если ЭтоУдаленноеПереизданиеСертификата Тогда
			ИтоговоеЗначение = ОбработкаЗаявленийАбонента.ПолеСертификата_2_5_4_9(АдресЮридический_JSON);
		Иначе
			ИтоговоеЗначение = ИтоговыеДанныеОрганизации_Адрес(УлицаИзменилась, Улица, УлицаИсходная);
		КонецЕсли;
		
		ДобавитьВТаблицуПроверки(
			Перечисления.ПараметрыПодключенияК1СОтчетности.Улица, 
			ИтоговоеЗначение,
			УлицаИзменилась И (ИзменитьРеквизитыПодключенияК1СОтчетности ИЛИ ПереиздатьСертификат),
			Организация,
			РезультатПроверки_Шаблон());
			
	КонецЕсли;
	
	Если НЕ ЭтоИностраннаяОрганизация Тогда
		ДобавитьВТаблицуПроверки(
			Перечисления.ПараметрыПодключенияК1СОтчетности.ОГРН, 
			ИтоговыеДанныеОрганизации_ОГРН(),
			ОГРНИзменился И (ИзменитьРеквизитыПодключенияК1СОтчетности ИЛИ ПереиздатьСертификат),
			Организация,
			РезультатПроверки_ОГРН());
	КонецЕсли;
	
	ДобавитьВТаблицуПроверки(
		Перечисления.ПараметрыПодключенияК1СОтчетности.ТелефонОсновной, 
		ИтоговыеДанныеОрганизации_ТелефонОсновной(),
		ТелефонОсновнойИзменился И ИзменитьРеквизитыПодключенияК1СОтчетности,
		Организация,
		РезультатПроверки_ТелефонОсновной());
		
	ДобавитьВТаблицуПроверки(
		Перечисления.ПараметрыПодключенияК1СОтчетности.ЭлектроннаяПочтаОрганизации, 
		ИтоговыеДанныеОрганизации_ЭлектроннаяПочтаОрганизации(),
		ЭлектроннаяПочтаОрганизацииИзменилась И ИзменитьРеквизитыПодключенияК1СОтчетности,
		Организация,
		РезультатПроверки_ЭлектроннаяПочтаОрганизации());
			
КонецПроцедуры

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

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

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

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

&НаСервере
Функция ИтоговыеДанныеВладельца_ТелефонМобильный_ДляПаролей()
	
	Изменился = ТелефонМобильныйДляПаролейИзменился();
		
	Возврат ?(Изменился, ТелефонМобильныйДляПаролей, ПроверкаТелефонДляПаролей.ИсходноеЗначение);

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

&НаСервере
Функция ИтоговыеДанныеВладельца_ЭлектроннаяПочта_ДляПаролей()
	
	Изменился = ЭлектроннаяПочтаДляПаролейИзменена();
		
	Возврат ?(Изменился, ЭлектроннаяПочтаДляПаролей, ПроверкаЭлектроннаяПочтаДляПаролей.ИсходноеЗначение);

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

&НаКлиентеНаСервереБезКонтекста
Функция ТелефонМобильныйЗаполнен(Телефон)
	
	Возврат ЭлектронныйДокументооборотСКонтролирующимиОрганамиКлиентСервер.ТелефонМобильныйЗаполнен(Телефон);
	
КонецФункции

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

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

&НаСервере
Функция КонтактДляОблакаИзменился(Значение, Проверка)
	
	Изменилась =
		Проверка <> Неопределено
		И (КонтактВФорматеДляСравнение(Проверка.ИсходноеЗначение) <> КонтактВФорматеДляСравнение(Значение)
		И (Проверка.ЗначениеВведено ИЛИ НЕ ЗначениеЗаполнено(Значение))
		ИЛИ НЕ ЗначениеЗаполнено(Проверка.ИсходноеЗначение)
		ИЛИ НЕ ПодтверждениеКонтактаВыполнено(Проверка));
		
	Возврат Изменилась;
		
КонецФункции

&НаСервере
Функция ПодтверждениеКонтактаВыполнено(Проверка)
	
	Возврат 
		ЭтоОблако(ЭтотОбъект)
		// телефон
		И (Проверка<> Неопределено 
		И Проверка.ПодтверждениеВыполнено);
		
КонецФункции

&НаСервере
Функция КонтактВФорматеДляСравнение(Контакт)
	
	Если СтрНайти(Контакт, "@") Тогда
		Возврат Контакт;
	Иначе
		Возврат ПолучитьПредставлениеТелефона(Контакт);
	КонецЕсли;
	
КонецФункции

&НаСервере
Функция ЭлектроннаяПочтаИзменилась()
	
	Изменилась = 
		Форматировать(ЭлектроннаяПочта) <> Форматировать(ЭлектроннаяПочтаИсходная)
		ИЛИ НЕ ЗначениеЗаполнено(ЭлектроннаяПочта)
		ИЛИ НЕ ЗначениеЗаполнено(ЭлектроннаяПочтаИсходная);
		
	Возврат Изменилась; 
		
КонецФункции

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

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

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

	ДобавитьВТаблицуПроверки(
		Перечисления.ПараметрыПодключенияК1СОтчетности.ЭлектроннаяПочтаДляПаролей,
		ЭлектроннаяПочтаДляПаролей, 
		ЭлектроннаяПочтаДляПаролейИзменена(),
		Организация,
		РезультатПроверки_ЭлектроннаяПочта_ДляПаролей());
	
КонецПроцедуры

&НаСервере
Функция ВладелецЭЦПФИО()

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

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

&НаСервере
Функция РезультатПроверки_НастройкиПользователей()
	
	Результат = РезультатПроверки_Шаблон();
	Возврат Результат;
	
КонецФункции

&НаСервере
Процедура СформироватьТаблицуДляПодтвержденияДанных_Владелец()
	
	ДобавитьЗаголовокВТаблицу("Сведения о владельце электронной подписи");

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

	ДобавитьВТаблицуПроверки(
		Перечисления.ПараметрыПодключенияК1СОтчетности.ВладелецЭЦПДатаРождения, 
		Формат(ВладелецЭЦПДатаРождения, "ДЛФ=D"),
		Ложь,
		ВладелецРеквизита,
		РезультатПроверки_ВладелецЭЦПДатаРождения());
		
	ДобавитьВТаблицуПроверки(
		Перечисления.ПараметрыПодключенияК1СОтчетности.ВладелецЭЦППол, 
		ВладелецЭЦППол, 
		Ложь,
		ВладелецРеквизита,
		РезультатПроверки_ВладелецЭЦППол());
		
	ДобавитьВТаблицуПроверки(
		Перечисления.ПараметрыПодключенияК1СОтчетности.ВладелецЭЦПГражданство, 
		ВладелецЭЦПГражданство, 
		Ложь,
		ВладелецРеквизита,
		РезультатПроверки_ВладелецЭЦПГражданство());
		
	КонтекстЭДОСервер = ДокументооборотСКО.ПолучитьОбработкуЭДО();
	ВладелецЭЦПВидДокументаКод = КонтекстЭДОСервер.ПолучитьКодВидаДокументаФизическогоЛица(ВладелецЭЦПВидДокумента);

	Изменился = 
		Форматировать(ВладелецЭЦПВидДокументаКодИсходный) <> Форматировать(ВладелецЭЦПВидДокументаКод) 
		И (ИзменитьВладельцаСертификата ИЛИ БудетПереизданСертификат);

	ДобавитьВТаблицуПроверки(
		Перечисления.ПараметрыПодключенияК1СОтчетности.ВладелецЭЦПВидДокумента, 
		ВладелецЭЦПВидДокумента, 
		Изменился,
		ВладелецРеквизита,
		РезультатПроверки_ВладелецЭЦПВидДокумента());

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

&НаСервере
Процедура СформироватьТаблицуДляПодтвержденияДанных_ГосОрганы()
	
	ДобавитьЗаголовокВТаблицу("Сведения о контролирующих органах"); // заголовок
	
	// ФНС
	ДобавитьВТаблицуПроверки(
		Перечисления.ПараметрыПодключенияК1СОтчетности.СдаватьВФНС,
		ИтоговыеДанныеГосОрганы_СдаватьВОрган("ФНС"), 
		СдаватьВФНСИзменился И ИзменитьСоставКонтролирующихОрганов);
		
	ДобавитьВТаблицуПроверки(
		Перечисления.ПараметрыПодключенияК1СОтчетности.КодыФНС, 
		ИтоговыеДанныеГосОрганы_КодыФНС(), 
		СдаватьВФНС И КодыФНСИзменились И ИзменитьСоставКонтролирующихОрганов);
		
	// ПФР
	ДобавитьВТаблицуПроверки(
		Перечисления.ПараметрыПодключенияК1СОтчетности.СдаватьВПФР, 
		ИтоговыеДанныеГосОрганы_СдаватьВОрган("ПФР"), 
		(СдаватьВПФРИзменился ИЛИ СдаватьВФССИзменился) И ИзменитьСоставКонтролирующихОрганов);
		
	СдаватьВСФР = СдаватьВПФР ИЛИ СдаватьВФСС;
		
	ДобавитьВТаблицуПроверки(
		Перечисления.ПараметрыПодключенияК1СОтчетности.КодПФР, 
		ИтоговыеДанныеГосОрганы_КодПФР(), 
		СдаватьВСФР И КодПФРИзменился И ИзменитьСоставКонтролирующихОрганов);
		
	ДобавитьВТаблицуПроверки(
		Перечисления.ПараметрыПодключенияК1СОтчетности.РегНомерПФР, 
		ИтоговыеДанныеОрганизации_РегНомерПФР(),
		СдаватьВСФР И РегНомерПФРИзменился И ИзменитьСоставКонтролирующихОрганов,
		Организация);
		
	Если ИспользоватьРегНомерСФР Тогда
		ДобавитьВТаблицуПроверки(
			Перечисления.ПараметрыПодключенияК1СОтчетности.РегНомерСФР, 
			ИтоговыеДанныеОрганизации_РегНомерСФР(),
			СдаватьВСФР И РегНомерСФРИзменился И ИзменитьСоставКонтролирующихОрганов,
			Организация);
	КонецЕсли;
		
	// Росстат
	ДобавитьВТаблицуПроверки(
		Перечисления.ПараметрыПодключенияК1СОтчетности.СдаватьВРосстат, 
		ИтоговыеДанныеГосОрганы_СдаватьВОрган("Росстат"), 
		СдаватьВРосстатИзменился И ИзменитьСоставКонтролирующихОрганов);
		
	ДобавитьВТаблицуПроверки(
		Перечисления.ПараметрыПодключенияК1СОтчетности.КодРосстата, 
		ИтоговыеДанныеГосОрганы_КодыРосстата(), 
		СдаватьВРосстат И КодыРосстатаИзменились И ИзменитьСоставКонтролирующихОрганов);
		
	// ФСРАР
	ДобавитьВТаблицуПроверки(
		Перечисления.ПараметрыПодключенияК1СОтчетности.СдаватьВФСРАР, 
		ПодатьЗаявкуНаСертификатДляФСРАР, 
		ИзменитьСоставКонтролирующихОрганов И ПодатьЗаявкуНаСертификатДляФСРАРИзменился);
		
	ДобавитьВТаблицуПроверки(
		Перечисления.ПараметрыПодключенияК1СОтчетности.КодРегионаФСРАР, 
		ИтоговыеДанныеОрганизации_КодРегионаФСРАР(),
		ПодатьЗаявкуНаСертификатДляФСРАР И КодРегионаФСРАРИзменился И ИзменитьСоставКонтролирующихОрганов,
		Организация);
		
	// Остальные		
	ДобавитьВТаблицуПроверки(
		Перечисления.ПараметрыПодключенияК1СОтчетности.СдаватьВРПН, 
		ПодатьЗаявкуНаПодключениеРПН, 
		ИзменитьСоставКонтролирующихОрганов И ПодатьЗаявкуНаПодключениеРПНИзменился);
	
	ДобавитьВТаблицуПроверки(
		Перечисления.ПараметрыПодключенияК1СОтчетности.СдаватьВФТС, 
		ПодатьЗаявкуНаПодключениеФТС, 
		ИзменитьСоставКонтролирующихОрганов И ПодатьЗаявкуНаПодключениеФТСИзменился);

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

&НаСервере
Процедура СформироватьТаблицуДляПодтвержденияДанных_ЭДО()
	
	Если ПоказатьЭлементыПодключенияЭДО(ЭтотОбъект) И ПодключитьЭДО Тогда
		ДобавитьЗаголовокВТаблицу("Подключение к сервису 1С-ЭДО");
		ДобавитьВТаблицуПроверки("Подключиться к сервису 1С-ЭДО", Истина, Истина);
	КонецЕсли;
	
	Если ПоказатьЭлементыПереизданияЭДО(ЭтотОбъект) И ПереиздатьСертификатЭДО Тогда
		ДобавитьЗаголовокВТаблицу("Обновление сертификата 1С-ЭДО");
		ДобавитьВТаблицуПроверки("Обновить сертификат 1С-ЭДО", Истина, Истина);
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура СформироватьТаблицуДляПодтвержденияДанных_Лицензия()
	
	Текст = ?(ПродлитьЛицензиюНа1СОтчетность, "Да (может потребоваться дополнительная оплата)", "Нет");
		
	ДобавитьВТаблицуПроверки(
		Перечисления.ПараметрыПодключенияК1СОтчетности.ПродлениеЛицензии,
		Текст, 
		ПродлитьЛицензиюНа1СОтчетность);
	
КонецПроцедуры

&НаСервере
Процедура СформироватьТаблицуДляПодтвержденияДанных() Экспорт
	
	ПорядковыйНомерСтроки = 0;
	
	ТаблицаДанныхЗаявленияНаПодключение.Очистить();
	
	СформироватьТаблицуДляПодтвержденияДанных_Криптография();
	СформироватьТаблицуДляПодтвержденияДанных_Лицензия();
	СформироватьТаблицуДляПодтвержденияДанных_Пользователи();
	СформироватьТаблицуДляПодтвержденияДанных_ДанныеОрганизации();
	СформироватьТаблицуДляПодтвержденияДанных_Владелец();
	СформироватьТаблицуДляПодтвержденияДанных_ГосОрганы();
	СформироватьТаблицуДляПодтвержденияДанных_ЭДО();
	СформироватьТаблицуДляПодтвержденияДанных_ОблачнаяПодпись();
	
	// Выделяем желтым измененные строки
	ДобавитьЖелтыеСтроки();
	
	ОтметитьНеХранящиесяРеквизиты();
	
КонецПроцедуры

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

&НаСервере
Процедура ДобавитьЖелтыеСтроки()
	
	КоличествоСтрок = ТаблицаДанныхЗаявленияНаПодключение.Количество();
	
	Отбор = Новый Структура();
	Отбор.Вставить("ЭтотПараметрИзменился", Истина);
	
	КоличествоИзмененныхСтрок = ТаблицаДанныхЗаявленияНаПодключение.НайтиСтроки(Отбор).Количество();
	
	СтрокаТаблицыПодтверждения = ДобавитьЗаголовокВТаблицу("Изменяемые настройки подключения"); // заголовок
	ПорядковыйНомерСтроки = 0;
	СтрокаТаблицыПодтверждения.ПорядковыйНомерСтроки = 0;
	
	Для сч = 0 По КоличествоСтрок - 1 Цикл
		СтрокаТаблицаДанных = ТаблицаДанныхЗаявленияНаПодключение[сч];
		Если СтрокаТаблицаДанных.ЭтотПараметрИзменился Тогда
			
			РезультатПроверки = РезультатПроверки_Шаблон();
			ЗаполнитьЗначенияСвойств(РезультатПроверки, СтрокаТаблицаДанных);
			
			ДобавитьВТаблицуПроверки(
				СтрокаТаблицаДанных.ИзмененныйРеквизит, 
				СтрокаТаблицаДанных.ЗначениеРеквизита, 
				СтрокаТаблицаДанных.ЭтотПараметрИзменился, 
				СтрокаТаблицаДанных.ВладелецРеквизита,
				РезультатПроверки);
				
			СтрокаТаблицаДанных.ВыделятьСтрокуЖелтым = Ложь;
			
		КонецЕсли;
		СтрокаТаблицаДанных.ПорядковыйНомерСтроки = СтрокаТаблицаДанных.ПорядковыйНомерСтроки + КоличествоИзмененныхСтрок + 1;
	КонецЦикла;
	
	СтрокаТаблицыПодтверждения 	= ДобавитьЗаголовокВТаблицу("", Ложь); // заголовок
	ПорядковыйНомерСтроки 		= ПорядковыйНомерСтроки - 1;
	СтрокаТаблицыПодтверждения.ПорядковыйНомерСтроки = КоличествоИзмененныхСтрок + 1; 
	
	ТаблицаДанныхЗаявленияНаПодключение.Сортировать("ПорядковыйНомерСтроки");

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

&НаСервере
Функция ДобавитьЗаголовокВТаблицу(НазваниеРеквизита, ВыделятьСтрокуЖирным = Истина)
	
	ПорядковыйНомерСтроки = ПорядковыйНомерСтроки + 1;
		
	НоваяСтрока = ТаблицаДанныхЗаявленияНаПодключение.Добавить();
	НоваяСтрока.НазваниеРеквизита = НазваниеРеквизита;
	НоваяСтрока.ВыделятьСтрокуЖирным = ВыделятьСтрокуЖирным;
	НоваяСтрока.ПорядковыйНомерСтроки	= ПорядковыйНомерСтроки;
	
	Возврат НоваяСтрока;
	
КонецФункции

&НаСервере
Процедура ДобавитьВТаблицуПроверки(
		ИзмененныйРеквизит,  
		ЗначениеРеквизита = "", 
		ЭтотПараметрИзменился = Ложь,
		ВладелецРеквизита = Неопределено,
		РезультатПроверки = Неопределено)
		
	ПорядковыйНомерСтроки = ПорядковыйНомерСтроки + 1;
		
	НоваяСтрока = ТаблицаДанныхЗаявленияНаПодключение.Добавить();
	
	НоваяСтрока.ИзмененныйРеквизит		= ИзмененныйРеквизит;
	НоваяСтрока.НазваниеРеквизита 		= Строка(ИзмененныйРеквизит);
	НоваяСтрока.ЗначениеРеквизита		= ЗначениеРеквизита;
	НоваяСтрока.ЭтотПараметрИзменился 	= ЭтотПараметрИзменился;
	НоваяСтрока.ВыделятьСтрокуЖелтым 	= ЭтотПараметрИзменился;
	НоваяСтрока.ПорядковыйНомерСтроки	= ПорядковыйНомерСтроки;
	
	Если ВладелецРеквизита <> Неопределено Тогда
		НоваяСтрока.ВладелецРеквизита = ВладелецРеквизита;
	КонецЕсли;
	
	Если РезультатПроверки <> Неопределено Тогда
		ЗаполнитьЗначенияСвойств(НоваяСтрока, РезультатПроверки);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ЗадатьНовоеЗначениеРеквизиту(ИмяРеквизита, НаименованиеРеквизита, ИзменяемыйРеквизит, МаскаРеквизита = Неопределено)
	
	ОткрытьФормуРедактированияРеквизита(ИмяРеквизита, НаименованиеРеквизита, ИзменяемыйРеквизит, МаскаРеквизита);

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

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

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

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

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

&НаСервере
Процедура СформироватьТаблицуДляПодтвержденияДанных_ОблачнаяПодпись()
	
	Если НЕ КриптографияЭДКОКлиентСервер.ЭтоОблачнаяПодпись(МестоХраненияКлюча) ИЛИ НЕ ИзменитьМестоХранения Тогда
		Возврат;
	КонецЕсли;
	
	ДобавитьЗаголовокВТаблицу("Настройки ЭП в программе"); // заголовок
	
	Если СвойствоОблачнойПодписи.СменитьКлючМобильногоПриложения ИЛИ СвойствоОблачнойПодписи.СменитьКлючМобильногоПриложенияАвтоматически Тогда
		ДобавитьВТаблицуПроверки(
		НСтр("ru = 'Получить новый ключ в мобильном приложении'"),
			Истина,
			Истина);
	КонецЕсли;
		
	Если СвойствоОблачнойПодписи.ОтправкаКодаАктивации Тогда
		ДобавитьВТаблицуПроверки(
			НСтр("ru = 'Получить код активации'"),
			Истина,
			Истина);
	КонецЕсли;
		
	Если СвойствоОблачнойПодписи.ОтправкаКлючаМобильногоПриложения Тогда
		ДобавитьВТаблицуПроверки(
			НСтр("ru = 'Получить QR-код и код активации'"),
			Истина,
			Истина);
	КонецЕсли;
	
	Если СвойствоОблачнойПодписи.СменитьПароль Тогда
		ДобавитьВТаблицуПроверки(
		НСтр("ru = 'Получить новый пароль от учетной записи 1С:DSS'"),
			Истина,
			Истина);
	КонецЕсли;
		
	Если ЗначениеЗаполнено(СвойствоОблачнойПодписи.Телефон) Тогда
		ТелефонДляКодов = ПолучитьПредставлениеТелефона(СвойствоОблачнойПодписи.Телефон);
		ДобавитьВТаблицуПроверки(
			НСтр("ru = 'Изменить контакты для получения кодов'"),
			ТелефонДляКодов,
			Истина);
	КонецЕсли;
		
	Если СвойствоОблачнойПодписи.СоздатьУчетнуюЗапись Тогда
		ДобавитьВТаблицуПроверки(
			НСтр("ru = 'Новый логин учетной записи 1С:DSS'"),
			СвойствоОблачнойПодписи.НовыйЛогин,
			Истина);
	КонецЕсли;
		
	Изменилось = Ложь;
	Если НЕ СвойствоОблачнойПодписи.СоздатьУчетнуюЗапись Тогда
		Изменилось = СвойствоОблачнойПодписи.ИсходнаяУчетнаяЗапись <> СвойствоОблачнойПодписи.УчетнаяЗапись;
	КонецЕсли;
	Если Изменилось Тогда			
		ДобавитьВТаблицуПроверки(
			НСтр("ru = 'Смена учетной записи 1C:DSS'"),
			СвойствоОблачнойПодписи.УчетнаяЗапись,
			Истина);
	КонецЕсли;
	
КонецПроцедуры

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

#Область ИзменитьОформлениеЭлементов

&НаСервере
Процедура ИзменитьОформлениеДобавляемыхФлагов()
	
	ОбработкаЗаявленийАбонента.ИзменитьОформлениеДобавляемыхФлагов(ЭтотОбъект);
	
КонецПроцедуры

&НаСервере
Процедура ИзменитьОформлениеЗаголовкаФормы()

	ЭлектронныйДокументооборотСКонтролирующимиОрганамиКлиентСервер.ДобавитьОрганизациюВЗаголовок(
		ЭтотОбъект.Заголовок, 
		ИспользуетсяОднаОрганизация, 
		КраткоеНаименование,
		// Разный заголовок!
		НСтр("ru = 'Изменение настроек подключения к 1С-Отчетности'"));

КонецПроцедуры
	
&НаКлиентеНаСервереБезКонтекста
Процедура ИзменитьОформление1СЭДО(Форма)
	
	ИзменитьОформление1СЭДО_Подключение(Форма);
	ИзменитьОформление1СЭДО_Переиздание(Форма);
	ИзменитьОформление1СЭДО_ПодсказкиНедоступногоЭДО(Форма);
	ИзменитьОформление1СЭДО_Заголовок(Форма);
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура ИзменитьОформление1СЭДО_Заголовок(Форма)
	
	Элементы = Форма.Элементы;
	
	Элементы.ГруппаЭДО.Видимость = 
		Элементы.ГруппаПодключитьЭДО.Видимость
		ИЛИ Элементы.ФлагПереиздатьСертификатЭДО.Видимость
		ИЛИ Элементы.ПодсказкаНедоступного1СЭДО.Видимость;
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура ИзменитьОформление1СЭДО_Переиздание(Форма)
	
	Элементы = Форма.Элементы;
	
	ПоказатьЭлементыПереиздания = ПоказатьЭлементыПереизданияЭДО(Форма);
		
	Элементы.ФлагПереиздатьСертификатЭДО.Доступность = Форма.ЕстьПравоНастройкиЭДО;
	Элементы.ФлагПереиздатьСертификатЭДО.Видимость   = ПоказатьЭлементыПереиздания;
	
КонецПроцедуры

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

&НаКлиентеНаСервереБезКонтекста
Процедура ИзменитьОформление1СЭДО_ПодсказкиНедоступногоЭДО(Форма)
	
	Элементы = Форма.Элементы;
	
	ПоказатьЭлементыПодключения = ПоказатьЭлементыПодключенияЭДО(Форма);
	ПоказатьЭлементыПереиздания = ПоказатьЭлементыПереизданияЭДО(Форма);
	
	Видимость = 
		НЕ Форма.ЕстьПравоНастройкиЭДО
		И (ПоказатьЭлементыПодключения ИЛИ ПоказатьЭлементыПереиздания);
		
	Элементы.ПодсказкаНедоступного1СЭДО.Видимость = Видимость;
	
	Если Видимость Тогда
		Если Форма.ЭтоПодключениеЭДО Тогда
			Элементы.ПодсказкаНедоступного1СЭДО.Заголовок = НСтр("ru = 'У пользователя недостаточно прав для подключения к 1С-ЭДО'");
		Иначе
			Элементы.ПодсказкаНедоступного1СЭДО.Заголовок = НСтр("ru = 'У пользователя недостаточно прав для обновления сертификата 1С-ЭДО'");
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры

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

&НаКлиентеНаСервереБезКонтекста
Процедура СкрытьГрупповоеДобавлениеДокументов(Форма)
	
	Сч = 0;
	ВидыДокументов = ОбработкаЗаявленийАбонентаКлиентСервер.ВидыДокументовПоФорме(Форма);
	Для каждого ТекущийВидДокумента Из ВидыДокументов Цикл
		Описание = ТекущийВидДокумента.Значение;
		Если Описание.Видимость Тогда
			Сч = Сч + 1;
		КонецЕсли;
	КонецЦикла;
	
	Элементы  = Форма.Элементы;
	ЕстьНесколькоДокументов = Сч > 1;
	
	Элементы.ВыбратьВсе.Видимость = ЕстьНесколькоДокументов;
	Элементы.ПодсказкаКСканКопиям.Видимость = ЕстьНесколькоДокументов;
	
КонецПроцедуры

&НаСервере
Функция ПредставлениеМестаХраненияКлючей()
	
	Если ВыбранноеМестоХраненияКлюча = Перечисления.МодельРаботыСКлючами.ВМоделиСервиса 
		ИЛИ КриптографияЭДКОКлиентСервер.ЭтоПодписьСервиса(МестоХраненияКлюча) Тогда
		ЭтоДолговременныйТокен = СпособПодтвержденияКриптоопераций = Перечисления.СпособыПодтвержденияКриптоопераций.ДолговременныйТокен;
		Если ЭтоДолговременныйТокен Тогда
			Представление = НСтр("ru = 'В программе (операции не подтверждать)'");
		Иначе
			Представление = НСтр("ru = 'В программе'");
		КонецЕсли;
		
	ИначеЕсли КриптографияЭДКОКлиентСервер.ЭтоОблачнаяПодпись(МестоХраненияКлюча) Тогда
		РазделительСсылок = Символы.ПС;
		ОшибкаНастроек = Ложь;
		ОшибкаЛогина = Ложь;
		Представление = НСтр("ru = '<a %1 href = ""ВыборМестаХранения"">В программе (сервис 1С:DSS)</a>'");
		
		Если ЗначениеЗаполнено(СвойствоОблачнойПодписи.УчетнаяЗапись) И СвойствоОблачнойПодписи.ПоставляемыйСервер 
			И СвойствоОблачнойПодписи.УчетнаяЗапись <> СвойствоОблачнойПодписи.ИсходнаяУчетнаяЗапись Тогда
			Представление = Представление + ": " + СокрЛП(СвойствоОблачнойПодписи.УчетнаяЗапись);
		ИначеЕсли ЗначениеЗаполнено(СвойствоОблачнойПодписи.УчетнаяЗапись) И СвойствоОблачнойПодписи.ПоставляемыйСервер Тогда
			Представление = Представление + ": " + СокрЛП(СвойствоОблачнойПодписи.УчетнаяЗапись) 
							+ РазделительСсылок + НСтр("ru = '<a href = ""НастройкиОблачнойПодписи"">Изменить настройки</a>'");
		ИначеЕсли ЗначениеЗаполнено(СвойствоОблачнойПодписи.УчетнаяЗапись) Тогда
			Представление = Представление + ": " + СокрЛП(СвойствоОблачнойПодписи.УчетнаяЗапись);
		ИначеЕсли ЗначениеЗаполнено(СвойствоОблачнойПодписи.НовыйЛогин) Тогда
			Представление = Представление + ": новая учетная запись " + СвойствоОблачнойПодписи.НовыйЛогин
							+ РазделительСсылок + НСтр("ru = '<a %2 href = ""НастройкиОблачнойПодписи"">Указать контакты</a>'");
			ОшибкаНастроек = НЕ (ЗначениеЗаполнено(СвойствоОблачнойПодписи.Телефон) ИЛИ (ЗначениеЗаполнено(ТелефонМобильный) И ИзменитьНастройкиУведомлений));
			ОшибкаЛогина = НЕ ЗначениеЗаполнено(СвойствоОблачнойПодписи.ИдентификаторСервера);
		ИначеЕсли НЕ ЗначениеЗаполнено(СвойствоОблачнойПодписи.УчетнаяЗапись) Тогда
			Представление = Представление + ": требует настройки";
			ОшибкаЛогина = Истина;
		КонецЕсли;
		
		СтильОшибки = "style=""color: ЦветОшибкиПроверкиБРО""";
		Если ОшибкаЛогина Тогда
			Представление = СтрЗаменить(Представление, "%1", СтильОшибки);
		Иначе
			Представление = СтрЗаменить(Представление, "%1", "");
		КонецЕсли;
			
		Если ОшибкаНастроек Тогда
			Представление = СтрЗаменить(Представление, "%2", СтильОшибки);
		Иначе
			Представление = СтрЗаменить(Представление, "%2", "");
		КонецЕсли;
		
		Представление = СтроковыеФункции.ФорматированнаяСтрока(Представление);
		
	Иначе
		Представление = Строка(ВыбранноеМестоХраненияКлюча);
		
	КонецЕсли;
	
	Если ВыбранноеМестоХраненияКлюча = Перечисления.ТипыКриптоПровайдеров.CryptoPro
		И ВключатьЛицензиюКриптоПроВСертификат Тогда
		
		Представление = Представление + НСтр("ru = ' (добавить лицензию в сертификат)'");
		
	КонецЕсли;
	
	Возврат Представление;
	
КонецФункции

&НаСервере
Процедура ИзменитьОформлениеМестаХраненияКлючей()
	
	ИзменитьОформлениеМестаХраненияКлючей_Настройки();
	ИзменитьОформлениеМестаХраненияКлючей_Картинка();
	ИзменитьОформлениеМестаХраненияКлючей_Флаг();
	
КонецПроцедуры

&НаСервере
Процедура ИзменитьОформлениеМестаХраненияКлючей_Картинка()
	
	Элементы.ПодсказкаВыбораМестаХранения.Видимость = ИзмененныеНастройкиХраненияКлюча().Количество() > 0;
	
КонецПроцедуры

&НаСервере
Процедура ИзменитьОформлениеМестаХраненияКлючей_Флаг()
	
	Элементы.ИзменитьМестоХранения.Доступность = ДоступностьМестаХраненияКлючей();
	
КонецПроцедуры

&НаСервере
Функция ДоступностьМестаХраненияКлючей()
	
	ДоступностьМестаХранения = 
		НЕ ИспользоватьСуществующий(ЭтотОбъект)
		И НЕ СертификатДолженБытьПолученОтГосУЦ;
	
	Возврат ДоступностьМестаХранения;
	
КонецФункции

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

	Иначе
		Надпись.Заголовок = НСтр("ru = 'Заполнить'");
		Надпись.ЦветТекста = КрасныйЦвет;
		Надпись.Гиперссылка = Истина;
	КонецЕсли;
	
	Если ПоказатьПодсказку Тогда
		Надпись.ОтображениеПодсказки = ОтображениеПодсказки.ОтображатьСнизу;
	Иначе
		Надпись.ОтображениеПодсказки = ОтображениеПодсказки.Нет;
	КонецЕсли;
	
	Надпись.Доступность = ДоступностьМестаХраненияКлючей() И ИзменитьМестоХранения;
	
КонецПроцедуры

&НаСервере
Процедура ИзменитьОформлениеВладельцаСертификата()

	ИзменитьОформлениеВладельцаСертификата_Группа();
	ИзменитьОформлениеВладельцаСертификата_Настройки();
	
	ОбработкаЗаявленийАбонентаКлиентСервер.ИзменитьОформлениеВладельцаЭП(ЭтотОбъект);
	
	ИзменитьОформлениеВладельцаСертификата_ДоступностьПриВключении();
	ИзменитьОформлениеВладельцаСертификата_Картинка();
	
КонецПроцедуры

&НаСервере
Процедура ИзменитьОформлениеВладельцаСертификата_ДоступностьПриВключении()

	Элементы.ГруппаВладелец.Доступность = ИзменитьВладельцаСертификата;
		 
КонецПроцедуры
	
&НаСервере
Процедура ИзменитьОформлениеВладельцаСертификата_Картинка()

	ИзмененныеРеквизиты  = ИзмененныеРеквизитыВладельца();
	
	Элементы.ПодсказкаИзменитьВладельца.Видимость = 
		ИзмененныеРеквизиты.Количество() > 0 
		И ЗначениеЗаполнено(ВладелецЭЦП);
		 
КонецПроцедуры
	
&НаСервере
Процедура ИзменитьОформлениеВладельцаСертификата_Настройки()

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

	Элементы.ГруппаИзменитьВладельцаСертификата.Доступность = НЕ ИзменилисьНастрокиDSS();
		 
КонецПроцедуры

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

&НаСервере
Процедура ИзменитьОформлениеРеквизитовОрганизации()
	
	ИзмененныеРеквизиты = ИзмененныеРеквизитыОрганизации();
	
	Элементы.ГруппаИзменитьРеквизитыПодключенияК1СОтчетности.Доступность = НЕ ИзменилисьНастрокиDSS();
	
	ИзменитьОформлениеРеквизитовОрганизации_Настройки(ИзмененныеРеквизиты);
	ИзменитьОформлениеРеквизитовОрганизации_Картинка(ИзмененныеРеквизиты);
	ИзменитьОформлениеРеквизитовОрганизации_Интервал();
	ИзменитьОформлениеДобавляемыхФлагов();
	ОбработкаЗаявленийАбонентаКлиентСервер.ИзменитьОформлениеБюджетополучателя(ЭтотОбъект);
	
КонецПроцедуры

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

&НаСервере
Процедура ИзменитьОформлениеРеквизитовОрганизации_Картинка(ИзмененныеРеквизиты)
	
	Элементы.КартинкаРеквизитыОрганизации.Видимость = ИзмененныеРеквизиты.Количество() > 0;
	
КонецПроцедуры

&НаСервере
Процедура ИзменитьОформлениеРеквизитовОрганизации_Настройки(ИзмененныеРеквизиты)
	
	ИзменитьОформлениеИзменившихсяРеквизитов(
		Элементы.ПодсказкаИзменитьРеквизитыПодключенияК1СОтчетности, 
		ИзмененныеРеквизиты, 
		ИзменитьРеквизитыПодключенияК1СОтчетности);
	
КонецПроцедуры

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

&НаСервере
Процедура ИзменитьОформлениеИзменившихсяРеквизитов(Надпись, ИзмененныеРеквизиты, ДоступностьРеквизита)
	
	// Определяем заголовок
	Если ИзмененныеРеквизиты.Количество() = 1 Тогда
		
		Надпись.Заголовок = НСтр("ru = 'Изменился реквизит - '") + ИзмененныеРеквизиты[0].Представление;
		
	ИначеЕсли ИзмененныеРеквизиты.Количество() = 1 Тогда
		
		Надпись.Заголовок = 
			НСтр("ru = 'Изменились '") 
			+ ИзмененныеРеквизиты[0].Представление 
			+ НСтр("ru = ' и '") 
			+ ИзмененныеРеквизиты[1].Представление;
			
	ИначеЕсли ИзмененныеРеквизиты.Количество() >= 2 Тогда
		
		Представление = ДлительнаяОтправкаКлиентСервер.ЧислоИПредметИсчисления(
			ИзмененныеРеквизиты.Количество(),
			НСтр("ru = 'реквизит'"),
			НСтр("ru = 'реквизита'"),
			НСтр("ru = 'реквизитов'"),
			"м");
			
		Если СтрНайти(Представление, НСтр("ru = 'реквизитов'")) > 0
			ИЛИ СтрНайти(Представление, НСтр("ru = 'реквизита'")) > 0 Тогда
			Представление = НСтр("ru = 'Изменилось '") + Представление;
		Иначе
			Представление = НСтр("ru = 'Изменился '") + Представление;
		КонецЕсли;
		
		Надпись.Заголовок = Представление;
		
	Иначе
		Надпись.Заголовок = НСтр("ru = 'Реквизиты не менялись'");
	КонецЕсли;
	
	Надпись.Доступность = ДоступностьРеквизита;
	Надпись.Гиперссылка = Ложь;
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Функция ЭтоОблако(Форма) Экспорт
	
	Возврат ОбработкаЗаявленийАбонентаКлиентСервер.ЭтоОблако(Форма);
	
КонецФункции

&НаСервере
Процедура ИзменитьОформлениеУведомлений()
	
	ИзменитьОформлениеУведомлений_Группа();
	ИзменитьОформлениеУведомлений_Настройки();
	ИзменитьОформлениеУведомлений_Картинка();
	
КонецПроцедуры

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

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

&НаСервере
Процедура ИзменитьОформлениеУведомлений_Картинка()
	
	Элементы.ПодсказкаИзменитьНастройкиУведомлений.Видимость   = ИзмененныеРеквизитыУведомлений().Количество() > 0;
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Функция ПолучитьПредставлениеТелефона(Телефон)
	
	Возврат ЭлектроннаяПодписьВМоделиСервисаКлиентСервер.ПолучитьПредставлениеТелефона(Телефон);
	
КонецФункции

&НаКлиентеНаСервереБезКонтекста
Функция ФорматироватьТелефон(Телефон)
	
	Возврат ОбработкаЗаявленийАбонентаКлиентСервер.ЦифрыИзСтроки(Телефон, Истина);
	
КонецФункции

&НаКлиентеНаСервереБезКонтекста
Функция ЦифрыИзСтроки(Телефон)
	
	Возврат ОбработкаЗаявленийАбонентаКлиентСервер.ЦифрыИзСтроки(Телефон, Ложь);
	
КонецФункции

&НаСервере
Функция ПризнакПодключеныЛиУведомления()
	
	Если ПолучатьСМСУведомления И ЗначениеЗаполнено(ТелефонМобильный) Тогда
		Если ПолучатьСМСУведомления Тогда
			ПризнакПодключеныЛиУведомления = НСтр("ru = ' (SMS подключены)'");
		Иначе
			ПризнакПодключеныЛиУведомления = НСтр("ru = ' (SMS не подключены)'");
		КонецЕсли;
	Иначе
		ПризнакПодключеныЛиУведомления = "";
	КонецЕсли;
	
	Возврат ПризнакПодключеныЛиУведомления;

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

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

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

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

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

&НаСервере
Функция ТелефонСПризнакомУведомлений(Телефон)
	
	Возврат Телефон + ПризнакПодключеныЛиУведомления();

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

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


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

&НаСервере
Функция ПодтверждениеКонтактовВыполнено()
	
	Возврат 
		ПодтверждениеКонтактаВыполнено(ПроверкаТелефонДляПаролей)
		И ПодтверждениеКонтактаВыполнено(ПроверкаЭлектроннаяПочтаДляПаролей) 
		ИЛИ НЕ ЭтоОблако(ЭтотОбъект);
		
КонецФункции

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

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

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

&НаСервере
Процедура ИзменитьОформлениеГиперссылки(ИмяЭлемента, Знач Значение, ОбязательныйДляЗаполнения, Доступно)
	
	Элемент = Элементы[ИмяЭлемента];
	
	ПроверяемоеЗначение	= Строка(Значение);
	ПроверяемоеЗначение	= СтрЗаменить(ПроверяемоеЗначение,"-","");
	ПроверяемоеЗначение	= СтрЗаменить(ПроверяемоеЗначение,",","");
	ПроверяемоеЗначение	= СтрЗаменить(ПроверяемоеЗначение," ","");
	
	ЗначениеЗаполнено 	= ЗначениеЗаполнено(ПроверяемоеЗначение);
	Элемент.Доступность = Доступно;
	
	// Заголовок
	Если ЗначениеЗаполнено Тогда
		Элемент.Заголовок = Строка(Значение);
	Иначе
		Элемент.Заголовок = "Заполнить";
	КонецЕсли;
	
	// Цвет
	Если НЕ Доступно Тогда
		Элемент.ЦветТекста 	= СерыйЦвет;
	ИначеЕсли ЗначениеЗаполнено Тогда
		Элемент.ЦветТекста 	= СинийЦвет;
	Иначе
		Элемент.ЦветТекста 	= ?(ОбязательныйДляЗаполнения, КрасныйЦвет, СинийЦвет);
	КонецЕсли;
	
	Элемент.Гиперссылка = Истина;
	
КонецПроцедуры

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

&НаСервере
Процедура ИзменитьОформлениеДействияССертификатом_Картинка()
	
	Надпись = Элементы.ПодсказкаИзменитьРеквизитыСертификата;
	
	ИзмененныеРеквизиты = ИзмененныеРеквизитыСертификата();
	
	Надпись.Видимость = 
		ИзмененныеРеквизиты.Количество() > 0
		И НЕ ИспользоватьСуществующий(ЭтотОбъект)
		И СертификатДоступен
		И НЕ СертификатДолженБытьПолученОтГосУЦ;
		
КонецПроцедуры

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

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

&НаСервере
Процедура ИзменитьОформлениеНаправлений() Экспорт
	
	Элементы.ИзменитьСоставКонтролирующихОрганов.Заголовок = Мультирежим.ЗаголовокГосОрганов(ЭтотОбъект);
	
	ИзменитьОформлениеНаправлений_Настройки();
	ИзменитьОформлениеНаправлений_Картинка();
	
КонецПроцедуры

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

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Процедура ИзменитьОформлениеДокументов(Форма)
	
	ОбработкаЗаявленийАбонентаКлиентСервер.ИзменитьОформлениеДокументов(Форма);
	СкрытьГрупповоеДобавлениеДокументов(Форма);
	
КонецПроцедуры

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

#Область Инициализация

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

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

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

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

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

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

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

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

&НаСервере
Процедура ИнициализироватьРеквизитыНеХранящиесяВБазе()
	
	РеквизитыНеХранящиесяВБазе = Новый ФиксированныйМассив(ЭлектронныйДокументооборотСКонтролирующимиОрганамиВызовСервера.РеквизитыНеХранящиесяВБазе(Организация));
		
КонецПроцедуры

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

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

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

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

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

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

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

&НаСервере
Процедура ИнициализироватьИсходныеРеквизиты1СОтчетности(УчетнаяЗапись)

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

&НаСервере
Процедура ИнициализироватьПользователей(ИзРегистра = Ложь)

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

	ТипКриптопровайдераИсходный 		= ДопРеквизитыУчетнойЗаписи.ТипКриптопровайдера;
	ЛицензияКриптоПроВключенаВСертификат= ДопРеквизитыУчетнойЗаписи.ЛицензияКриптоПроВключенаВСертификат;

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

&НаСервере
Процедура ИнициализироватьИсходныеРеквизиты1СОтчетности_Организация(ДопРеквизитыУчетнойЗаписи)

	КраткоеНаименованиеИсходное = ДопРеквизитыУчетнойЗаписи.КраткоеНаименование;
	КППИсходный 				= ДопРеквизитыУчетнойЗаписи.КПП;
	ОГРНИсходный 				= ДопРеквизитыУчетнойЗаписи.ОГРН;
	ЭтоНотариусАдвокатИлиГКФХ 	= ДопРеквизитыУчетнойЗаписи.ЭтоНотариусАдвокатИлиГКФХ;
	
	УлицаИсходная 	= ДопРеквизитыУчетнойЗаписи.Улица;
	ГородИсходный 	= ДопРеквизитыУчетнойЗаписи.Город;
	ОбластьИсходная = ДопРеквизитыУчетнойЗаписи.Область;

	Если УлицаИсходная = "" И ГородИсходный = "" И ОбластьИсходная = "" Тогда
		ИнициализироватьИсходныеРеквизиты1СОтчетности_АдресИзСертификата();
	КонецЕсли;
	
	ИнициализироватьИсходныеРеквизиты1СОтчетности_ОрганизацияКонтакты(ДопРеквизитыУчетнойЗаписи);

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

&НаСервере
Процедура ИнициализироватьИсходныеРеквизиты1СОтчетности_ОрганизацияКонтакты(ДопРеквизитыУчетнойЗаписи)

	ТелефонОсновнойИсходный = ДопРеквизитыУчетнойЗаписи.ТелефонОсновной;
	ЭлектроннаяПочтаОрганизацииИсходная = ДопРеквизитыУчетнойЗаписи.ЭлектроннаяПочтаОрганизации;
	
	ЗаполнитьКонтактыОрганизацииИсходными();

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

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

	Если НЕ ЗначениеЗаполнено(ТелефонОсновной) Тогда
		ТелефонОсновной = ТелефонОсновнойИсходный;
	КонецЕсли;
	
	Если НЕ ЗначениеЗаполнено(ЭлектроннаяПочтаОрганизации) Тогда
		ЭлектроннаяПочтаОрганизации = ЭлектроннаяПочтаОрганизацииИсходная;
	КонецЕсли;

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

&НаСервере
Процедура ИнициализироватьИсходныеРеквизиты1СОтчетности_АдресИзСертификата()
	
	Если ЭтоОблако(ЭтотОбъект) Тогда
		
		ДанныеСертификата = ЭлектроннаяПодписьВМоделиСервисаБРОВызовСервера.ПолучитьСертификатПоОрганизации(Организация);
		Субъект = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДанныеСертификата, "Субъект");
		
		Если Субъект <> Неопределено Тогда
			Субъект.Свойство("ST", ОбластьИсходная);
			Субъект.Свойство("L", ГородИсходный);
			Субъект.Свойство("STREET", УлицаИсходная);
		КонецЕсли;
		
	ИначеЕсли ЭтоОблачнаяПодпись(ЭтотОбъект) Тогда
		ДанныеСертификата = ЭлектроннаяПодписьВМоделиСервисаБРОВызовСервера.НайтиСертификатОблачнойПодписиПоОрганизации(Организация);
		Субъект = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДанныеСертификата, "Субъект");
		
		Если Субъект <> Неопределено Тогда
			Субъект.Свойство("ST", ОбластьИсходная);
			Субъект.Свойство("L", ГородИсходный);
			Субъект.Свойство("STREET", УлицаИсходная);
		КонецЕсли;
		
	ИначеЕсли ДвДанныеЛокальногоСертификата <> Неопределено Тогда
		
		ДанныеСертификата = Новый СертификатКриптографии(ДвДанныеЛокальногоСертификата);
		Субъект = ДанныеСертификата.Субъект;
		
		Субъект.Свойство("OID2_5_4_8", ОбластьИсходная);
		Субъект.Свойство("OID2_5_4_7", ГородИсходный);
		Субъект.Свойство("OID2_5_4_9", УлицаИсходная);
		
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ИнициализироватьИсходныеРеквизиты1СОтчетности_Лицензия(УчетнаяЗапись, ДопРеквизитыУчетнойЗаписи)

	ЛицензияНаименование  = УчетнаяЗапись.ЛицензияНаименование;
	ЛицензияДатаНачала    = УчетнаяЗапись.ЛицензияДатаНачала;
	ЛицензияДатаОкончания = УчетнаяЗапись.ЛицензияДатаОкончания + 24*60*60; // В последний день лицензия еще действует.
	ЛицензияТребуетсяНапоминаниеОбОкончанииСрокаДействия = УчетнаяЗапись.ЛицензияТребуетсяНапоминаниеОбОкончанииСрокаДействия;
	
	СекундВОдномДне = 24 * 60 * 60;
	КоличествоДнейДоОкончанияЛицензии = (НачалоДня(ЛицензияДатаОкончания) - НачалоДня(ТекущаяДатаСервер))/СекундВОдномДне;
	ПродлитьЛицензиюНа1СОтчетностьИсходный = КоличествоДнейДоОкончанияЛицензии <= ТридцатьДней;

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

&НаСервере
Процедура ИнициализироватьИсходныеРеквизиты1СОтчетности_ВладелецЭП(ДопРеквизитыУчетнойЗаписи)

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

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

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

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

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

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

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

&НаСервере
Процедура ИнициализироватьПараметрыУЦ()
	
	КонтекстЭДОСервер = ДокументооборотСКО.ПолучитьОбработкуЭДО();
	КонтекстЭДОСервер.ИнициализироватьПараметрыУЦ(ЭтотОбъект);
	
КонецПроцедуры

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

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

&НаСервере
Процедура ИнициализироватьКонстантныеЗначения()
	
	ТекущаяДатаСервер = ТекущаяДатаСеанса();
	ПоддерживаетсяМультирежим = Мультирежим.ПоддерживаетсяМультирежим();
	ТекущийПользователь = Пользователи.ТекущийПользователь();
	ИспользуетсяРежимТестирования = ДокументооборотСКОВызовСервера.ИспользуетсяРежимТестирования();
	ИспользоватьРегНомерСФР = ДокументооборотСКОВызовСервера.СобытиеНаступилоИспользоватьРегНомерСФР();
	ЭтоРежимОблачной1СО = ДокументооборотСКОПовтИсп.ЭтоРежимОблачной1СО();
	ЭтоРежимОграниченнойФункциональности = ЭлектронныйДокументооборотСКонтролирующимиОрганами.ЭтоРежимОграниченнойФункциональности();
	ЭтоРежимБесплатнойНулевойОтчетности  = ЭлектронныйДокументооборотСКонтролирующимиОрганами.ЭтоРежимБесплатнойНулевойОтчетности();
	
	// Состояния флагов
	Рекомендовано = 1;
	Обязательно   = 2;
	Требует       = 2;
	НеТребуется   = 0;
	Препятствует  = Истина;
	
	// Цвета
	ЧерныйЦвет 			= Новый Цвет(65, 48, 3);
	СерыйЦвет 			= Новый Цвет(87, 87, 87);
	СинийЦвет 			= Новый Цвет(28, 85, 174);
	КрасныйЦвет 		= Новый Цвет(178,34, 34);
	ЦветТекстаФормы 	= Новый Цвет(65, 48, 3);
	
	Требования = ОбработкаЗаявленийАбонентаКлиентСервер.ТребованияВложениямЗаявления();
	ДопустимыеТипыФайлов    = Требования.ДопустимыеТипыФайлов;
	МаксимальныйРазмерФайла = Требования.МаксимальныйРазмерФайла;

	// Данные службы поддержки - контактные данные АО "Калуга Астрал"
	ТелефонСлужбыПоддержки = "8-800-700-86-68";
	АдресЭлектроннойПочтыСлужбыПоддержки = "1c@astralnalog.ru";
	
	ТридцатьДней = 30;
	
	ПрограммноеЗакрытие	= Ложь;
	
КонецПроцедуры

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

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

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

&НаСервере
Процедура ОчиститьРеквизиты1СОтчетностиЕслиЭтоСменаОрганизации(Форма)
	
	ОчиститьДанныеВладельца();
	ОчиститьИсходныеЗначенияИПризнакИзменения(); // только здесь
	ОчиститьРеквизитыФормы(); // только здесь
	СброситьНаправленияСдачиОтчетности(); // только здесь
	СброситьВсеФлажки(Форма);
	
КонецПроцедуры

&НаСервере
Процедура ПрединициализацияРеквизитовОрганизацииНаСервере(ПриОткрытии)
	
	ИспользуетсяОднаОрганизация = РегламентированнаяОтчетностьВызовСервера.ИспользуетсяОднаОрганизация();
	
	Если НЕ ПриОткрытии Тогда
		ОчиститьРеквизиты1СОтчетностиЕслиЭтоСменаОрганизации(ЭтотОбъект);
	КонецЕсли;
	
	УчетнаяЗапись = УчетнаяЗаписьОрганизации(Организация);
	
	// При смене организации нужно проинициализировать
	ИнициализироватьТокен = Истина;
	ИнициализацияЭПВОблакеСервер(ИнициализироватьТокен);
	
	ИнициализироватьРеквизитыНеХранящиесяВБазе();
	
	КонтекстЭДОСервер = ДокументооборотСКО.ПолучитьОбработкуЭДО();

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

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

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

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

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

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

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

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

&НаСервере
Функция ОтпечатокСертификата()
	
	Возврат Мультирежим.ОтпечатокСертификатаПользователя(УчетнаяЗапись);
	
КонецФункции

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

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

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

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

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

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

&НаСервере
Процедура ВыполнитьДействияДляСкопированногоЗаявления()
	
	ИнициализироватьПользователей();
	ИнициализироватьИсходногоВладельцаЭЦП();
	СкопироватьДанныеИзИсходногоЗаявления();
	
КонецПроцедуры

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

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

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

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

&НаСервере
Процедура ИнициализироватьРеквизиты1СОтчетности_ОбработатьПрочитанноеИзБД_Сервер()
	
	ИПИспользуетТрудНаемныхРаботников = РегламентированнаяОтчетность.ИПИспользуетТрудНаемныхРаботников(Организация);
	
КонецПроцедуры

&НаСервере
Процедура ИнициализироватьРеквизиты1СОтчетности_ПрочитатьИзБД(ДанныеЗаполнения)

	Руководитель	= ЭлектронныйДокументооборотСКонтролирующимиОрганамиВызовСервераПереопределяемый.Руководитель(Организация); 
	ГлБухгалтер		= ЭлектронныйДокументооборотСКонтролирующимиОрганамиВызовСервераПереопределяемый.ГлБухгалтер(Организация);
	
	ЭтоЮридическоеЛицо		 = ДанныеОрганизации.ТипОрганизации;
	КраткоеНаименование		 = ДанныеОрганизации.КраткоеНаименование;
	ИНН						 = ДанныеОрганизации.ИННЮЛ;
	КПП						 = ДанныеОрганизации.КППЮЛ;
	ОГРН					 = ДанныеОрганизации.ОГРН;
	РегНомерПФР				 = ДанныеОрганизации.РегНомПФР;
	РегНомерСФР				 = ДанныеОрганизации.РегНомСФР;
	
	// Если реквизита нет в базе, то не обновляем его, потому в этом случае данные, введенные пользователем вручную, затрутся
	Если НЕ ЭтоРеквизитНеХранящийсяВБазе(ПредопределенноеЗначение("Перечисление.ПараметрыПодключенияК1СОтчетности.ТелефонОсновной")) Тогда
		ТелефонОсновной = ДанныеОрганизации.ТелОрганизации;
	КонецЕсли;
	
	// Если реквизита нет в базе, то не обновляем его, потому в этом случае данные, введенные пользователем вручную, затрутся
	Если НЕ ЭтоРеквизитНеХранящийсяВБазе(ПредопределенноеЗначение("Перечисление.ПараметрыПодключенияК1СОтчетности.ЭлектроннаяПочта")) Тогда
		ЭлектроннаяПочтаОрганизации = ДанныеОрганизации.ЭлектроннаяПочта;
	КонецЕсли;
	
	ЗаполнитьКонтактыОрганизацииИсходными();

	АдресЮридический_JSON		  = ДанныеЗаполнения.АдресЮридический_JSON;
	АдресЮридическийЗначение	  = ДанныеЗаполнения.АдресЮридическийЗначение;
	АдресЮридическийПредставление = ДанныеЗаполнения.АдресЮридическийПредставление;
	
	КонтекстЭДОСервер = ДокументооборотСКО.ПолучитьОбработкуЭДО();
	
	Область = ОбработкаЗаявленийАбонента.ПолеСертификата_2_5_4_8(АдресЮридическийЗначение);
	Город   = ОбработкаЗаявленийАбонента.ПолеСертификата_2_5_4_7(АдресЮридическийЗначение);
	Улица   = ОбработкаЗаявленийАбонента.ПолеСертификата_2_5_4_9(АдресЮридическийЗначение);
	
	Если ЭтоЮридическоеЛицо Тогда
		ПризнакОбособленногоПодразделения = ДанныеОрганизации.ПризнакОбособленногоПодразделения;
		ЭтоБюджетополучатель = ДанныеОрганизации.ЭтоБюджетополучатель;
		НаименованиеПолное = ДанныеОрганизации.НаимЮЛПол;
	КонецЕсли;
	
	ИнициализироватьИсходныеРеквизиты1СОтчетности_ПризнакИностраннойОрганизации();
	
	КодРегионаФСРАР = КонтекстЭДОСервер.КодРегионаФСРАР(АдресЮридическийЗначение);
	КодРегиона      = КодРегионаФСРАР;
	
КонецПроцедуры

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

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

&НаСервере
Процедура ИнициализироватьИсходныеРеквизиты1СОтчетности_ПризнакИностраннойОрганизации()
	
	ЭтоИностраннаяОрганизация = ИнтерфейсыВзаимодействияБРО.ЭтоИностраннаяОрганизацияПоИНН(Организация);
	
КонецПроцедуры

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

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

	КонецЕсли;
	
	Возврат Результат;
	
КонецФункции

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

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

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

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

#Область ЗаполнениеИзДиагностики

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

&НаСервере
Процедура ПереопределитьГалкиНаОснованииВходящихФлаговМастера_ИзНастроекОбмена()
	
	// Сертификат
	Если ПриОткрытииЗапрошеноПродлениеСертификата Тогда 
		ПереиздатьСертификат = Рекомендовано;
		ПереиздатьСертификатПриИзмененииНаСервере();
	КонецЕсли;
	
	// Лицензия
	Если ПриОткрытииЗапрошеноПродлениеЛицензии Тогда 
		ПродлитьЛицензиюНа1СОтчетность = Рекомендовано;
		ПродлитьЛицензиюНа1СОтчетностьПриИзмененииНаСервере();
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ПереопределитьГалкиНаОснованииВходящихФлаговМастера_ИзДиагностики()
	
	// Сертификат
	УстановитьФлаг = 
		ПереиздатьСертификат = НеТребуется 
		И (ВходящиеФлагиМастера.ПродлитьСертификат 
		ИЛИ ВходящиеФлагиМастера.ИзменитьРеквизитыПодключенияК1СОтчетности);
	
	Если УстановитьФлаг Тогда 
		ПереиздатьСертификат = Рекомендовано;
		ПереиздатьСертификатПриИзмененииНаСервере();
	КонецЕсли;
	
	// Реквизиты организации
	Если ВходящиеФлагиМастера.ИзменитьРеквизитыПодключенияК1СОтчетности 
		И НЕ ИзменитьРеквизитыПодключенияК1СОтчетности Тогда
		
		ИзменитьРеквизитыПодключенияК1СОтчетности = Истина;
		ИзменитьРеквизитыПодключенияК1СОтчетностиПриИзмененииНаСервере();
		
	КонецЕсли;
	
	// Лицензия
	Если ВходящиеФлагиМастера.ПродлитьЛицензиюНа1СОтчетность 
		И НЕ ПродлитьЛицензиюНа1СОтчетность Тогда
		
		ПродлитьЛицензиюНа1СОтчетность = Рекомендовано;
		ПродлитьЛицензиюНа1СОтчетностьПриИзмененииНаСервере();
		
	КонецЕсли;
	
	// Направления
	Если ВходящиеФлагиМастера.Свойство("ПодключаемоеНаправление") Тогда 
		ВключитьНаправление(ВходящиеФлагиМастера.ПодключаемоеНаправление);
	КонецЕсли;
	
КонецПроцедуры

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

		Строка = МультирежимКлиентСервер.СтрокаТаблицыПользователей(ЭтотОбъект, ВладелецЭЦП);
		Строка[ИмяРеквизита] = Истина;
		
	КонецЕсли;
	
КонецПроцедуры

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

#Область ТелефонИЭлПочта

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

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

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

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

&НаСервереБезКонтекста
Функция ПреобразоватьНомерТелефонаКМаскеСервер(НомерТелефона)
	
	// Маска +7 (999) 999-99-99
	// Номер телефона 89851234567
	КодВСкобках =  Сред(НомерТелефона, 2,3);
	ПервыйБлокЧисел = Сред(НомерТелефона, 5,3);
	ВторойБлокЧисел = Сред(НомерТелефона, 8,2);
	ТретийБлокЧисел = Сред(НомерТелефона, 10,2);

	Результат = "";
	Если НЕ ПустаяСтрока(СтрЗаменить(НомерТелефона, "-", "")) Тогда
		Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
					  "+7 (%1) %2-%3-%4",
					  КодВСкобках,
					  ПервыйБлокЧисел,
					  ВторойБлокЧисел,
					  ТретийБлокЧисел)
	КонецЕсли;
				  
	Возврат Результат;  

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

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

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

&НаКлиентеНаСервереБезКонтекста
Процедура ИнициализироватьПроверкиДляОблака(Форма)
	
	ОбработкаЗаявленийАбонентаКлиентСервер.ИнициализироватьПроверкиДляОблака(Форма);
	
КонецПроцедуры

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

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

#Область Отправка

#Область СравнениеРеквизитовСертификатаИЗаявления

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

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

	Иначе
		
		РазблокироватьКнопку();
		
	КонецЕсли;
	
КонецПроцедуры

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

#Область ТолькоСменаТелефонаИлиПочтыДляПаролей

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

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

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

		ЭтотОбъект.Прочитать();
		ЗаписатьСостояниеЗаявления();
		ПоказатьРезультатОтправки();
		
	КонецЕсли;
	
	РазблокироватьКнопку();
	
КонецПроцедуры

&НаКлиенте
Процедура ПослеПодтвержденияСменыТелефона(Результат, Контекст) Экспорт

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

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

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

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

&НаКлиенте
Процедура ПрочитатьОшибкиОтправки(Результат) Экспорт
	
	Если Результат.Свойство("ТекстОшибки") Тогда
		ПолученныйТекстОшибокОтправки = Результат.ТекстОшибки;
	ИначеЕсли Результат.Свойство("ОписаниеОшибки") Тогда
		ПолученныйТекстОшибокОтправки = Результат.ОписаниеОшибки;
	КонецЕсли;
	
	// Анализируем 
	Если ТекстОшибокОтправки <> ПолученныйТекстОшибокОтправки Тогда
		ТекстОшибокОтправки = ПолученныйТекстОшибокОтправки;
	КонецЕсли;
	
КонецПроцедуры

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

&НаСервере
Процедура СохранитьЗаявление_Пользователи(НовыйДокументЗаявление)
	
	ОбработкаЗаявленийАбонента.СохранитьПользователей(ЭтотОбъект, НовыйДокументЗаявление);
	
КонецПроцедуры

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

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

&НаСервере
Процедура СохранитьЗаявление_ДанныеОрганизации(НовыйДокументЗаявление)
	
	НовыйДокументЗаявление.Организация							= Организация;
	НовыйДокументЗаявление.ТипОрганизации						= ЭтоЮридическоеЛицо;
	НовыйДокументЗаявление.ИНН									= ИНН;
	НовыйДокументЗаявление.КПП									= ИтоговыеДанныеОрганизации_КПП();
	НовыйДокументЗаявление.КраткоеНаименование					= ИтоговыеДанныеОрганизации_КраткоеНаименование();
	НовыйДокументЗаявление.ПризнакОбособленногоПодразделения	= ПризнакОбособленногоПодразделения;
	НовыйДокументЗаявление.ЭтоНотариусАдвокатИлиГКФХ			= ЭтоНотариусАдвокатИлиГКФХ;
	НовыйДокументЗаявление.АдресЮридический 					= АдресЮридическийЗначение;
	НовыйДокументЗаявление.АдресЮридический_JSON				= АдресЮридический_JSON;
	НовыйДокументЗаявление.ТелефонОсновной						= ИтоговыеДанныеОрганизации_ТелефонОсновной();
	НовыйДокументЗаявление.ЭлектроннаяПочтаОрганизации			= ИтоговыеДанныеОрганизации_ЭлектроннаяПочтаОрганизации();
	НовыйДокументЗаявление.ЭтоБюджетополучатель 				= ЭтоБюджетополучатель;
	
	Если НЕ ЭтоИностраннаяОрганизация И НЕ ЭтоНотариусАдвокатИлиГКФХ Тогда
		НовыйДокументЗаявление.ОГРН = ИтоговыеДанныеОрганизации_ОГРН();
	КонецЕсли;
	
КонецПроцедуры

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

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

	СохранитьЗаявление_ЭПВОблаке(НовыйДокументЗаявление);
	
КонецПроцедуры

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

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

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

&НаСервере
Процедура СохранитьЗаявление_ИзменившиесяРеквизитыВТЧ(НовыйДокументЗаявление)
	
	// Записываем перечень изменившихся реквизитов
	НовыйДокументЗаявление.ИзменившиесяРеквизитыВторичногоЗаявления.Очистить();
	Для каждого СтрокаТаблицыПодтверждения Из ТаблицаДанныхЗаявленияНаПодключение Цикл
		
		// Записываем в документ только изменившиеся реквизиты
		Если СтрокаТаблицыПодтверждения.ЭтотПараметрИзменился И СтрокаТаблицыПодтверждения.ВыделятьСтрокуЖелтым Тогда
			
			Если ТипЗнч(СтрокаТаблицыПодтверждения.ИзмененныйРеквизит) <> Тип("Строка") Тогда
				НоваяСтрока = НовыйДокументЗаявление.ИзменившиесяРеквизитыВторичногоЗаявления.Добавить();
				НоваяСтрока.ИзмененныйРеквизит = СтрокаТаблицыПодтверждения.ИзмененныйРеквизит;
			КонецЕсли;
			
		КонецЕсли;
		
	КонецЦикла;
	
	Если ПереиздатьСертификат И (ЭтоСертификатДругогоУЦИсходный ИЛИ ЭтоСертификатДругогоУЦ) Тогда
		
		НоваяСтрока = НовыйДокументЗаявление.ИзменившиесяРеквизитыВторичногоЗаявления.Добавить();
		НоваяСтрока.ИзмененныйРеквизит = Перечисления.ПараметрыПодключенияК1СОтчетности.УдостоверяющийЦентр;
		
		Если ЭтоСертификатДругогоУЦ Тогда
			НовыйДокументЗаявление.ЭтоСертификатДругогоУЦ = ЭтоСертификатДругогоУЦ;
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

&НаКлиенте
Процедура ОповеститьОЗавершенииОтправки(Результат)
	
	ОповеститьОбИзменении(ДокументЗаявление.Ссылка);
	Оповестить("Завершение отправки заявления", Результат, ДокументЗаявление.Ссылка);
	ЭтаФорма.Активизировать();

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

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

&НаСервере
Процедура НачатьОпределениеТекстаЗаявленияНаСервере(Алгоритм)

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

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

&НаКлиенте
Процедура ПоказатьБубликОтправки()
	
	ПодключитьОбработчикОжидания("Подключаемый_ПоказатьБубликОтправки", 0.1, Истина);
	
КонецПроцедуры

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

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

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

&НаСервере
Процедура ЗаписатьСостояниеЗаявления()

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

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

&НаКлиенте
Процедура СформироватьИОтправитьЗаявление()
	
	Если ЭтоУдаленноеПереизданиеСертификата Тогда
		Если НужноПредложитьСвязатьсяСПартнером() Тогда
			ПредложитьСвязатьсяСПартнером();
		Иначе
			СравнитьРеквизитыПоЕГРЮЛпередПереизданием();
		КонецЕсли;
	Иначе
		СформироватьИОтправитьЗаявление_ПослеПолученияБланковЗаявлений();
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура СформироватьИОтправитьЗаявление_ПослеПолученияБланковЗаявлений()
	
	Если ЭтоИзменениеПользователейБезОтправкиЗаявления() Тогда
		РазблокироватьКнопку();
		ОдобритьЗаявлениеБезОтправки();
		ПоказатьРезультатОтправки();
	ИначеЕсли ЭтоТолькоСменаТелефонаИлиПочтыВОблаке() Тогда
		СменитьТелефонИлиПочтуБезОтправкиЗаявления()
	ИначеЕсли ЭтоЭлектронноеПодписание Тогда
		СформироватьИОтправитьЗаявление_СПодписанием();
	Иначе
		ПоказатьБубликОтправки();
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Функция СертификатПросрочен(Форма)
	
	Просрочен = ЗначениеЗаполнено(Форма.СертификатДействителенПо) 
				И НачалоДня(Форма.СертификатДействителенПо) < НачалоДня(Форма.ТекущаяДатаСервер);
							
	Возврат Просрочен
	
КонецФункции

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

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

	Возврат Результат;
	
КонецФункции

&НаСервере
Функция ЭтоПереходНаЛокальнуюКриптографиюВоФреше()
	
	Возврат
		ИзменитьМестоХранения
		И ЭтаУчетнаяЗаписьБылаСделанаДляОблака
		И ДоступнаЭлектроннаяПодписьВМоделиСервиса
		И ЭтоПереходВКоробку;
	
КонецФункции

&НаСервере
Функция ТребуетсяВстречаСПартнером()
	
	Реквизиты = РеквизитыТребующиеВстречиСПартнером();
	ТребуетсяВстреча = Реквизиты.Количество() > 0 И НЕ ИспользоватьСуществующий(ЭтотОбъект);
	Возврат ТребуетсяВстреча ИЛИ НЕ ЭтоЭлектронноеПодписание;
	
КонецФункции

&НаСервере
Функция ЭлПодписаниеНевозможно()
	
	Реквизиты = РеквизитыПрепятствующиеЭлПодписанию(); 
	Возврат Реквизиты.Количество() > 0;
	
КонецФункции

&НаСервере
Функция РеквизитыТребующиеВстречиСПартнером()
	
	//Требуется встреча при изменении:
	// - ОГРН/ОГРНИП
	// - Область - позже уберем
	// - ФИО владельца
	// - СНИЛС
	
	Реквизиты = РеквизитыПоУсловию("ТребуетВстречиСПартнером", Требует);
	
	Возврат Реквизиты;
	
КонецФункции

&НаСервере
Функция РеквизитыПрепятствующиеЭлПодписанию()
	
	// Невозможно подписать при изменении:
	// - Краткое наименование организации - позже уберем
	// - ОГРН/ОГРНИП
	// - Область - позже уберем
	// - ФИО владельца
	// - СНИЛС
	
	Возврат РеквизитыПоУсловию("ПрепятствуетЭлПодписанию", Препятствует);
	
КонецФункции

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

&НаСервере
Функция РеквизитыТребующиеЭлПодписанияВМультирежиме()
	
	// Требует подписания изменение реквизитов:
	//Состав и коды гос.органов
	//КодРегионаФСРАР
	//e-mail сотрудника
	//ТелефонМобильный сотрудника
	//настройки пользователей (Админ/неАдмин, доступные направления, признак шифровальщика ФНС)
	//КПП

	//еще эти, но нам достаточно, пир они требуют перевыпуска сертификата:
	//АдресЮридический (регион)
	//ОГРН/ОГРНИП
	
	Возврат РеквизитыПоУсловию("ТребуетЭлПодписания", Требует);
	
КонецФункции

&НаСервере
Функция РеквизитыПоУсловию(ИмяРеквизита, Значение)
	
	РеквизитыПоУсловию = Новый Массив;
	
	ВсеРеквизиты = Новый Массив;
	
	Реквизиты = ИзмененныеРеквизитыВладельца(Истина, Истина);
	ДобавитьВМассив(ВсеРеквизиты, Реквизиты);
	
	Реквизиты = ИзмененныеРеквизитыОрганизации(Истина, Истина);
	ДобавитьВМассив(ВсеРеквизиты, Реквизиты);
	
	Реквизиты = ИзмененныеНастройкиПользователей(Истина);
	ДобавитьВМассив(ВсеРеквизиты, Реквизиты);
	
	Реквизиты = ИзмененныеНаправления(Истина);
	ДобавитьВМассив(ВсеРеквизиты, Реквизиты);
	
	Реквизиты = ИзмененныеРеквизитыУведомлений(Истина);
	ДобавитьВМассив(ВсеРеквизиты, Реквизиты);
		
	Для каждого ТекущийРеквизит Из ВсеРеквизиты Цикл
			
		Если ТекущийРеквизит[ИмяРеквизита] = Значение Тогда
			РеквизитыПоУсловию.Добавить("- " + ТекущийРеквизит.Представление);
		КонецЕсли;
	
	КонецЦикла;
	
	Возврат РеквизитыПоУсловию;
	
КонецФункции

&НаСервере
Процедура ДобавитьВМассив(Массив, Добавляемое)
	
	ОбщегоНазначенияКлиентСервер.ДополнитьМассив(Массив, Добавляемое);
	
КонецПроцедуры

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

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

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

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

&НаСервере
Функция СохранитьСертификатВДокумент(Действие) Экспорт
	
	НовыйДокументЗаявление = РеквизитФормыВЗначение("ДокументЗаявление");
	СохранитьЗаявление_СохранитьСертификат(НовыйДокументЗаявление, Истина, Действие);
	НовыйДокументЗаявление.Записать();
	ЗначениеВРеквизитФормы(НовыйДокументЗаявление, "ДокументЗаявление");
	
КонецФункции

&НаКлиенте
Процедура СообщитьОНевозможностиПодписания(Результат)
	
	Оповещение = Новый ОписаниеОповещения("СообщитьОНевозможностиПодписания_Завершение", ЭтотОбъект);
	
	ТекстВопроса = НСтр("ru = 'Продление с использованием электронной подписи невозможно по причине:
                         |%1
                         |
                         |Отправить заявление без подписания?'");
	
	ТекстВопроса = СтрШаблон(ТекстВопроса, Результат.ОписаниеОшибки);
	
	ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет);
	
КонецПроцедуры

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

&НаКлиенте
Процедура ОтправитьВБумажномВиде() Экспорт
	
	ПереключитьНаБумажноеПодписание(ЭтотОбъект);
	УправлениеФормой();
	КоманднаяПанельМастерДалее();
	
КонецПроцедуры

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

&НаКлиенте
Процедура Подключаемый_ОтправитьЗаявлениеПослеПоказаБублика() Экспорт
	
	ОтправитьЗаявлениеПослеПоказаБублика();
	
КонецПроцедуры

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

&НаКлиенте
Процедура ОтправитьЗаявлениеИзВладельца() Экспорт
	
	ПодключитьОбработчикОжидания("Подключаемый_ОтправитьЗаявлениеПослеПоказаБублика", 0.1, Истина);
	
КонецПроцедуры

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

	ОбработкаЗаявленийАбонентаКлиентСервер.УстановитьПараметрПодключения(НовыйДокументЗаявление, "Телефон", СвойствоОблачнойПодписи.Телефон);
	ОбработкаЗаявленийАбонентаКлиентСервер.УстановитьПараметрПодключения(НовыйДокументЗаявление, "ЭлектроннаяПочта", СвойствоОблачнойПодписи.ЭлектроннаяПочта);
	
КонецПроцедуры

&НаСервере
Функция ЗалогироватьВключаемыйСертификат(Действие) Экспорт
	
	ЗалогироватьСертификат(ВключаемыйСертификат, Действие + "(ВключаемыйСертификат)");
	
КонецФункции

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

&НаСервере
Процедура ЗалогироватьСертификат(СохраняемыйСертификат, Действие)
	
	ОбработкаЗаявленийАбонента.ЗалогироватьСертификат(СохраняемыйСертификат, Действие);
	
КонецПроцедуры

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

#Область Прочее

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

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

КонецПроцедуры	
	
&НаКлиентеНаСервереБезКонтекста
Процедура ПереключитьНаБумажноеПодписание(Форма)
	
	Форма.СпособПодписания = 2; 
	Форма.ЭтоЭлектронноеПодписание = Ложь;
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура ПереключитьНаЭлектронноеПодписание(Форма)
	
	Форма.СпособПодписания = 1; 
	Форма.ЭтоЭлектронноеПодписание = Истина;
	
КонецПроцедуры

&НаСервере
Процедура СброситьГалкиНедоступныхНастроекПриИспользованииСуществующего()
	
	ИзменитьНастройкиУведомлений = ВключаемыйСертификатОблачный;
	ВключатьЛицензиюКриптоПроВСертификат = Ложь;
	ИзменитьМестоХранения = ИзменилосьМестоХранения(ЭтотОбъект);
	
КонецПроцедуры

&НаСервере
Процедура ПриИзмененииСпособаПолученияСертификата(ОпределятьМестоХранения)
	
	ПриИзмененииВключаемогоСертификатаСервер(ОпределятьМестоХранения);
	
КонецПроцедуры

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

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

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

	// При включенном сертификате обязательно подписание этим сертификатом
	ПереключитьНаЭлектронноеПодписание(ЭтотОбъект);
	
КонецПроцедуры

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

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

&НаКлиенте
Функция ЭтоТолькоСменаТелефонаИлиПочтыВОблаке()

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

КонецФункции
	
&НаКлиентеНаСервереБезКонтекста
Функция Форматировать(Значение) Экспорт
	
	Возврат ЭлектронныйДокументооборотСКонтролирующимиОрганамиКлиентСервер.СтрокаВФорматеДляСравнения(Значение);
	
КонецФункции

&НаСервере
Функция ЭтоРеквизитНеХранящийсяВБазе(ПроверяемыйРеквизит)

	Возврат РеквизитыНеХранящиесяВБазе.Найти(ПроверяемыйРеквизит) <> Неопределено;

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

&НаКлиентеНаСервереБезКонтекста
Функция ИспользоватьСуществующий(Объект) Экспорт
	Возврат ОбработкаЗаявленийАбонентаКлиентСервер.ИспользоватьСуществующий(Объект);
КонецФункции

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

#Область ОтправкаЗаявленияВПФР

&НаКлиенте
Процедура ПоказатьСтраницуОшибкиОтправкиВПФР() Экспорт
	
	// Метод нужен для того, чтобы работала универсальная отправка заявления в методе 
	// ЗаявленияВПФР_ОтправитьЗаявлениеСейчас_Завершение
	
	// При возникновении ошибки отправку заявления в КА не продолжаем
	
КонецПроцедуры

&НаСервере
Процедура ДействияПередОтправкойЗаявленияВПФР() Экспорт
	
	КонтекстЭДОСервер = ДокументооборотСКО.ПолучитьОбработкуЭДО();
	КонтекстЭДОСервер.ДействияПередОтправкойЗаявленияВПФР(ЭтотОбъект);

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


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

#Область ПриОткрытии

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

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

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

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

#Область ЗавершениеДействия

&НаСервере
Процедура ПродлитьЛицензиюНа1СОтчетностьПриИзмененииНаСервере()
	
	ИнициализироватьВозможностьБезбумажногоПродления();
	УправлениеФормой();
	
КонецПроцедуры

&НаСервере
Процедура ИзменитьРеквизитыПодключенияК1СОтчетностиПриИзмененииНаСервере()
	
	// Определяем, нужно ли перездавать сертификат 
	ПроверитьНеобходимостьУстановкиГалки_ПереиздатьСертификат();
	УправлениеФормой();

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

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

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

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

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

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

	ИначеЕсли Ответ = КодВозвратаДиалога.Нет Тогда
		
		Модифицированность  = Ложь;
		ПрограммноеЗакрытие = Истина;
		
	КонецЕсли;
	
	Если Ответ = КодВозвратаДиалога.Да ИЛИ Ответ = КодВозвратаДиалога.Нет Тогда
		Если Открыта() Тогда
			Закрыть();
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры

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

#Область ПриИзмененииФлагов

&НаСервере
Процедура ИзменитьВладельцаСертификатаПриИзмененииНаСервере()

	ПроверитьНеобходимостьУстановкиГалки_ПереиздатьСертификат();
	
	УправлениеФормой();
	
КонецПроцедуры

&НаСервере
Процедура ИзменитьСоставКонтролирующихОргановПриИзмененииНаСервере()
	
	Если НЕ ИзменитьСоставКонтролирующихОрганов Тогда
		
		СделатьНаправленияСдачиОтчетностиРавнымиИсходным();
		ВосстановитьГосОрганыВТаблицеПользователей();
		
	КонецЕсли;
	
	СравнитьНаправленияИКодыСдачиОтчетностиСИсходными();
	ПроверитьНеобходимостьУстановкиГалки_ИзменитьНастройкиПользователей();
	УправлениеФормой();
	
КонецПроцедуры

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

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

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

#Область ПолучениеСертификатов2022

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

&НаКлиентеНаСервереБезКонтекста
Функция ЭтоРуководитель(Форма)
	
	Возврат ОбработкаЗаявленийАбонентаКлиентСервер.ЭтоРуководитель(Форма);
	
КонецФункции

&НаКлиентеНаСервереБезКонтекста
Функция ЭтоБухгалтер(Форма)
	
	Возврат ОбработкаЗаявленийАбонентаКлиентСервер.ЭтоБухгалтер(Форма);
	
КонецФункции

&НаКлиентеНаСервереБезКонтекста
Функция ЭтоДругойСотрудник(Форма)
	
	Возврат ОбработкаЗаявленийАбонентаКлиентСервер.ЭтоДругойСотрудник(Форма);
	
КонецФункции

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

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

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

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

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

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

&НаСервере
Функция АдресТаблицы(Имя) Экспорт

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

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

&НаСервере
Функция ЗаполнитьМЧДВЗаявлении() Экспорт
	
	ОбработкаЗаявленийАбонента.ЗаполнитьМЧДВЗаявлении(ЭтотОбъект);
	
КонецФункции

&НаКлиентеНаСервереБезКонтекста
Функция УстановленХотяБыОдинФлаг(Форма)
	
	Возврат Форма.ПродлитьЛицензиюНа1СОтчетность 
		ИЛИ Форма.ИзменитьСоставКонтролирующихОрганов 
		ИЛИ Форма.ПереиздатьСертификат
		ИЛИ Форма.ИзменитьВладельцаСертификата 
		ИЛИ Форма.ИзменитьНастройкиУведомлений 
		ИЛИ Форма.ИзменитьРеквизитыПодключенияК1СОтчетности
		ИЛИ УстановленФлагОблачнойПодписи(Форма)
		ИЛИ Форма.ИзменитьМестоХранения
		ИЛИ Форма.ИзменитьНастройкиПользователей;
	
КонецФункции

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

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

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

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

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

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

#Область ПроверитьОблачнуюПодпись

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

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

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

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

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

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

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

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

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

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

&НаСервере
Функция НужноПредложитьПервичное(Сотрудник)

	Мультирежим.ИнициализироватьМультирежим(ЭтотОбъект);
	
	Возврат 
		ЭтоМультиРежим
		И ЗначениеЗаполнено(Организация)
		И ЗначениеЗаполнено(Сотрудник)
		И Мультирежим.ЭтоПодключениеПотенциальногоПользователя(ЭтотОбъект, Сотрудник);

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

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

&НаКлиенте
Процедура СпроситьПроПервичное(ДействиеПриОтказе = Неопределено, Сотрудник)
	
	ОписаниеОповещения = Новый ОписаниеОповещения(
		"СпроситьПроПервичное_Завершение", 
		ЭтотОбъект,
		ДействиеПриОтказе);
		
	Если ТипЗнч(Сотрудник) = Тип("СправочникСсылка.Пользователи") Тогда
		ТекстВопроса = "Поскольку Вы (%1) не подключены к 1С-Отчетности, Вам необходимо заполнить и отправить заявление на подключение.";
	Иначе
		ТекстВопроса = "Поскольку %1 не подключен к 1С-Отчетности, то сперва необходимо заполнить и отправить заявление на подключение.";
	КонецЕсли;
	ТекстВопроса = СтрШаблон(ТекстВопроса, Сотрудник);
	
	Кнопки = Новый СписокЗначений;
	Кнопки.Добавить(1, НСтр("ru = 'Перейти к подключению'"));
	Кнопки.Добавить(2, НСтр("ru = 'Отмена'"));
	
	ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, Кнопки,,Кнопки[0].Значение);
	
КонецПроцедуры

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

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

&НаСервере
Функция ПолучитьБланкиИНомерЗаявленияИзАЦУЦ(АдресПодписиСерийногоНомера)
	
	Попытка
	
		ТекстОшибки   = "";
		НомерЗаявкиУЦ = ""; 
		БланкНаПереизданиеДЛ = Неопределено;
		БланкНаОтзывДЛ = Неопределено;
		
		Запрос = ЗапросБланковИНомераЗаявленияИзАЦУЦ(АдресПодписиСерийногоНомера);
		XDTOРезультат  = GetOsnovaniePreRequest(Запрос);
		
		Если XDTOРезультат = Неопределено Тогда
			Возврат Ложь;
		КонецЕсли;
			
		ЧтениеXML = Новый ЧтениеXML;
		ЧтениеXML.УстановитьСтроку(XDTOРезультат);
		
		ПостроительДОМ 	= Новый ПостроительDOM();
		ДОМ 			= ПостроительДОМ.Прочитать(ЧтениеXML);
		кодРезультата 	= ДОМ.ПолучитьЭлементыПоИмени("code")[0].ТекстовоеСодержимое;
		
		Если кодРезультата = "0" Тогда
			
			НомерЗаявкиУЦ = ДОМ.ПолучитьЭлементыПоИмени("RequestId")[0].ТекстовоеСодержимое;
			БланкНаПереизданиеДЛ = ДОМ.ПолучитьЭлементыПоИмени("RequestApplication")[0].ТекстовоеСодержимое;
			БланкНаОтзывДЛ = ДОМ.ПолучитьЭлементыПоИмени("RevokeApplication")[0].ТекстовоеСодержимое;
			ЧтениеXML.Закрыть();
			
			ЕстьОшибка = 
				НЕ ЗначениеЗаполнено(НомерЗаявкиУЦ) 
				ИЛИ НЕ ЗначениеЗаполнено(БланкНаПереизданиеДЛ) 
				ИЛИ НЕ ЗначениеЗаполнено(БланкНаОтзывДЛ);
			
			Если ЕстьОшибка Тогда
				ТекстОшибки = НСтр("ru = 'Номер заявки УЦ, бланк на переиздание сертификата или бланк на отзыв передан пустой'");
			КонецЕсли;
			
			Возврат НЕ ЕстьОшибка;
			
		Иначе
			
			ТекстОшибки = ДОМ.ПолучитьЭлементыПоИмени("errorMessage")[0].ТекстовоеСодержимое;
			
			ЧтениеXML.Закрыть();
			Возврат Ложь;
			
		КонецЕсли;
		
	Исключение
		
		ДанныеОшибки = ИнформацияОбОшибке();
		
		ДокументооборотСКО.ОбработатьИсключение(
			ДанныеОшибки, 
			НСтр("ru = 'Получение бланков заявлений УЦ Основание (метод GetOsnovaniePreRequest)'"));
			
		ТекстОшибки  = КраткоеПредставлениеОшибки(ДанныеОшибки);
		Возврат Ложь;
	
	КонецПопытки;

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

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

&НаСервере
Функция СоздатьОбъектXDTO(Сервис, ИмяТипа)
	
	Возврат Сервис.ФабрикаXDTO.Создать(Сервис.ФабрикаXDTO.Тип("http://regservice.keydisk.ru/", ИмяТипа));

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

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

&НаСервере
Процедура ЗаписатьЗапросВЖурнал(Запрос)
	
	ТекстЗапроса = ЗапросВТекст(Запрос);
	Если ЗначениеЗаполнено(ТекстЗапроса) Тогда
		
		ДвДанные = ПолучитьДвоичныеДанныеИзСтроки(ТекстЗапроса, "windows-1251", Истина);
		Адрес    = ПоместитьВоВременноеХранилище(ДвДанные, Новый УникальныйИдентификатор);
		ПрисоединитьФайлЗаявления(Адрес, "GetOsnovaniePreRequest", "txt");
		
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Функция GetOsnovaniePreRequest(Запрос)
	
	СпецоператорСвязи = УчетнаяЗапись.СпецоператорСвязи;
	
	Сервис = ЭлектронныйДокументооборотСКонтролирующимиОрганами.ОбменССерверомСоздатьСервис(
		СпецоператорСвязи,,,,Ложь);
		
	Попытка
		
		XDTOРезультат = Сервис.GetOsnovaniePreRequest(Запрос);
		ЗаписатьЗапросВЖурнал(Запрос);

	Исключение
		
		ТекстОшибки = "Не удалось обратиться к серверу Калуги Астрал. " + Символы.ПС + КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
		СостояниеОтправкиСообщения = ДокументооборотСКОВызовСервера.ДобавитьТекстОшибкиСертификатаКА(ТекстОшибки);
		
		ИнформацияОбОшибке = ИнформацияОбОшибке();
		ЗаписьЖурналаРегистрации(
			НСтр("ru = 'Электронный документооборот с контролирующими органами. GetOsnovaniePreRequest'", ОбщегоНазначения.КодОсновногоЯзыка()),
			УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
			
		Возврат Неопределено;
		
	КонецПопытки;
	
	Возврат XDTOРезультат;
	
КонецФункции

&НаСервере
Функция ЗапросБланковИНомераЗаявленияИзАЦУЦ(АдресПодписиСерийногоНомера)
	
	СпецоператорСвязи = УчетнаяЗапись.СпецоператорСвязи;
	
	Сервис = ЭлектронныйДокументооборотСКонтролирующимиОрганами.ОбменССерверомСоздатьСервис(
		СпецоператорСвязи,,,,Ложь);
	
	requestInfo = СоздатьОбъектXDTO(Сервис, "RequestInfo");
	
	requestInfo.firstName = ВладелецЭЦПИмя;
	requestInfo.middleName = ВладелецЭЦПОтчество;
	requestInfo.lastName = ВладелецЭЦПФамилия;
	requestInfo.company = КраткоеНаименование;
	
	requestInfo.position = ВладелецЭЦПДолжность;
	requestInfo.passportSerial = СтрЗаменить(ВладелецЭЦПСерияДокумента, " ", "");
	requestInfo.passportNumber = ВладелецЭЦПНомерДокумента;
	requestInfo.passportDate = Формат(ВладелецЭЦПДатаВыдачиДокумента, "ДФ=dd.MM.yyyy");
	requestInfo.passportCode = ВладелецЭЦПКодПодразделения;
	requestInfo.passportDivision = ВладелецЭЦПКемВыданДокумент;
	
	Если ВладелецЭЦППол = Перечисления.ПолФизическогоЛица.Женский Тогда
		requestInfo.gender = "F";
	Иначе
		requestInfo.gender = "M";
	КонецЕсли;
	
	requestInfo.birthDate = Формат(ВладелецЭЦПДатаРождения, "ДФ=dd.MM.yyyy");
	requestInfo.inn = ИНН;
	requestInfo.personInn = ВладелецЭЦПИНН;
	requestInfo.snils = ОбработкаЗаявленийАбонентаКлиентСервер.СНИЛСБезРазделителей(ВладелецЭЦПСНИЛС);
	
	Если ЭтоЮридическоеЛицо Тогда
		requestInfo.kpp = КПП;
		
		Если ЗначениеЗаполнено(НаименованиеПолное_БИП) Тогда
			requestInfo.companyFull = НаименованиеПолное_БИП;
		Иначе
			requestInfo.companyFull = НаименованиеПолное;
		КонецЕсли;
	КонецЕсли;

	Если ЗначениеЗаполнено(КодРегиона) Тогда
		requestInfo.region = КодРегиона;
	Иначе
		requestInfo.region = КодРегиона_БИП;
	КонецЕсли;
	
	Заявление = РеквизитФормыВЗначение("ДокументЗаявление");
	ПараметрыНовогоСертификата = Новый СписокЗначений;
	
	ОбработкаЗаявленийАбонентаВызовСервера.ЗаявлениеСформироватьАдресДляЗапросаНаСертификатКвалифицированный(
		Заявление, 
		ПараметрыНовогоСертификата);
	
	requestInfo.city    = ПараметрыНовогоСертификата.НайтиПоЗначению("2.5.4.7").Представление;
	requestInfo.address = ПараметрыНовогоСертификата.НайтиПоЗначению("2.5.4.9").Представление;
	
	requestInfo.ogrn = ОГРН;
	Если ЭтоЮридическоеЛицо Тогда
		requestInfo.type = "Juridical";
	Иначе
		requestInfo.OgrnIp = ОГРН;
		requestInfo.type = "Individual";
	КонецЕсли;
		
	requestInfo.identificationKind = 1;
	
	requestInfo.email = ЭлектроннаяПочта;
	requestInfo.phone = ТелефонМобильный;
	
	ДвДанные = ПолучитьИзВременногоХранилища(АдресПодписиСерийногоНомера);
	signedSerialNumber = ДокументооборотСКОКлиентСервер.Base64СтрокаБезПереносов(ДвДанные);
	
	Запрос = СоздатьОбъектXDTO(Сервис, "PreRequest");
	Запрос.requestInfo = requestInfo;
	Запрос.signedSerialNumber = signedSerialNumber;
	
	Возврат Запрос;
	
КонецФункции

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

&НаКлиентеНаСервереБезКонтекста
Процедура СброситьФлагПодтверждения(Форма) Экспорт
	
	Форма.ОсознаюУсловияОтправкиРасписки = Ложь;
	
КОнецПроцедуры

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

&НаКлиенте
Процедура ОткрытьСписокЛокальныхСертификатовКалуги(ОповещениеОЗавершении) Экспорт
	
	КонтекстЭДОКлиент.ОткрытьСписокЛокальныхСертификатовКалуги(ЭтотОбъект, ОповещениеОЗавершении);
	
КонецПроцедуры

&НаКлиенте
Процедура ЗаблокироватьКнопку()
	
	Если Элементы.ОсновнаяПанель.ТекущаяСтраница = Элементы.ПроверкаЗаявления Тогда 
		Элементы.Далее.Доступность = Ложь;
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура РазблокироватьКнопку()
	
	Элементы.Далее.Доступность = Истина;
	
КонецПроцедуры

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

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