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