ПараметрыРегистрацииИнформационнойБазыСистемыВзаимодействия.АдресСервера

Свойства · ServerAddress

Тип: Строка. Адрес сервера системы взаимодействия.

Полное описание, параметры и ограничения

ПараметрыРегистрацииИнформационнойБазыСистемыВзаимодействия.АдресСервера (CollaborationSystemInfoBaseRegistrationParameters.ServerAddress)

ПараметрыРегистрацииИнформационнойБазыСистемыВзаимодействия (CollaborationSystemInfoBaseRegistrationParameters)

АдресСервера (ServerAddress)

Доступен, начиная с версии 8.3.10.

Использование:
Чтение и запись.
Описание:
Тип: Строка.
Адрес сервера системы взаимодействия.
Доступность:

Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение.

Использование в версии:

Доступен, начиная с версии 8.3.10.

Методическая информация

Практические примеры

Зарегистрировать только свою новую локальную базу тремя способами и проверить отмену

Полный пульт сравнивает синхронный серверный вызов, клиентское Ждать и настоящее оповещение. Проверяет объект результата и свое приложение, отдельно учит отмене и возврату только своих непрозрачных ключей в одной серверной операции.

Где и как запускать

Полный модуль управляемой формы своей внешней обработки в новой пустой УчебнаяРегистрацияСВ85. Серверные синхронные ветви, клиентские Ждать/ОписаниеОповещения и полный собственный guard включены.

Подготовка

  1. Только новая собственная VM и новый отдельный локальный сервер взаимодействия http://localhost:9094, не сервис1С:Диалог, не рабочий абонент и не рабочий сервер. SMTP/внешние интеграции/общие приложения не подключайте. Этот файл ничего не устанавливает и не запускался. Локальный сервер должен поддерживать регистрацию учебного абонента без доставки реальной почты; если ваша версия требует подтверждение, выясните ее штатный локальный порядок у администратора своего стенда, не угадывайте код.

  2. Создайте новую пустую базу8.5.1.1343, имя конфигурации УчебнаяРегистрацияСВ85, русский язык, совместимость Не использовать, управляемый интерфейс. Предметные объекты, разделители, задания, подписки и расширения не нужны. База еще никогда не регистрировалась: при создании формы и зарегистрированное состояние, и непрозрачные данные регистрации должны отсутствовать.

  3. Вручную создайте единственного пользователя Уч85Рег_ с добавленным вашим новым ненулевым UUID в каноническом формате. Назначьте в этой новой базе права РегистрацияИнформационнойБазыСистемыВзаимодействия и АдминистрированиеДанных, необходимые для чтения пользователей/регистрации. Код не создает пользователей/абонента вне данного явного опыта, не меняет роли и не включает привилегированный режим.

  4. Создайте внешнюю обработку УчебнаяРегистрация85 с одной управляемой формой. Строковые реквизиты: Метка85 длиной36, Режим85 длиной20, Фаза85 длиной30, ИмяПриложения85 длиной100, СвояПочта85 длиной100, КодАктивации85 длиной100, Подтверждение85 длиной100, Статус85 длиной0. Булево НеизвестныйИсход85. Фаза, метка, имя приложения, почта, статус и флаг только для просмотра/скрыты. Для поля кода включите защищенное отображение, не журналируйте его.

  5. Создайте три команды Зарегистрировать85, Отменить85, ПроверитьСвойСброс85 с действием ВыполнитьОперацию85; добавьте кнопки. Назначьте ПриСозданииНаСервере и вставьте весь модуль формы. Оповещения экспортны и находятся в том же объекте формы, никаких неизвестных общих модулей нет. Положительный учебный путь — thin/thick управляемый клиент своей VM; веб/mobile этим опытом не проверены.

  6. Режим выбирайте один на весь опыт: Сервер, Ждать или Оповещение. Для каждого следующего режима нужна другая новая пустая база/отдельный свежий сервер со своим UUID-пользователем. Имя приложения и формальный абонентский адрес lab-<реальныйUUIDпользователяБазы>@example.invalid строятся кодом, а не вводятся произвольно. Это идентификатор только собственного локального абонента; домен.invalid не является действительным адресом доставки, на1С:Диалог такой опыт недопустим.

  7. Сначала оставьте Подтверждение85 пустым: изменений быть не должно. После собственной проверки VM введите СВОЯ VM И НОВЫЙ ЛОКАЛЬНЫЙ АБОНЕНТ. Зарегистрировать85 выполняет только один запрос. Если результат не завершил регистрацию, это может быть ошибка или реальное требование кода — не автоматический успех. Изучите причину только локально. Если свой сервер действительно выдал собственный код через штатный локальный интерфейс, введите только его и явно повторите подтверждающий этап.

  8. После подтвержденной регистрации сначала по желанию нажмите ПроверитьСвойСброс85: в одном серверном вызове получаются только свои ключи, настройки сбрасываются и возвращаются из того же собственного объекта в памяти. Никакого сохранения ключей в HTML/файл/клиент/лог нет. Это риск потери собственной регистрации при сбое, не резервная копия; не используйте реальную базу. Затем отдельно нажмите Отменить85 для сознательной отмены своего опыта.

  9. Если ответ потерялся/исключение возникло после начала, НеизвестныйИсход85 сохраняется и пульт блокирует дальнейшие записи. При аварийном закрытии он может исчезнуть, поэтому закрытие не является разрешением повторить регистрацию/отмену. Проверяйте только свою VM вручную. Никаких автоматических откатов, повтора, экспорта ключей, резервных копий и удаления серверной истории нет.

