Поинтегрируем: сервисы интеграции – новый стандарт или просто коннектор?

25.03.24

Интеграция - Перенос данных 1C

В платформе 8.3.17 появился замечательный механизм «Сервисы интеграции». Многие считают, что это просто коннектор 1С:Шины. Так ли это?
 
 Содержание статьи:

Почему я решил писать эту статью?

Вводная часть

          Три инструмента сервисов интеграции

          Сервисы интеграции, каналы, сообщения сервисов интеграции

          Что мы использовали ранее?

Процесс создания сервиса интеграции

          Три таблицы СУБД после добавления сервиса интеграции

          Ненужное поле «Адрес внешнего сервиса интеграции»

          Форма загрузки каналов «под капотом»

          Как работает таблица [IntegServiceSettings]?

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

Необходимо проверить активность сервиса интеграции

          Демонстрация ошибки с выключенной активностью

Необходимо указывать дату устаревания больше текущей даты сеанса

Необходимо указывать канал с типом отправка.

Нюанс с телом сообщения

Как хранятся сообщения?

          Как работает таблица [IntegChannelOutQueue]?

          Что хранится в MessageHeader?

Сквозной пример с Шиной

          Таблицы каналов в СУБД

          Как проверить, что каналы подключены к Шине?

Как запустить обмены с Шиной?

Как работает таблица [IntegChannelInQueue]?

Эксперимент с переносом сообщения средствами СУБД (Без Шины)

Обработка чтения сообщения

Отправитель и получатель в сообщениях сервисов интеграции

Неприятные ошибки при отборах сообщений

Баг по отбору количества сообщений

Баг с отбором по «ИдентификаторСообщенияЗапроса»

Схемы работы Сервисов интеграции при работе с Шиной

Включаем активность сервиса интеграции

Выключаем активность сервиса интеграции

Устанавливаем настройки сервиса интеграции

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

Запускаем фоновые задания и отправляем сообщения в Шину

Запускаем фоновые задания и получаем сообщения из Шины

Останавливаем фоновые задания

Где можно еще применять сервисы интеграции?

Ссылка на статью с примером «Сервисы интеграции без Шины и интеграции»

Заключение

Полезные ссылки

 

 
 Почему я решил писать эту статью?

Во-первых, я запланировал цикл статей по интеграции и для продолжения мне необходимо рассказать про механизм «Сервисы интеграции».

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

В-третьих, если «загуглить» информацию по «Сервисам интеграции», мы найдем информацию только по взаимодействию с 1С:Шиной. И даже на ИТС прямым текстом написано, что разработаны они для взаимодействия с системами класса сервисная шина предприятия через «Внешние сервисы интеграции».

Между тем мы получили новый «Золотой стандарт», ну если и не золотой, то желтый как минимум.

Я очень люблю "мясо" и в статье его будет с избытком.

Давайте разбираться!

 
 Вводная часть

В статье «Поинтегрируем: нужна ли Шина вам?» я предупреждал, что буду плотно рассказывать

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

Инструменты, которые будут использоваться в этой статье, я выложил в статье «Три инструмента для сервисов интеграции», также создал проект на GitHub и выложил туда все исходники.

Нам понадобятся три обработки:

  • Сообщения сервисов интеграции
  • Настройка сервисов интеграции
  • Отправка сообщения сервисов интеграции

Начнем с того, что «Сервисы интеграции» и «Сообщения сервисов интеграции» работают в паре.

Появились «Сервисы интеграции» в платформе 8.3.17.

Сервисы интеграции — это как ящики электронной почты, они содержат «Каналы».

Каналы — это как папки в ящике электронной почты, в которые складываются «Сообщения сервисов интеграции». При этом «Канал» может быть, либо на отправку, либо на получение.

 

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

Свойства:

ДатаОтправки (Чтение) – Дата отправки сообщения. [с версии "8.3.17"]

ДатаУстаревания (Редактируемое при создании сообщения, после того как сообщение создано, его изменять нельзя) – Дата и время, после которого сообщение не должно обрабатываться. [с версии "8.3.17"]

Идентификатор (Чтение) – Идентификатор сообщения. [с версии "8.3.17"]

ИдентификаторСообщенияЗапроса (Редактируемое) – Идентификатор сообщения, на которое создается ответ. [с версии "8.3.17"]

КодОтправителя (Редактируемое) – От кого сообщение. [с версии "8.3.17"]

КодПолучателя (Редактируемое) – Можно указать через запятую нужных получателей. Если не указан уйдет всем возможным получателям. [с версии "8.3.17"]

Параметры (Редактируемое) – Соответствие, в котором можно указать дополнительную информацию, например для маршрутизации или чтения данных. [с версии "8.3.17"]

РазмерТела (Чтение) – Это поле показывает размер тела сообщения. До появления нужно было создавать в параметрах программно свойство «РазмерТела». [с версии "8.3.21"]

Что мы использовали ранее?

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

Пример такого регистра:

Мы создавали все новые и новые регистры. Теперь у нас есть возможность не плодить такие регистры, а использовать «Сервисы интеграции». Но об этом позже, сначала посмотрим на их внутренности.

 
 Процесс создание сервиса интеграции

В конфигураторе и в расширении начиная с 8.3.17 появилась возможность добавить «Сервис интеграции», на данном этапе я буду демонстрировать не в расширении, но дальше в статье будут примеры и с расширениями.

Моя цель показать, как выглядит структура в СУБД и что происходит, когда мы делаем какие-то действия в платформе.

Добавим «Сервис интеграции» с именем «ТестовыйСервис»:

После добавления «Сервиса интеграции» в СУБД, появились три таблицы:

IntegServiceSettings47 – Настройки сервиса интеграции

IntegServiceMsgBody48 – Тело сообщения сервиса интеграции

IntegServiceExtMsgBody49 – Внешнее тело сообщения сервиса интеграции

Нумерация может отличатся от вашей.

 

Ненужное поле в форме создания сервиса:

Обратите внимание на поле «Адрес внешнего сервиса интеграции». По факту оно не нужно и ниже мы это увидим.

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

 

Как работает форма загрузки каналов?

Форма загрузки каналов сделана небрежно, на скорую руку.

Где:

Пользователь = Идентификатор ключа

Пароль = Секрет клиента

 

Эта форма делает следующее:

 1 Отправляет POST запрос для получения JWT(JSON Web Token) токена.

2 С полученным токеном отправляется GET запрос на получение списка каналов.

При нажатии кнопки «Загрузить», добавляет выбранные каналы:

Из того, что добавилось, важны два пункта, которые приходят из запроса:

1 «Имя канала внешнего сервиса интеграции» формируется с помощью свойств process + ”.” + channel

"process""Основной::ОбменМеждуБазами"

"channel""ВБазу2"

 

2 «Направление сообщения» формируется с помощью свойства access

Отправка => "access""WRITE_ONLY"

Получение => "access""READ_ONLY"

 

Как работает таблица [IntegServiceSettings]?

Данная таблица отвечает за хранение настроек сервиса интеграции. Давайте активируем «Сервис интеграции», воспользовавшись типовой обработкой или обработкой «Настройка сервисов интеграции».

Или кодом:

СервисыИнтеграции[Сервис].УстановитьАктивность(Истина);

 

После включения в [IntegServiceSettings47] появилось следующее значение:

Значения _Active:

0x01 – Включено

0x00 - Выключено

*Если настройки не заполнены, тогда при выключении удаляется строчка в СУБД по данному каналу

 

Обратите внимание на поле «Адрес внешнего сервиса интеграции», оно заполнено значением из конфигуратора «123». Но я же говорил, что поле в конфигураторе ненужное, а тут мы видим обратное!

Поменяем в нем значение на 1234, добавим имя пользователя "111" и пароль "111".

То же самое можно сделать кодом:

НастройкиСИ = Новый НастройкиСервисаИнтеграции;
НастройкиСИ.АдресВнешнегоСервисаИнтеграции = "1234";
//НастройкиСИ.ИмяПользователя = "";
НастройкиСИ.ИмяПользователяВнешнегоСервисаИнтеграции = "111";
НастройкиСИ.ПарольПользователяВнешнегоСервисаИнтеграции = "111";
	
