Об 1С:Шине

02.08.23

Интеграция - Внешние источники данных

В данной статье я кратко описываю свой опыт освоения 1С:Шины, предлагаю свое видение места 1С:Шины в индустрии. Описан процесс установки, настройки и проблемы, с которыми я столкнулся в процессе обучения. Приведена пара простых примеров интеграции. Все, что приведено в статье, является моим видением ситуации и описанием личного опыта освоения 1С:Шины. Буду благодарен читающим за конструктивную критику.

Введение

1С:Шина — это программный продукт класса «Сервисная шина предприятия» (Enterprise Service Bus, ESB), обеспечивающий обмен данными между различными информационными системами, работающими как на платформе «1С:Предприятие», так и с системами на других платформах.

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

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

Появление единого механизма обменов дает следующие преимущества:
1. Удешевляет управление интеграциями на предприятии - все (или большая часть) интеграции собраны в одном месте;
2. Упрощает "втягивание" новых сотрудников на проект - все сотрудники знают единый стандарт. НЕ надо каждый раз повторять одно и то же новым сотрудникам, НЕ надо давать время на ознакомление с километрами кода, который написан в разных стилях
3. Удешевляет работу с интеграциями - НЕ надо сопровождать код, который отвечает за транспортировку сообщений - это уже. Все служебные функции, которые требует интеграция, уже прописаны в едином механизме и уже поставляются с ним. Разработчикам требуется прописать только бизнес-логику обменов и минимально какие-то технические моменты, связанные с транспортом, преобразованием и маршрутизацией сообщений.

В среде 1С-программистов, когда появилась возможность использовать брокеры и шины, появились следующие проблемы:
1. Разнообразие различных шин и брокеров. Если на проекте используется несколько таких приложений - нужно поддерживать разные правила обмена с разными шинами/брокерами;
2. Первая проблема усугубляется тем, что платформа 1С НЕ имеет встроенных средств для обмена с существующими шинами/брокерами. Все также надо реализовывать транспорт сообщения, но уже НЕ в сторонние системы, а в шину/брокер. Нужно поддерживать код, который написан в разном стиле разными людьми.

Получается, частично проблемы, которые были решены с появлением шин/брокеров, в среде 1С остались.

Для решения оставшихся проблем уже конкретно в среде 1С была создана 1С:Шина. В платформе 1С появились встроенные средства для обмена сообщениями между сервисом интеграции и информационными системами.

1С Шина позволяет обмениваться сообщениями со следующими инфосистемами:

 

 

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

Процесс установки 1С:Шины я НЕ буду описывать в данной публикации, т.к. это подробно описано в статье. Проблема, с которой я столкнулся при установке, и ее решение, описаны в разделе 3. Проблемы, с которыми я столкнулся, и пути их решения

 

1. Описание процесса реализации интеграции для информационных баз 1С

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

Задача: когда в базе-источнике создается, или изменяется номенклатура - в базе-приемнике такая же номенклатура должна создаться/обновиться. Сопоставление номенклатуры будет осуществляться по коду и наименованию.

1.1. Настроить 1С:Шину

a. Войти в панель управления 1С:Шины.

В браузере перейти по адресу хоста, на котором установлена 1С:Шина и указать порт 9090:

 

 

Ввести учетные данные администратора панели (по умолчанию логин и пароль - admin).

 

 

b. Создать приложение

 

 

Создать новый проект с именем "ProducerConsumer". В приложении будет один отправитель и один получатель:

 

 

Остальные настройки заполнятся автоматически. Нажать кнопку "Создать".

Надо подождать минуту, пока создастся приложение:

 

 

Когда статус приложения установлен в "Работает" - можно переходить к интеграции.

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

Открыть среду разработки приложения (возможно повторно придется ввести логин и пароль):

 

 

В открывшемся редакторе добавить процесс интеграции:

 

 

Указать имя процесса интеграции:

 

 

Далее надо составить следующую блок-схему в добавленном процессе интеграции:

 

 

Отправители и получатели - это элемент "Группа участников". Канал1СИсточник и Канал1СНазначение - это одноименные элементы из палитры элементов. Синие стрелки из элемента "Отправители" в "Канал1СИсточник" и из элемента "Канал1СНазначение" в "Получатели" - это элементы "Связь", а между элементами "Канал1СИсточник" и "Канал1СНазначение" - элемент "Маршрут".

 

 

d. Опубликовать приложение и запустить его

После составления блок-схемы надо опубликовать приложение. Для этого в левом нижнем углу нажать на имя приложения и выбрать в выпавшем вверху списке пункт "Опубликовать проект":

 

 

После этого в панели управления у приложения будет статус "Обновляется":

 

 

e. Заполнить список ИС-корреспондентов

Открыть приложение и перейти в список ИС

 

 

Добавить инфосистемы отправителя и получателя:

 

 

f. Добавить инфосистемы-корреспонденты в группы участников на закладке "Схема" приложения

В приложении перейти на закладку "Процессы", открыть основной процесс интеграции:

 

 

Выбрать группу участников "Отправители", перейти в состав группы:

 

 

Поместить в состав отправителя сообщений:

 

 

В результате должно получиться так:

 

 

Таким же образом добавить инфосистему-получателя в группу участников "Получатели":

 

 

g. Зафиксировать http-адрес приложения и ключи API для каждой инфосистемы.

Для того, чтобы инфосистемы обменивались с 1С:Шиной - им нужно знать адрес приложения в сети, а также идентифицировать себя, чтобы 1С:Шина понимала: от кого и куда направляется сообщение.

Для этих целей надо сохранить для себя URL приложения и ключи каждой ИС.

URL приложения можно взять из списка приложений:

 

 

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

ВАЖНО: ключи безопасности при каждом получении обновляются, поэтому крайне важно их сохранять. Если получить ключ еще раз - придется заново настраивать сервисы интеграции в инфосистеме-источнике и приемнике - в конфигураторе и в режиме "1С:Предприятие".

Для того, чтобы получить ключи инфосистем - надо перейти в список приложений, выбрать инфосистему, для которой надо получить ключ и нажать "Выдать ключ API". Можно попутно обратить внимание, что инфосистема добавлена в процесс, в группу "Отправители".

 

 

Скопировать выведенные ключи туда, где потом можно будет их посмотреть повторно:

 

 

Те же действия произвести и для инфосистемы-получателя.

В результате должна быть сохранена для дальнейшего использования следующая информация:

 

 

h. Запустить процесс интеграции:

 

 

После запуска у процесса установлен статус "Запущен".

 

 

1.2. Настроить инфосистемы-корреспонденты.

a. Сконфигурировать информационные базы, для которых реализуется интеграция.

Создать базы для обмена:

 

 

В базе "Producer" создать справочник "Номенклатура". В справочнике для приглядности сделать форму. Метаданные и форма справочника приведены на скриншоте ниже:

 

 

Реквизит "ЭтоЭлектронныйТовар" - типа Булево, "Цена" - число, все остальные реквизиты - строковые.

В базе "Consumer" создать справочник такого же вида.

b. Добавить сервисы интеграции в дерево метаданных. Загрузить в сервисы интеграции каналы, в которых участвует инфосистема (отправляет или принимает сообщения).

Добавить сервис интеграции в базу "Producer" и задать имя с синонимом:

 

 

На закладке "Каналы" выбрать пункт "Загрузить каналы":

 

 

При загрузке каналов надо указать учетные данные, которые были сохранены ранее.

 

 

Далее выбрать канал, в который система будет отправлять сообщения и нажать кнопку "Загрузить":

 

 

В результате платформа автоматически добавила канал сервиса интеграции:

 

 

Те же действия выполнить для базы "Consumer", но указать уже учетные данные инфосистемы "Consumer" и загрузить канал "Канал1СНазначение" с направлением "Получение":

 

 

