Описывает сервис интеграции. Позволяет настроить сервис интеграции, создать сообщение, получить каналы сервиса интеграции.
Полное описание, параметры и ограничения
СервисИнтеграцииМенеджер.<Имя сервиса интеграции> (IntegrationServiceManager.<Integration service name>)
СервисИнтеграцииМенеджер.<Имя сервиса интеграции> (IntegrationServiceManager.<Integration service name>)
Доступен, начиная с версии 8.3.17.
Свойства:
<Имя канала сервиса интеграции> (<Integration service name>)
Методы:
ПолучитьАктивность (GetActive)
ПолучитьНастройки (GetSettings)
СоздатьСообщение (CreateMessage)
УстановитьАктивность (SetActive)
УстановитьНастройки (SetSettings)
Описание:
Описывает сервис интеграции. Позволяет настроить сервис интеграции, создать сообщение, получить каналы сервиса интеграции.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.
Использование в версии:
Доступен, начиная с версии 8.3.17.
Описание изменено в версии 8.3.21.
Методическая информация
Практические примеры
Настроить свой неактивный сервис и проверить возврат после кэша
Полная обычная форма показывает разницу между настройками в памяти, их записью и последующим чтением. Четыре действия сохраняют только заранее заданные учебные строки, проверяют их и возвращают пустую подготовку; черновик сообщения никуда не отправляется.
Где и как запускать
Полный модуль обычной формы Пульт обработки УчебныеНастройки85 своего стенда УчебныеНастройкиОбмена85. Только толстый клиент. Переменные формы и все помощники включены. Не выполнялся.
Подготовка
Создайте НОВУЮ отдельную файловую базу 8.5.1.1343: имя конфигурации УчебныеНастройкиОбмена85, совместимость НеИспользовать, обычное приложение и толстый клиент. Не копию рабочей базы. Никаких разделителей, общих реквизитов, расширений, подписок и сторонних заданий. Здесь база и код не запускались: runtimeVerifiedScenarios=0.
Общие → Сервисы интеграции: только один собственный УчебныйОбмен85, синоним Учебный обмен, комментарий guide-owned-settings-85, без каналов и кода модуля. Адрес и учётные данные в Конфигураторе оставьте пустыми. Активность в Предприятии никогда НЕ включайте. Отсутствие каналов относится только к этому уроку настроек, не к рабочему обмену.
В своём стенде вручную создайте роль УчебныйАдминистратор85 с правами Администрирование и Администрирование данных и доступом к своей обработке. Создайте пользователя УчебныйАдминистратор85 с этой ролью и входите только им. Эти административные права — для собственного изолированного стенда, не рекомендация прав рабочему обработчику сообщений.
Создайте обработку УчебныеНастройки85, обычную основную форму Пульт. В её модуль вставьте полный основной код ниже целиком, на верхнем уровне. Общий модуль НЕ нужен: переменные Фаза и МоментЗаписи являются состоянием этой формы.
На форме четыре кнопки: Записать учебные настройки → действие ЗаписатьНажатие; Проверить и создать черновик → ПроверитьНажатие; Вернуть пустую подготовку → ВернутьНажатие; Проверить возврат → ПроверитьВозвратНажатие. Имена действий должны точно совпадать с процедурами. В коде нет иных обязательных обработчиков событий.
Выполните F7 и обновите только собственную новую конфигурацию. Будущий опыт пишет четыре настройки и значение активности Ложь в системные данные этого стенда. Он НЕ беззаписный; рабочие данные и реальные сервисы запрещены. Мы здесь никаких записей не выполняли.
Порядок будущего ручного опыта: Записать → самостоятельно подождать не меньше 21 секунды → Проверить → Вернуть → снова подождать не меньше 21 секунды → Проверить возврат. Форма не блокирует интерфейс ожиданием, не спит и не использует фоновых заданий.
Не закрывайте форму и не меняйте настройки другим сеансом до завершения. Если форма закрылась после записи, откройте Пульт заново и используйте Вернуть: это отдельная аварийная возможность ТОЛЬКО для тех же заранее заданных учебных значений/пустых строк. При неизвестных значениях код откажется их затирать. Затем дождитесь 21 секунды и проверьте возврат.
guide-user-85 и not-a-secret-85 — вымышленные учётные данные, никуда не отправляются. Учебный адрес http://127.0.0.1:9/guide-settings-85 намеренно не обслуживается. Нельзя подставлять реальные адреса или пароли. Сервис остаётся неактивным, отправка сообщений и подключение каналов отсутствуют.
Перем Фаза;
Перем МоментЗаписи;
Процедура ЗаписатьНажатие(Кнопка)
ПроверитьСвойКонтекст();
ПроверитьСвойНеактивныйСервис();
Если Фаза <> Неопределено И Фаза <> "ВозвратПроверен" Тогда
ВызватьИсключение "Завершите прежний опыт кнопками Вернуть и Проверить возврат";
КонецЕсли;
Настройки = СервисыИнтеграции.УчебныйОбмен85.ПолучитьНастройки();
Если Не НастройкиПусты(Настройки) Тогда
ВызватьИсключение "Начальный опыт требует четыре пустые настройки; чужие значения не перезаписываются";
КонецЕсли;
Настройки.АдресВнешнегоСервисаИнтеграции = "http://127.0.0.1:9/guide-settings-85";
Настройки.ИмяПользователя = "УчебныйАдминистратор85";
Настройки.ИмяПользователяВнешнегоСервисаИнтеграции = "guide-user-85";
Настройки.ПарольПользователяВнешнегоСервисаИнтеграции = "not-a-secret-85";
Фаза = "ОжидаетПроверки";
МоментЗаписи = ТекущаяДатаСеанса();
СервисыИнтеграции.УчебныйОбмен85.УстановитьАктивность(Ложь);
СервисыИнтеграции.УчебныйОбмен85.УстановитьНастройки(Настройки);
Сообщить("Учебные настройки записаны, активность только Ложь. Подождите 21 секунду и нажмите Проверить. Пароль не выводится.");
КонецПроцедуры
Процедура ПроверитьНажатие(Кнопка)
ПроверитьСвойКонтекст();
Если Фаза <> "ОжидаетПроверки" Тогда
ВызватьИсключение "Сначала выполните запись учебных настроек";
КонецЕсли;
ПроверитьИстечениеКэша();
ПроверитьСвойНеактивныйСервис();
Настройки = СервисыИнтеграции.УчебныйОбмен85.ПолучитьНастройки();
Если Не НастройкиУчебные(Настройки) Тогда
ВызватьИсключение "Четыре настройки не совпали с опытом; используйте Вернуть, неизвестные значения не затираются";
КонецЕсли;
Срок = ТекущаяДатаСеанса() + 86400;
Черновик = СервисыИнтеграции.УчебныйОбмен85.СоздатьСообщение(Срок);
Если ТипЗнч(Черновик) <> Тип("СообщениеСервисаИнтеграции") Или Черновик.ДатаУстаревания <> Срок Тогда
ВызватьИсключение "Фабрика не вернула сообщение с заданным сроком";
КонецЕсли;
ПараметрыЧерновика = Новый Соответствие;
КлючОпыта = Строка(Новый УникальныйИдентификатор);
ПараметрыЧерновика.Вставить("study-id", КлючОпыта);
ПараметрыЧерновика.Вставить("quantity", "3");
Черновик.Параметры = ПараметрыЧерновика;
Если Черновик.Параметры.Получить("study-id") <> КлючОпыта Или Черновик.Параметры.Получить("quantity") <> "3" Тогда
ВызватьИсключение "Не совпали строковые параметры своего черновика";
КонецЕсли;
Фаза = "НастройкиПроверены";
Сообщить("Четыре настройки совпали после ожидания; сервис неактивен. Создан только черновик со строковыми параметрами, без отправки.");
Сообщить("Теперь нажмите Вернуть пустую подготовку. Пароль и объект настроек не выводятся.");
КонецПроцедуры
Процедура ВернутьНажатие(Кнопка)
ПроверитьСвойКонтекст();
ПроверитьСвойНеактивныйСервис();
Настройки = СервисыИнтеграции.УчебныйОбмен85.ПолучитьНастройки();
Если Не НастройкиТолькоСвои(Настройки) Тогда
ВызватьИсключение "Есть неизвестные настройки: автоматический возврат запрещен";
КонецЕсли;
Настройки.АдресВнешнегоСервисаИнтеграции = "";
Настройки.ИмяПользователя = "";
Настройки.ИмяПользователяВнешнегоСервисаИнтеграции = "";
Настройки.ПарольПользователяВнешнегоСервисаИнтеграции = "";
Фаза = "ОжидаетВозврата";
МоментЗаписи = ТекущаяДатаСеанса();
СервисыИнтеграции.УчебныйОбмен85.УстановитьАктивность(Ложь);
СервисыИнтеграции.УчебныйОбмен85.УстановитьНастройки(Настройки);
Сообщить("Записана пустая учебная подготовка. Подождите 21 секунду и нажмите Проверить возврат.");
КонецПроцедуры
Процедура ПроверитьВозвратНажатие(Кнопка)
ПроверитьСвойКонтекст();
Если Фаза <> "ОжидаетВозврата" Тогда
ВызватьИсключение "Сначала нажмите Вернуть пустую подготовку";
КонецЕсли;
ПроверитьИстечениеКэша();
ПроверитьСвойНеактивныйСервис();
Настройки = СервисыИнтеграции.УчебныйОбмен85.ПолучитьНастройки();
Если Не НастройкиПусты(Настройки) Тогда
ВызватьИсключение "Пустая подготовка не подтверждена; опыт не завершен";
КонецЕсли;
Фаза = "ВозвратПроверен";
Сообщить("Четыре строки пусты, сервис неактивен. Это возврат учебных значений, не удаление записей системных настроек.");
КонецПроцедуры
Процедура ПроверитьИстечениеКэша()
Если МоментЗаписи = Неопределено Или ТекущаяДатаСеанса() - МоментЗаписи < 21 Тогда
ВызватьИсключение "Подождите не меньше 21 секунды после записи; мгновенное чтение не проверяет обновление кэша";
КонецЕсли;
КонецПроцедуры
Процедура ПроверитьСвойНеактивныйСервис()
Если Метаданные.СервисыИнтеграции.Количество() <> 1 Или Метаданные.ОбщиеРеквизиты.Количество() <> 0 Тогда
ВызватьИсключение "Нужен единственный собственный сервис без разделителей и общих реквизитов";
КонецЕсли;
МДСервиса = Метаданные.СервисыИнтеграции.Найти("УчебныйОбмен85");
Если МДСервиса = Неопределено Тогда
ВызватьИсключение "Не найден собственный сервис";
КонецЕсли;
Если МДСервиса.Каналы.Количество() <> 0 Или Не ПустаяСтрока(МДСервиса.АдресВнешнегоСервисаИнтеграции)
Или МДСервиса.ПринадлежностьОбъекта <> Метаданные.СвойстваОбъектов.ПринадлежностьОбъекта.Собственный
Или МДСервиса.РасширениеКонфигурации() <> Неопределено Или МДСервиса.ЕстьИзмененияРасширениямиКонфигурации() Тогда
ВызватьИсключение "Подготовка требует свой сервис без каналов, адреса и расширений";
КонецЕсли;
Пользователь = ПользователиИнформационнойБазы.ТекущийПользователь();
Если Пользователь.Имя <> "УчебныйАдминистратор85" Тогда
ВызватьИсключение "Войдите собственным учебным администратором";
КонецЕсли;
Если СервисыИнтеграции.УчебныйОбмен85.ПолучитьАктивность() Тогда
ВызватьИсключение "Сервис стал активным: не продолжайте этот опыт и не меняйте чужую активность";
КонецЕсли;
КонецПроцедуры
Функция НастройкиПусты(Настройки)
Возврат Настройки.АдресВнешнегоСервисаИнтеграции = ""
И Настройки.ИмяПользователя = ""
И Настройки.ИмяПользователяВнешнегоСервисаИнтеграции = ""
И Настройки.ПарольПользователяВнешнегоСервисаИнтеграции = "";
КонецФункции
Функция НастройкиУчебные(Настройки)
Возврат Настройки.АдресВнешнегоСервисаИнтеграции = "http://127.0.0.1:9/guide-settings-85"
И Настройки.ИмяПользователя = "УчебныйАдминистратор85"
И Настройки.ИмяПользователяВнешнегоСервисаИнтеграции = "guide-user-85"
И Настройки.ПарольПользователяВнешнегоСервисаИнтеграции = "not-a-secret-85";
КонецФункции
Функция НастройкиТолькоСвои(Настройки)
Возврат (Настройки.АдресВнешнегоСервисаИнтеграции = "" Или Настройки.АдресВнешнегоСервисаИнтеграции = "http://127.0.0.1:9/guide-settings-85")
И (Настройки.ИмяПользователя = "" Или Настройки.ИмяПользователя = "УчебныйАдминистратор85")
И (Настройки.ИмяПользователяВнешнегоСервисаИнтеграции = "" Или Настройки.ИмяПользователяВнешнегоСервисаИнтеграции = "guide-user-85")
И (Настройки.ПарольПользователяВнешнегоСервисаИнтеграции = "" Или Настройки.ПарольПользователяВнешнегоСервисаИнтеграции = "not-a-secret-85");
КонецФункции
Процедура ПроверитьСвойКонтекст()
Если Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости.НеИспользовать Тогда
ВызватьИсключение "Нужен собственный стенд УчебныеНастройкиОбмена85 платформы 8.5.1.1343";
КонецЕсли;
Если ТранзакцияАктивна() Тогда
ВызватьИсключение "Учебный вывод не должен выполняться внутри чужой транзакции";
КонецЕсли;
КонецПроцедурыРазбор по шагам
Состояние Фаза и МоментЗаписи хранится в своей форме, не в общем модуле и не в базе. Четыре кнопки разделяют запись и проверки, чтобы не блокировать интерфейс ожиданием.
ПроверитьСвойКонтекст требует свой стенд. Дополнительно проверяются один собственный сервис, отсутствие каналов/общих реквизитов, пустой адрес определения, отсутствие расширений и имя своего пользователя.
ПолучитьАктивность возвращает Булево; до записи и проверки требуется Ложь. Служебные права различаются у чтения активности, установки активности и установки настроек, поэтому подготовка явно даёт своему пользователю оба административных права.
ПолучитьНастройки возвращает НастройкиСервисаИнтеграции; при отсутствии настройки в Предприятии — новый объект. Документированного конструктора Новый НастройкиСервисаИнтеграции нет, урок его не выдумывает.
Начать можно только с четырёх пустых строк. Полученный объект меняется в памяти; четыре присваивания сами по себе не означают запись. УстановитьНастройки сохраняет этот объект в системных данных информационной базы без разделителей.
УстановитьАктивность вызывается только с Ложь, никогда с Истина. Ложь не является удалением сохранённой записи активности. Урок не включает отправку и не подключает каналы; сервис вообще не имеет каналов.
После записи время сохраняется в форме. Следующую проверку разрешаем не раньше 21 секунды: справка задаёт кэш 20 секунд и уведомление заданий о перезапуске, не гарантирует мгновенную видимость другим сеансом.
После ожидания читаем настройки заново и сравниваем все четыре значения, включая учебный пароль без вывода. Изменения другого сеанса и ошибки чтения не поглощаются и не объявляются успехом.
СоздатьСообщение получает явный срок ТекущаяДатаСеанса()+86400. ДатаУстаревания проверяется как readonly-результат фабрики; ей ничего не присваивается. Это срок в часовом поясе сеанса с преобразованием платформой в UTC, не ручная строка UTC.
Параметры черновика — Соответствие, где и ключи, и значения Строка. quantity поэтому содержит "3", не число 3. Собственный UUID превращается в строковый ключ опыта; проверяется его точное сохранение. ОтправитьСообщение отсутствует.
Вернуть доступна и после повторного открытия формы. Каждое текущее поле должно быть пустым либо равным именно нашему заранее заданному учебному значению; неизвестный адрес, имя или пароль запрещают автоматическое затирание.
Возврат записывает четыре пустые строки и Ложь. Через второе ожидание проверяется чтение четырёх пустых строк. Это возврат исходной учебной подготовки, не восстановление произвольных чужих настроек и не удаление служебных записей базы.
Как проверить результат
Будущий ручной тест: F7, вход своим УчебныйАдминистратор85, Записать, ожидание 21 секунды, Проверить, Вернуть, второе ожидание, Проверить возврат. Каждый успешный этап сообщает только статус, не объект настроек и не пароль. runtimeVerifiedScenarios=0.
Нажмите Проверить сразу после записи: должна возникнуть просьба подождать, а не заявление, что значение уже видно всем заданиям. После ожидания сравнение выполняется заново.
Попробуйте начать с непустыми настройками своего стенда: должна быть ошибка без перезаписи. Если это наши известные учебные значения после прерванного опыта, используйте Вернуть и дождитесь подтверждения.
Только в своём стенде измените одно поле на неизвестную тестовую строку: Вернуть должна отказать, не затирать её. Возвращайте подготовку самостоятельно через администратора своего стенда; урок не является универсальной утилитой отката.
Закройте форму после записи только для отдельного будущего негативного опыта. В новой форме Вернуть разрешена для наших известных строк и работает без утраченного состояния; затем второе ожидание и Проверить возврат.
Черновик содержит study-id как строку UUID и quantity как строку 3; его срок задан фабрикой. Никакая доставка, ответ, дата отправки или обработка получателем не проверяются.
После возврата четыре значения пусты, активность Ложь. Служебные записи настройки могут оставаться в базе: код не обещает полное отсутствие следов записи.
Ожидаемый результат
Будущий опыт подтверждает запись и чтение четырёх заранее заданных строк после окна кэша и возврат пустой учебной подготовки. В памяти создаётся неотправленный черновик. Здесь форма и 1С не выполнялись.
На что обратить внимание
Пустая строка означает «не установлено», поэтому наследуется значение Конфигуратора. Она не очищает заданный там адрес или пароль. В этом стенде исходные значения определения намеренно пусты.
ИмяПользователя задаёт пользователя 1С для обработки полученных сообщений; ИмяПользователяВнешнегоСервисаИнтеграции — внешнюю учётную запись. Это разные назначения, не два названия одного логина.
Без ИмяПользователя обработка использует ОсновныеРоли; если они пусты, справка допускает выполнение без ограничения прав. Не переносите пустую настройку пользователя и административные права этого изолированного опыта в production.
Кэш активности и настроек действует 20 секунд. ПолучитьАктивность не доказывает, что сервис никогда не активировали в прошлом. Такой новый стенд и отсутствие конкурентных изменений — обязательная подготовка.
Ожидание измеряется датой сеанса, не монотонным таймером: во время опыта нельзя менять часы. Код не доказывает одновременную синхронизацию всех сеансов или фоновых заданий.
Настройки сохраняются в базе; это не беззаписный getter-пример. При исключении опыт не завершён: используйте собственную кнопку возврата, проверьте права и окончательное чтение. Рабочая база запрещена.
Проверка известных строк защищает лишь от случайного выбора чужих настроек; одинаковый адрес или пароль не доказывает право менять произвольную информационную базу. Нужен именно новый собственный стенд.
ДатаУстаревания создаваемого сообщения задаётся фабрикой. Параметры отправляемого черновика допускают строки; изменять параметры уже полученного сообщения нельзя.
Учебный пароль не является секретом, но в рабочем коде пароль нельзя печатать, писать в журнал или публиковать вместе с диагностикой. Урок не проверяет внешнюю аутентификацию.
Статическая сверка методов и HTML не компилируют форму и не запускают её: перед будущим ручным опытом нужен F7 в этом собственном стенде. Сервер обмена отсутствует и не требуется.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.