СервисыИнтеграции[Сервис].УстановитьНастройки(НастройкиСИ);

 

После чего в поле _Content таблицы [IntegServiceSettings47] записались настройки:

 

Давайте зайдем в конфигуратор:

Обратите внимание, в конфигураторе у нас старое значение, которое будет вас сбивать. Поэтому лучше в конфигураторе не заполнять поле «Адрес внешнего сервиса интеграции». Надеюсь, когда-нибудь его уберут.

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

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

Важно:

  1. Необходимо проверить активность сервиса интеграции. Я видел много примеров, где про это нет ни слова. Мало того отправку делают сразу «ПередЗаписью» в Попытке. Если активность не проверять и кто-то выключит активность, тогда сообщения просто не будут создаваться, так как произойдет ошибка.

Демонстрация ошибки с выключенной активностью.

Выключаем «Сервис интеграции» и пытаемся отправить сообщение:

Получаем ошибку «Сервис интеграции не активен»:

Мы видим странное, фатальное поведение. Помните про этот момент, когда будете писать интеграции.

Логичнее было бы создавать сообщения, но не передавать их в Шину, но, к сожалению, сделали как сделали.

Активность проверяется при помощи кода:

АктивностьСервиса = СервисыИнтеграции[Сервис].ПолучитьАктивность();

 

  1. Необходимо указывать дату устаревания больше текущей даты сеанса. Если по каким-то причинам дата будет меньше текущей даты сеанса, вы поймаете ошибку «Не допускается создания сообщения с датой устаревания, меньше текущей».

Код установки даты устаревания:

Сообщение = СервисыИнтеграции[Сервис].СоздатьСообщение(ДатаУстаревания);

Что произойдет, когда будут запущены фоновые задания для обработки сообщений в канале с устаревшими датами?

Такие сообщения будут удалены, поэтому важно следить за такими вещами.

  1. Необходимо указывать канал с типом отправка. Если по каким-то причинам вы укажете канал с типом получение, поймаете ошибку «Не допускается отправка сообщения в канал, не предназначенный для отправки сообщений».

  1. Если у вас платформа младше 8.3.21 обязательно в параметры добавьте параметр с размером тела сообщения. Данный параметр нужен при чтении сообщения, об этом напишу ниже.

Код создания тела сообщения и создания параметра с размером:

Тело = Сообщение.ПолучитьТелоКакПоток();
	
Буфер = ПолучитьБуферДвоичныхДанныхИзСтроки(ТекстСообщения);
Тело.Записать(Буфер, 0, Буфер.Размер);
Тело.Закрыть();
	
// С платформы 8.3.21 этот кусок необязателен, так как было добавлено свойство РазмерТела
// Это свойство делает тоже самое, но автоматически    
Если ВключитьРазмерСообщения Тогда 
	Сообщение.Параметры.Вставить("РазмерСообщения", Буфер.Размер);
КонецЕсли;

 

 
 Как хранятся сообщения?

Давайте выяснять, где в СУБД хранятся свойства, параметры и тело.

Для начала я создам «чистое» сообщение. Без тела, без параметров и без отправителя с получателем.

Мы видим, что поле MessageBody в таблице [IntegChannelOutQueue53] равно «NULL»:

Теперь введем в тело сообщение “1” и создадим сообщение вновь:

 

Мы видим, что во втором сообщении в MessageBody появилось значение «0x31».

Это и есть наша единица:

https://bytetool.web.app/en/ascii/code/0x31/

Еще мы видим, что MessageHeader в первом и втором сообщении поменялось. Это из-за того, что у меня платформа старше 8.3.21, соответственно в свойство «РазмерСообщения» записался размер тела сообщения и изменился «Идентификатор» сообщения.

Сверяем текст из MessageHeader:

0x55DCE683889C54884A9DED4461E763942391C042BC15919C37F7D90946AC2DD29DE8D6FFA791E0FAD4

41A94402009100531B25AD44020081C1E1818181812812020

Обратите внимание на вот эти части: DCE683889C54884A9DED4461E763942391C042BC и 15919C37F7D90946AC2DD29DE8D6FFA791E0FAD4

 

А теперь посмотрим на поле «MessageId»:

Я не знаю, что обозначает 0x55, но мне теперь понятно, что после этого значения идет идентификатор из «MessageId».

https://bytetool.web.app/en/ascii/code/0x55/

 

Далее я решил создать еще одно сообщение, в котором в «ИдентификаторСообщенияЗапроса» помещу идентификатор первого сообщения:

ИдентификаторСообщенияЗапроса = Новый УникальныйИдентификатор("8883e6dc-549c-4a88-9ded-4461e7639423");

В MessageHeader я увидел два идентификатора:

0x55C3B6F18F3682E14C967208BE846566A49140884651A94402009100531B25AD44020095

DCE683889C54884A9DED4461E7639423C1E181818181812020

Где:

8883e6dc-549c-4a88-9ded-4461e7639423 => DCE683889C54884A9DED4461E7639423

8ff1b6c3-8236-4ce1-9672-08be846566a4 => C3B6F18F3682E14C967208BE846566A4

 

Вывод: [IntegChannelOutQueue] служит для исходящих сообщений.

Где:

MessageId – Идентификатор

ExpirationDate – Дата устаревания

MessageHeader – Свойства и параметры. Тут хранятся все значения для отборов сообщений.

MessageBody – Тело сообщения

 

Я еще немного покопался в этой теме. Создал сообщение, где указал отправителя alfa и получателя betta.

В итоге получил вот такой «MessageHeader»:

0x552246D1DA61C6CD4E812CFB7B5C9500BD9140D182F1AB44020091005B9D23AC44020095

5188AA08CC01F34ABC7EB836C6ECC2D8C1FA04616C66619A056265747461818182812020

Где:

Начальный символ -> 0x55 => U

Идентификатор -> 9EABEC76293F2F4194C9AB0110C9AA48 => b8f7a2be-86d1-4504-a473-2434b70f3b09

ИдентификаторСообщенияЗапроса -> 5188AA08CC01F34ABC7EB836C6ECC2D8 => 08aa8851-01cc-4af3-bc7e-b836c6ecc2d8

КодОтправителя -> 616C6661 => alfa

КодПолучателя -> 6265747461 => betta

 

Я пробовал в отправителя написать betta, а в получателя alfa и хвост выглядел вот так:

C1FA0562657474619A04616C6661818181812020

Обратите внимание на FA и 9A они остались на тех же местах.

А 05 и 04 поменялись местами в месте с отправителем и получателем.

 

После чего в отправителя положил вот такое значение:

КодОтправителя ­-> 62657474616265747461626574746162657474616265747461 => bettabettabettabettabetta

Хвост получился вот такой:

C1FA19626574746162657474616265747461626574746162657474619A04616C6661818181812020

Как вы видите, после FA появилась 19, делаю вывод, что это значение служит для расшифровки.

Дальше я не стал раскручивать эту тему.

 
 Сквозной пример с Шиной

Вы можете сказать: -Какой еще Шиной? В кратком содержании…

Не торопитесь. Для начала нужно показать, как работает стандартный обмен. То, для чего создавались «Сервисы интеграции». После мы посмотрим на то, что мы получили помимо стандартного использования.

Не буду пошагово описывать, как создать проект в Шине, акцент будет не на это.

 

Маршрут будет такой:

У нас две группы, между ними двухсторонний обмен. Базы, подключенные к этим группам, смогут принимать и отправлять сообщения. В документации Шины есть пример с магазинами под №3, наш маршрут точная копия.

В Шине будут следующие каналы:

Создаю две базы. В базе «Альфа», «Сервисы интеграции» будут в основной конфигурации:

 

После добавления каналов в СУБД появились две таблицы:

IntegChannelInQueue52 – Очередь получения канала сервиса интеграции

IntegChannelOutQueue53 – Очередь отправки канала сервиса интеграции

Нумерация может отличатся от вашей.

 

Включаем канал и добавляем настройки:

 

В базе «Бетта» добавлю сервисы интеграции через расширение:

 