Результат в базе "Consumer". Платформа создала канал для получения сообщений из 1С:Шины и обработчик получения сообщений в модуле сервиса интеграции:

 

 

c. Настроить сервисы интеграции в пользовательском режиме

В базе "Producer" в пользовательском режиме перейти в стандартную обработку "Управление сервисами интеграции":

 

 

Заполнить учетные данные также, как это делалось при загрузке каналов в сервисе интеграции. Включить сервис интеграции.

 

 

Результат:

 

 

Таким же образом заполнить учетные данные и включить сервис интеграции в базе "Consumer":

 

 

d. Разработать механизмы отправки сообщений в очередь для отправки в канал 1С:Шины (если система отправляет сообщения)

В модуле объекта справочника "Номенклатура" в базе "Producer" разместить следующий код:

Процедура ПриЗаписи(Отказ)
	ОтправитьТоварВКаналСервисаИнтеграции();
КонецПроцедуры

// Описание:
//  Формирует сообщение и отправляет его в канал сервиса интеграции, где оно будет храниться до отправки в 1С:Шину 
//
Процедура ОтправитьТоварВКаналСервисаИнтеграции()
	Сообщение = СервисыИнтеграции.ProducerConsumer_dev.СоздатьСообщение();
	Сообщение.КодПолучателя = "Consumer";
	
	Тело = Сообщение.ПолучитьТелоКакПоток();

	Товар = ПолучитьТоварJSON();
	Буфер = ПолучитьБуферДвоичныхДанныхИзСтроки(Товар);
	
	Тело.Записать(Буфер, 0, Буфер.Размер);
	Тело.Закрыть();
	
	Сообщение.Параметры.Вставить("РазмерСообщения", Буфер.Размер);
	
	СервисыИнтеграции.ProducerConsumer_dev.Основной_ПроцессИнтеграции_Канал1СИсточник.ОтправитьСообщение(Сообщение);
КонецПроцедуры

Функция ПолучитьТоварJSON()
	Структура = Новый Структура("Код, Наименование, ЭтоЭлектронныйТовар, ISBN, Цена, ДополнительныеРеквизиты");
	ЗаполнитьЗначенияСвойств(Структура, ЭтотОбъект, "Код, Наименование, ЭтоЭлектронныйТовар, ISBN, Цена");
	ДополнительныеРеквизиты_ = Новый Массив;
	Для Каждого Строка Из ДополнительныеРеквизиты Цикл
		Свойство = Новый Структура("Свойство, Значение");
		ЗаполнитьЗначенияСвойств(Свойство, Строка);
		ДополнительныеРеквизиты_.Добавить(Свойство);	
	КонецЦикла;
	Структура.Вставить("ДополнительныеРеквизиты", ДополнительныеРеквизиты_);
	
	ЗаписьJSON = Новый ЗаписьJSON;
	ЗаписьJSON.УстановитьСтроку();
	ЗаписатьJSON(ЗаписьJSON, Структура);
	
	Возврат ЗаписьJSON.Закрыть();
КонецФункции

e. Разработать механизмы обработки входящих сообщений (если система принимает сообщения)

В базе "Consumer", в модуле сервиса интеграции "ProducerConsumer_dev", разместить следующий код:

Процедура Основной_ПроцессИнтеграции_Канал1СНазначениеОбработкаПолученияСообщения(Сообщение, Отказ)
	ТекстСообщения = СтрШаблон("Начало получения сообщения %1 от %2", Сообщение.Идентификатор, Сообщение.КодОтправителя);
	ЗаписьЖурналаРегистрации("Сервисы интеграции.Обработка", УровеньЖурналаРегистрации.Информация, , ТекстСообщения); 
	Попытка
		РазмерСообщения = Сообщение.Параметры.Получить("РазмерСообщения");
		Если РазмерСообщения = Неопределено Тогда 
			РазмерБуфера = 1024;
		Иначе
			РазмерБуфера = Число(РазмерСообщения);
		КонецЕсли;
		
		Тело = Новый БуферДвоичныхДанных(0);
		Буфер = Новый БуферДвоичныхДанных(РазмерБуфера);
		Поток = Сообщение.ПолучитьТелоКакПоток();
		Пока Истина Цикл
			Прочитано = Поток.Прочитать(Буфер, 0, РазмерБуфера);
			Если Прочитано > 0 Тогда
				Тело = Тело.Соединить(Буфер);	
			КонецЕсли;
			Если Прочитано < РазмерБуфера Тогда
				Прервать;
			КонецЕсли;
		КонецЦикла;
		
		ВходящееСообщение = ПолучитьСтрокуИзБуфераДвоичныхДанных(Тело);
		Если ВходящееСообщение <> "" Тогда
			ЧтениеJSON = Новый ЧтениеJSON();
			ЧтениеJSON.УстановитьСтроку(ВходящееСообщение);
            СтруктураНоменклатуры = ПрочитатьJSON(ЧтениеJSON);
			ОбновитьНоменклатуру(СтруктураНоменклатуры);
		КонецЕсли;
		ТекстСообщения = СтрШаблон("Сообщение %1 от %2 успешно обработано.", Сообщение.Идентификатор, Сообщение.КодОтправителя);
		ЗаписьЖурналаРегистрации("Сервисы интеграции.Обработка", УровеньЖурналаРегистрации.Информация, , ТекстСообщения); 
	Исключение
	    Отказ = Истина;
		ТекстСообщения = СтрШаблон("%1. Не удалось обработать сообщение ID: %2 от %3", ОписаниеОшибки(), Сообщение.Идентификатор, Сообщение.КодОтправителя);
		ЗаписьЖурналаРегистрации("Сервисы интеграции.Обработка", УровеньЖурналаРегистрации.Ошибка, , ТекстСообщения); 
	КонецПопытки;
КонецПроцедуры

Процедура ОбновитьНоменклатуру(СтруктураНоменклатуры)
	Запрос = Новый Запрос("ВЫБРАТЬ Ссылка ИЗ Справочник.Номенклатура ГДЕ Код = &Код И Наименование = &Наименование");
	Запрос.УстановитьПараметр("Код", СтруктураНоменклатуры.Код);
	Запрос.УстановитьПараметр("Наименование", СтруктураНоменклатуры.Наименование);
	Выборка = Запрос.Выполнить().Выбрать();
	Если Выборка.Следующий() Тогда
		НоменклатураОбъект = Выборка.Ссылка.ПолучитьОбъект();
	Иначе
		НоменклатураОбъект = Справочники.Номенклатура.СоздатьЭлемент();
	КонецЕсли;
	
	ЗаполнитьЗначенияСвойств(НоменклатураОбъект, СтруктураНоменклатуры);
	НоменклатураОбъект.ДополнительныеРеквизиты.Очистить();
	Для Каждого СтруктураСоСвойством Из СтруктураНоменклатуры.ДополнительныеРеквизиты Цикл
		ЗаполнитьЗначенияСвойств(НоменклатураОбъект.ДополнительныеРеквизиты.Добавить(), СтруктураСоСвойством);
	КонецЦикла;

	НоменклатураОбъект.Записать();
КонецПроцедуры

f. Разработать механизм, который отправляет сообщения из внутренней очереди в каналы 1С:Шины и который принимает сообщения из каналов 1С:Шины.

В базе "Producer" создать инструмент, который позволит просмотреть количество сообщений в канале сервиса интеграции И отправить сообщения в 1С:Шину. В данном случае это будет обработка:

 

 

Написать следующий код в форме обработки (с привязкой обработчиков событий к командам):

