#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Параметры.Свойство("АвтоТест") Тогда
Возврат;
КонецЕсли;
Логин = Параметры.Логин;
УчетнаяЗапись = Параметры.УчетнаяЗапись;
Если СтрДлина(Параметры.Телефон) = 11 И Лев(Параметры.Телефон, 1) = "8" Тогда
Телефон = Сред(Параметры.Телефон, 2);
Иначе
Телефон = Параметры.Телефон;
КонецЕсли;
ЭлектроннаяПочта = Параметры.ЭлектроннаяПочта;
ЭтоЗаявлениеНаПодключение = Параметры.ЭтоЗаявлениеНаПодключение;
ПереизданиеСертификата = Параметры.ПереизданиеСертификата И Параметры.СменаКлючаМобильногоПриложенияАвтоматически;
ЭтоПроверка = Параметры.ЭтоПроверка;
ИнифициализироватьРежимы(Параметры);
Если ЗначениеЗаполнено(УчетнаяЗапись) Тогда
ПолучитьДополнительныеНастройкиУчетнойЗаписи();
Иначе
Режим_СменаКонтактов = Истина;
КонецЕсли;
УправлениеФормой();
КлючСохраненияПоложенияОкна = "НастройкиФормы" + КлючПоложенияОкна();
КонецПроцедуры
&НаСервере
Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
Если Режим_СменаКонтактов Тогда
Если НЕ ЗначениеЗаполнено(ЭлектроннаяПочта) и Элементы.ЭлектроннаяПочта.Видимость Тогда
ПроверяемыеРеквизиты.Добавить("ЭлектроннаяПочта");
Отказ = Истина;
КонецЕсли;
Если НЕ ЗначениеЗаполнено(Телефон) Тогда
ПроверяемыеРеквизиты.Добавить("Телефон");
Отказ = Истина;
КонецЕсли;
Если НЕ ПроверитьЭлектроннуюПочту(ЭлектроннаяПочта) Тогда
ОбщегоНазначения.СообщитьПользователю(НСтр("ru = 'Некорректно заполнен адрес электронной почты.'"), , "ЭлектроннаяПочта", , Отказ)
КонецЕсли;
Если НЕ ПроверитьНомерТелефона(Телефон) Тогда
ОбщегоНазначения.СообщитьПользователю(НСтр("ru = 'Некорректно заполнен номер телефона.'"), , "Телефон", , Отказ)
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
УправлениеФормой();
ПодключитьОбработчикОжидания("Подключаемый_ИзменитьРазмерыФормы", 0.2, Истина);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура ЗаголовокОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ОбработкаКликаНаМобильномПриложении(НавигационнаяСсылкаФорматированнойСтроки);
КонецПроцедуры
&НаКлиенте
Процедура ПодключитьДопСмартфонПриИзменении(Элемент)
УправлениеФормой();
КонецПроцедуры
&НаКлиенте
Процедура Режим_СменаПароляПриИзменении(Элемент)
СменаРежима();
КонецПроцедуры
&НаКлиенте
Процедура Режим_СменаКлючаМобильногоПриложенияПриИзменении(Элемент)
СменаРежима();
КонецПроцедуры
&НаКлиенте
Процедура Режим_ПовторнаяОтправкаКодаАктивацииПриИзменении(Элемент)
СменаРежима();
КонецПроцедуры
&НаКлиенте
Процедура Режим_ПовторнаяОтправкаКлючМобильногоПриложенияПриИзменении(Элемент)
СменаРежима();
КонецПроцедуры
&НаКлиенте
Процедура Режим_СменаКонтактовПриИзменении(Элемент)
СменаРежима();
КонецПроцедуры
&НаКлиенте
Процедура ЭлектроннаяПочтаПриИзменении(Элемент)
Элементы.ЭлектроннаяПочта.ОтметкаНезаполненного = НЕ ПроверитьЭлектроннуюПочту(ЭлектроннаяПочта);
КонецПроцедуры
&НаКлиенте
Процедура ТелефонПриИзменении(Элемент)
Элементы.Телефон.ОтметкаНезаполненного = НЕ ПроверитьНомерТелефона(Телефон);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура ОК(Команда)
Если НЕ ПроверитьЗаполнение() Тогда
Возврат;
КонецЕсли;
Если ЭтоЗаявлениеНаПодключение Тогда
ПродолжитьПослеПредупреждения(КодВозвратаДиалога.ОК);
ИначеЕсли ЭтоПроверка Тогда
ПродолжитьПослеПредупреждения(КодВозвратаДиалога.ОК);
Иначе
ОписаниеОповещения = Новый ОписаниеОповещения(
"ПродолжитьПослеПредупреждения",
ЭтотОбъект);
Текст = НСтр("ru = 'Обратите внимание, изменение некоторых настроек будет недоступно в этом заявлении в связи с изменением настроек DSS. Для изменения недоступных настроек дождитесь одобрения данного заявления и отправьте новое.'");
ПоказатьВопрос(ОписаниеОповещения, Текст, РежимДиалогаВопрос.ОКОтмена);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПродолжитьПослеПредупреждения(РезультатВопроса, ВходящийКонтекст = Неопределено) Экспорт
Если РезультатВопроса <> КодВозвратаДиалога.ОК Тогда
Возврат;
КонецЕсли;
РеквизитыВыбора = Новый Структура;
Если Режим_СменаКонтактов Тогда
РеквизитыВыбора.Вставить("ЭлектроннаяПочта", ЭлектроннаяПочта);
РеквизитыВыбора.Вставить("Телефон", КриптографияЭДКОКлиентСервер.ТелефонПодтвержденияОпераций(Телефон));
Иначе
РеквизитыВыбора.Вставить("ЭлектроннаяПочта", "");
РеквизитыВыбора.Вставить("Телефон", "");
КонецЕсли;
РеквизитыВыбора.Вставить("СменаКлючаМобильногоПриложения", Режим_СменаКлючаМобильногоПриложения);
РеквизитыВыбора.Вставить("СменаПароля", Режим_СменаПароля);
РеквизитыВыбора.Вставить("ПовторнаяОтправкаКодаАктивации", Режим_ПовторнаяОтправкаКодаАктивации);
РеквизитыВыбора.Вставить("ПовторнаяОтправкаКлючМобильногоПриложения", Режим_ПовторнаяОтправкаКлючМобильногоПриложения);
ЗакрытьФорму(РеквизитыВыбора);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаСервере
Процедура ИнифициализироватьРежимы(Параметры)
Режим_СменаКонтактов = ЗначениеЗаполнено(ЭлектроннаяПочта) ИЛИ ЗначениеЗаполнено(Телефон);
Режим_ПовторнаяОтправкаКлючМобильногоПриложения = Параметры.ПовторнаяОтправкаКлючМобильногоПриложения;
Режим_ПовторнаяОтправкаКодаАктивации = Параметры.ПовторнаяОтправкаКодаАктивации;
Режим_СменаКлючаМобильногоПриложения =
Параметры.СменаКлючаМобильногоПриложения
ИЛИ Параметры.СменаКлючаМобильногоПриложенияАвтоматически;
Режим_СменаПароля = Параметры.СменаПароля;
ПодключитьДопСмартфон =
Режим_ПовторнаяОтправкаКодаАктивации
ИЛИ Режим_ПовторнаяОтправкаКлючМобильногоПриложения;
КонецПроцедуры
&НаКлиенте
Процедура СменаРежима()
УправлениеФормой();
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ИзменитьРазмерыФормы()
Элементы.Раздел4.Видимость = НЕ Элементы.Раздел4.Видимость;
Элементы.Раздел4.Видимость = НЕ Элементы.Раздел4.Видимость;
КонецПроцедуры
&НаКлиенте
Процедура ЗакрытьФорму(РезультатВыбора = "")
Закрыть(РезультатВыбора);
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПроверитьЭлектроннуюПочту(ЭлектроннаяПочта)
Результат = НЕ ЗначениеЗаполнено(ЭлектроннаяПочта)
ИЛИ ОбщегоНазначенияКлиентСервер.АдресЭлектроннойПочтыСоответствуетТребованиям(ЭлектроннаяПочта);
Возврат Результат;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ПолучитьПредставлениеТелефона(Телефон) Экспорт
Представление = "";
ТекстДляОбработки = СокрЛП(Телефон);
ТолькоЦифры = "";
Для Индекс = 1 По СтрДлина(ТекстДляОбработки) Цикл
ТекущийСимвол = Сред(ТекстДляОбработки, Индекс, 1);
Если СтрНайти("0123456789", ТекущийСимвол) Тогда
ТолькоЦифры = ТолькоЦифры + ТекущийСимвол;
КонецЕсли;
КонецЦикла;
Если СтрДлина(ТолькоЦифры) = 11
И (Сред(ТолькоЦифры, 1, 1) = "7" ИЛИ Сред(ТолькоЦифры, 1, 1) = "8") Тогда
ТолькоЦифры = Сред(ТолькоЦифры, 2);
КонецЕсли;
Если СтрДлина(ТолькоЦифры) = 10 Тогда
Представление = СтрШаблон(
"+7 %1 %2-%3-%4",
Сред(ТолькоЦифры, 1, 3),
Сред(ТолькоЦифры, 4, 3),
Сред(ТолькоЦифры, 7, 2),
Сред(ТолькоЦифры, 9));
КонецЕсли;
Возврат Представление;
КонецФункции
&НаСервереБезКонтекста
Функция ПроверитьНомерТелефона(НомерТелефона)
Представление = ПолучитьПредставлениеТелефона(НомерТелефона);
Результат = ЗначениеЗаполнено(Представление) ИЛИ НЕ ЗначениеЗаполнено(НомерТелефона);
Возврат Результат;
КонецФункции
&НаСервере
Процедура ПолучитьДополнительныеНастройкиУчетнойЗаписи()
ВсеНастройки = КриптографияЭДКО.ДополнительныеНастройкиОблачнойПодписи(УчетнаяЗапись);
ТекущаяЭлектроннаяПочта = ВсеНастройки.ЭлектроннаяПочта;
ТекущийНомер = ВсеНастройки.Телефон;
КонецПроцедуры
&НаСервере
Функция УправлениеФормой()
ИзменитьОформлениеРаздела1();
ИзменитьОформлениеРаздела2();
ИзменитьОформлениеРаздела3();
ИзменитьОформлениеРаздела4();
КонецФункции
&НаСервере
Функция ИзменитьОформлениеРаздела1()
Элементы.Раздел1.Видимость = НЕ ЭтоНоваяУчетка() И НЕ ЭтоЗаявлениеНаПодключение;
Элементы.Раздел1.Доступность = НЕ Режим_СменаКлючаМобильногоПриложения;
Если НЕ Элементы.Раздел1.Доступность Тогда
Режим_СменаПароля = Ложь;
КонецЕсли;
КонецФункции
&НаСервере
Функция ИзменитьОформлениеРаздела2()
Элементы.Раздел2.Видимость = НЕ ЭтоНоваяУчетка();
Элементы.Раздел2.Доступность =
НЕ Режим_СменаПароля
И НЕ ПереизданиеСертификата
И НЕ Режим_ПовторнаяОтправкаКлючМобильногоПриложения
И НЕ Режим_ПовторнаяОтправкаКодаАктивации;
Если НЕ Элементы.Раздел2.Доступность Тогда
Режим_СменаКлючаМобильногоПриложения = Ложь;
КонецЕсли;
КонецФункции
&НаСервере
Функция ИзменитьОформлениеРаздела3()
Элементы.Раздел3.Видимость = НЕ ЭтоНоваяУчетка() И НЕ ЭтоЗаявлениеНаПодключение;
Элементы.Раздел3.Доступность = НЕ Режим_СменаКлючаМобильногоПриложения;
ПересчитатьЗначенияФлаговРаздела3(ЭтотОбъект);
Элементы.Режим_ПовторнаяОтправкаКодаАктивации.Доступность = ПодключитьДопСмартфон;
Элементы.Режим_ПовторнаяОтправкаКлючМобильногоПриложения.Доступность = ПодключитьДопСмартфон;
КонецФункции
&НаСервере
Функция ИзменитьОформлениеРаздела4()
Элементы.ГруппаКонтактыВтораяСтрока.Доступность =
ЭтоНоваяУчетка()
ИЛИ Режим_СменаКонтактов;
Элементы.Режим_СменаКонтактов.Видимость = НЕ ЭтоНоваяУчетка();
Элементы.ДекорацияЛогина.Видимость = НЕ ЭтоНоваяУчетка();
Элементы.ДекорацияОтступ6.Видимость = НЕ ЭтоНоваяУчетка();
ИзменитьОформлениеПодсказокРаздела4();
КонецФункции
&НаСервере
Функция ИзменитьОформлениеПодсказокРаздела4()
Если ЗначениеЗаполнено(ТекущаяЭлектроннаяПочта) Тогда
Элементы.ЭлектроннаяПочта.РасширеннаяПодсказка.Заголовок = НСтр("ru = 'Текущий Email: '") + ТекущаяЭлектроннаяПочта;
Иначе
Элементы.ЭлектроннаяПочта.РасширеннаяПодсказка.Заголовок = "";
КонецЕсли;
Если ЗначениеЗаполнено(ТекущийНомер) Тогда
Элементы.Телефон.РасширеннаяПодсказка.Заголовок = НСтр("ru = 'Текущий номер телефона: '") + ПолучитьПредставлениеТелефона(ТекущийНомер);
Иначе
Элементы.Телефон.РасширеннаяПодсказка.Заголовок = "";
КонецЕсли;
КонецФункции
&НаСервере
Функция ЭтоНоваяУчетка()
Возврат НЕ ЗначениеЗаполнено(УчетнаяЗапись);
КонецФункции
&НаСервере
Функция КлючПоложенияОкна()
Счетчик = "";
Для НомерРаздела = 1 По 4 Цикл
ИмяРаздела = "Раздел" + НомерРаздела;
Счетчик = Счетчик + "_" + ?(Элементы[ИмяРаздела].Видимость, "1", "0");
КонецЦикла;
Возврат Счетчик;
КонецФункции
&НаКлиенте
Процедура ОбработкаКликаНаМобильномПриложении(Ссылка)
Если Ссылка = "МобильноеПриложение" Тогда
ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку("https://www.cryptopro.ru/products/mydss");
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПодсказкаОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если НавигационнаяСсылкаФорматированнойСтроки = "Отсканируйте" Тогда
ПоказатьКартинку(БиблиотекаКартинок.QRкодDSS);
ИначеЕсли НавигационнаяСсылкаФорматированнойСтроки = "СМС" Тогда
ПоказатьКартинку(БиблиотекаКартинок.КодАктивизацииDSS);
ИначеЕсли НавигационнаяСсылкаФорматированнойСтроки = "ключ" Тогда
ПоказатьКартинку(БиблиотекаКартинок.НовыйКлючDSS);
ИначеЕсли НавигационнаяСсылкаФорматированнойСтроки = "ОписаниеПароля" Тогда
ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку("https://help.astral.ru/v/147062857");
ИначеЕсли НавигационнаяСсылкаФорматированнойСтроки = "ОписаниеКлюча" Тогда
ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку("https://help.astral.ru/v/147062859");
ИначеЕсли НавигационнаяСсылкаФорматированнойСтроки = "ОписаниеТелефона" Тогда
ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку("https://help.astral.ru/v/147062853");
ИначеЕсли НавигационнаяСсылкаФорматированнойСтроки = "ОписаниеПовтора" Тогда
ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку("https://help.astral.ru/v/147062855");
КонецЕсли;
ОбработкаКликаНаМобильномПриложении(НавигационнаяСсылкаФорматированнойСтроки);
КонецПроцедуры
&НаКлиенте
Процедура ПоказатьКартинку(Картинка)
ДвоичныеДанные = Картинка.ПолучитьДвоичныеДанные();
Адрес = ПоместитьВоВременноеХранилище(ДвоичныеДанные, новый УникальныйИдентификатор);
ОперацииСФайламиЭДКОКлиент.ОткрытьФайл(Адрес, НСтр("ru = 'Инструкция.jpg'"));
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ПересчитатьЗначенияФлаговРаздела3(Форма)
Элементы = Форма.Элементы;
Доступен = Элементы.Раздел3.Доступность;
Если НЕ Форма.ПодключитьДопСмартфон ИЛИ НЕ Доступен Тогда
Форма.Режим_ПовторнаяОтправкаКодаАктивации = Ложь;
Форма.Режим_ПовторнаяОтправкаКлючМобильногоПриложения = Ложь;
КонецЕсли;
Если Форма.ПодключитьДопСмартфон Тогда
Если НЕ Доступен Тогда
Форма.ПодключитьДопСмартфон = Ложь;
КонецЕсли;
Иначе
Форма.ПодключитьДопСмартфон =
Доступен
И (Форма.Режим_ПовторнаяОтправкаКодаАктивации
ИЛИ Форма.Режим_ПовторнаяОтправкаКлючМобильногоПриложения);
КонецЕсли;
КонецПроцедуры
#КонецОбласти