В СУБД появились следующие таблицы:

IntegServiceSettings47X1 – Настройки сервиса интеграции

IntegServiceMsgBody48X1 – Тело сообщения сервиса интеграции

IntegServiceExtMsgBody49X1 – Внешнее тело сообщения сервиса интеграции

IntegChannelInQueue50X1 – Очередь получения канала сервиса интеграции

IntegChannelOutQueue51X1 – Очередь отправки канала сервиса интеграции

Нумерация может отличатся от вашей.

X1 обозначение расширения

 

Включаем канал и добавляем настройки:

 

Как проверить, что каналы подключены к Шине?

Проверить состояние с помощью кода:

СервисыИнтеграции[Сервис][Канал].ПолучитьСостояние()

Или посмотреть через обработку "Сообщения сервисов интеграции":

 

Как запустить обмены с Шиной?

Базы созданы, каналы включены, настройки сохранены. Чтобы запустить обмены, необходимо запустить фоновое задание (если сказать честно, то запускается 3 фоновых задания).

Для запуска фоновых заданий необходимо выполнить следующий код:

СервисыИнтеграции.ВыполнитьОбработку();

Фоновые задания запускаются на 2 минуты и проверяют есть сообщения к получению или отправке. В рекомендациях написано, что необходимо добавить регламент, который будет запускать эти задания раз в две минуты. Если установить запуск с меньшим периодом ничего плохого не случится. Для запуска необходимы права Администратора.

Я запущу фоновое задание используя обработку «Отправка сообщения сервисов интеграции». для этого нажму кнопку «Выполнить обработку»:

 

Три фоновых задания заработали:

 

Для того, чтобы выключить фоновые задания, нужно выполнить следующий код:

СервисыИнтеграции.ОстановитьОбработку();

 

Создадим сообщение в базе Альфа и передадим его в базу «Бетта»:

 

Далее проверим, появилось ли сообщение в канале отправки.

Для этого используем обработку «Сообщения сервисов интеграции»:

Мы видим, что сообщение попало в канал, давайте глянем в СУБД.

 

В таблице [IntegChannelOutQueue53] появилась запись:

На этом этапе я сохраню сообщение, чтобы сравнить с тем, что прилетит в базу «Бетта».  

 

Теперь включим фоновое задание для обработки сообщений в базе «Альфа».

Сообщение пропало в таблице [IntegChannelOutQueue53], в данный момент оно в Шине:

 

В базе «Бетта» я специально сделал ошибку в коде, чтобы сообщение не прочиталось и осталось в канале:

Теперь включим фоновое задание для обработки сообщений в базе «Бетта» и сразу остановим обработку.

Обратите внимание, сообщение прилетело и ждет в канале, когда его прочитают:

В СУБД базы «Бетта» в таблице [IntegChannelInQueue50X1] мы видим данное сообщение:

Где:

MessageId – Идентификатор

ExpirationDate – Дата устаревания

MessageHeader – Свойства и параметры

MessageBody – Тело сообщения

           Processed – Статус (0x01 – Прочитано, 0x00 – Не прочитано)

После того как сообщение прочитано, в поля MessageHeader и MessageBody записывается Null, а в Processed записывается «0x01»:

 

При сравнении сообщений в базе «Альфа» и базе «Бетта» обнаружил, что содержимое всех полей совпадают, отличается только содержимое MessageHeader.

Различия в тексте MessageHeader:

0x55B707DC56D4692E4DA5344229C663855491B0B22A2C5C6428A94402009100531B25AD44020081C35

C04B53970C220438043F0421043E043E043104490435043D0438044F04EB53970C1E0431043C0435043D

04140430043D043D044B043C04380420E04B53970F2004300437043C043504400421043E043E04310449

0435043D0438044F04EB4E89538B3820E04B539A10696E7465675F6D6573736167655F6964EB539A2435

366463303762372D363964342D346432652D613533342D34323239633636333835353420E04B539A114

A4D535844656C6976657279436F756E74EB4E822020FA04616C66619A056265747461818189812020

Делаем вывод: 

В шапке сообщения что-то меняется непосредственно в Шине. Я предполагаю, что происходит замена получателей и отправителей, может быть, добавляются еще свойства.

И действительно в базе получателе я увидел, что в параметрах после Шины появились дополнительные свойства:

JMSXDeliveryCount

integ_message_correlation_id

integ_message_id

Но это уже связано с механизмами Шины, и я не стал анализировать таблицы Шины в поисках ответов.

 
Эксперимент с переносом сообщения средствами СУБД (Без Шины)

!!! Данный эксперимент делался чисто из инженерного интереса, я делал его на свой страх и риск. Ни в коем случае не делайте это на продакшн !!!

Предыдущее исследование, меня огорчило, так как оно рушило то, что я хочу показать в этом пункте. Шина вносит в сообщение какие-то данные, происходит «Инъекция», но я все же решил попробовать на «дурака».

Создаю сообщение:

 

Вот сообщение:

В СУБД базы «Альфа» сообщение появилось:

 

Перебрасываю сообщение из базы «Альфа» в базу «Бетта» используя SQL:

INSERT INTO [iser2].[dbo].[_IntegChannelInQueue50X1] (_MessageId,_Position,_ExpirationDate, _MessageHeader, _MessageBody, _Processed)
SELECT [_MessageId]
      ,[_Position]
      ,[_ExpirationDate]
      ,[_MessageHeader]
      ,[_MessageBody]
      , CAST(0 as binary(1)) as _Processed   
  FROM [iser].[dbo].[_IntegChannelOutQueue53] WHERE _MessageId = 0xA6E1978907ACBE44B054BF53C53704F1

Пояснение по SQL запросу:

           Iser – База Альфа

           iser2 – База Бетта

_Processed – Поле статус, в исходящих сообщениях данное поле отсутствует, поэтому создаем его в запросе CAST(0 as binary(1)) as _Processed  

Запрос выбирает из базы «Альфа» все сообщения с указанным идентификатором из исходящих сообщений и копирует во входящие в базу «Бетта».

 

В СУБД базы «Бетта» появилось наше сообщение:

 

 
 Создаю обработку чтения сообщения:

 

Ставлю точку остановы и запускаю фоновое задание по чтению сообщений.

Вижу, что сообщение читается нормально:

В СУБД после прочтения сработал стандартный механизм. В MessageHeader и MessageBody записывается Null, а в Processed записывается «0x01».

Как видите можно передать сообщение без использования Шины, но у этого способа есть много минусов, хотя плюсы тоже имеются.

 
 Отправитель и получатель в сообщениях сервисов интеграции

Как мы уже видели ранее, в сообщении присутствует два свойства отвечающих за маршрутизацию «КодОтправителя» и «КодПолучателя», но какие есть нюансы с ними?

  1. Если не указать «КодОтправителя», тогда он проставится в Шине.

А что, если перебросить сообщение без Шины?

Перебрасываем сообщение средствами SQL и считываем в базе «Бетта»:

Как мы видим, Шина нам «прощает», если мы что-то не заполняем, но если мы используем «Сервисы интеграции» без Шины, то должны следить за заполнением свойств, отвечающих за маршрутизацию.

  1. Если не указать «КодПолучателя», тогда в Шине будут подставлены все возможные получатели, но в базу прилетит сообщение, адресованное только этой базе. То есть в каждой базе будет только один получатель в свойстве «КодПолучателя».
  2. Можно ли скомпрометировать отправителя через шину?

Для этого эксперимента в Шине создам еще одну инфосистему «Зетта» и подклю ее к группе «Бетта»:

Теперь отправим сообщение из базы «Бетта», указав, что оно отправлено от «Зетты»:

 

Смотрим, что прилетело в «Альфа»:

Шина подставила реального отправителя:

Соответственно если мы не используем Шину, нужно следить за заполнением верного отправителя, чтобы не скомпрометировать базу отправителя. Для этого можно, например, создать константу, хранящую отправителя, и в отправке сообщения проставлять «КодОтправителя».

 
Неприятные ошибки при отборах сообщений

Я поймал две ошибки, одну отправил в фирму 1с и ее приняли, а вторая отправлена 07.03.2024 и еще на первой линии.

