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

файл

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	ПрограммноеЗакрытиеБС = Истина;
	
	ОбновитьИнтерфейс = УстановитьНастройкиНачалаРаботы();
	
	Если ОбновитьИнтерфейс Тогда
		ОбновитьИнтерфейс();
		Активизировать();
	КонецЕсли;
	
	Закрыть();

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ЗаявлениеНажатие(Элемент)
	НапечататьЗаявление();
КонецПроцедуры

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

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

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

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

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

&НаКлиенте
Процедура ТелефонМобильныйДляПаролейАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)

	ОбработкаЗаявленийАбонентаКлиент.АвтоПодборКонтактов(ЭтотОбъект, Текст, ДанныеВыбора, СтандартнаяОбработка, "ТелефонМобильный");
	
КонецПроцедуры

&НаКлиенте
Процедура ЧтоТакоеКЭПНажатие(Элемент)
	
	Текст = НСтр("ru = 'Сертификат электронной подписи – это официальный электронный документ, подтверждающий, что подпись принадлежит определённому человеку. В сертификате содержатся данные о сроке его действия, области его применения, выдавшем удостоверяющем центре, полномочиях владельца.
                  |
                  |Сертификат квалифицированной электронной подписи (КЭП) - один из видов сертификатов электронной подписи. Сертификат КЭП является цифровым аналогом собственноручной подписи. Получить сертификат КЭП можно в одном из аккредитованных удостоверяющих центров.
                  |
                  |Подробнее о получении см. в статье '");
	
	Ссылка = Новый ФорматированнаяСтрока(НСтр("ru = 'Получение электронной подписи'"),,,,"https://its.1c.ru/bmk/elreps_kep_director");
	
	Текст = Новый ФорматированнаяСтрока(Текст, Ссылка);
	
	ПоказатьПредупреждение(, Текст);
	
КонецПроцедуры

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

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

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

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

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

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

&НаКлиенте
Процедура Подключаемы_ЕстьКЭП_ПСБ()
	
	ПриИзмененииОрганизации(); // асинх
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура НетКЭП_ПослеОтвета(Ответ, ВходящийКонтекст) Экспорт
	
	Если Ответ = НСтр("ru = 'Да'") Тогда
		ТарифОператораЭДО = Неопределено;
		СледующийШагЕслиНетКэп();
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	ОпределитьВозможностьБезбумажногоПодписания(,,ДополнительныеПараметры, Истина); // асинхронно

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	ОткрытьФорму(КонтекстЭДОКлиент.ПутьКОбъекту + ".Форма.Мастер_ПаспортныеДанные", ДополнительныеПараметры,,,,,ОписаниеОповещения);
	
КонецПроцедуры

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

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

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

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

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

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

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

&НаКлиенте
Процедура ПалецВверхНажатие(Элемент)
	
	Оценка = 1;
	Элементы.ПалецВверх.Картинка = БиблиотекаКартинок.ПалецВверхЗеленый;
	Элементы.ПалецВниз.Картинка  = БиблиотекаКартинок.ПалецВнизСерый;
	
	Элементы.СведенияОбратнойСвязиПодробнее.Видимость = Ложь;
	
КонецПроцедуры

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

&НаКлиенте
Процедура Подключаемый_АктивироватьТекстовыйОтвет()
	
	ЭтотОбъект.ТекущийЭлемент = Элементы.ТекстовыйОтвет;
	
КонецПроцедуры

&НаКлиенте
Процедура ЗаголовокСообщитеОбОтправкеРекомендацияОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	Если НавигационнаяСсылкаФорматированнойСтроки = "ВсеЗаявления" Тогда
		ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку("e1cib/list/Документ.ЗаявлениеАбонентаСпецоператораСвязи");
	Иначе
		ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку("http://www.1c.ru/rus/partners/onecrep.jsp");
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура КодПодтвержденияЭлектроннаяПочтаПриИзменении(Элемент)
	
	КодПодтвержденияЭлектроннаяПочтаИзменениеТекстаРедактирования(Элемент, КодПодтвержденияПочта, Истина);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ПереключитьНаОблачнуюПодпись(НовоеМестоХраненияКлюча = Неопределено) Экспорт
	
	Если НовоеМестоХраненияКлюча <> Неопределено Тогда
		МестоХраненияКлюча = НовоеМестоХраненияКлюча;
	КонецЕсли;
	
	РежимРаботыСКлючами = 3; // Облако
	РежимРаботыСКлючамиПриИзменении(Неопределено)
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура Пропустить(Команда)
	
	ПрилинковатьБазу(Неопределено);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура Готово(Команда)
	
	ОтправитьОбратнуюСвязьСервер();
	Закрыть();
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

		Иначе
			
			// Здесь позже должен быть выбор из сервиса Калуги-Астрал
			ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку("http://v8.1c.ru/edi/edi_app/1c-otchetnost/rates/index.htm");
			
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

	ОтправитьКодПодтвержденияТелефонДляПаролей();
	
КонецПроцедуры

&НаКлиенте
Процедура ПроверитьАдрес(Команда)
	
	ОтправитьКодПодтвержденияЭлектроннаяПочтаДляПаролей();	
	
КонецПроцедуры

&НаКлиенте
Процедура ОтправитьКодПовторноТелефон(Команда)
	
	ОтправитьКодПодтвержденияТелефонДляПаролей();
	
КонецПроцедуры

&НаКлиенте
Процедура ОтправитьКодПовторноЭлектроннаяПочта(Команда)
	
	ОтправитьКодПодтвержденияЭлектроннаяПочтаДляПаролей();
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Процедура АктивизироватьСтраницу_БС(Форма, Страница)
	
	ОтображатьВРежимеБС = ОтображатьВРежимеБС(Форма);
	
	Страница.Ширина = ?(ОтображатьВРежимеБС, Форма.ШиринаЗаявления_БС, 0);
	Страница.РастягиватьПоГоризонтали = НЕ ОтображатьВРежимеБС;
	
	ОтображатьЗаголовокБС(Форма, Страница, ОтображатьВРежимеБС);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Функция ПрейтиКИнтеграции()
	
	Возврат НЕ ОтключенаИнтеграция() И НЕ ДанныеОрганизацииЗаполненыКопированием;
	
КонецФункции

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура СохранитьЗаявление_БС(НовыйДокументЗаявление)
	
	НовыйДокументЗаявление.ЭтоБыстрыйСтарт = ЭтоБыстрыйСтарт;
	НовыйДокументЗаявление.ЕстьПредыдущиеУчетныеЗаписи = ЕстьПредыдущиеУчетныеЗаписи;
	НовыйДокументЗаявление.ПредыдущиеУчетныеЗаписи = Новый ХранилищеЗначения(ПредыдущиеУчетныеЗаписи, Новый СжатиеДанных(0));
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура ПроверитьOIDЛицензииКриптоПро(МастерДалее)
	
	ОбработкаЗаявленийАбонента.ПроверитьOIDЛицензииКриптоПро(ЭтотОбъект, МастерДалее);

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

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

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

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

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

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

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

	Если ЭтоЮридическоеЛицо Тогда

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

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

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

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

	ДокументооборотСКОКлиентСервер.ВывестиОшибкуПроверкиРеквизита(МастерДалее, РезультатПроверки, ВыводитьСообщения);
	
	Возврат РезультатПроверки;
	
КонецФункции

&НаСервере
Функция ПроверитьЮрАдрес(МастерДалее = Истина, ВыводитьСообщения = Истина)
	
	Если ЭтоЮридическоеЛицо Тогда
		
		ПредставлениеАдресаИП = НСтр("ru = 'Юридический адрес'");
		ПредставлениеАдресаРП = НСтр("ru = 'Юридического адреса'");
		
	Иначе

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

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

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

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

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

	КонецЕсли;
	
	ДокументооборотСКОКлиентСервер.ВывестиОшибкуПроверкиРеквизита(МастерДалее, РезультатПроверки, ВыводитьСообщения);
	
	Возврат РезультатПроверки;
	
КонецФункции

&НаСервере
Функция ПроверитьЭлПочтуОрганизации(МастерДалее = Истина, ВыводитьСообщения = Истина)

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

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

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Функция ЕстьОшибкаВИННВладельца(Форма)

	РезультатПроверки = ПроверитьИННВладельцаЭП(Форма, , Ложь);
	ЕстьОшибка = ЗначениеЗаполнено(РезультатПроверки.ТекстОшибки);
	
	Возврат ЕстьОшибка;
	
КонецФункции

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	КонецЕсли;
	
	ИзменитьОформлениеРасширенныхНастроек(ПриОткрытии);
	
КонецПроцедуры

&НаКлиенте
Процедура ОбновитьРеквизитыОрганизацииИСотрудника(НеобходимоОбновитьСертификат)
	
	ДанныеОрганизацииПредыдущие = ДанныеОрганизации;
	ДанныеОрганизацииИОтветственныхЛицПредыдущие  = ДанныеОрганизацииИОтветственныхЛиц;
	ДанныеСотрудникаПредыдущие 	= ДанныеСотрудника;

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

&НаКлиенте
Процедура ОбновитьРеквизитыОрганизации(
		ДанныеОрганизацииПредыдущие, 
		ДанныеОрганизацииИОтветственныхЛицПредыдущие, 
		НеобходимоОбновитьСертификат)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	ИзменитьОформлениеНомераОсновнойПоставки1с(Истина);

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

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

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

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

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

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

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

&НаКлиенте
Процедура ПриОткрытии_ПослеПроверкиПрав_БС()
	
	Если ЭтоБыстрыйСтарт Тогда
		УправлениеФормой();
		ОткрытьНаОсновнойСтранице();
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

&НаКлиенте
Процедура ИзменитьОформлениеНомераОсновнойПоставки1с(ПриОткрытии = Ложь, НужноЗапроситьРегНомер = Ложь)

	Если ЗапретитьИзменение И ЗначениеЗаполнено(НомерОсновнойПоставки1с) Тогда
		
		Элементы.ГруппаРегНомерПрограммы.Видимость = Истина;
		Элементы.ГруппаРегНомерПрограммы.ТолькоПросмотр = Истина;
		
	ИначеЕсли ЗапрашиватьРегНомер Тогда
		
		Если РазделениеВключено Тогда
			
			ПодсказкаКНомеруОсновнойПоставки1с = НСтр("ru = 'Если вы переходите из локальной версии, то регистрационный номер можно найти:
	                                                   |- в регистрационной анкете
	                                                   |- в договоре ИТС (при наличии)
	                                                   |- на коробке с программой, обложках книг, дисках, входящих в комплект поставки
	                                                   |
	                                                   |Если вы сразу начали работать в сервисе, то регистрационный номер - это символы FR и код абонента сервиса.
	                                                   |Например, FR1015
	                                                   |
	                                                   |Код абонента сервиса можно узнать в '");
			
			ГиперссылкаНаЛичныйКабинет = Новый ФорматированнаяСтрока(НСтр("ru = 'Личном кабинете'"),,,,"https://1cfresh.com/a/adm/ru_RU/");
			
			Элементы.НомерОсновнойПоставки1с.РасширеннаяПодсказка.Заголовок = 
				Новый ФорматированнаяСтрока(ПодсказкаКНомеруОсновнойПоставки1с, ГиперссылкаНаЛичныйКабинет);
			
		Иначе
			
			Элементы.НомерОсновнойПоставки1с.РасширеннаяПодсказка.Заголовок = 
				НСтр("ru = 'Регистрационный номер можно найти:
				           |
				           |- в регистрационной анкете
				           |- в договоре ИТС (при наличии)
				           |- на коробке с программой, обложках книг или дисках, входящих в комплект поставки'");
		КонецЕсли;
		
		РезультатПроверки = ПроверитьНомерОсновнойПоставки1с(, Ложь);
		Элементы.ПроверкаНомерОсновнойПоставки1с.Заголовок = ?(РезультатПроверки.Пустой, "", РезультатПроверки.ТекстОшибки);
		
		Если ПриОткрытии ИЛИ НужноЗапроситьРегНомер Тогда
			// Скрываем, если при открытии заполнен
			Элементы.ГруппаРегНомерПрограммы.Видимость = НЕ ЗначениеЗаполнено(НомерОсновнойПоставки1с) ИЛИ РезультатПроверки.ЕстьОшибка;
		КонецЕсли;
		
		Элементы.ПодсказкаРегНомер.Видимость = ПоказыватьПодсказкуРегНомера;
		
	Иначе
		Элементы.ГруппаРегНомерПрограммы.Видимость = Ложь;
		Элементы.ПодсказкаРегНомер.Видимость = Ложь;
	КонецЕсли;
	
	ИзменитьОформлениеДобавляемыхФлагов();

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

&НаСервере
Процедура ИнициализироватьЦвета()
	
	// Цвета
	ЧерныйЦвет 				= Новый Цвет(65, 48, 3);
	СерыйЦвет 				= Новый Цвет(87, 87, 87);
	СинийЦвет 				= Новый Цвет(28, 85, 174);
	ЦветТекстаФормы 		= Новый Цвет(65, 48, 3);
	КрасныйЦвет 			= ЦветаСтиля.ЦветОшибкиПроверкиБРО;
	
КонецПроцедуры

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

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

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

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

	РазобратьПараметры_БС(Параметры);
	
	ОрганизацияИзПараметра = Параметры.Организация;

	ПолучитьКриптопровайдераИзПараметров(Параметры);
	
КонецПроцедуры

&НаСервере
Процедура ДобавитьПараметры_БС(СписокПараметров)
	
	СписокПараметров = СписокПараметров + "," + 
		"ЭтоБыстрыйСтарт,
		|ЕстьПредыдущиеУчетныеЗаписи,
		|ПредыдущиеУчетныеЗаписи,
		|НетСертификатов_БС,
		|ВладелецЭЦПТип_БС,
		|ЗаблокироватьМодифицированность_БС";
	
КонецПроцедуры

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

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

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

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

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Процедура СброситьЭтоОткрытиеСВыбраннойЭЦП(Форма)
	
	Форма.ЭтоОткрытиеСВыбраннойЭЦП = Ложь;
	
КонецПроцедуры

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

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

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

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

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

	ИзменитьОформлениеПанелей();
	
КонецПроцедуры

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

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

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

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Функция ЭтоТекущаяСтраница(Форма, Страница)
	
	ТекущаяСтраница = Форма.Элементы.СтраницыЗаявления.ТекущаяСтраница;
	Возврат ТекущаяСтраница = Страница;
	
КонецФункции

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

&НаСервере
Процедура ИзменитьОформлениеПанелей() Экспорт
	
	ИзменитьОформлениеКнопкиОтправки(ЭтотОбъект);
	ИзменитьОформлениеПанелиОтправки();
	ИзменитьОформлениеКоманднойПанели();
	ИзменитьОформлениеЧтоДелатьДальше();
	ИзменитьОформлениеПанелиПФРВМастере();
	
КонецПроцедуры

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

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

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

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

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

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

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

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

&НаСервере
Процедура ЗаполнитьЗаявлениеДаннымиИзБазы(ДанныеОрганизацииИОтветственныхЛиц, ИННОрганизации = "")

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

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

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

&НаСервере
Функция КодРегионаПоАдресу(Адрес)

	Возврат ОбработкаЗаявленийАбонента.КодРегионаПоАдресу(Адрес)
	
КонецФункции

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

	ОпределитьПодключаемыеНаправленияСдачиОтчетности();
	
	Если ЭтоМультиРежимИсходный Тогда

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	Возврат ПроверкаПройдена;
	
КонецФункции

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура ИзменитьОформлениеТарифа()
	
	Если ЭтоРежимБесплатнойНулевойОтчетности Тогда

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

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

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

#Область НулевкаИБизнесСтарт

&НаСервере
Процедура УстановитьНастройкиРежимаОграниченнойФункциональности()

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура АктивироватьКнопкуПроверитьАдрес()
	// Обход ошибки платформы - не устанавливается текущий элемент
	ОтключитьОбработчикОжидания("Подключаемый_АктивироватьКнопкуПроверитьАдрес");
	ПодключитьОбработчикОжидания("Подключаемый_АктивироватьКнопкуПроверитьАдрес", 0.1, Истина);
КонецПроцедуры

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

&НаКлиенте
Процедура Подключаемый_ОбработчикОбратногоОтсчетаПочта()
	
	ТаймерПочта = ТаймерПочта - 1;

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

&НаКлиенте
Процедура Подключаемый_АктивироватьПолеКодПодтвержденияТелефон()
	
	ТекущийЭлемент = Элементы.КодПодтвержденияТелефон;
	
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_АктивироватьПолеКодПодтвержденияЭлектроннаяПочта()
	
	ТекущийЭлемент = Элементы.КодПодтвержденияЭлектроннаяПочта;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура Подключаемый_АктивироватьКнопкуПроверитьНомер()
	
	ТекущийЭлемент = Элементы.ПроверитьНомер;	
	
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_АктивироватьКнопкуПроверитьАдрес()
	
	ТекущийЭлемент = Элементы.ПроверитьАдрес;	
	
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_АктивироватьЭлектроннаяПочтаДляПаролей()
	
	ТекущийЭлемент = Элементы.ЭлектроннаяПочтаДляПаролей;
	
КонецПроцедуры

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

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

	Возврат Форма.РежимРаботыСКлючами = 2;
	
КонецФункции

&НаКлиентеНаСервереБезКонтекста
Функция ЭтоОблачнаяПодпись(Форма)

	Возврат Форма.РежимРаботыСКлючами = 3;
	
КонецФункции

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

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

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

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

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

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

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

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

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

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

	Возврат ВалидныеСертификатыОрганизации;
	
КонецФункции

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

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

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

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

	Возврат Истина;
		
КонецФункции

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

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

&НаКлиентеНаСервереБезКонтекста
Процедура ПолучитьДанныеВладельца_ИзСертификата(Форма, Сертификат) Экспорт
	
	ВладелецСтруктура = ДокументооборотСКОКлиентСервер.ВладелецСертификат(Сертификат);
	
	// Должность
	ВладелецСтруктура.Свойство("T", Форма.ВладелецЭЦПДолжность_ИзСертификата);
	
	// Подразделение
	ВладелецСтруктура.Свойство("OU", Форма.ВладелецЭЦППодразделение_ИзСертификата);
	
	//ЭлектроннаяПочта 
	ВладелецСтруктура.Свойство("E", Форма.ЭлектроннаяПочта_ИзСертификата);
	
	// ИНН владельца
	ИННы = ДокументооборотСКОКлиентСервер.ИННыИзСертификата(ВладелецСтруктура);
	ИННы.Свойство("ФЛ", Форма.ВладелецЭЦПИНН_ИзСертификата);
	
	// СНИЛС
	SNILS = "";
	ВладелецСтруктура.Свойство("SNILS", SNILS);
	// Если СНИЛС имеет вид  ХХХХХХХХХХХ, то приводим к виду  ХХХ-ХХХ-ХХХ ХХ
	Если ЗначениеЗаполнено(SNILS) И НЕ СтрНайти(SNILS, "-") Тогда
		
		Форма.ВладелецЭЦПСНИЛС_ИзСертификата = СтрШаблон(
			"%1-%2-%3 %4", // ХХХ-ХХХ-ХХХ ХХ
			Лев(SNILS, 3),
			Сред(SNILS, 4,3),
			Сред(SNILS, 7,3),
			Прав(SNILS, 2));
			
	Иначе
		Форма.ВладелецЭЦПСНИЛС_ИзСертификата = SNILS;
	КонецЕсли;
	
	// Фамилия
	ВладелецСтруктура.Свойство("SN", Форма.ВладелецЭЦПФамилия_ИзСертификата);
	
	// Имя и отчество
	ИмяОтчество = "";
	ВладелецСтруктура.Свойство("GN", ИмяОтчество);
	
	Если ЗначениеЗаполнено(ИмяОтчество) Тогда
		ИмяОтчество = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивСлов(ИмяОтчество);
		
		Если ИмяОтчество.Количество() = 2 Тогда
			
			Форма.ВладелецЭЦПИмя_ИзСертификата = ИмяОтчество[0];
			Форма.ВладелецЭЦПОтчество_ИзСертификата = ИмяОтчество[1];
			
		КонецЕсли;
	КонецЕсли;
	
	Форма.ВладелецЭЦПЭтоФизЛицо_ИзСертификата = ОбработкаЗаявленийАбонентаКлиентСервер.ЭтоСертификатФизЛица(Сертификат);
	
КонецПроцедуры

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

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

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

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

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

	ИзменитьОформлениеКнопкиОтправки(Форма);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

&НаСервере
Процедура ПриИзмененииЮридическогоАдреса()
	
	КодРегиона 		= КодРегионаПоАдресу(АдресЮридическийЗначение);
	КодРегионаФСРАР = КодРегиона;
	ВосстановитьНаправленияПоУмолчаниюФСГС();
	НачатьОпределениеИдентификаторАдресаФИАС();
	
	ИзменитьОформлениеЮрАдреса();
	ИзменитьОформлениеНаправлений();
	ИнициализироватьФактическийАдрес();
	ИзменитьОформлениеРасширенныхНастроек();
	
КонецПроцедуры

&НаСервере
Процедура ИзменитьОформлениеОГРН(ПриОткрытии = Ложь)
	
	РезультатПроверки = ПроверитьОГРН(,Ложь);

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

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

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

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

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

&НаСервере
Функция ФайлОписанияПакетаОбратнойСвязи(ФайлДанных)
	
	ИмяФайла = ПолучитьИмяВременногоФайла("xml");
	ЗаписьXML = Новый ЗаписьXML;
	ЗаписьXML.ОткрытьФайл(ИмяФайла, "windows-1251");
	ЗаписьXML.ЗаписатьОбъявлениеXML();
	ЗаписьXML.ЗаписатьНачалоЭлемента("пакет");
	ЗаписьXML.ЗаписатьАтрибут("версияФормата", "1С:1.1");
	ЗаписьXML.ЗаписатьАтрибут("версПрог", РегламентированнаяОтчетность.ВерсияПрограммы());
	ЗаписьXML.ЗаписатьАтрибут("типДокументооборота", "РегистрацияАбонента");
	ЗаписьXML.ЗаписатьАтрибут("типТранзакции", "ОбратнаяСвязь");
	ЗаписьXML.ЗаписатьАтрибут("идентификаторДокументооборота", ДокументЗаявление.ИдентификаторДокументооборота);
	
	ЗаписьXML.ЗаписатьНачалоЭлемента("отправитель");	
	ЗаписьXML.ЗаписатьАтрибут("типСубъекта", "абонент");
	ЗаписьXML.ЗаписатьКонецЭлемента();
	
	ЗаписьXML.ЗаписатьНачалоЭлемента("получатель");	
	ЗаписьXML.ЗаписатьАтрибут("типСубъекта", "спецоператор");
	ЗаписьXML.ЗаписатьАтрибут("идентификаторСубъекта", "КалугаАстрал");
	ЗаписьXML.ЗаписатьКонецЭлемента();
	
	ЗаписьXML.ЗаписатьНачалоЭлемента("документ");	
	ЗаписьXML.ЗаписатьАтрибут("идентификаторДокумента", ОбщегоНазначенияЭДКОКлиентСервер.НовыйИдентификатор());
	ЗаписьXML.ЗаписатьАтрибут("типДокумента", "ОбратнаяСвязь");
	ЗаписьXML.ЗаписатьАтрибут("типСодержимого", "xml");
	ЗаписьXML.ЗаписатьАтрибут("сжат", "true");
	ЗаписьXML.ЗаписатьАтрибут("зашифрован", "false");
	
	ЗаписьXML.ЗаписатьНачалоЭлемента("содержимое");	
	ЗаписьXML.ЗаписатьАтрибут("имяФайла", ФайлДанных.Имя);
	ЗаписьXML.ЗаписатьКонецЭлемента();
	
	ЗаписьXML.ЗаписатьКонецЭлемента();

	ЗаписьXML.ЗаписатьКонецЭлемента();
	
	ЗаписьXML.Закрыть();

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

&НаСервере
Функция ИмяФайлаДокументаВСоставеПакета(РасширениеБезТочки = "bin")
	
	КонтекстЭДОСервер = ДокументооборотСКО.ПолучитьОбработкуЭДО();
	Возврат КонтекстЭДОСервер.СгенерироватьUUID() + "." + РасширениеБезТочки;
	
КонецФункции

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

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

&НаСервере
Процедура НачатьОпределениеИдентификаторАдресаФИАС()

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ВключаемыйСертификатНажатие(Элемент) Экспорт

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

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

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

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

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

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

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

&НаКлиенте
Функция ПолучитьИННФЛ()
	
	Результат = "";
	
	Если ЗначениеЗаполнено(ВладелецЭЦПИНН) Тогда
		Результат = ВладелецЭЦПИНН;
	КонецЕсли;
	
	Возврат Результат;
	
КонецФункции

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	Возврат Организации;
	
КонецФункции

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

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

&НаКлиенте
Процедура Подключаемый_Закрыть()
	
	Модифицированность = Ложь;
	ПрограммноеЗакрытие = Истина;

	Закрыть();
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура ПоказатьСтраницуПодготовкиКСозданиюКлюча()
	
	АктивизироватьСтраницуБублика(ЭтотОбъект, Элементы.НачатьСозданиеКлюча);
	
КонецПроцедуры

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

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

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

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

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

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

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

&НаСервере
Функция ОтключенаИнтеграция() Экспорт
	
	Возврат Облачная1СО.ОтключенаИнтеграцияСУчетнымиСистемами();
	
КонецФункции

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

&НаСервере
Процедура ИнициализироватьВыводСтатусовИВажныхСообщений_85()

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

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

&НаСервере
Процедура ВывестиСтатусыИВыжныеСообщенияНаФормуНаСервере() Экспорт

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

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

&НаКлиенте
Процедура Подключаемый_ДетальноеОписаниеСтатусаПослеВыбора(Результат, ДополнительныеПараметры) Экспорт

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

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

&НаКлиенте
Процедура Подключаемый_ВывестиСтатусыИВыжныеСообщенияНаФорму() Экспорт

	ВывестиСтатусыИВыжныеСообщенияНаФормуНаСервере();

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

&НаКлиенте
Процедура Подключаемый_ОбработкаНажатияКнопкиВВажномСообщении(Команда)

	Если Команда.Имя = "ОтправитьНеотправленноеИзвещение" Тогда
		ОтправитьНеотправленноеИзвещение(Неопределено);
	КонецЕсли;

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

&НаКлиенте
Процедура Подключаемый_ОбработкаНавигационнойСсылкиВВажномСообщении(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)

	СтандартнаяОбработка = Ложь;
	
	Если НРег(НавигационнаяСсылкаФорматированнойСтроки) = "критическиеошибки" Тогда
		КритическиеОшибкиОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка);
			
	КонецЕсли;

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

&НаКлиенте
Процедура Подключаемый_ОбработкаЗакрытияВажногоСообщения(Команда)

	МодульКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль("ЭлектронныйДокументооборотСКонтролирующимиОрганамиКлиентСервер");
	МодульКлиентСервер.ЗакрытьВажноеСообщение(ЭтотОбъект, Команда.Имя);

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

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

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

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

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

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