&НаКлиенте
Процедура ПроверитьКанал(Команда)
	ПроверитьКаналНаСервере();
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ПроверитьКаналНаСервере()
	МассивСообщений = СервисыИнтеграции.ProducerConsumer_dev.Основной_ПроцессИнтеграции_Канал1СИсточник.ВыбратьСообщения();
	Если МассивСообщений.Количество() > 0 Тогда
		Сообщить(СтрШаблон("Количество сообщений в канале интеграции ""Producer consumer-dev"": %1", МассивСообщений.Количество()));
	Иначе
		Сообщить("Нет сообщений в канале.");
	КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ОтправитьСообщения(Команда)
	ОтправитьСообщенияНаСервере();
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ОтправитьСообщенияНаСервере()
	СервисыИнтеграции.ВыполнитьОбработку();
КонецПроцедуры

В базе "Consumer" создать инструмент, который позволит получить сообщения из 1С:Шины. В данном случае это также будет обработка:

 

 

В форме обработки разместить следующий код:

&НаКлиенте
Процедура ЗагрузитьСообщения(Команда)
	ЗагрузитьСообщенияНаСервере();
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ЗагрузитьСообщенияНаСервере()
	СервисыИнтеграции.ВыполнитьОбработку();
КонецПроцедуры

g. Проверить, что сообщения отправляются по назначению и приходят к получателю.

Сценарий тестирования:

Действие: создать несколько карточек номенклатуры в базе "Producer"
Проверка: сообщения по каждой карточке попали в канал сервиса интеграции в базе "Producer"

Действие: отправить сообщения в 1С:Шину из канала
Проверка 1: сообщения доставлены в 1С:Шину в канал "Канал1СИсточник"
Проверка 2: И остались в канале "Канал1СНазначение".

Действие: запустить получение сообщений в базе "Consumer"
Проверка 1: сообщения прибыли в базу "Consumer";
Проверка 2: сообщения прочитались и была создана номенклатура, идентичная созданным товарам в базе "Producer"
Проверка 3: в канале "Канал1СНазначение" сообщения стали доставленными.
Проверка 4: в журнале регистрации базы "Consumer" отразилась успешная загрузка сообщений

Действие: изменить одну из карточек номенклатуры в базе "Producer" (все, кроме наименования и кода - по ним идет сопоставление номенклатуры в данном конкретном случае)
Действие: выполнить обмен с 1С:Шиной
Действие: запустить получение сообщений из 1С:Шины в базе "Consumer"
Проверка: номенклатура, которая была изменена в базе "Producer", идентична той, что находится в базе "Consumer".

Тест-лист:

Создать 3 карточки номенклатуры в базе "Producer:

 

 

В канале 3 сообщения, соответствующие 3 созданным карточкам номенклатуры:

 

 

Отправил сообщения в 1С:Шину - нажал кнопку "Отправить сообщения" в обработке.

Сообщения доставлены в канал "Канал1СИсточник" и находятся в канале "Канал1СНазначение":

 

 

В базе "Consumer" запустить обработку "Загрузка сообщений из шины" и нажать кнопку "Загрузить сообщения":

В журнале регистрации отразился факт прибытия сообщений И отобразилась успешная обработка всех сообщений и запись номенклатуры:

 

 

В канале "Канал1СНазначение" сообщения стали доставленными:

 

 

Вся созданная номенклатура идентична номенклатуре из базы "Producer":

 

 

Проверить синхронизацию изменений уже существующей карточки номенклатуры:

В карточке "Номенклатура 2" добавил строку в табличной части и цену:

 

 

Проверил количество сообщений в канале, отправил сообщения в 1С:Шину:

 

 

Сообщение прошло канал "Канал1СИсточник" и попало в канал "Канал1СНазначение":

 

 

На базе "Consumer" была запущена загрузка сообщений. Карточки номенклатуры в базах "Consumer" и "Producer идентичны:

 

 

Сценарий тестирования пройден.

Для автоматизации обмена сообщений нужно создать регламентное задание в ИС-источнике и приемнике и по определенному расписанию выполнять обмен с 1С:Шиной.

 

2. Пример преобразования сообщения и отладка

В примере ниже НЕ будут подробно расписываться шаги реализации. Будут приведены скриншоты ключевых моментов реализации интеграции. Подробно реализация описана в этом разделе.

Задачи:

a. Привести пример преобразования сообщения средствами 1С:Шины. В данном примере будет база-источник, которая высылает сообщение с содержимым в формате "JSON". Далее на диск сохраняется исходное сообщение в формате "JSON", а также происходит преобразование JSON в формат "XML" и далее XML складывается на диск рядом с файлом JSON.

b. Показать, как работает отладка

Реализация:

a. Создать приложение "Transformation-dev" в 1С:Шине.

b. Нарисовать в приложении следующую схему:

 

 

На схеме есть элементы, которые НЕ были описаны в разделе с подробной реализацией:
i. "Транслятор" - на схеме "JSON_В_XML" - принимает сообщение на вход и выдает преобразованное сообщение на выходе.
ii. "ФайлНазначение" - на схеме "СохранитьJSONВФайл" и "СохранитьXMLВФайл" - предназначено для сохранения сообщений в файл произвольного формата. Надо заполнить свойства "Каталог" и "Имя файла", чтобы система понимала, куда складывать содержимое сообщений:

 

 

iii. "МаршрутизаторПоСодержимому" - аналогичное название на схеме - служит для определения, куда перенаправить сообщение. В его модуле может быть кодом прописана маршрутизация. Если просто добавлен маршрутизатор, как здесь, сообщение рассылается во все приемники, к которым проложен маршрут. В данном случае сообщение от источника будет направлено и в элемент "СохранитьJSONВФайл", и в транслятор "JSON_В_XML".

c. В модуль транслятора "JSON_В_XML" вставить следующий код:

структура ДопСвойство
    пер Свойство = ""
    пер Значение = ""
;

структура Номенклатура
    пер Код = ""
    пер Наименование = ""
    пер ЭтоЭлектронныйТовар = Истина
    пер ISBN = ""
    пер Цена = 0
    пер ДополнительныеРеквизиты: Массив<ДопСвойство>?
;

метод ЧитатьНоменклатуру(Сообщение: ПроцессИнтеграции.Сообщение): Номенклатура
    исп Тело = Сообщение.ПолучитьТелоКакПоток()
    пер Соответствие = СериализацияJson.ПрочитатьОбъект(Тело) как Соответствие<Строка, Объект?>
    
    пер Код = Соответствие.Получить("Код") как Строка
    пер Наименование = Соответствие.Получить("Наименование") как Строка
    пер ЭтоЭлектронныйТовар = Соответствие.Получить("ЭтоЭлектронныйТовар") как Булево
    пер ISBN = Соответствие.Получить("ISBN") как Строка
    пер Цена = Соответствие.Получить("Цена") как Число
    пер Реквизиты = Соответствие.Получить("ДополнительныеРеквизиты") как ЧитаемыйМассив<Объект?>
    пер ДополнительныеРеквизиты = новый Массив<ДопСвойство>()
    для Реквизит из Реквизиты
        пер СоответствиеРеквизита = Реквизит как Соответствие<Строка, Объект?>
        ДополнительныеРеквизиты.Добавить(новый ДопСвойство(СоответствиеРеквизита.Получить("Свойство") как Строка,
            СоответствиеРеквизита.Получить("Значение") как Строка))
    ;
    
    возврат новый Номенклатура(Код, Наименование, ЭтоЭлектронныйТовар, ISBN, Цена, ДополнительныеРеквизиты)        
;