1 Баг по отбору количества сообщений. В платформе отбор по количеству не работает, из-за чего выбираются все подходящие под отбор сообщения.

Баг отправлен в 1С, ждем, когда поправят:

2 Не работает отбор по свойству «ИдентификаторСообщенияЗапроса» со значением:

ИдентификаторСообщенияЗапроса = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")

Выбираются абсолютно все сообщения, даже те у которых «ИдентификаторСообщенияЗапроса» заполнен.

Код отбора:

Отбор = Новый Структура;
Отбор.Вставить("ИдентификаторСообщенияЗапроса", 
      Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"));
СообщенияСервиса = СервисыИнтеграции[Сервис][Канал].ВыбратьСообщения(Отбор);

Баг отправлен в 1С, ждем, когда поправят: HL-802851

 

Схемы работы Сервисов интеграции при работе с Шиной

Включаем активность сервиса интеграции:

Выключаем активность сервиса интеграции:

Устанавливаем настройки сервиса интеграции:

Создаем сообщение в канале сервиса интеграции:

Запускаем фоновые задания и отправляем сообщения в Шину:

Запускаем фоновые задания и получаем сообщения из Шины:

Останавливаем фоновые задания:

 

Где можно еще применять сервисы интеграции?

Вообще если копнуть глубже, а мы копнем в статье «Сервисы интеграции без Шины и интеграции», «Сервисы интеграции» можно применять без Шины. Частично мы это уже проделали при помощи SQL.

Давайте подумаем, где можно применить «Сервисы интеграции»?

Можно придумать массу применений.

Вот несколько из них:

  1. Буфер для отправки электронной почты. Создаем сообщение в канале, а потом регламентом делаем массовые рассылки.
  2. Замена регистров с пакетами при различных обменах.
  3. Для работы в паре с ПоказатьОповещениеПользователя. Сейчас для этого используются регистры.

Примеры таких регистров:

И прочие варианты.

Один из возможных примеров применения я покажу в статье «Сервисы интеграции без Шины и интеграции».

 

Заключение

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

Надеюсь, после этой статьи часть препятствий спадет.

 

На этом статью завершаю.

Всем желаю профессионального роста и интересных задач!

 

Полезные ссылки:

Поинтегрируем: нужна ли Шина вам? – Статья, с которой начался цикл статей по интеграции.

Три инструмента для сервисов интеграции – Бесплатные инструменты по работе с сервисами интеграции.

PAPI-tools – Проект на GitHub, содержащий исходники обработок, которые будут первоначально выкладываться в данном проекте, а в будущем перетекать в подсистему PAPI (релиз подсистемы запланирован на 19.05.2024)

Сервисы интеграции без Шины и интеграции – Пример использования «Сервисов интеграции» в базе без подключения к Шине и вообще без обменов.

Шина Регистры сведений Интеграция Архитектура ESB Сервисы интеграции Планы обмена Сообщения сервисов интеграции PAPI GitHub PAPI-tools

См. также

SALE! 10%

Перенос данных 1C Программист Платформа 1С v8.3 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос документов, начальных остатков и справочной информации из УПП 1.3 в ERP 2 | из УПП 1.3 в УТ 11 | из УПП в КА 2 | Правила конвертации (КД 2) | Более 360 предприятий выполнили переход с использованием этого продукта! | Сэкономьте время - используйте готовое решение для перехода! | Позволяет перенести из УПП 1.3 в ERP / УТ 11 / КА 2 всю возможную информацию | В переносе есть фильтр по организации и множество других опциональных параметров выгрузки | Есть несколько алгоритмов выгрузки остатков на выбор

55778 50200 руб.

04.08.2015    166774    334    278    

375

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.236.x) и БП 3.0 (3.0.164.x). Правила подходят для версии ПРОФ и КОРП.

35000 31500 руб.

15.12.2021    24192    171    51    

130

SALE! 15%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Правила в универсальном формате обмена для ERP 2.5, КА 2.5, УТ 11.5, БП 3.0, Розница, УНФ, для последних версий конфигураций. Ссылки на другие конфигурации в описании публикации. Правила совместимы со всеми другими версиями конфигураций новыми и старыми, поддерживающими обмен и синхронизацию в формате EnterpriseData. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

26280 руб.

12.06.2017    141847    799    297    

420

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 10 Россия Управленческий учет Платные (руб)

Перенос данных из 1С:Управление торговлей 10.3 в 1С:Управление торговлей 11.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УТ 10.3 (10.3.88.x) и УТ 11.5 (11.5.19.x).

35000 31500 руб.

23.07.2020    51570    228    70    

187

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос данных из ERP в БП 3 | из КА 2 в БП 3 | из УТ 11 в БП 3 | из ЕРП в БП 3 | Сэкономьте время - используйте готовое решение для перехода! | Перенос разработан в формате КД 2 (правила конвертации данных) | Переносятся все возможные виды документов, начальных остатков и нормативно-справочная информация| Можно опционально выгружать каждую пару "номенклатура+характеристика" как отдельную номенклатуру | Есть выгрузка настроек счетов учета и зарплатных данных из ERP / КА 2 | Можно проверить на вашем сервере перед покупкой

55778 50200 руб.

15.04.2019    72211    182    150    

124

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена | Можно выполнить переход с УПП на БП 3 или запускать выгрузку данных за выбранный период времени | Переносятся документы, начальные остатки и вся справочная информация | Есть фильтр по организации и множество других параметров выгрузки | Поддерживается несколько сценариев работы: как первичный полный перенос, так и перенос только новых документов | Перенос данных возможен в "1С: Бухгалтерия 3.0" версии ПРОФ, КОРП или базовую | Переход с "1С: УПП1.3" / "1С:КА 1.1" на "1С:БП3.0" с помощью правил конвертации будет максимально комфортным! | Можно бесплатно проверить перенос на вашем сервере!

48278 43450 руб.

25.02.2015    171311    302    257    

378

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист Платформа 1С v8.3 Сложные периодические расчеты 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Платные (руб)

Правила переноса кадровых и расчетных данных и справочной информации из "1С:УПП1.3" или "1С:КА 1.1" в "1С:ЗУП 3.1 | Разработан в формате КД 2 (правила конвертации данных) | При выгрузке есть фильтр по организациям | Обновляется при выходе новых релизов 1С | Развитие алгоритмов | Расчетные документы переносятся в документ "Перенос данных" | Создаются документы "Начальная штатная расстановка" и "Начальная задолженность по зарплате", переносятся кадровые документы

55778 50200 руб.

29.10.2018    56303    59    105    

61

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 Платформа 1C v8.2 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Управление производственным предприятием Россия Платные (руб)

Регулярный обмен, выгрузка, перенос из КА 1.1, УПП 1.3, УТ 10.3 для обмена с любыми конфигурациями, поддерживающими обмен в формате EnterpriseData (КД3) - БП 3.0, ERP, КА 2, УТ 11, Розница 2, УНФ 1.6 и другими. Правила для старых и доработанных конфигураций не требуют синхронного обновления и совместимы с новыми и будущими конфигурациями. Обмен по расписанию, через папку, FTP, почту.

15300 руб.

18.02.2016    187031    590    509    

527
Отзывы
32. dsdred 3639 13.03.24 08:20 Сейчас в теме
В дополнение к статье.
Два символа перед зашифрованными отправителями\получателями длина зашифрованной строки в шестнадцатеричной системе исчисления
9A и FA - похоже на якорь

КодОтправителя -> 616C6661 => alfa

04 - количество символов в шестнадцатеричной системе исчисления = 4 в десятичной
616C6661 - зашифрованный код отправителя\получателя

КодПолучателя -> 6265747461 => betta

05 - количество символов в шестнадцатеричной системе исчисления = 5 в десятичной
6265747461 - зашифрованный код отправителя\получателя