&НаКлиенте
Перем ОжидаемаяОперация85;

&НаКлиенте
Перем МеткаОперации85;

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

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

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

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

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

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

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

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

&НаСервере
Функция ВыполнитьСинхроннуюРегистрацию85(Код)
    ПроверитьПередОперациейНаСервере85("Зарегистрировать85");
    Паспорт = ПроверитьСвойЛокальныйСтенд85();
    Параметры = Новый ПараметрыРегистрацииИнформационнойБазыСистемыВзаимодействия;
    Параметры.АдресСервера = "http://localhost:9094";
    Параметры.АдресЭлектроннойПочты = Паспорт.Почта;
    Параметры.ИмяИнформационнойБазы = Паспорт.ИмяПриложения;
    Параметры.КодАктивации = Код;
    Возврат СистемаВзаимодействия.ВыполнитьРегистрациюИнформационнойБазы(Параметры);
КонецФункции

&НаСервере
Процедура ВыполнитьСинхроннуюОтмену85()
    ПроверитьСвоюГотовуюРегистрацию85();
    СистемаВзаимодействия.ОтменитьРегистрациюИнформационнойБазы();
КонецПроцедуры

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

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

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

&НаСервере
Процедура ПроверитьСвоюГотовуюРегистрацию85()
    Паспорт = ПроверитьСвойЛокальныйСтенд85();
    Если Не СистемаВзаимодействия.ИнформационнаяБазаЗарегистрирована()
        Или СистемаВзаимодействия.АдресСервера() <> "http://localhost:9094" Тогда
        ВызватьИсключение "Своя локальная регистрация не подтверждена";
    КонецЕсли;
    Приложение = СистемаВзаимодействия.ПолучитьПриложение(СистемаВзаимодействия.ИдентификаторТекущегоПриложения());
    Если Приложение.Наименование <> Паспорт.ИмяПриложения Тогда
        ВызватьИсключение "На своем сервере найдено не собственное UUID-приложение";
    КонецЕсли;
    Данные = СистемаВзаимодействия.ПолучитьДанныеРегистрацииИнформационнойБазы();
    Если ТипЗнч(Данные) <> Тип("ДанныеРегистрацииИнформационнойБазыСистемыВзаимодействия") Тогда
        ВызватьИсключение "Не получен собственный непрозрачный регистрационный объект";
    КонецЕсли;
КонецПроцедуры

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