метод Преобразование(Контекст: КонтекстВызова, Сообщение: ПроцессИнтеграции.Сообщение): СообщениеИнтеграции
    пер Номенклатура = ЧитатьНоменклатуру(Сообщение)
    
    исп НовоеТело = новый ВременныйПотокЗаписи()
    пер ЗаписьXml = новый ЗаписьXml(НовоеТело)
    
    ЗаписьXml.ЗаписатьНачалоДокумента()
    ЗаписьXml.ЗаписатьНачалоЭлемента("Номенклатура")
    
    ЗаписьXml.ЗаписатьНачалоЭлемента("Код")
    ЗаписьXml.ЗаписатьТекст(Номенклатура.Код)
    ЗаписьXml.ЗаписатьКонецЭлемента()
    
    ЗаписьXml.ЗаписатьНачалоЭлемента("Наименование")
    ЗаписьXml.ЗаписатьТекст(Номенклатура.Наименование)
    ЗаписьXml.ЗаписатьКонецЭлемента()
    
    ЗаписьXml.ЗаписатьНачалоЭлемента("ЭтоЭлектронныйТовар")
    ЗаписьXml.ЗаписатьТекст(Номенклатура.ЭтоЭлектронныйТовар ? "true" : "false")
    ЗаписьXml.ЗаписатьКонецЭлемента()
    
    ЗаписьXml.ЗаписатьНачалоЭлемента("ISBN")
    ЗаписьXml.ЗаписатьТекст(Номенклатура.ISBN)
    ЗаписьXml.ЗаписатьКонецЭлемента()
    
    ЗаписьXml.ЗаписатьНачалоЭлемента("Цена")
    ЗаписьXml.ЗаписатьТекст(Номенклатура.Цена.ВСтроку())
    ЗаписьXml.ЗаписатьКонецЭлемента()
    
    ЗаписьXml.ЗаписатьНачалоЭлемента("ДополнительныеРеквизиты")
    для Реквизит из Номенклатура.ДополнительныеРеквизиты
        ЗаписьXml.ЗаписатьНачалоЭлемента("ДополнительныйРеквизит")
        
        ЗаписьXml.ЗаписатьНачалоЭлемента("Свойство")
        ЗаписьXml.ЗаписатьТекст(Реквизит.Свойство)
        ЗаписьXml.ЗаписатьКонецЭлемента()
        
        ЗаписьXml.ЗаписатьНачалоЭлемента("Значение")
        ЗаписьXml.ЗаписатьТекст(Реквизит.Значение)
        ЗаписьXml.ЗаписатьКонецЭлемента()
        
        ЗаписьXml.ЗаписатьКонецЭлемента()            
    ;
    ЗаписьXml.ЗаписатьКонецЭлемента()
    
    ЗаписьXml.ЗаписатьКонецЭлемента()
    ЗаписьXml.ЗаписатьКонецДокумента()
    
    возврат новый СообщениеИнтеграции({:}, НовоеТело.ОткрытьПотокЧтения()) 
;

d. Добавить инфосистему в приложение, которая будет высылать сообщения в 1С:Шину. Дополнить список группы участников "Отправитель" на схеме, запустить процесс интеграции.

e. Скопировать из первого примера базу "Producer". Логика работы будет такая же: при записи номенклатуры формируется сообщение. Отправка в 1С:Шину выполняется также кнопкой обработки. В базе-отправителе надо настроить сервис интеграции под новое приложение, доработать код, чтобы обращения были к новому сервису и настроить сервис интеграции в пользовательском режиме. После этого можно приступать к тестированию.

 

 

Тестирование:

Проверка: количество доставленных сообщений до отправки:

 

 

Действие: записать номенклатуру

 

 

Действие: отправить сообщения в 1С:Шину

 

 

Проверка 1: после отправки количество доставленных сообщений в канале увеличилось на 1:

 

 

Проверка 2: в каталог (у меня это "C:\Maliy\1С.ESB\tests") попали файлы xml и json

 

 

Проверка 3: в файлах идентичный набор свойств и значения свойств

 

 

2.2. Отладка

Для отладки можно использовать отладчик и сохранение промежуточных вариантов в файлы.

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

Отладчик полезен, если надо определить причину исключения в работе кода. Чтобы воспользоваться отладчиком, надо открыть приложение в режиме разработки, перейти в нужный модуль, установить точки останова и запустить отладку:

 

 

Если отладка запускается в первый раз И в браузере НЕ установлено расширение "Отладчик 1С:Предприятие.Элемент" - это расширение будет установлено автоматически после разрешения от пользователя. Далее откроется новая закладка для работы расширения отладчика и можно будет запустить сообщение в канал процесса интеграции.

После запуска отладки процесса интеграции запустить сообщение из канала в базе данных в 1С:Шину - исполнение остановилось на точке останова:

 

 

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

 

 

 

3. Проблемы, с которыми я столкнулся, и пути их решения

3.1. Сразу после установки служба 1С:ESB некоторое время выполняется и затем выключается.

Описание и решение проблемы есть в этой статье в разделе про установку и настройку. В файле с настройками отладки ("C:\ProgramData\1C\1CE\instances\1c-enterprise-esb-with-ide\config\debug.yml" для Windows) есть настройки порта отладки. По умолчанию порт отладки - 8080. Он был занят. После замены на 8080 служба запустилась и получилось в браузере зайти в панель управления 1С:Шиной.

3.2. Иногда редактор схемы проекта ведет себя непредсказуемо

В некоторых случаях (непонятно, как именно воспроизвести проблему) в блок-схеме НЕ удаляются элементы. Тогда в системе выводятся ошибки что обнаружено входных/выходных элементов, чем должно быть, например:

 

 

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

 

 

В данном случае из канала "Канал1СИсточник" в канал "Канал1СНазначение" продублировался маршрут (черная стрелочка), хотя я сначала удалил старый маршрут, а затем провел новый между этими схемами.

Данную конкретную проблему можно исправить, убрав лишний маршрут вручную из yaml файла, или попытавшись убрать ненужный маршрут на схеме (в yaml, на мой взгляд, удобнее, т.к. сразу идет подсветка блоков с ошибкой). НЕ всегда помогает редактирование текста в yaml файле. Иногда приходится начинать процесс рисования схемы заново.

Также мне помогло отслеживать корректность изменений, сравнивая текст из yaml последней корректной схемы и текст yaml схемы с новыми изменениями. Для этого я пользуюсь плагином "compareit" в Visual Studio Code:

 

 

Тут можно увидеть различие между последним корректным вариантом схемы (слева) и измененной схемой с ошибками (справа).

3.3. НЕ выгружаются сообщения в 1С:Шину из канала базы "Producer":

Проблема выглядела следующим образом: вызывается метод "СервисыИнтеграции.ВыполнитьОбработку()". Исключений НЕ генерируется. При этом до выполнения метода в очереди были сообщения, а после отправки сообщений нет.

Я настроил технологический журнал на логирование исключений EXCP.

В ТЖ после отправки выводилось следующее:

51:45.779013-0,EXCP, 
0, 
process=ragent,
OSThread=12644, 
Exception=c496436a-abe1-482f-964e-4269b1e46f75, Descr='src\rserver\src\RMngrCalls.cpp(410):
c496436a-abe1-482f-964e-4269b1e46f75: IDS_LICENSE_DATABASECOPY
Использование этой функции возможно только при наличии лицензии на платформу уровня КОРП или лицензии на запуск клиентских приложений системы 1С:Аналитика. Обратитесь к администратору для решения вопросов получения и установки лицензий.
На момент освоения 1С:Шины у меня стояла версия платформы "8.3.20.1838".
Начал гуглить, наткнулся на эту статью. Последовал советам - НЕ помогло. На каком-то форуме (адрес потерял, к сожалению) по этому же исключению, но немного другой ситуации, посоветовали поставить платформу выше 8.3.22.опять же НЕ помню точно, про какой конкретно релиз говорилось. По итогу установил платформу версии "8.3.23.1688".

Конкретно эта ошибка пропала, но сообщения в 1С:Шину все равно НЕ отправлялись - в ТЖ появились другие исключения:

