СервисИнтеграцииМенеджер.<Имя сервиса интеграции>.СоздатьСообщение

Методы · CreateMessage

Создает сообщение сервиса интеграции.

Синтаксис

СоздатьСообщение(<ДатаУстаревания>)
Полное описание, параметры и ограничения

СервисИнтеграцииМенеджер.<Имя сервиса интеграции>.СоздатьСообщение (IntegrationServiceManager.<Integration service name>.CreateMessage)

СервисИнтеграцииМенеджер.<Имя сервиса интеграции> (IntegrationServiceManager.<Integration service name>)

СоздатьСообщение (CreateMessage)

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

Синтаксис:
СоздатьСообщение(<ДатаУстаревания>)
Параметры:

<ДатаУстаревания> (необязательный)
Тип: Дата.
Устанавливает дату устаревания создаваемого сообщения сервиса интеграции.
Значение по умолчанию: "Текущая дата сеанса + 20 дней".

Дата и время, после которого считается, что сообщение устарело и не должно быть обработано.

Хранится и передается в UTC, при получении преобразуется в время в часовом поясе сеанса, при установке преобразуется из времени в часовом поясе сеанса.
Возвращаемое значение:
Тип: СообщениеСервисаИнтеграции.

Описание:

Создает сообщение сервиса интеграции.

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

Сервер, толстый клиент, внешнее соединение.

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

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

Описание изменено в версии 8.3.21.

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

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

Настроить свой неактивный сервис и проверить возврат после кэша

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

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

Полный модуль обычной формы Пульт обработки УчебныеНастройки85 своего стенда УчебныеНастройкиОбмена85. Только толстый клиент. Переменные формы и все помощники включены. Не выполнялся.

Подготовка

  1. Создайте НОВУЮ отдельную файловую базу 8.5.1.1343: имя конфигурации УчебныеНастройкиОбмена85, совместимость НеИспользовать, обычное приложение и толстый клиент. Не копию рабочей базы. Никаких разделителей, общих реквизитов, расширений, подписок и сторонних заданий. Здесь база и код не запускались: runtimeVerifiedScenarios=0.

  2. Общие → Сервисы интеграции: только один собственный УчебныйОбмен85, синоним Учебный обмен, комментарий guide-owned-settings-85, без каналов и кода модуля. Адрес и учётные данные в Конфигураторе оставьте пустыми. Активность в Предприятии никогда НЕ включайте. Отсутствие каналов относится только к этому уроку настроек, не к рабочему обмену.

  3. В своём стенде вручную создайте роль УчебныйАдминистратор85 с правами Администрирование и Администрирование данных и доступом к своей обработке. Создайте пользователя УчебныйАдминистратор85 с этой ролью и входите только им. Эти административные права — для собственного изолированного стенда, не рекомендация прав рабочему обработчику сообщений.

  4. Создайте обработку УчебныеНастройки85, обычную основную форму Пульт. В её модуль вставьте полный основной код ниже целиком, на верхнем уровне. Общий модуль НЕ нужен: переменные Фаза и МоментЗаписи являются состоянием этой формы.

  5. На форме четыре кнопки: Записать учебные настройки → действие ЗаписатьНажатие; Проверить и создать черновик → ПроверитьНажатие; Вернуть пустую подготовку → ВернутьНажатие; Проверить возврат → ПроверитьВозвратНажатие. Имена действий должны точно совпадать с процедурами. В коде нет иных обязательных обработчиков событий.

  6. Выполните F7 и обновите только собственную новую конфигурацию. Будущий опыт пишет четыре настройки и значение активности Ложь в системные данные этого стенда. Он НЕ беззаписный; рабочие данные и реальные сервисы запрещены. Мы здесь никаких записей не выполняли.

  7. Порядок будущего ручного опыта: Записать → самостоятельно подождать не меньше 21 секунды → Проверить → Вернуть → снова подождать не меньше 21 секунды → Проверить возврат. Форма не блокирует интерфейс ожиданием, не спит и не использует фоновых заданий.

  8. Не закрывайте форму и не меняйте настройки другим сеансом до завершения. Если форма закрылась после записи, откройте Пульт заново и используйте Вернуть: это отдельная аварийная возможность ТОЛЬКО для тех же заранее заданных учебных значений/пустых строк. При неизвестных значениях код откажется их затирать. Затем дождитесь 21 секунды и проверьте возврат.

  9. 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";
    КонецЕсли;
    Если ТранзакцияАктивна() Тогда
        ВызватьИсключение "Учебный вывод не должен выполняться внутри чужой транзакции";
    КонецЕсли;