&НаСервере
Функция ПроверитьСвойЛокальныйСтенд85()
    ПроверитьСвойПустойСтенд();
    Если ПривилегированныйРежим() Тогда
        ВызватьИсключение "Входные повышенные привилегии не допускаются";
    КонецЕсли;
    Пользователи = ПользователиИнформационнойБазы.ПолучитьПользователей();
    Текущий = ПользователиИнформационнойБазы.ТекущийПользователь();
    Если Пользователи.Количество() <> 1 Или Текущий = Неопределено
        Или Текущий.УникальныйИдентификатор <> Пользователи[0].УникальныйИдентификатор
        Или Лев(Текущий.Имя, СтрДлина("Уч85Рег_")) <> "Уч85Рег_" Тогда
        ВызватьИсключение "Нужен единственный собственный UUID-пользователь регистрации";
    КонецЕсли;
    UUIDМетки = Новый УникальныйИдентификатор(Сред(Текущий.Имя, СтрДлина("Уч85Рег_") + 1));
    Если Текущий.Имя <> "Уч85Рег_" + Строка(UUIDМетки)
        Или UUIDМетки = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000") Тогда
        ВызватьИсключение "Учебное UUID-имя не подтверждено";
    КонецЕсли;
    Возврат Новый Структура("ИмяПриложения,Почта",
        "УчебнаяРегистрацияСВ85_" + Строка(Текущий.УникальныйИдентификатор),
        "lab-" + Строка(Текущий.УникальныйИдентификатор) + "@example.invalid");
КонецФункции

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

Разбор по шагам

  1. ПриСозданииНаСервере проверяет пустоту/отсутствие расширений, единственного UUID-пользователя и отсутствие прежних регистрационных данных. Параметры создаются конкретным конструктором, адрес всегда exact http://localhost:9094, почта/имя выводятся из реального UUID пользователя базы.

  2. Перед командой проверяются фаза/подтверждение/режим, отсутствие предыдущего ожидания и собственный серверный guard. НеизвестныйИсход устанавливается до первого потенциального изменения. Это состояние неизвестного результата, а не таймер готовности или возможность безопасно повторить запрос.

  3. В режиме Сервер процедура формы вызывает собственную серверную функцию. Она еще раз проверяет контекст, создает настоящий ПараметрыРегистрации и вызывает ВыполнитьРегистрациюИнформационнойБазы. Синхронный метод не запускается в thin-клиентском обработчике.

  4. В режиме Ждать создаются такие же подтвержденные параметры на клиенте; Ждать ВыполнитьРегистрациюИнформационнойБазыАсинх получает именно РезультатРегистрации, не Обещание. Сервера ждут только отдельно через RPC-процедуры, promise-API не вызывается на сервере.

  5. В режиме Оповещение ОписаниеОповещения содержит свою операцию, UUID-метку формы и отдельный новый UUID этого конкретного запроса. НачатьРегистрациюИнформационнойБазы возвращает управление до окончания; только экспортная РегистрацияЗавершена85(РезультатРегистрации,ДополнительныеПараметры) принимает итог. Чужая/повторная/поздняя метка или иной тип дополнительных данных отклоняются, включая поздний первый callback во время второго этапа регистрации.

  6. ПринятьСвойРезультат проверяет настоящий тип результата и readonly ТекстСообщения. Полный ответ не логируется, только его длина для диагностики наличия текста. РегистрацияВыполнена=true требует свежего зарегистрированного состояния, точного локального адреса, собственного UUID-наименования приложения и существования непрозрачного объекта ключей.

  7. РегистрацияВыполнена=false не означает исключительно неправильный код. Код признает отсутствие регистрации и ожидающий этап, но причину пользователь обязан выяснить в своем локальном сервере. Если сервер фактически зарегистрирован при false, состояние противоречиво и повтор запрещается. Полученный/введенный код очищается после результата или исключения.

  8. ПроверитьСвойСброс85 не получает данные из чужого клиента или файла: СобственныеДанные получены в этой же своей серверной операции. Сохраняется только ID своего приложения. УстановитьДанные(Неопределено) должен убрать свою регистрацию, затем УстановитьДанные(СобственныеДанные) возвращает именно собственный opaque-объект. Fresh passport и тот же ID подтверждают результат; секретные внутренние поля не выдумываются.

  9. Отменить85 требует готовую свою регистрацию. Сервер вызывает синхронную ОтменитьРегистрациюИнформационнойБазы; Ждать-вариант проверяет native-результат Неопределено. Это не Булево успеха. Обе ветви отдельно проверяют, что своя база больше не зарегистрирована.

  10. Callback отмены — ОтменаЗавершена85(ДополнительныеПараметры), у нее нет параметра результата регистрации. Перед своим fresh read проверяются операция и UUID-метка. После подтвержденной отмены фаза Завершено запрещает продолжение опытов этой формы.

  11. Отмена штатным методом удаляет ключи, но не идентификатор базы/историю сервиса; повторная регистрация с прежней почтой может восстановить данные. УстановитьДанные(Неопределено) — иной путь: при обычной новой регистрации восстановление прежних данных не обещается. Внутренний возврат уже полученного своего объекта не является новой регистрацией по почте.