1.    22:07.277000-0, EXCP, 1, process=rphost, p:processName=1C_ESB, OSThread=3240, Exception=7d02ef7a-683a-4481-9cbe-d13d8c612f3d,
Descr='src\integ\src\QpidConnectionStore.cpp(1148):
7d02ef7a-683a-4481-9cbe-d13d8c612f3d: Ошибка при подключении к каналу сервиса интеграции : ProducerConsumer_dev.Основной_ПроцессИнтеграции_Канал1СИсточник: http://localhost:9090/applications/Torgovlya-dev : Основной::ИнтеграцияТорговля.Источник1С
c329df92-3ba7-4d5d-937b-951d91ac0ac0: Недопустимое состояние объекта
not found channel in esb rutime metadata [integ - src\integ\src\QpidConnectionStore.cpp (175)]'

2.    57:23.707001-0, EXCP, 1, process=rphost, p:processName=1C_ESB, OSThread=2224, Exception=d0d66e66-0683-4e52-badb-34d56034dba7, Descr='src\integ\src\QpidConnectionStore.cpp(1312):
d0d66e66-0683-4e52-badb-34d56034dba7: Ошибка при подключении к сервису интеграции : ProducerConsumer_dev : http://localhost:9090/applications/Torgovlya
a021fe2a-72c9-4b2f-aca2-0c9963035617: Исключение при использовании QPID: ProducerConsumer_dev: amqp:unauthorized-access: Authentication failed [mech=PLAIN]'

Тут достаточно было пересмотреть кусок вебинара, где рассказывалось про настройку схемы процесса интеграции. У меня были недонастроены ИС в приложении и канал-источник (в статье приведена уже корректная настройка, тут я просто описываю, какие исключения встретил и как устранил ошибки).

 

Заключение

На этом пока что все. Публикация получилась объемной и, надеюсь, что полезной. Если будут замечания, дополнения или пожелания - прошу в комментарии. Спасибо за внимание.

 

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

1. 1С:Шина (1c.ru)

2. DevCon.3 11. Пример интеграции информационных систем через 1С:Шину - YouTube

3. 1С:Шина: презентация продукта, примеры интеграции - YouTube

4. От экспертов «1СR09;Рарус»: 1С:Шина — от установки до использования на реальном проекте (rarus.ru)

5. 1С:Шина. Руководство разработчика. Издание 3 (1c.ru)

6. 1С:Предприятие 8.3.23. Документация (1c.ru)

7. Функциональные возможности (1c.ru)

1С:Шина шина интеграция ESB

См. также

SALE! 10%

Перенос данных из УПП 1.3 в ERP 2 / УТ 11 / КА 2. Переносятся документы, справочная информация и остатки

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

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

50722 45650 руб.

04.08.2015    160733    357    268    

349

[ED3] Обмен для ERP 2.5, КА 2.5, УТ 11.5 БП 3.0, Розница, УНФ и других с EnterpriseData (универсальный формат обмена), правила обмена

Перенос данных 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. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

25080 руб.

12.06.2017    135907    732    291    

393

SALE! 10%

Перенос данных из ERP 2 / КА 2 / УТ 11 в БП 3.0. Переносятся документы, начальные остатки и справочники

Перенос данных 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 | В продаже с 2019г. | Воспользовались более 176 предприятий! | Сэкономьте время - используйте готовое решение для перехода! | Перенос разработан в формате КД 2 (правила конвертации данных) | Переносятся все возможные виды документов, начальных остатков и нормативно-справочная информация| Можно опционально выгружать каждую пару "номенклатура+характеристика" как отдельную номенклатуру | Есть выгрузка настроек счетов учета и зарплатных данных из ERP / КА 2 | Можно проверить на вашем сервере перед покупкой, обращайтесь!

38500 34650 руб.

15.04.2019    69087    181    139    

111

Перенос данных из Парус 8 в ЗГУ 3

Зарплата Внешние источники данных Бюджетный учет Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 8 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

84000 руб.

19.08.2020    22668    19    1    

22

SALE! 10%

Перенос данных из БП 3.0 в УТ 11 / КА 2 / ERP 2. Переносятся начальные остатки, документы и справочники

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

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

50722 45650 руб.

31.10.2014    232501    126    327    

298

Перенос данных из УПП 1.3 в БП 3.0. Переносятся документы (обороты за период), справочная информация и остатки

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

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

28000 руб.

15.12.2021    20742    136    38    

95

Перенос данных из УТ 10.3 в УТ 11.5. Переносятся документы (обороты за период), справочная информация и остатки

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

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

28000 руб.

23.07.2020    46979    201    64    

162

SALE! 10%

Перенос данных из ERP 2 / КА 2 в ЗУП 3. Переносятся остатки, документы и справочники

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

Перенос данных из ERP в ЗУП 3 | из КА 2 в ЗУП | Воспользовались более 79 предприятий! | Предлагаем приобрести готовые правила конвертации данных (КД 2) для переноса остатков, документов с движениями и справочной информации 3 | В продаже с 2020г. | Оперативно обновляем правила до актуальных релизов 1С | Есть перенос начальной задолженности по зарплате и начальной штатной расстановки на выбранную дату | Обороты за прошлые годы (данные для расчета среднего) переносятся свернуто в документ "Перенос данных" | Есть фильтр по организациям | Документы за текущий период переносятся сразу с движениями, поэтому не потребуется делать перерасчеты | Перенос можно проверить перед покупкой, обращайтесь!

48278 43450 руб.

03.12.2020    34569    83    58    

81
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. kser87 2441 02.08.23 10:56 Сейчас в теме
Сбор и разбор пакетов надо прописывать в каждой конфигурации в коде получается?
2. EugeneMaliy 81 02.08.23 11:04 Сейчас в теме
(1) Точно так. При этом мы абстрагируемся от реализации транспорта и маршрутизации. Мы уже знаем, что нам должно прийти сообщение в таком-то формате и с таким-то содержимым, как если бы мы писали обычный метод.
3. kser87 2441 02.08.23 11:31 Сейчас в теме
(2) то есть конвертацию данных сюда никак не прикрутить?

наверное, невнимательно прочитал, поэтому задам тут вопрос: можно добавлять много получателей. И можно ли один и тот же объект добавить и в получатели и в отправители?
5. Алексей Воробьев 302 02.08.23 11:58 Сейчас в теме
(3)
Конвертация - это про способ/формат обмена.

Шина - это про транспортировку/адресацию сообщений обмена и, в каких-то особых случаях, про некоторую модификацию сообщений в процессе транспортировки...

Конвертация, что КД2, что Enterprise Data (КД3), прикручивается без проблем - вопрос написания кода отправки/получения сообщений... Он (этот код) может быть достаточно универсален: написал раз в расширении (или в подсистеме, если расширение использовать по каким-то причинам невозможно), раскидал по базам обмена...

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

Вероятно, можно таким же образом отправить и сообщение в базу-источник...тут не проверял, точно не скажу...
kser87; EugeneMaliy; +2 Ответить
7. EugeneMaliy 81 02.08.23 12:03 Сейчас в теме
(5) спасибо. Я в КД не сильно разбираюсь, работал только с КД 2. Вы намного более полно, чем я, ответили на вопрос.
Дополню лишь, что в моей практике КД использовалась только при внедрениях, т.к. трудозатратна разработка правил конвертации и правил выгрузки/загрузки данных.
Шина же позволяет быстро настроить схему обмена, обработчики отправки/приема сообщений и отладить весь процесс также просто по сравнению с КД. И самое главное, все обмены собираются в одном месте и построены по единому принципу: НЕ надо спрашивать на проекте, где та или иная интеграция И НЕ надо вникать в код каждой новой интеграции.
9. kser87 2441 02.08.23 12:13 Сейчас в теме
(5) кстати, да. Если в сборе/разборе пакетов произвольный код, то ничего не мешает прикрутить туда конвертацию данных.
41. dsdred 3332 03.08.23 07:36 Сейчас в теме
(9)Прикрутить можно, только зачем тогда Шина?

Шина это транспорт и в него можно зафигачить что угодно. Если у вас есть проблемы с обменами на КД тогда вам шина не поможет.
Поможет смена архитектуры.