КодОтправителя ­-> 62657474616265747461626574746162657474616265747461 => bettabettabettabettabetta
19 - количество символов в шестнадцатеричной системе исчисления = 25 в десятичной
Остальные комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. ixijixi 1922 11.03.24 11:12 Сейчас в теме
Дмитрий, последняя ссылка нерабочая, поправьте пжл.
Прикрепленные файлы:
3. dsdred 3639 11.03.24 11:44 Сейчас в теме
(1)Огромное спасибо, поправил.
Статья: Сервисы интеграции без Шины и интеграции будет отправлена на модерацию или сегодня вечером или завтра.
2. kuzyara 2094 11.03.24 11:28 Сейчас в теме
Кто тестировал под нагрузкой, скажите сколько сообщений в секунду переваривает?
kote; it_depDi; +2 Ответить
5. dsdred 3639 11.03.24 11:55 Сейчас в теме
(2)Вы сейчас про шину?


Процесс выглядит так:
1 создаются сообщения в базе 1с источник (сюда входит и конвертация и создание/сохранение). Тут факторы разные, как написан код по конвертации например это не типовой механизм. Есть ли сохранение сообщений в несколько потоков?
2 сообщения перетекают в Шину. Есть ли в Шине преобразования и маршрутизация?
3 сообщения перетекают из Шины.
4 сообщения читаются. Чтение тоже что и в первом пункте, факторов много.

Соответственно не ясно: Что и как измерять?

На официальном ресурсе ( https://v8.1c.ru/static/1c-shina/ ) данные такие:
Для примера мы проводили тест, на котором через механизм сервисов интеграции отправляли в 1С:Шину около 20 000 сообщений размером 256 Кб каждую минуту и она с этим успешно справлялась.
4. starik-2005 3090 11.03.24 11:51 Сейчас в теме
Отличная статья.
rpgshnik; mvxyz; fatman78; dsdred; +4 Ответить
6. support 4453 11.03.24 15:00 Сейчас в теме
7. starik-2005 3090 11.03.24 15:24 Сейчас в теме
(6) Да ладно, я часто хвалю статьи и редко ругаю. Так что Вы меня с кем-то спутали. Хотя да, я жаловался, что статей приличных на инфостарте в последнее время все меньше - достаточно полистать "Главное" (или как его там). Сейчас там статьи в среднем с 20-30-ю звездами, а были времена со средним рейтингом статей в 50-100 в этом разделе. И просмотров стало мало у статей. Я просто анализировал статьи сейчас и три года назад - просмотры в среднем упали.
8. support 4453 11.03.24 20:36 Сейчас в теме
(7) А я каждый день смотрю на Главную и очень много интересного нахожу. Коллеги пишут интересно!
Посещаемость сайта растет. Курс стартмани 148 рублей, дороже доллара!
Еще около 190 докладов с конференции не опубликовано.
На весеннюю конференцию уже продано 350 билетов, на осеннюю конференцию уже 200 (придется объявлять sold out за 2 месяца ;).
Направления развиваются, каждый показывает рост. Новые авторы, партнеры появляются каждый день.
Все отлично!
9. dsdred 3639 11.03.24 20:39 Сейчас в теме
(8)я лично удивляюсь, как находите время читать статьи. Поделитесь секретом.
10. support 4453 11.03.24 20:54 Сейчас в теме
Так это моя работа)
Silenser; dsdred; +2 Ответить
11. starik-2005 3090 11.03.24 21:43 Сейчас в теме
(8)
Все отлично!
Так джаст бизнес, ничего личного. Но если взять ТОП статей, то большинство из них написаны до 20-го года еще. И плюсы они набрали тогда, а не сейчас. Самые крутые вообще 10+ лет назад написаны. Есть парочку новых статей, но они в сути своей никакой америки не открыли. Но бизнес идет. Я тут не против совершенно. Просто сообщество теряет экспертизу. Реально среди моих знакомых программистов, кого бы я мог назвать экспертами, на инфостарт почти никто не ходит.
SirStefan; +1 Ответить
12. support 4453 11.03.24 21:45 Сейчас в теме
(11)
Реально среди моих знакомых программистов, кого бы я мог назвать экспертами, на инфостарт почти никто не ходит.
Не может такого быть! Это фантастика! На Инфостарте много экспертных статей!
16. starik-2005 3090 11.03.24 21:59 Сейчас в теме
(12)
На Инфостарте много экспертных статей!
Так я не говорю, что их нет. Даже скажу больше - на инфостарте только и есть экспертные статьи по 1С, в других местах статей экспертных мало. И я вижу, что экспертам серьезную статью писать - это дорого, т.к. даже если 10к символов - это 10см + 30 см за 50+, + 20 см за 100 (есть такое еще?), то даже 10 + 30 + 20 = 60 см, из которых при выводе даже на самозанятого останется 60 см * 148 пусть рублей = 8800 - 6% = 8300. Такую статью написать - это минимум день. Я за два часа просто не могу 10к символов осилить, поэтому мои последние две статьи остались без СМ за количество символов, хотя пользы от них больше, чем от многих других с большой кучей символов - рейтинг говорит за себя. Так что даже мне это надоедает. Я вообще никого лично не знаю, кто бы за последние 5 лет на Инфостарте статейку бы написал. А вот кто перестал их писать - знаю (((
SirStefan; +1 Ответить
17. dsdred 3639 11.03.24 22:13 Сейчас в теме
(16)частично согласен.
Я просто делаю вот так:
На работе есть неизвестная проблема. Я её решаю и документирую пошагово решение. Результат: Шпаргалка для себя и статья на инфостарт.

Эта статья это вариант покапаться в кишках и поделится знаниями с коллегами. Время ушло прямо много, по ночам писал. Но чувствую прямо какое-то удовлетворение от того что в телеге люди написали, что статья агонь. Иногда даже не знакомые ранее мне люди пишут и говорят что понравилась статья. Это дорогого стоит.

А СМ для меня вообще сейчас пока смысла не имеет, возня с самозанятостью... прям нехочется. Я на работе шучу по этому поводу: накоплю миллион, тогда займусь выводом денег ))
passerg; d4rkmesa; rpgshnik; +3 Ответить
20. support 4453 11.03.24 23:44 Сейчас в теме
(16) Давно хочу сделать поле - Цена за статью, которую заполнит автор, если он хочет денег за публикацию.
rpgshnik; +1 Ответить
21. starik-2005 3090 12.03.24 06:20 Сейчас в теме
(20)
Давно хочу сделать поле
Даже в голову не приходит, что в этом поле можно будет указать? Мне кажется, что если статья выделяется из коллектива по просмотрам/рейтингу, то автора надо поощрять писать еще статью, т.к. он - актив ресурса. А как это сделать - ума не приложу. Вот автору этой статьи просто по кайфу. Но и это пройдет )))

ЗЫ: вот посмотрите, как автор про самозанятость сказал: "возня". А что там возни-то? 10 минут в банковском приложении с жуткого похмелья, 2 минуты если в здравом уме и доброй памяти. Но на мой личный взгляд основная проблема - это распечатать акт, подписать его, сфоткать и прикрепить. Меня вот этот поход в оффлайн до принтера напрягает жутко. И вот висит у меня какое-то количество бабла на счете местном, но вывести это дело - это моральный такой порог, когда нужно две минуты потратить на возню с самозанятостью, засунуть все эти реквизиты изменившиеся, договор переподписать, сфоткать, отправить, акт распечатать, сфоткать, отправить, чек мутнуть, скачать, отправить, ... Бррррр.
SirStefan; dsdred; +2 Ответить
22. dsdred 3639 12.03.24 06:59 Сейчас в теме
(21)согласен. На счёт поля с ценой странная идея...