Как проверить результат

  1. Без явной фразы никакого регистрационного вызова/отмены/сброса нет. Уже зарегистрированная база или существующие opaque-данные должны быть отклонены при создании формы.

  2. В каждом из трех отдельно подготовленных опытов успех требует правильного native результата и собственного свежего серверного паспорта, а не только возврата метода/Ждать/вызова callback.

  3. При false пульт не показывает успех. Неверный тип, неожиданный callback, иной адрес/приложение или неизвестный исход блокируют продолжение. В коде нет1С:Диалог, действительных email, guessed activation codes и произвольного URL.

  4. Для своего сброса оба set-вызова выполняются в одной собственной серверной операции; после возврата совпадает прежний реальный ID приложения. При сбое не утверждается восстановление ключей и нет автоматического повторения в catch.

  5. После отмены ИнформационнаяБазаЗарегистрирована=false и Фаза85=Завершено. Серверная история/UUID приложения этим не считаются удаленными; их наличие проверьте вручную только в своем выделенном сервере.

  6. Закройте только учебную форму во время ожидания как отрицательный ручной опыт: это не доказательство отсутствия регистрации. Потерянный callback/серверный ответ может оставить изменения; требуются собственная ручная сверка и новый отдельный стенд, а не повтор в рабочей базе.

Ожидаемый результат

Свой полный цикл регистрации/проверки/явной отмены показан в трех настоящих стилях. Непрозрачные регистрационные данные возвращаются только из собственного объекта в памяти; история сервера и неизвестные результаты не выданы за удаленные/успешные.

На что обратить внимание

  1. Доступность методов разная: синхронные registration/unregister на сервере/thick/external, promise/callback client-only. Callback регистрации имеет два параметра, callback отмены — один. Оба результата readonly; ни РегистрацияВыполнена, ни ТекстСообщения не назначаются.

  2. Свой локальный сервер,1С:Диалог и почтовый абонент — разные среды. На1С:Диалог первый этап посылает письмо с кодом; согласно native-справке на ином сервере письмо не отправляется. Урок только для своего отдельного сервера, но конкретная версия сервера может иметь собственные дополнительные условия. Их готовность не выдается за проверенную.

  3. РегистрацияВыполнена=false может означать ошибку, не только запрос кода. Урок не парсит локализованный ТекстСообщения и не угадывает код. Успех первой стадии без второго вызова возможен только если так действительно ответил ваш сервер и его состояние отдельно совпало.

  4. ДанныеРегистрации содержат криптографические ключи, но у opaque-типа нет открытых свойств. Не обращайтесь к выдуманным Ключи/Идентификатор/Адрес и не сериализуйте данные для пересылки. В образце объект остается локальной серверной переменной.

  5. Сброс регистрационных настроек может лишить собственную базу возможности соединения. Между сбросом и возвращением нет транзакции внешнего сервера; при сбое объект в памяти потеряется. Это изолированная демонстрация возможного собственного ремонта, не универсальная стратегия восстановления и не безопасный production-инструмент.

  6. Штатная ОтменитьРегистрацию и УстановитьДанные(Неопределено) имеют разные последствия повторной регистрации. Отмена не стирает все данные сервера. Код не соединяет эти два способа в обещание восстановления чужого/старого сервиса.

  7. Проверки callback-метки защищают только от перепутанного опыта одной формы; закрытие формы/сбой сети/другой процесс не делает запись атомарной. Нет автоматических повторов, таймера или catch-cleanup. Возврат из native метода еще не доказательство завершенного состояния.

  8. Статические проверки не являются реальной регистрацией. Сервер, абонент, почта, ключи и базы реально не менялись. Пример сверяется с установленной справкой8.5.1.1343; runtimeVerifiedScenarios=0.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.