ДанныеИнформационнойБазыРаботыСРечью

Типы · SpeechProcessingInfoBaseData

Представляет собой данные регистрации информационной базы в сервисе распознавания речи. Используется для переноса данных регистрации в другую информационную базу через выгрузку и загрузку данных. В этот объект включаются идентификаторы моделей распознавания речи, сохраненные дополнительные грамматики, данные доступа к облаку распознавания.

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

ДанныеИнформационнойБазыРаботыСРечью (SpeechProcessingInfoBaseData)

ДанныеИнформационнойБазыРаботыСРечью (SpeechProcessingInfoBaseData)

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

Описание:

Представляет собой данные регистрации информационной базы в сервисе распознавания речи.
Используется для переноса данных регистрации в другую информационную базу через выгрузку и загрузку данных.
В этот объект включаются идентификаторы моделей распознавания речи, сохраненные дополнительные грамматики, данные доступа к облаку распознавания.

Доступность:

Сервер, толстый клиент, мобильное приложение (сервер).
Данный объект может быть сериализован в/из XDTO. Тип XDTO, соответствующий данному объекту, определяется в пространстве имен http://v8.1c.ru/8.3/stt/core. Имя типа XDTO: RegistrationData.

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

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

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

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

Создать собственную регистрацию базы, проверить типизированное восстановление и отменить опыт

В заведомо пустой собственной базе создаём регистрацию, читаем реальные параметры и полный непрозрачный объект регистрации. Проверяем отключение, восстановление собственной типизированной копии в памяти и окончательную отмену — без записи секретных данных в файл.

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

Полный модуль обычной формы собственной обработки УчебноеПодключениеРечи85.Пульт; толстый клиент, новая пустая база без разделителей, только свой учебный пользователь с Администрированием данных.

Подготовка

  1. Для каждого урока создайте отдельную новую пустую файловую базу с именем конфигурации УчебноеПодключениеРечи85, платформа8.5.1.1343. Не переименовывайте рабочую УТ/КА/УНФ/БП и не переносите туда служебные данные старой регистрации, модели, грамматики, обмены или задания.

  2. Используйте толстый клиент, Обычное приложение. В конфигураторе: Обработки → УчебноеПодключениеРечи85 → Формы → Пульт, тип Обычная. Основной код — полный модуль этой формы, не код управляемой формы и не серверной команды браузера.

  3. Заранее подготовьте отдельный настоящий аккаунт сервиса речи, его пароль, подтверждённый HTTPS-адрес вашего региона, разрешение на регистрацию и сведения о тарифе. Код не задаёт домен, логин, токен или пароль по умолчанию и не отключает проверку сертификата.

  4. Свой учебный пользователь1С должен иметь Администрирование данных: в обоих уроках чтение настроек базы нужно для проверки границы между базой и сеансом. Не включайте привилегированный режим и не используйте production-аккаунт администратора.

  5. Добавьте реквизиты Согласие типа Булево, УчетнаяЗапись, ПарольСервиса, АдресСервиса и Итог типа Строка неограниченной длины. Выведите флажок согласия и поля строк; многострочный Итог сделайте только для просмотра.

  6. Поле ввода реквизита ПарольСервиса назовите ПолеПароля. ПриОткрытии программно включает его РежимПароля: символы скрываются звёздочками. Это маскировка экрана, не шифрование памяти; не сохраняйте пароль в настройках, файлах, журнале, скриншотах или скопированном коде.

  7. Вставьте полный код своего выбранного урока в пустой модуль формы. ПриОткрытии назначьте соответствующему событию без параметров; ПередЗакрытием — событию обычной формы с параметрами Отказ и СтандартнаяОбработка. Не объединяйте два модуля с одинаковыми обработчиками.

  8. Добавьте перечисленные для урока обычные кнопки. Событию Нажатие каждой назначьте одноимённую процедуру без параметров. Нажмите F7, обновите только новую учебную базу; F7 не доказывает подключение к облаку.

  9. Откройте свою обработку в отдельном новом сеансе. При открытии все поля очищаются и Согласие=Ложь. Введите настоящий аккаунт и адрес вручную, проверьте адрес по своим официальным настройкам и только затем установите согласие.

  10. Исходная база и текущий сеанс должны быть без регистрации. Перед первой записью код проверяет оба набора параметров, непрозрачные данные базы и флаг внешнего расположения. Если что-то уже есть, он отказывается: чужие настройки ради прохождения опыта не очищайте.

  11. Во время опыта не открывайте второе окно, не меняйте разделители или учётную запись и не запускайте другие действия с сервисом. Адреса, токены и непрозрачные данные берутся только из фактических ответов менеджера; сюда не вставляется неизвестный входной объект.

  12. Здесь примеры не запускались в1С, сеть и регистрация не выполнялись: runtimeVerifiedScenarios=0. Реальный доступ, тариф и корректность сертификатов проверяются отдельно пользователем; новые файлы, резервные копии и архивы код урока не создаёт.

  13. Создайте обычные кнопки ПроверитьРегистрациюБазы и ОчиститьСвоюРегистрацию. В этой новой базе не должно быть данных других уроков: восстановление и отмена охватывают полный объект регистрации текущей области.

  14. Непрозрачные данные включают сведения о моделях, дополнительные грамматики и доступ к облаку. Не добавляйте параллельно модели или грамматики: весь объект этого опыта должен принадлежать только текущему открытому окну и отдельной пустой базе.

Перем СвояГотовность;
Перем СвойОпытНачат;

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

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