Есть топ 100 за год, по скачиванию, обсуждению, рейтингу и вот с этим и надо работать, а не с полем цена.
rpgshnik; +1 Ответить
35. support 4453 13.03.24 14:53 Сейчас в теме
(21) такое поле есть, но только для модераторов, для тех авторов, кто пишет по заказу. Мы с удовольствием можем отблагодарить авторов статей. Если что, пишите тогда в тикете свою цену, согласуем, выплатим в момент опубликования.
starik-2005; +1 Ответить
37. starik-2005 3090 13.03.24 15:08 Сейчас в теме
(35)
пишите тогда в тикете свою цену, согласуем
А вилка какая? Вот у меня есть простые статьи с 100+ звезд, которые модераторы не хотели согласовывать, а Вы про деньги - они ж совсем от этого рыдать будут.
ЗЫ: мне кажется, что модераторы вообще не влияют на качество статей. В хабре их нет, если я правильно понял. По крайней мере публикация с мульоном плюсов из одного слова у них - это норма.
38. dsdred 3639 13.03.24 15:23 Сейчас в теме
(35)В том то и смысл. Автор пишет по заказу.
А с простыми авторами - это получается на уровне торгов на рынке.
Вот пример:
Автор горит идеей написать статью про уточек, он в этом эксперт. В какой момент он должен запросить цену? Перед написанием статьи или когда она готова?
А когда она готова и ему отказ, он получается просто пописал?

Сама идея с полем и выпрашиванием денег плохая.
Повторюсь, у вас есть рейтинги за месяц, квартал, полгода, год.
Вот с этим и надо работать. Раньше кстати к этим показателям были привязаны Награды infostart awards, а сейчас это просто рейтинг. Да и сама премия как-то обесценивается.
Вот пример https://awards.infostart.ru/ кто там был в номинантах и победителях в 2023?

П.С. По контенту например, сегодня наблюдал как весь Инфостарт "забомбил" статьями. Но я такого точно не ожидал, так как думал, что пишу статьи про "уточек", интересные узкому кругу.
Прикрепленные файлы:
mrFduch; SirStefan; rpgshnik; +3 Ответить
46. rpgshnik 3797 14.03.24 15:08 Сейчас в теме
(38) про премию в точку, очень сильно обесценилась, я уже высказывался, что она на мой взгляд поощряет свою какую-то другую тусовочку, а не авторов. Мне нравилась ачивка за лучшую статью, как уже выше писал прямо был азарт, получить её... вышло аж дважды :) а потом когда премию ещё убрали, вообще не понял смысл... Плюс Ванька Белокаменцев убежал не догнать :)) мне тогда казалось что раньше были разные категории звезд желтые и фиолетовые, типа фиолетовые за всякие такие романы в стиле Ивана, а желтые технически полезные... просто написать роман за вечер или техническую на неделю сесть, а получить одинаковый профит, ну такое...
SirStefan; Interrupted; dsdred; +3 Ответить
23. dsdred 3639 12.03.24 07:26 Сейчас в теме
(20)это поле лишь поможет измерить жадность, наглость и самолюбие... нужно работать с топ за месяц, квартал и год. У Вас все инструменты на руках.

У меня в жизни был случай лет 10 назад. Я халтурил на одного клиента, меня с ним друг сосватал. Сделал несколько заданий и вдруг мне друг говорит: -директор просит встречи с тобой. Познакомится хочет. Приезжаю в гости. Общаемся. И как бы невзначай он говорит есть у меня задачки вот такие и перечислил их. Можешь сделать?
Я согласился и по одной из них сказал получится чуть дороже чем обычно.
Когда её сделал долго думал сколько попросить и попросил чуть выше чем обычно и другу цену озвучивал стесняясь. Он когда мне деньги привёз, сказал. Чего ты стесняешься? Ты же работу сделал. До тебя нам три программиста сказали, что это невозможно сделать. А за то, что невозможно ты попросил более чем мало.


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

А история к тому, что в поле с ценой, люди с синдромом сомазванца поставят 0. А те что понаглее...
kote; SirStefan; rpgshnik; +3 Ответить
24. starik-2005 3090 12.03.24 10:03 Сейчас в теме
(23)
люди с синдромом сомазванца поставят 0
Да, поле с ценой - это жесть какая-то )))
А по поводу того, что нужно мониторить рынок и не соглашаться работать за меньше, чем 3к в час - это правильная позиция.
d4rkmesa; +1 Ответить
44. rpgshnik 3797 14.03.24 15:01 Сейчас в теме
(16) Меня никогда не двигали деньги за написание статей на Инфостарт, двигал меня рейтинг, но когда стали падать СМ был классный приятный бонус :) потом даже пытался сделать некую коммерческую конфигурацию за 10 см, но она как-то не активно пользовалась спросом.

А вот с чем согласен, что написание статьи да отнимало очень много времени, уделял этому большое внимание и были переживание если вдруг не зайдёт, а что если это захейтят, что происходило с 20% вероятностью :)

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

И согласен с Димой Сидоренко, что большинство статей личный опыт и желание обернуть в шпаргалку изначально для себя и с другими поделиться безвозмездно.
Interrupted; dsdred; starik-2005; +3 Ответить
13. support 4453 11.03.24 21:48 Сейчас в теме
15. starik-2005 3090 11.03.24 21:53 Сейчас в теме
(13) Домой и в спортзал, бассейн и далее по списку. У нас тимлид тимлидит, в промежутках яндекс маркет глядит. На инфостарте его не видел. Даже хабр с трудом заставляю читать )))
36. support 4453 13.03.24 14:56 Сейчас в теме
(15) может он мемы тогда в телеграме смотрит? Что он смотрит на телефоне?
14. support 4453 11.03.24 21:50 Сейчас в теме
Если они работают во франчайзи, может у них запрет на публикацию на Инфостарте, все может быть. Мы объединяем инхаус-разработчиков и их экспертизу здесь представляем и независимых экспертов.
18. gybson 11.03.24 22:23 Сейчас в теме
У меня пока ощущение, что это все база для микросервисной архитектуры на базе 1С:Элемент. Ну никак не лезет в старую парадигму. Её уже и таким боком и другим и покрутили-потолкали, а не лезет она в старую 1С =)
19. dsdred 3639 11.03.24 22:25 Сейчас в теме
(18)все может быть. Поживём и увидим
25. dsdred 3639 12.03.24 10:14 Сейчас в теме
(24) Позиция правильная, но сколько людей я видел которые не в рынке и тушуются...
Если я нахожу такие не огранённые алмазы, не могу пройти мимо.
В итоге приходится как психологу, поработать с ними.
Сначала объяснить, что они не в рынке, но они крутые и стоят вот столько.
Потом проработать над резюме, вытащить из них те вещи которые они обесценили.
Потом порадоваться за них когда они находят достойную работу с хорошей зарплатой.

Несколько людей с моего пинка ушли в ИТ на Аналитиков, программистов... Потом спасибо говорили.
А вить так же, на них все ездили за крохи...
У нас в стране много недооценённых людей и много переоцененных...
rpgshnik; +1 Ответить
26. Cmapnep 19 12.03.24 10:54 Сейчас в теме
Спасибо за проделанную работу!
Хотелось бы получить ответ на следующий вопрос - насколько оправдано использование описываемого механизма (без использования шины) вместо регистров с точки зрения быстродействия
С моей точки зрения показателен был бы опыт по записи в сервис и регистр с похожей структурой множества сообщений с различными размерами (например 10000 сообщений с пустым телом, 10000 с телом размером 1кБ, ...)
27. dsdred 3639 12.03.24 11:09 Сейчас в теме
(26)по моим ощущениям отправдания в 8 потоков, создавал сообщения с полной версией по номенклатуре. Происходило это очень быстро.

Но запрос ваш понял. Ради интереса проведу такой эксперимент. Запланируем статью
53. dsdred 3639 28.03.24 01:56 Сейчас в теме
(26)Отправил на модерацию статью с замерами Регистров сведений и Сервисов интеграции.
Ссылка будет: https://infostart.ru/1c/articles/2062957/
mrFduch; Cmapnep; +2 Ответить
28. zhichkin 1524 12.03.24 12:54 Сейчас в теме
Добрый день! Прошу прояснить некоторые моменты.

1. Не совсем понял термин "внешние сервисы интеграции". Ясно, что это что-то вне текущей информационной базы, но что конкретно ?

2. Не совсем понятно как связаны между собой таблицы:
- IntegServiceMsgBody
- IntegServiceExtMsgBody
- IntegChannelInQueue
- IntegChannelOutQueue

Из статьи следует, что тела сообщений хранятся в таблицах IntegChannelInQueue и IntegChannelOutQueue. А для чего тогда таблицы IntegServiceMsgBody и IntegServiceExtMsgBody и что в них хранится ?