Обработка данных до и после шины в КД и есть тяжелая операция. В общем "бутылочное горлышко" само КД.
grumagargler; +1 Ответить
4. coollerinc 188 02.08.23 11:46 Сейчас в теме
Я так понимаю, шины данных нужны когда у тебя источников обмена больше двух, тогда она имеет хоть какой то смысл? Зачем вообще нужна шина?
6. Алексей Воробьев 302 02.08.23 12:02 Сейчас в теме
(4) В самом начале статьи автор расписал действительно (на мой взгляд) реальные "показания" к использованию Шины. Когда у вас количество интеграций между различными базами становится проблемой, когда управлять всем этим хозяйством становится сложно, когда модификация каких-то интеграций требует больших трудозатрат просто на поиск "где это вообще есть и как оно работает?", вот тогда нужно задумываться о шине...

Количество баз тут ни при чем....можно иметь 10 баз, где из одной по остальным разбрасывается номенклатура, например...и все...тут шина, наверное, все-таки не нужна...
frkbvfnjh; kser87; EugeneMaliy; +3 Ответить
10. kser87 2441 02.08.23 12:14 Сейчас в теме
(4) много баз на разных платформах: несколько конфигураций на 1С, сайт, складская система и т.д.
12. Алексей Воробьев 302 02.08.23 12:59 Сейчас в теме
(10) Вот если все это оплетено плотной паутиной интеграций - тогда да, Шина пригодится... Но при ее кривом внедрении можно получить чуть ли не больше путаницы, чем было...

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

Тут можно пойти как от проекта шины, так и от некоего общего блока данных (или единого во всех или в большинстве систем), в котором реализована вся картина обмена. С его же помощью или, вернее, под его управлением, весь обмен и должен осуществляться...
15. kser87 2441 02.08.23 13:18 Сейчас в теме
(12) можно ввести понятие мастер-базы. Для сотрудников и физ лиц это ЗУП, Для контрагентов это УТ и т.д. То есть завести их можно только в своих мастер-базах и раздавать желающим.
Уйти от шины полностью не получится. Я так понимаю, что асинхронная интеграция. Есть еще ситуации, когда ответ приемника требуется немедленно.
20. Алексей Воробьев 302 02.08.23 14:03 Сейчас в теме
(15)
можно ввести понятие мастер-базы


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

Мастер-база (надо же, Вы почти точно повторили примененный мною в моей разработке термин "мастер-система") должна содержать ВСЮ картину интеграций различных информационных систем, связанных одним проектом Шины...
Использовать проект самой Шины для этого теоретически можно (там УЖЕ есть "регистры сведений", например), но я реализую это в 1С.

Да, интеграция асинхронная. И да, есть ситуации, когда ответ требуется немедленно...
И да, это можно реализовать с помощью Шины :-) Не совсем, так сказать, "штатно", но вполне работоспособно...
25. kser87 2441 02.08.23 14:17 Сейчас в теме
(20) а кому сейчас легко?

интересно, как же реализуется не совсем "штатно"?
26. Алексей Воробьев 302 02.08.23 14:42 Сейчас в теме
(25)
Вы знаете, я был на нескольких вебинарах, посвященных Шине. В большинстве своем все было однотипно - типовой пример (почти как в статье) и ответы на вопросы...
И на каждом из них задавался вопрос о синхронном обмене. И ни на одном из них не звучало внятного ответа или ответ был однозначный: "обмен асинхронный и точка"...

С одной стороны все верно - можно и асинхронно передать в базу-приемник ВСЮ необходимую информацию, чтобы избежать синхронных запросов из этой базы в принципе...
Ну да, будет какое-то количество потенциально избыточной информации, ну и что... Базой в сотни гигабайт или даже значительно большей сейчас никого не удивить...

НО...Уж больно привычно "спросить" и строить бизнес-логику "по ответу". В Шине, кстати, предусмотрен вариант асинхронного обмена типа "запрос-ответ", но он именно асинхронный...

В общем, полез сам разбираться и искать варианты...и нашел...

Реализуется привычно - с помощью http-запросов. В проекте Шины можно описать собственные http-запросы к шине для "реализации API проекта".
И уже дело техники - транслировать запрос к шине в запрос к конкретной системе и вернуть ее ответ. Казалось бы - зачем так сложно? Можно же напрямую спросить систему, без всяких шин, по старинке...

Ну, как раз для реализации принципа сбора в едином месте всей информации обо всех возможных интеграциях вашей информационной эко-системы. То есть - в мастер-системе...
27. kser87 2441 02.08.23 15:11 Сейчас в теме
(26) ожидаемо на самом деле. а WS можно создавать?
28. Алексей Воробьев 302 02.08.23 15:28 Сейчас в теме
(27)
Да, с 3-ей версии (вышла в мае 23-го) можно. В описании нового в версии присутствуют "Элемент проекта Клиент Soap Сервиса" и "Элемент проекта Soap Сервис"

Но туда подробно не копал, тонкостей не расскажу...
Вообще, проект развивают, добавляя новую функциональность и постепенно исправляя ошибки.

Меня поначалу бесило, что в справке к Шине упоминались, например, "Справочники" и "Регистры сведений", а в проекте (я до сих пор не перевел Шину на 3-ю версию) ничего такого не было и в помине.
На официальный запрос в техподдержку мне ответили, что такой функциональности нет, а в справке - ошибка... Ага, целые "ошибочные" разделы справки...как же...

Ну вот, постепенно добавляют...в 3-ей версии есть уже и "Перечисления", и "Регистры сведений" и некие "Структура" и "Хранимая структура", а также SOAP...
29. kser87 2441 02.08.23 15:30 Сейчас в теме
(28) в общем, рано еще на шину переходить)
30. Алексей Воробьев 302 02.08.23 15:39 Сейчас в теме
(29) Нет, вполне уже можно)) Тут все от потребностей пляшет...
Но придется либо написать проект Шины + всю обвязку работы с Шиной в информационных системах самостоятельно, либо дождаться таких решений на рынке...

Интерес явный присутствует, тема трендовая.
Нужно будет собраться и выложить (наверное, здесь, на ИС) свое решение после доведения его до продажного состояния. Пока в процессе, даже до полевых испытаний не дошло...но скоро, скоро)...
Еще явно напрашивается статья или даже несколько по реальным практическим аспектам и решениям, примененным в проекте...
34. laperuz 46 02.08.23 17:02 Сейчас в теме
(27)ws есть и клиент и сервер
Я даже уже наткнулся на баг, который отписал в техподдержку - не работает передача base64binary
Да, и большое ограничение пока что- понимает только стандартные типы, импортировать свои нельзя. Т.е., например, хранилище значений 1Совское просто так уже не передать, нужно через двоичные данные(которые пока не работают:))
8. Алексей Воробьев 302 02.08.23 12:09 Сейчас в теме
Статья с очередным примером настройки простейшей интеграции...немного расширена (относительно пары предыдущих на инфостарте) углублением в проект самой шины... Остальное додумывайте сами, экспериментируйте сами...

На самом деле, различных аспектов и нюансов практического использования Шины достаточно много...например, скопировали базу 1С с продакшена на тестовый стенд со всеми настройками подключения к шине, а она начинает отправлять и принимать сообщения вместо продакшена... Это именно так, проверено...требуется защита от подобных инцидентов...
Это так, один из моментов...
d4rkmesa; EugeneMaliy; +2 Ответить
11. EugeneMaliy 81 02.08.23 12:27 Сейчас в теме
(8)
скопировали базу 1С с продакшена на тестовый стенд со всеми настройками подключения к шине, а она начинает отправлять и принимать сообщения вместо продакшена