КонецПроцедуры

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

  1. Состояние Фаза и МоментЗаписи хранится в своей форме, не в общем модуле и не в базе. Четыре кнопки разделяют запись и проверки, чтобы не блокировать интерфейс ожиданием.

  2. ПроверитьСвойКонтекст требует свой стенд. Дополнительно проверяются один собственный сервис, отсутствие каналов/общих реквизитов, пустой адрес определения, отсутствие расширений и имя своего пользователя.

  3. ПолучитьАктивность возвращает Булево; до записи и проверки требуется Ложь. Служебные права различаются у чтения активности, установки активности и установки настроек, поэтому подготовка явно даёт своему пользователю оба административных права.

  4. ПолучитьНастройки возвращает НастройкиСервисаИнтеграции; при отсутствии настройки в Предприятии — новый объект. Документированного конструктора Новый НастройкиСервисаИнтеграции нет, урок его не выдумывает.

  5. Начать можно только с четырёх пустых строк. Полученный объект меняется в памяти; четыре присваивания сами по себе не означают запись. УстановитьНастройки сохраняет этот объект в системных данных информационной базы без разделителей.

  6. УстановитьАктивность вызывается только с Ложь, никогда с Истина. Ложь не является удалением сохранённой записи активности. Урок не включает отправку и не подключает каналы; сервис вообще не имеет каналов.

  7. После записи время сохраняется в форме. Следующую проверку разрешаем не раньше 21 секунды: справка задаёт кэш 20 секунд и уведомление заданий о перезапуске, не гарантирует мгновенную видимость другим сеансом.

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

  9. СоздатьСообщение получает явный срок ТекущаяДатаСеанса()+86400. ДатаУстаревания проверяется как readonly-результат фабрики; ей ничего не присваивается. Это срок в часовом поясе сеанса с преобразованием платформой в UTC, не ручная строка UTC.

  10. Параметры черновика — Соответствие, где и ключи, и значения Строка. quantity поэтому содержит "3", не число 3. Собственный UUID превращается в строковый ключ опыта; проверяется его точное сохранение. ОтправитьСообщение отсутствует.

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

  12. Возврат записывает четыре пустые строки и Ложь. Через второе ожидание проверяется чтение четырёх пустых строк. Это возврат исходной учебной подготовки, не восстановление произвольных чужих настроек и не удаление служебных записей базы.

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

  1. Будущий ручной тест: F7, вход своим УчебныйАдминистратор85, Записать, ожидание 21 секунды, Проверить, Вернуть, второе ожидание, Проверить возврат. Каждый успешный этап сообщает только статус, не объект настроек и не пароль. runtimeVerifiedScenarios=0.

  2. Нажмите Проверить сразу после записи: должна возникнуть просьба подождать, а не заявление, что значение уже видно всем заданиям. После ожидания сравнение выполняется заново.

  3. Попробуйте начать с непустыми настройками своего стенда: должна быть ошибка без перезаписи. Если это наши известные учебные значения после прерванного опыта, используйте Вернуть и дождитесь подтверждения.

  4. Только в своём стенде измените одно поле на неизвестную тестовую строку: Вернуть должна отказать, не затирать её. Возвращайте подготовку самостоятельно через администратора своего стенда; урок не является универсальной утилитой отката.

  5. Закройте форму после записи только для отдельного будущего негативного опыта. В новой форме Вернуть разрешена для наших известных строк и работает без утраченного состояния; затем второе ожидание и Проверить возврат.

  6. Черновик содержит study-id как строку UUID и quantity как строку 3; его срок задан фабрикой. Никакая доставка, ответ, дата отправки или обработка получателем не проверяются.

  7. После возврата четыре значения пусты, активность Ложь. Служебные записи настройки могут оставаться в базе: код не обещает полное отсутствие следов записи.

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

Будущий опыт подтверждает запись и чтение четырёх заранее заданных строк после окна кэша и возврат пустой учебной подготовки. В памяти создаётся неотправленный черновик. Здесь форма и 1С не выполнялись.

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

  1. Пустая строка означает «не установлено», поэтому наследуется значение Конфигуратора. Она не очищает заданный там адрес или пароль. В этом стенде исходные значения определения намеренно пусты.

  2. ИмяПользователя задаёт пользователя 1С для обработки полученных сообщений; ИмяПользователяВнешнегоСервисаИнтеграции — внешнюю учётную запись. Это разные назначения, не два названия одного логина.

  3. Без ИмяПользователя обработка использует ОсновныеРоли; если они пусты, справка допускает выполнение без ограничения прав. Не переносите пустую настройку пользователя и административные права этого изолированного опыта в production.

  4. Кэш активности и настроек действует 20 секунд. ПолучитьАктивность не доказывает, что сервис никогда не активировали в прошлом. Такой новый стенд и отсутствие конкурентных изменений — обязательная подготовка.

  5. Ожидание измеряется датой сеанса, не монотонным таймером: во время опыта нельзя менять часы. Код не доказывает одновременную синхронизацию всех сеансов или фоновых заданий.

  6. Настройки сохраняются в базе; это не беззаписный getter-пример. При исключении опыт не завершён: используйте собственную кнопку возврата, проверьте права и окончательное чтение. Рабочая база запрещена.

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

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

  9. Учебный пароль не является секретом, но в рабочем коде пароль нельзя печатать, писать в журнал или публиковать вместе с диагностикой. Урок не проверяет внешнюю аутентификацию.

  10. Статическая сверка методов и HTML не компилируют форму и не запускают её: перед будущим ручным опытом нужен F7 в этом собственном стенде. Сервер обмена отсутствует и не требуется.

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

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

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

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

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