3. При получении каналов мы обращаемся куда-то с портом 9090. Это что такое ? И куда мы обращаемся ?

4. Как работает 1С:Шина на забор сообщений из ИБ 1С ? Это PUSH или PULL со стороны ИБ ? Я так понял, что пока мы не запустим регламентное задание на стороне ИБ в 1С:Шину ничего не уедет. Регламентное задание "пихает" (push) сообщения в 1С:Шину ? Вероятно как раз-таки вот в этот загадочный сервис с портом 9090 ?

5. Как работает 1С:Шина на отправку сообщений в ИБ 1С ? Это PUSH или PULL со стороны 1С:Шины ? То есть она сама пишет ИБ 1С ? Через что она это делает: кластер 1С или напрямую в БД ? Или опять же через тот самый сервис с портом 9090 ?

Спасибо заранее за ответы.
29. fishca 1259 12.03.24 13:05 Сейчас в теме
А где почитать каким условиям должен удовлетворять сервис, чтобы к нему можно было подцепиться из 1С?
31. dsdred 3639 12.03.24 13:20 Сейчас в теме
(29)Не совсем понял вопрос.
30. dsdred 3639 12.03.24 13:18 Сейчас в теме
(28) Добрый день.

1) Термин "внешние сервисы интеграции" введен не мной. Вот прямо текст с ИТС:

17.6.2. Редактирование сервиса интеграции
Сервисы интеграции расположены в дереве метаданных конфигурации в ветки Общие. Создание и редактирование объекта выполняется стандартным образом. Свойство объекта Адрес внешнего сервиса интеграции позволяет указать адрес используемого внешнего сервиса интеграции. После указания адреса внешнего сервиса интеграции необходимо указать каналы сервиса интеграции, которые будут использоваться из системы «1С:Предприятие».

Простыми словами - это адрес проекта по обмену, опубликованного в 1С Шине.

2)
А для чего тогда таблицы IntegServiceMsgBody и IntegServiceExtMsgBody и что в них хранится ?

С этим вопросом я пытался разобраться, но не нашёл применения. Самому интересно.

3) Порт 9090 это один из двух портов (прописанных по умолчанию) используемых 1С Шиной.
Службой шины задействованы IP-порты сервера esb:
● порт 9090 — для доступа к панели управления 1С:Шины;
● порт 6698 — для брокера сообщений 1С:Шины.

Поэтому при установке в паре с Prometheus произойдет конфликт, так как он тоже висит по умолчанию на порте 9090

4-5) 1С-ка толкает сообщения в шину и забирает.
Когда мы запускаем фоновые задания:
СервисыИнтеграции.ВыполнитьОбработку();

Мы запускаем в 1С 3 фоновых задания которые проверяют, что нужно отправить и получить и собственно сама 1С с помощью этих задания толкает или забирает сообщения.
Насколько я понимаю, происходит обмен сообщениями используя порт 6698.
zhichkin; +1 Ответить
32. dsdred 3639 13.03.24 08:20 Сейчас в теме
В дополнение к статье.
Два символа перед зашифрованными отправителями\получателями длина зашифрованной строки в шестнадцатеричной системе исчисления
9A и FA - похоже на якорь

КодОтправителя -> 616C6661 => alfa

04 - количество символов в шестнадцатеричной системе исчисления = 4 в десятичной
616C6661 - зашифрованный код отправителя\получателя

КодПолучателя -> 6265747461 => betta

05 - количество символов в шестнадцатеричной системе исчисления = 5 в десятичной
6265747461 - зашифрованный код отправителя\получателя

КодОтправителя ­-> 62657474616265747461626574746162657474616265747461 => bettabettabettabettabetta
19 - количество символов в шестнадцатеричной системе исчисления = 25 в десятичной
33. fishca 1259 13.03.24 11:17 Сейчас в теме
(31) хотелось бы понять каким условиям должен удовлетворять сервис к которому подключаемся. Мы же не просто так на "деревню дедушке письмо" отправлять собираемся. Как минимум должен быть какой-то интерфейс (API), вот хочется понять какой?
34. dsdred 3639 13.03.24 11:46 Сейчас в теме
(33)Первоначально Сервисы интеграции заточены под 1С шину которую либо вы развернули сами, либо взяли в аренду в облаках у тех кому доверяете. В документации есть описание, но не описано как все это происходит технически. Вероятно - это все сделано для того, чтобы не появилось аналога 1СШины, который будет также цепляется к сервисам интеграции.

А так, при установке Шины есть API и брокер которые слушают порты:
● порт 9090 — для доступа к панели управления 1С:Шины;
● порт 6698 — для брокера сообщений 1С:Шины.

И есть API с небольшим описанием для панели управления.
39. agnev 64 14.03.24 09:38 Сейчас в теме
Получил огромное удовольствие от прочтения статьи. Спасибо за качественный материал.
При этом было видно, что рассматривалось в том числе с прицелом Без шины, что хорошо (весь крупняк на кафках - реббитах и т.п. и там давно свои решения по интеграции с ними, часто и не от серебряной пули и т.п.).

И делался в статье упор, что решение позволит избавиться от собственных настроечных таблиц и регистров с очередям. Но не смог для себя понять: а зачем? Организация таких регистров при серьезной интеграции самая несложная часть работы, и при этом они позволяют реализовать любые произвольные фичи. Например:
1. отслеживание доставки
2. отслеживание аномалий или "потерь данных", задержек и т.п.
3. работу с ошибками (в связке с статусами сообщений и сторонними системами для голов подробных ошибок: эластик с кибаной и т.п., кому что)
4. любой мониторинг текущего состояния обмена и проблем в нем, с любой детализацией.

Но все это требует порой иметь возможно сделать именно свои таблицы. В них можно по ходу развития проекта добавлять нужное.

А тут в чем преимущество использования залоченной вендром технологии, которую будут развивать без оглядки на твои потребности и ошибки в которой даже не можешь поправить без разработчиков платформы? В общем если будут статьи-продолжения, хочется увидеть и мысли на этот счет.

Это ни в коем случае не критика статьи, читал с интересом и жду продолжения. Но правда не понимаю смыл всей этой подсистемы: жестко залоченный под чьи-то требования огрызок, который проблематично самому доработать.
41. dsdred 3639 14.03.24 09:54 Сейчас в теме
(39)Спасибо за отзыв, приятно что статья была интересна.
Вопросы понятные и я думаю ответы будут в будущих статьях.
Надеюсь продолжение не разочарует
40. agnev 64 14.03.24 09:50 Сейчас в теме
Вообще есть подозрения, что технологию пропустили, т.к. она реально не нужна. Нужны возможности языка, чтобы не было больно каждый день: функции как параметры, анонимные функции, опциональная типизация (например как в typescript где прикрутили костыль к js сбоку), удобная расширяемость (native api это просто жесть), удобная многопоточность (тут слава богу уже анонсировали сильный агрейд фоновых в платформе, через пару лет дай бог увидим). Вместо этого годами делаются бантики-поделки, которые успешно пилятся и программистами и на местах :).
42. dsdred 3639 14.03.24 09:56 Сейчас в теме
(40) Меня тоже удручает собирать велосипеды после того как окунулся в мир JS.
Там уже все написано до нас и для нас ))
43. PlatonStepan 38 14.03.24 14:58 Сейчас в теме
Статья отличная.
Да, на свежей платформе уже есть много всякого. Но заказчик, как правило, сидит на более старых версиях.
Недавно на 8.3.12 в тонком клиенте собрал схему, в которой серверные события таки оповещают клиента.
Были задействованы:
ПолеHTMLДокумента на клиенте - для асинхронности
http-сервис - для обработки long-polling запросов
Фоновые задания - в качестве процесса ожидания прерываний наступившими событиями
Планы обмена - в качестве регистратора событий и их подписчиков (чтобы не сорить в регистры)

Вроде бы работает задержка 1-2 секунды и не нужны всякие шины и системы взаимодействия и переход на новую платформу.
45. dsdred 3639 14.03.24 15:06 Сейчас в теме
(43)Рад, что статья понравилась.