Тут вопрос скорее НЕ к программному обеспечению, а к организации процесса. Технический руководитель обязан предусмотреть этот момент и обеспечить изменение настроек в сервисах интеграции с рабочих на тестовые - приложение 1С:Шины также должно присутствовать в тестовом контуре - у него будут свой URL-адрес и свои ключи безопасности.
13. Алексей Воробьев 302 02.08.23 13:04 Сейчас в теме
(11) Таки да, руководитель, конечно, должен...но человеческий фактор никто не отменял, так что дров наворотить можно легко...

А защиту такую автоматизировать, в общем-то, несложно... Система сама должна определить, что она не в своей инфраструктуре находится и, как минимум, прекратить все обмены до момента должной ее настройки тем же руководителем...
frkbvfnjh; EugeneMaliy; +2 Ответить
14. EugeneMaliy 81 02.08.23 13:08 Сейчас в теме
(13)
Система сама должна определить, что она не в своей инфраструктуре находится и, как минимум, прекратить все обмены до момента должной ее настройки тем же руководителем...

Это хорошая мысль. Возьму ее на заметку - на будущее. Спасибо.
16. kser87 2441 02.08.23 13:25 Сейчас в теме
Интересно, есть ли какая-то жесткая типизация на шине? то есть жесткие требования к входящим пакетам. Например, можно указать что в пакете точно есть код, наименование с определенным типом данных и набор необязательных реквизитов.
18. EugeneMaliy 81 02.08.23 13:56 Сейчас в теме
(16) НЕ озаботился этим моментом.
Ниже привожу выдержку из документации:
Язык «1С:Шины» — статически типизированный. Это значит, что у каждой переменной, параметра и метода, возвращающего значение, должны быть описаны типы.
23. kser87 2441 02.08.23 14:09 Сейчас в теме
(18) не, я про контроль пакетов.
24. Алексей Воробьев 302 02.08.23 14:09 Сейчас в теме
(16)
(18)

Не совсем это имеется в виду, насколько я понимаю...

"Пакет", а лучше сообщение (в терминах шины) может содержать произвольный набор строковых параметров, задаваемых при формировании сообщения в информационной базе, и, собственно, тело сообщения.
Таким образом, можно реализовывать собственные форматы сообщений, в которых легко "зашить" информацию, реализующую логику их обработки в базах-приемниках, а также использовать при маршрутизации в проекте Шины...
21. EugeneMaliy 81 02.08.23 14:05 Сейчас в теме
(16) Если я правильно понял вторую часть вопроса - можно определить наличие свойства в сообщении.
Если передается XML или JSON - его можно прочитать в объект "Соответствие". Далее применить метод "СодержитКлюч" для получения указанного свойства. У меня использовался метод "Получить" - я заранее знал формат входящих сообщений. Также у соответствия есть метод "ПолучитьИлиУмолчание" - получает значение свойства или значение по умолчанию, если это свойство отсутствует.
22. kser87 2441 02.08.23 14:08 Сейчас в теме
(21) имел в виду контроль именно на шине.
35. laperuz 46 02.08.23 17:08 Сейчас в теме
(22)это и делается на стороне шины, там же есть свой язык, т.е. можно код писать. В т.ч. код проверки структуры получаемого сообщения
17. frkbvfnjh 787 02.08.23 13:48 Сейчас в теме
Как мне кажется - статья написано отменно! Более понятного описания, что такое шина и зачем она нужна, я пока не встречал. Все написано человеческим языком и в конце "насыпаны" полезные ссылки в нагрузку для углубленного познания. Лично у меня не возникло какого-то особого недопонимания того, что написано, хотя до этого я не работал вообще ни с какой ESB, и сложилось впечатление самодостаточности статьи, т.е. для того что бы выполнить всё, что здесь описано, не потребуется дополнительно несколько лет изучать теорию, ну разве, что почитать документации непосредственно по установки шины. Так что - спасибо!
kser87; EugeneMaliy; +2 Ответить
19. EugeneMaliy 81 02.08.23 13:59 Сейчас в теме
(17) Спасибо и Вам, очень приятно. В статье НЕ описано, как реализовать маршрутизацию - это важный момент в ESB. Хотел добавить пример, но статья получилась и так очень большой - решил отложить на будущее.
31. sasha_r 02.08.23 15:42 Сейчас в теме
такой вопрос: одну 1с-шину с другой 1с-шиной кто-то сцеплял?

чтобы ограниченное количество данных из одного контура в другой контур проходило. или это невозможно в 1с-шине? не нашел однозначного ответа
36. laperuz 46 02.08.23 17:10 Сейчас в теме
(31)да без проблем. Например, поднимаете на одной шине http/soap сервис, из другой к нему обращаетесь
32. gybson 02.08.23 16:16 Сейчас в теме
Первая цель - убрать связи 1к1, decoupling, когда сложность интеграции растет факториально. Это всё взлетит, если использовать формат ED, который никуда не годится для выгрузки одиночных объектов, надо оптимизировать.

Маршрутизация. Шина должна маршрутизировать данные очевидно. Если где-то в шине зашит скриптик Если УИД="578e7ef5-4e5f-483c-bf9e-660bae184405" тогда маршрут1, то это сразу бомба с подожжённым фитилем.

У нас на базе БИТ.Адаптера своя конфигурация, которая выполняет такие задачи. Маршрутизация прописывается декларативно и она очевидна.

А тут как-то сыро пока и непонятно они доделывать то станут или просто в типовые конфигурации пропишут все грабли для работы с шиной.
33. rozer 307 02.08.23 16:42 Сейчас в теме
37. EugeneMaliy 81 02.08.23 17:11 Сейчас в теме
(33) в принципе да, это видео есть в разделе "Полезные ссылки".
Чего в видео нет:
1. Описания нюансов процесса установки - это есть в статье от Раруса - тоже ссылка на статью в полезных ссылках;
2. Видения места 1С:Шины в инфраструктуре предприятия, объяснения: когда 1С:Шину надо применять и почему она лучше, чем уже существующие сервисы ESB и MQ - вскользь об этом сказали на вебинаре - также ссылка приложена;
3. Нет четкого разбиения реализации интеграции на этапы. Тут я постарался структурировать процесс по пунктам.
4. Приложены проблемы, с которыми я столкнулся в процессе обучения - этого в видео также нет. Там процесс идет почти, как надо. В сети я НЕ нашел объяснения ситуаций, которые описаны в разделе "3. Проблемы, с которыми я столкнулся, и пути их решения". Ни на ИТС, ни на форумах. Нашел лишь способы диагностирования проблем "в крупную клетку", по логам и ТЖ находил решения и описал их "для людей".

Также кому-то удобнее будет прочитать, а НЕ посмотреть видео - вкусовщина.
38. rozer 307 02.08.23 17:14 Сейчас в теме
(37) да, сорри, ступил и не увидел в "Полезные ссылки".
Весьма полезное описание - как раз сейчас внедряем обмен с ЛК клиента (на их конце Кролик).
EugeneMaliy; +1 Ответить
39. EugeneMaliy 81 02.08.23 17:23 Сейчас в теме
(38) хорошо, раз полезно.

да, сорри, ступил и не увидел в "Полезные ссылки".

Ничего страшного - все норм :)
46. rozer 307 23.08.23 10:59 Сейчас в теме
(39) кстати в процедуре Основной_ПроцессИнтеграции_Канал1СНазначениеОбработкаПолучен­ияСообщения()
при исключении устанавливается Отказ=Истина.
Если так сделать то будет "пробка" на этом сообщении ?
Вроде в канале 1с обрабатывает последовательно все сообщения и будет каждый раз вызывать обработчик для этого "сбойного" сообщения ?
47. EugeneMaliy 81 23.08.23 12:47 Сейчас в теме
(46) см. комментарий № 42. Возможно это ответ на Ваш вопрос. Если нет - поясните пожалуйста подробнее ситуацию.
48. rozer 307 23.08.23 13:36 Сейчас в теме
(47) нет, я привел пример процедуры получения а не отправки сообщения см