Процедура ПроверитьСвоеСогласие()
    ПроверитьСвойСтенд();
    Если Не СвояГотовность Или Не Согласие Тогда
        ВызватьИсключение "Нужны открытое собственное окно и явное согласие на регистрацию";
    КонецЕсли;
КонецПроцедуры

Процедура ПроверитьСвойВвод()
    ПроверитьСвоеСогласие();
    Если Не ЗначениеЗаполнено(УчетнаяЗапись) Или Не ЗначениеЗаполнено(ПарольСервиса)
        Или Не ЗначениеЗаполнено(АдресСервиса) Тогда
        ВызватьИсключение "Введите реальные логин, пароль и подтверждённый адрес собственного сервиса";
    КонецЕсли;
    Если НРег(Лев(АдресСервиса, 8)) <> "https://" Тогда
        ВызватьИсключение "Этот учебный облачный стенд допускает только заранее подтверждённый HTTPS-адрес";
    КонецЕсли;
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

  1. Начало требует права Администрирование данных, пустую новую базу и новый сеанс без подключения. В чужом или ранее настроенном состоянии опыт отказывается до регистрационной записи.

  2. Флаг владения попыткой ставится только после всех проверок пустоты, но до ВыполнитьРегистрациюИнформационнойБазы. Он сохраняется и при потере ответа, чтобы неизвестное состояние не выдавалось за отсутствие записи.

  3. Реальная регистрация сохраняется в базе или текущей области. Getter даёт настоящий типизированный объект подключения; mutable-копия фактических адреса и токена используется setter базы и проверяется повторным чтением.

  4. ПоддерживаетсяИспользованиеВнешнегоРасположения проверяет настройку базы, не доступность сети. После подтверждённой регистрации её флаг ожидается Истина, но урок не утверждает, что модель уже выполняет распознавание.

  5. ПолучитьДанныеРаботыСРечьюИнформационнойБазы возвращает реальный непрозрачный объект. Только его собственный тип разрешён для полной XDTO-копии; строка остаётся локальной переменной памяти и не передаётся в поля формы, Сообщить или файл.

  6. Setter внешних параметров с Неопределено отключает внешнее подключение базы; getters проверяют именно этот результат. Затем setter полных данных с Неопределено отменяет настройку. Эти разные операции не подменяются чисткой сеанса.

  7. УстановитьДанные получает типизированный объект, восстановленный из собственного полного XML. Повторный полный объект должен иметь правильный тип и тот же XML в этом контексте; адрес, токен и флаг подключения также проверяются, а регистрация сеанса остаётся отсутствующей.

  8. В конце окончательно отменяем только собственную регистрацию и проверяем все начальные признаки отсутствия. Флаг владения снимается только после успешной проверки. Ошибка оставляет ручную кнопку очистки, но не выполняет автоматически новую регистрацию.

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

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

  2. Для своего реального аккаунта после регистрации ожидается типизированный объект подключения с непустыми адресом и токеном, полный объект ДанныеИнформационнойБазыРаботыСРечью и включённый флаг настройки базы.

  3. После отключения внешних параметров ожидаются Неопределено и выключенный флаг внешнего расположения; не приписывайте этому getter автоматическое чтение или удаление всех дополнительных грамматик.

  4. После восстановления полного объекта проверяются его тип, целый XML текущего контекста и реальные два поля подключения. Токен не появляется в успехе или ошибке формы, файл не создаётся.

  5. После финальной отмены начальные getters базы и сеанса снова должны вернуть Неопределено, а флаг базы — Ложь. Только тогда СвойОпытНачат снимается и нормальное закрытие разрешено.

  6. При потерянном ответе восстановите связь и используйте ОчиститьСвоюРегистрацию только в том же собственном окне. При отсутствии собственного незавершённого опыта эта кнопка не меняет настройки.

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

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

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

  1. УстановитьДанные принимает Произвольный, но это не разрешение передавать произвольный JSON или структуру: здесь используются только реальный собственный тип и документированный Неопределено.

  2. Полный объект содержит доступ к облаку и другие служебные сведения. Не экспортируйте его как общедоступный учебный JSON и не применяйте к чужой базе. В этом опыте XDTO-копия существует только в памяти собственного окна.

  3. Код сброса допустим только после подтверждённой исходной пустоты и начала собственной попытки. Он не является универсальной административной кнопкой отмены чужой регистрации.

  4. Наличие настройки базы не доказывает доступность сервера, авторизацию в конкретной модели или квоту. Отмена настройки также не обещает удаление аккаунта, отзыв токена на стороне сервиса или отмену тарифа.

  5. Сравнение полного XML — строгая проверка одного собственного объекта, версии и контекста. Это не криптографическая канонизация XML, не проверка импортированного внешнего XML и не гарантия стабильного порядка сериализации любого чужого объекта.

  6. Предел262144символа проверяется после создания строки, а не до аллокации. Не загружайте в этот опыт неизвестные выгрузки, массовые модели или чужие грамматики.

  7. Обычный ПередЗакрытием может запретить закрытие формы, пока результат отмены не подтверждён, но не защищает от падения процесса или выключения ОС. После потери окна администратор должен проверять именно собственную выделенную базу; массовая отмена в production запрещена.

  8. Если параллельно изменить область, регистрацию или собственный объект, строгая проверка может завершиться ошибкой. Чужие изменения автоматически не восстанавливаются. Здесь регистрации и сетевых вызовов не было, runtimeVerifiedScenarios=0.

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

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

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

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

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