Конфигурации сейчас в режиме совместимости "8.3.17" по-моему младше не видел.

Честно скажу Планы обмена я перестал любить после Истории данных.
А в целом вопрос такой: Если вдруг вы перестанете работать с клиентом на сколько просто будет въехать тому кто прийдет после?
47. PlatonStepan 38 15.03.24 03:29 Сейчас в теме
(45) Компетенции решают. В веб-разработке либо в сетевой инфраструктуре как-то же въезжают в эти развешанные по углам "сопли" ))
48. dsdred 3639 15.03.24 06:25 Сейчас в теме
(47) я как то собеседований программиста йС который мне сказал а зачем мне знать SQL я же 1с программист. Я к тому, что не у всех компетенции как у вас.
49. d4rkmesa 21.03.24 11:39 Сейчас в теме
Спасибо большое за статьи, прямо давно на ИС не было статей такого уровня. Можно вопрос: Выполнитьобработку(), на получение например, нужно регламентным заданием делать, "само" оно не запускается?
50. dsdred 3639 21.03.24 13:20 Сейчас в теме
(49)Рад, что статья понравилась.
Выполнитьобработку(), на получение например, нужно регламентным заданием делать, "само" оно не запускается?

Да необходим либо регламент, либо вручную запустить код. Данный код запускает фоновые задания ровно на 2 минуты, после чего они останавливаются и их опять надо запустить, само оно не запускается.
d4rkmesa; +1 Ответить
51. demon_infernal 41 21.03.24 23:56 Сейчас в теме
Добрый день. Спасибо за отличную статью.
Есть один вопрос.
На картинке в статье, внизу, в самом нижнем блоке, вы пишете:
"Сообщаем о прочтении в шину".
А это правда так?
Мои сомнения вызваны двумя факторами:
1. Этот пункт указан в ветке условия "Да", то есть, судя по схеме, сообщение в шину уходит только после успешного прочтения сообщения ИБ-получателем. А в случае неуспешного прочтения (например, ошибка в коде или попытка записи нового объекта с незаполненными обязательными реквизитами) - получается, сообщение о прочтении в шину не уходит и шина продолжает считать сообщение недоставленным?
2. Цитатой с ИТС:
Факт успешного выполнения обработчиков входящих сообщений в информационной базе «1С:Предприятия» сервер «1С:Шины» не отслеживает.

Я считаю, что фактически сообщение в шину уходит не о прочтении (успешном или нет), а о доставке сообщения до базы-получателя. То есть в тот момент, когда добавляются записи в таблицу IntegChannelInQueue.
52. dsdred 3639 22.03.24 07:39 Сейчас в теме
(51)Спасибо за вопрос.
Вы правы, видимо я поторопился.
В выходные перепроверю и внесу правки.
54. OswaldBjorndalen 19.04.24 16:54 Сейчас в теме
И зачем этот механизм использовать вместо регистров сведений?
Какие плюсы это дает?
Пока только одни минусы.
55. dsdred 3639 19.04.24 19:18 Сейчас в теме
(54)расскажите про одни минусы. Мне просто интересно.
56. OswaldBjorndalen 22.04.24 12:21 Сейчас в теме
(55)
Использовать некий механизм платформы, предназначенный для определенных целей, совершенно отлично от его назначения - самый очевидный минус. Что произойдет с данными при следующем обновлении платформы? Возможно, что-то изменится и, например, таблицы очистятся.
Невозможность обратится к объекту запросом.
Невозможность добавить новые поля.
Это на поверхности.
57. dsdred 3639 22.04.24 12:25 Сейчас в теме
(56) а какие цели были у механизма "Сообщения сервисов интеграции"?
Из названия же помоему понятно - для хранения сообщений.
Новые поля в нем добавляются через свойство "Параметры" имеющее тип Соответствие.

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

Про невозможность использовать запрос - спорный момент.
У механизма есть встроенный отбор.

Что ещё не так?
58. OswaldBjorndalen 23.04.24 09:00 Сейчас в теме
(57)
Для хранения сообщений сервиса интеграции все же, не неких обезличенных сообщений.
Опять же - для того, что бы сообщение создать, нужно сервис этот включить.
Для каждого сообщения можно установить свой собственный набор параметров, скрытый за соотвествием.
То есть, пока его не прочесть - то и не узнаешь, что там вообще есть.
Про запросы это не спорный момент, запросом к таблице обратится нельзя.
То есть, нельзя будет в одной коллекции получить и сообщения и дополнительные данные из других объектов конфигурации.

В общем, лично я вижу больше проблем при использовании этих таблиц в качестве хранилища, чем удобства.
А какие плюсы вы видите?
59. dsdred 3639 23.04.24 09:33 Сейчас в теме
(58)
Для хранения сообщений сервиса интеграции все же, не неких обезличенных сообщений.

А, что есть Сервис интеграции?
По большему счету регистр который хранит пакеты для обменов тоже сервис для интеграции...

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

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

А какие плюсы вы видите?

1 Скорость записи https://infostart.ru/1c/articles/2062957/
2 Не нужно придумывать регистры под задачи оповещения, рассылки сообщений и т.д. https://infostart.ru/1c/articles/2059507/
То есть мы просто создаем канал и все, не нужно придумывать структуру, она идеальна под любые сообщения.
3 Нет проблем с блокировками
4 При создании в расширении не зависит от типов
5 Меньше кода при работе с ними

Есть минусы которые мне честно говоря не нравится.
1 Нет возможности ввести статус (Новый, прочитан, прочитан с ошибкой).
2 Нет возможности скопировать сообщение "1 в 1" в другой канал средствами встроенного языка. (только sql запросом)

Но эти минусы можно решить
60. PlatonStepan 38 06.05.24 09:04 Сейчас в теме
(59)
Тоже не понял про минусы.
Для очередей сообщений с 8.3.18 версии платформы описаны максимально быстрые методы Создания-Чтения(по списку или по любым отборам)-Удаления(точечно или также по отборам).
Платформой реализовано хранение тела сообщений любого размера.

Отпадает необходимость эксплуатировать Истории данных и Регистратор изменений(планы обмена) для некоторых целей.

1 Нет возможности ввести статус (Новый, прочитан, прочитан с ошибкой).

Разве для каждого требуемого статуса нельзя завести отдельный канал?

2 Нет возможности скопировать сообщение "1 в 1" в другой канал средствами встроенного языка. (только sql запросом)

Это да, к тому же идентификатор сообщения содержит случайный UUID, по которому строится индекс.
61. YAGolova 571 28.06.24 06:29 Сейчас в теме
Подскажите, сообщения с разными отправителями через один канал обрабатываются параллельно или последовательно? Если ошибка в сообщение с одним отправителем, очередь встанет и по другому если они в одном канале?
62. dsdred 3639 28.06.24 13:23 Сейчас в теме
(61) У канала "Получение" есть галочка "в транзакции", если эту галочку снять, то сообщения будут обрабатываться независимо друг от друга асинхронно.
Не проверял момент с разными отправителями, но от одного при галочке "в транзакции" вся очередь встает пока ошибку не исправишь.
Прикрепленные файлы:
63. HystriX 06.09.24 14:21 Сейчас в теме
Спасибо за статью. Однако, непонятны пара моментов по оформлению.

1. Зачем нестандартный шрифт? Он значительно хуже читается, если не жирный и если в системе нестандартный масштаб изображения. Например, использую 250 процентов на 4K-дисплее, чтобы шрифт был более крупный и глаза не уставали. Стандартный шрифт читался бы легче.

2. Обещали мясо, а выдали жалкий твикс :)
64. dsdred 3639 06.09.24 17:46 Сейчас в теме
(63)рад что статья понравилась.

1 статью писал в ворде, так как стандартный редактор очень не очень. Поэтому и шрифт не стандартный. С мониками у меня тоже зоопарк. У ноутбука 4к, основной 3к и ещё графический 2к. Пишу статьи по ночам, конкретно эту статью писал очень долго у меня ещё и файл крашнулся, пришлось восстановлением заниматься.
В общем в итоге вышло как вышло.

2 ну кусочек мяса в статье тоже есть ;))
Оставьте свое сообщение