Процедура Основной_ПроцессИнтеграции_Канал1СНазначениеОбработкаПолучен­ияСообщения(Сообщение, Отказ)


В ней зачем писать Отказ=Истина ?
40. frkbvfnjh 787 03.08.23 06:43 Сейчас в теме
(19) Ждем продолжения с нетерпением!
42. EugeneMaliy 81 04.08.23 08:56 Сейчас в теме
Дополнение к статье (пишу комментарий, ибо редактировать статью, насколько я знаю - проблемно).

Коллега задал резонный вопрос: "Что будет, если при записи мы сначала отправляем сообщение во внутренний канал сервиса интеграции, а затем отменяем транзакцию: что будет с сообщением?".
Ответ: Внутренний канал 1С, из которого сообщения отправляются в 1С:Шину, находится под транзакцией. В случае, который описал мой коллега, сообщение в канал после транзакции НЕ будет добавлено.

Проверил следующим образом:
См. раздел "1. Описание процесса реализации интеграции для информационных баз 1С", там описана структура базы-отправителя.

Предварительно добавил в процедуру "ПриЗаписи" справочника "Номенклатура" строку "Отказ = Истина;" после отправки сообщения в канал сервиса интеграции.

Далее выполнил проверку:
Действие: открыл обработку "Обмен данными с шиной" (см. статью, подраздел "f. Разработать механизм, который отправляет сообщения из внутренней очереди в каналы 1С:Шины и который принимает сообщения из каналов 1С:Шины." в 1 разделе).
Действие: нажал кнопку "Проверить канал".
Проверка: вывелось сообщение "Нет сообщений в канале.".
Действие: перезаписал элемент справочника.
Действие: в обработке ""Обмен данными с шиной"" нажал кнопку "Проверить канал"
Проверка: вывелось сообщение "Нет сообщений в канале.".
43. Tsugancova 05.08.23 03:42 Сейчас в теме
Не понимаю зачем эта шина до сих пор, ну есть проблема, написал обменник на джаве с БД, у которой функции, для каждого обмена, чтоб фиксировать. В обменщике дергай функции, заливай данные, все наверное. Косяки будут в чистом http сервисе с длинной строки, если данные большие, так файлом можно пулять, и его парсить, если большие данные, а так будет все быстро работать и не мучаться с этой шиной, притом зная 1с, как и любую систему проблема может всплыть там, где не ожидаешь.
44. EugeneMaliy 81 05.08.23 16:56 Сейчас в теме
(43) В разделе "Введение" я описал свое видение того, как исторически развивались обмены, почему появились вообще программные продукты класса ESB и зачем после этого 1С сделала свою шину.

Если спросить, кому и зачем нужны ESB изначально - нужны бизнесу, чтобы удешевить обмены данными и НЕ платить излишне свои кровные программистам за сложность, которую можно упростить.

По поводу "написал обменник на джаве с БД" - если за это заплатят и текущая работа устраивает - шина НЕ нужна.

А если работаете на крупном проекте и ТРП и РП решат, что надо уменьшить затраты на программистов-интеграторов и на сопровождение интеграций путем внедрения шины - тогда уже программисту нужны знания по работе с ESB, неважно какой, чтобы быть востребованным на крупных проектах и чтобы ЗП была повыше.
45. DemetrKlim 158 06.08.23 14:28 Сейчас в теме
Какая забавная технология.... напоминает студенческую общагу - сплошные беспорядочные связи, где сам по себе обмен биоматери... пардон! информацией становится самоцелью, а случайно возникший "результат" чаще станет проблемой, чем чьей-то радостью)).
Понять, что должно стать результатом такого обмена - сложно. Как по мне, так обмениваться можно только той информацией, которая имеет уникальные ключевые идентификаторы (неважно, в каком виде!) А у нас такой инфы - раз, два и пальцы кончились.
В приведенном примере упомянут справочник "номенклатура". Он и без обменов изрядно загажен в любых конфигурациях у любого пользователя, а если еще и со стороны начнет прилетать - все, "горшочек - НЕ вари!"))
49. rozer 307 23.08.23 14:46 Сейчас в теме
50. barelpro 1370 19.10.23 17:44 Сейчас в теме
Если я правильно понял разработчиков 1С Шины - они рекомендуют фоновые задания с периодическим опросом канала сервиса на стороне отправителя, и таким же периодическим опросом 1С.Шины на стороне получателя.
Чем чаще опрашиваем, тем быстрее получаем. Но при слишком частом опросе увеличиваем нагрузку на 1С, поэтому слишком часто не можем, значит пока 1С Шина не про мгновенный обмен сообщениями?
А технологию типа tcp socket с постоянным прослушиванием источника сигнала, чтобы реагировать только по мере появления данных - пока ждем?
Честно говоря надеялся, что разработчики проанализируют уже существующие решения, где эта проблема решена (например компонента Yellow RabbitMQ). И как минимум сделают не хуже...
51. barelpro 1370 20.10.23 20:13 Сейчас в теме
(50)
Сам спросил, сам ответил - цитата из ИТС:
Если метод ОтправитьСообщение() вызван внутри транзакции, то реальная отправка сообщения произойдет только после фиксации этой транзакции.
Это и есть мгновенная отправка сразу после завершения транзакции, теперь не надо заморачиваться с разными буферными регистрами, лепота! )

При получении тоже все хорошо, я так понял между Шиной и 1С базой получателем по собственному протоколу постоянно включены один или несколько каналов , работающие в режиме ожидания постоянно. Шина отправляет в эти каналы сообщения, на стороне 1С-базы в этот момент запускается фоновое задание, которое вызывает обработчик соответствующего канала.
52. barelpro 1370 21.10.23 15:58 Сейчас в теме
(51)
Опять сам с собой )
Внимательно прочитатл документашку.
Да, есть служебное фоновое задание, которое мгновенно отправляет сообщение в Шину и мгновенно получает сообщения из Шины. Но живет такое служебное фоновое задание 2 минуты. его надо каждые две минуты продлевать регламентным заданием (командой СервисыИнтеграцииМенеджер.ВыполнитьОбработку()). Вот те раз! Опять регламентные задание! Ну хорошо хоть не каждые 5 секунд!
53. lada2011 05.12.23 15:10 Сейчас в теме
По какой причине при запуске СервисаИнтеграции регламентным задание постоянно создается несколько фоновых задний
54. VKuser276020687 18.12.23 10:46 Сейчас в теме
Добрый день, очень интересная статья.
Я бы хотел с Вами обсудить возможность сотрудничества по данному направлению, если Вам интересно не могли бы оставить свои контакты?
55. lemilk 2 21.03.24 16:36 Сейчас в теме
Попробовал повторить
Получаю ошибку после нажатия "Опубликовать":
Cannot publish project StatusCodeError: 401 - "{\r\n "error" : {\r\n "code" : 16,\r\n "status" : "UNAUTHENTICATED",\r\n "message" : "Invalid username or password.",\r\n "details" : [ ]\r\n }\r\n}"
56. lemilk 2 21.03.24 17:41 Сейчас в теме
(55) Помог перезапуск службы: 1c-enterprise-esb-with-ide
57. Razyiller 25.03.24 06:11 Сейчас в теме
Доброго всем дня, столкнулся с проблемой, установлена 1с Шина. По локальному адресу все работает http://127.0.0.1:9090/applications/test01-dev
но ИБ находятся на другом сервере. Пытаюсь указать адрес сервера http://IP_Сервера:9090/applications/test01-dev
но увы не получается, сервера друг друга видят. Порт открыт.
Нет ли никаких настроек в 1С Шине или нужно обращаться к админам? может кто сталкивался.
58. Razyiller 25.03.24 07:55 Сейчас в теме
(57) решено. может кому пригодиться, в справке все написано)))

http://127.0.0.1:9090/docs/help/topics/doc00098.html
Оставьте свое сообщение