Создание проекта в среде разработки
Создание нового проекта
На этапе создания приложения вам будет предложено выбрать тип СУБД для хранения данных. В связи с этим, предварительно вам следует подключить СУБД к серверу «1С:Шины». Инструкцию по подключению вы можете найти здесь. Для более быстрого запуска тестового примера вы также можете использовать и файловую систему, которая не требует предварительной настройки, однако при создании реальных проектов ее использование крайне не рекомендуется.
На этом этапе вы создадите в среде разработки «1С:Шины» приложение и добавите в него процесс интеграции.
- Создайте новое приложение с СУБД типа Postgres и откройте его в режиме разработки.
- Добавьте новый элемент проекта — процесс интеграции. Назовите его МаршрутизацияСообщений.
«1С:Шина» создаст в проекте новый процесс интеграции и откроет редактор для создания его схемы.
Описание схемы процесса интеграции
Схема интеграции в данном примере будет выглядеть следующим образом:

Вы можете создать ее самостоятельно или воспользоваться готовым примером из YAML-файла ниже и перейти к следующему разделу.
Пример YAML-файла процесса интеграции
ВидЭлемента: ПроцессИнтеграции
ОбластьВидимости: ВПодсистеме
Ид: 41c3efc8-c191-43c0-9ae5-0b82c5183636
Имя: МаршрутизацияСообщений
СправочникУчастников: ИнформационныеСистемы
Схема:
ГруппыУчастников:
-
Ид: 2f678d75-6352-400f-ac1d-5800350ae450
Имя: ИБ
X: 172
Y: 16
Высота: 60
Ширина: 138
-
Ид: d9378f49-7364-4f75-82bf-2824c4ac07cc
Имя: Партнеры
X: 176
Y: 522
Высота: 60
Ширина: 138
Маршруты:
-
Ид: 07a5fa62-f2a5-4f3e-bef2-90cad1bf47e6
В: ВыборСпособаДоставки
Из: ИзБазы
Точки:
-
X: 241
Y: 204
-
X: 241
Y: 204
-
Ид: cf541808-4baf-43c5-a546-06dd4e9a423a
В: Xml2Json
Из: ВыборСпособаДоставки
Точки:
-
X: 241
Y: 301
-
X: 114
Y: 301
-
Ид: 37fdc0b7-e97f-4405-8c3d-6a790f97ff17
В: Xml2Zip
Из: ВыборСпособаДоставки
Точки:
-
X: 241
Y: 301
-
X: 375
Y: 301
-
Ид: 800d51f5-5052-4024-9219-64a7c252e491
В: ВHttp
Из: Xml2Json
Точки:
-
X: 114
Y: 402
-
X: 114
Y: 402
-
Ид: 91d09754-d4b8-470f-9b3d-a8635baf9bb4
В: НаFtp
Из: Xml2Zip
Точки:
-
X: 375
Y: 403
-
X: 375
Y: 403
Связи:
-
Ид: 395cbbc2-8bc6-4aa1-9a7e-2eca990e89b1
Группа: ИБ
НаправлениеСвязи: ИзГруппыВУзел
Узел: ИзБазы
Точки:
-
X: 241
Y: 100
-
X: 241
Y: 100
-
Ид: aeb7e4c2-157c-4abd-84d5-2158c1bc1bf1
Группа: Партнеры
НаправлениеСвязи: ИзУзлаВГруппу
Узел: ВHttp
Точки:
-
X: 114
Y: 501
-
X: 245
Y: 501
-
Ид: ae646b7d-a1b5-497d-81a9-943383889b2a
Группа: Партнеры
НаправлениеСвязи: ИзУзлаВГруппу
Узел: НаFtp
Точки:
-
X: 375
Y: 502
-
X: 245
Y: 502
Узлы:
-
Вид: МаршрутизаторПоСодержимому
Ид: 53faf3cf-1e5f-4eb5-93ed-da651761bcee
Имя: ВыборСпособаДоставки
X: 146
Y: 223
Высота: 62
Ширина: 191
-
Вид: Транслятор
Ид: 10e46750-b7ef-48c1-8fbc-e37a1e51a4a3
Имя: Xml2Json
X: 44
Y: 321
Высота: 58
Ширина: 140
-
Вид: Транслятор
Ид: 40e0a3d1-95c2-4137-ab16-d51a5de24be5
Имя: Xml2Zip
X: 305
Y: 321
Высота: 58
Ширина: 140
-
Вид: Http
Ид: 63cfc787-632d-49c8-b993-4f9f51606c6a
Имя: ВHttp
X: 44
Y: 419
Высота: 63
ИгнорироватьКодОтвета: Ложь
Ширина: 140
-
Вид: FtpНазначение
Ид: bd66958c-f38f-4001-8b0b-f784132ba761
Имя: НаFtp
X: 305
Y: 421
Высота: 64
ЗадержкаПереподключения: 5с
ИспользоватьИмяФайлаБезПути: Ложь
КодировкаИменФайлов: windows-1251
МаксимумПопытокПереподключения: 3
МенятьКаталогПошагово: Истина
ПассивныйРежим: Ложь
Порт: 21
Таймаут: 30с
ТаймаутПодключения: 10с
Ширина: 140
-
Вид: Канал1СИсточник
Ид: 9a210a26-12ca-49c6-9a2b-97967772af1a
Имя: ИзБазы
X: 171
Y: 123
Высота: 62
Ширина: 139
Чтобы сообщения из информационной базы поступали в «1С:Шину», на схему добавлена группа участников ИБ. В эту группу (уже после публикации проекта, в панели управления приложения) будет включена информационная система «1С», из которой будут отправляться сообщения. Группа участников соединена с каналом вида Канал1СИсточник ИзБазы. После публикации проекта, когда в группу участников будет добавлена информационная система, «1С:Шина» создаст для нее индивидуальную очередь, к которой информационная система сможет подключиться и в которую сможет отправлять сообщения.
Затем сообщения будут поступать в узел вида МаршрутизаторПоСодержимому ВыборСпособаДоставки. Данный узел предназначен для того, чтобы определять, в какие узлы из тех, что идут непосредственно за ним, должны попасть сообщения. Для этого у узла есть событие ОбработчикОпределенияПолучателей, в котором вы пропишете специальный метод. Внутри данного метода вы будете находить нужного получателя в справочнике ИнформационныеСистемы и, в зависимости от значения реквизита получателя СпособДоставки, направлять сообщение в один из следующих узлов.
На следующем этапе сообщение попадет в один из узлов вида Транслятор: Xml2Json либо Xml2Zip. Если необходимо выполнить отправку по протоколу HTTP, то в узле Xml2Json тело сообщения будет сконвертировано из XML в JSON. Если необходимо выполнить отправку по протоколу FTP, то в узле Xml2Zip тело сообщения будет архивировано в ZIP.
После того как тело сообщения было приведено к соответствующему формату, оно попадает в узел вида Http ВHttp либо узел вида FtpНазначение НаFtp. В узле ВHttp тело сообщения будет отправлено POST-запросом в HTTP-сервис партнера. В узле НаFtp тело сообщения будет размещено на FTP-сервере в индивидуальном каталоге партнера, из которого он впоследствии сможет забрать файл.
Также на схему добавлена группа участников Партнеры. Она соединена с узлами ВHttp и НаFtp. В эту группу (уже после публикации проекта, в панели управления приложения) будут включены все информационные системы партнеров. Запись о каждом партнере будет содержать индивидуальный код получателя и дополнительные реквизиты (такие как способ доставки, адрес HTTP-сервиса или FTP-сервера).
Создание схемы процесса интеграции
На данном этапе вы создадите схему процесса интеграции, которая описывает взаимодействие информационных систем. Чтобы создать схему интеграции, выполните следующие шаги:
-
Добавьте на схему группу участников. Для этого в редакторе компонента МаршрутизацияСообщений в палитре узлов выберите ГруппаУчастников и кликните в верхней части схемы, чтобы разместить там группу. Кликните по узлу два раза и задайте имя — ИБ:

-
Добавьте на схему узел Канал1СИсточник и задайте имя — ИзБазы:

-
Аналогичным образом добавьте на схему узлы:
- МаршрутизаторПоСодержимому — задайте имя ВыборСпособаДоставки;
- Транслятор — задайте имя Xml2Json;
- Транслятор — задайте имя Xml2Zip;
- Http — задайте имя ВHttp;
- FtpНазначение — задайте имя НаFtp;
- ГруппаУчастников — задайте имя Партнеры.
Расположите узлы на схеме следующим образом:

Следующим шагом следует обозначить на схеме маршруты и связи.
-
Выберите в палитре узлов элемент Связь и соедините группу участников ИБ с узлом ИзБазы. Для этого последовательно кликните на группу участников ИБ и на узел ИзБазы. Затем снова выберите элемент Связь и соедините каждый из узлов ВHttp и НаFtp с группой участников Партнеры:

-
Затем с помощью элемента Маршрут соедините:
- Узел ИзБазы с узлом ВыборСпособаДоставки;
- Узел ВыборСпособаДоставки с узлом Xml2Json;
- Узел ВыборСпособаДоставки с узлом Xml2Zip;
- Узел Xml2Json с узлом ВHttp;
- Узел Xml2Zip с узлом НаFtp.

Создание перечисления для выбора способа доставки
Создайте перечисление, чтобы на следующем шаге указать его в качестве типа реквизита СпособДоставки.
-
Добавьте элемент проекта Перечисление. Задайте имя СпособДоставки.
-
Добавьте в перечисление два элемента: HTTP и FTP:
ВидЭлемента: ПеречислениеИд: 73520a6b-a8ca-4cdc-b3b4-0bbf8604f8c6Имя: СпособДоставкиОбластьВидимости: ВПодсистемеЭлементы:-Ид: a1b02dcd-8b92-4e5e-b040-0620a405322dИмя: HTTP-Ид: 44a05b0f-f4ea-445e-b234-01524fc7d57aИмя: FTP
Добавление реквизитов в справочник информационных систем
На этом шаге вы создадите дополнительные реквизиты, которые впоследствии сможете указать в свойствах узлов схемы (подробнее).
-
Добавьте новый реквизит справочника ИнформационныеСистемы с именем Url и типом
Строка. -
Аналогичным образом добавьте реквизиты Каталог типа
Строкаи СпособДоставки типаСпособДоставки|Неопределено:
Создание параметров процесса интеграции
В среде разработки «1С:Шины» у процесса интеграции можно создать один или несколько параметров. Каждый из них имеет имя. Это имя можно использовать в выражениях, использующихся для вычисления значений свойств узлов процесса интеграции. Значения параметров можно задать в панели управления приложением во время исполнения.
Для того чтобы иметь возможность задавать в панели управления имя пользователя, пароль и хост FTP-сервера, создайте три параметра процесса интеграции:
- ИмяПользователяFtp,
- ПарольFtp,
- ХостFtp.

Задание свойств узлов схемы
Следующим шагом следует задать свойства для узлов.
ВыборСпособаДоставки
Для узла ВыборСпособаДоставки следует задать обработчик события ВыборПолучателей:
-
В панели свойств нажмите на плюс в поле ВыборПолучателей:

-
Откроется модуль процесса интеграции. «1С:Шина» автоматически создаст нужную сигнатуру метода и назначит его в качестве обработчика. Для метода автоматически генерируется название по схеме
ИмяЭлемента + ТипОбработчика, но при необходимости можно ввести название обработчика вручную:Автоматически сгенерированный обработчикметод ВыборСпособаДоставкиВыборПолучателей(Контекст: КонтекстВызоваИнтеграции,Сообщение: МаршрутизацияСообщений.Сообщение): Коллекция<УзелСхемыИнтеграции>// TODO Вставить содержимое обработчикавозврат [];В этом модуле будет обрабатываться событие выбора получателей. Чтобы определить следующий узел, следует обратиться к справочнику ИнформационныеСистемы и получить значение реквизита СпособДоставки той информационной системы, которая была выбрана в качестве получателя. После этого, в зависимости от значения реквизита СпособДоставки, следует вернуть один из двух узлов, стоящих после маршрутизатора.
-
В методе обработчика напишите следующий код:
метод ВыборПолучателей(Контекст: КонтекстВызоваИнтеграции,Сообщение: МаршрутизацияСообщений.Сообщение): Коллекция<УзелСхемыИнтеграции>// Предполагается, что каждое сообщение обязательно содержит код одного получателя.// Сообщения без указанного получателя будут отправлены в канал недоставленных сообщений.выбор Сообщение.Получатели.ЕдинственныйИлиНеопределено()?.СпособДоставкикогда FTPвозврат [Схема.Узлы.Xml2Zip]когда HTTPвозврат [Схема.Узлы.Xml2Json]иначевозврат [];;
Xml2Json
Перед отправкой сообщения партнерам в HTTP-сервис по условию примера необходимо преобразовать его тело из XML в JSON. Исходное сообщение выглядит следующим образом:
<items>
<item id="1">
<name>Война и мир</name>
<author>Лев Толстой</author>
<year>2022</year>
<price>550</price>
<retail>770</retail>
<currency>RUB</currency>
</item>
<item id="2">
<name>1984</name>
<author>Джордж Оруэлл</author>
<year>2020</year>
<price>350</price>
<retail>540</retail>
<currency>RUB</currency>
</item>
<item id="3">
<name>Обломов</name>
<author>Иван Гончаров</author>
<year>2022</year>
<price>600</price>
<retail>800</retail>
<currency>RUB</currency>
</item>
</items>
Ожидается сообщение JSON следующего вида:
{
"items" : [
{
"id" : "1",
"name" : "Война и мир",
"author" : "Лев Толстой",
"year" : "2022",
"price" : "550",
"retail" : "770",
"currency" : "RUB"
},
{
"id" : "2",
"name" : "1984",
"author" : "Джордж Оруэлл",
"year" : "2020",
"price" : "350",
"retail" : "540",
"currency" : "RUB"
},
{
"id" : "3",
"name" : "Обломов",
"author" : "Иван Гончаров",
"year" : "2022",
"price" : "600",
"retail" : "800",
"currency" : "RUB"
}
]
}
Чтобы сделать преобразование, используется узел вида Транслятор Xml2Json. Трансформация сообщения будет происходить в обработчике Преобразование.
Чтобы задать обработчик события Преобразование:
-
Выберите узел Xml2Json.
-
В панели свойств в поле Преобразование впишите название метода — ПреобразованиеJson. Затем нажмите на плюс:

-
Откроется модуль процесса интеграции. «1С:Шина» автоматически создаст нужную сигнатуру метода:
метод ПреобразованиеJson(Контекст: КонтекстВызоваИнтеграции,Сообщение: МаршрутизацияСообщений.Сообщение): СообщениеИнтеграции// TODO Вставить содержимое обработчика, формирующего новое сообщение интеграции с преобразованным телом.возврат Сообщение; -
Напишите следующий код:
метод ПреобразованиеJson(Контекст: КонтекстВызоваИнтеграции,Сообщение: МаршрутизацияСообщений.Сообщение): СообщениеИнтеграцииисп СтароеТело = Сообщение.ПолучитьТелоКакПоток()пер Читатель = новый ЧтениеXml(СтароеТело)исп Поток = новый ВременныйПотокЗаписи()пер Писатель = новый ЗаписьJson(Поток)ОбщиеМетоды.Xml2Json(Читатель, Писатель) // Метод Xml2Json будет задан в общем модуле «ОбщиеМетоды»исп НовоеТело = Поток.ОткрытьПотокЧтения()возврат Сообщение.УстановитьТелоИзПотока(НовоеТело);Метод
Xml2Json()удобно задать в общем модуле. -
В навигаторе проекта добавьте элемент проекта Общий модуль с именем ОбщиеМетоды (подробнее):

-
Напишите в модуле следующий код:
@ВПодсистеме @НаСервереметод Xml2Json(Читатель: ЧтениеXml, Писатель: ЗаписьJson)Читатель.Следующий()Писатель.ЗаписатьНачалоОбъекта()пер КорневойТег = Читатель.ИмяПисатель.ЗаписатьИмяСвойства(КорневойТег) // items:Читатель.Следующий()Писатель.ЗаписатьНачалоМассива()пока Читатель.Имя != КорневойТегпер НомерТовара = Читатель.ЗначениеАтрибута("id")пер ТоварИдентификаторТега = Читатель.ИмяЧитатель.Следующий()Писатель.ЗаписатьНачалоОбъекта()Писатель.ЗаписатьИмяСвойства("id")Писатель.Записать(НомерТовара)пока Читатель.Имя != ТоварИдентификаторТегаПисатель.ЗаписатьИмяСвойства(Читатель.Имя)Читатель.Следующий()Писатель.Записать(Читатель.Значение)Читатель.Следующий()Читатель.Следующий();Писатель.ЗаписатьКонецОбъекта()Читатель.Следующий();Писатель.ЗаписатьКонецМассива()Писатель.ЗаписатьКонецОбъекта();
Xml2Zip
Прежде чем разместить сообщение на FTP-сервере в узле НаFtp необходимо преобразовать тело сообщения в ZIP-формат. Чтобы выполнить такое преобразование, используйте узел вида Транслятор Xml2Zip. Трансформация сообщения будет происходить в обработчике Преобразование.
-
В поле Преобразование впишите название метода — ПреобразованиеZip. Затем нажмите на плюс:

-
Откроется модуль процесса интеграции. «1С:Шина» автоматически создаст нужную сигнатуру метода:
метод ПреобразованиеZip(Контекст: КонтекстВызоваИнтеграции,Сообщение: МаршрутизацияСообщений.Сообщение): СообщениеИнтеграции// TODO Вставить содержимое обработчика, формирующего новое сообщение интеграции с преобразованным телом.возврат Сообщение; -
Напишите следующий код:
метод ПреобразованиеZip(Контекст: КонтекстВызоваИнтеграции,Сообщение: МаршрутизацияСообщений.Сообщение): СообщениеИнтеграцииисп Поток = новый ВременныйПотокЗаписи()пер ЗаписьZip = новый ЗаписьZip(Поток)ЗаписьZip.Добавить(Сообщение.ПолучитьТелоКакПоток(), "Сообщение")ЗаписьZip.Записать()исп НовоеТело = Поток.ОткрытьПотокЧтения()возврат Сообщение.УстановитьТелоИзПотока(НовоеТело);
ВHttp
Когда сообщение попадает в узел ВHttp, оно отправляется POST-запросом на HTTP-сервис партнера. Для данного узла следует задать следующие свойства: Url и Метод.
Если для отправки запроса требуется авторизация, необходимо также задать свойства ИмяПользователя и Пароль. Их можно задать как непосредственно в среде разработки, так и использовать для вычисления значений данных свойств реквизиты участников либо параметры процесса интеграции.
У каждого партнера есть свой собственный адрес HTTP-сервиса. Этот адрес будет находиться в реквизите Url справочника ИнформационныеСистемы. Таким образом, для того чтобы этот адрес автоматически использовался в качестве Url узла ВHttp, для заполнения свойства Url следует использовать соответствующий реквизит.
В свойствах узла ВHttp, в поле Url кликните на символ fx. В выпадающем меню выберите свойство участника Url:

В свойстве Метод кликните на символ выпадающего списка и выберите POST:

НаFtp
Для узла НаFtp следует задать следующие свойства:
- ИмяПользователя,
- Пароль,
- Хост,
- Каталог,
- ДействиеНадСуществующимФайлом,
- ВыборИмени.
Для того чтобы иметь возможность задавать и менять ИмяПользователя, Пароль и Хост в панели управления приложения, данные свойства следует заполнить параметрами. Так как у каждого партнера, использующего FTP-сервер для получения прайс-листов, на сервере создан индивидуальный каталог, указанный в реквизите Каталог справочника ИнформационныеСистемы, свойство Каталог следует заполнить реквизитом Каталог с помощью выпадающего при нажатии fx меню.
Задайте свойства узла следующим образом. Укажите:
- опцию Перезаписывать в свойстве ДействиеНадСуществующимФайлом;
- параметр ИмяПользователяFtp в свойстве ИмяПользователя;
- параметр ПарольFtp в свойстве Пароль;
- параметр ХостFtp в свойстве Хост;
- свойство участника Каталог в свойстве Каталог.


Теперь задайте обработчик ВыборИмени. Этот обработчик предназначен для того, чтобы вы могли переопределить значение свойства Имя файла — имя файла, в которое будет записано сообщение.
В поле ВыборИмени впишите название метода — ВыборИмени. Затем нажмите на плюс:

Откроется модуль процесса интеграции. «1С:Шина» автоматически создаст нужную сигнатуру метода:
метод ВыборИмени(Контекст: МаршрутизацияСообщений.КонтекстВызова,
Сообщение: МаршрутизацияСообщений.Сообщение): Строка
// TODO Вставить содержимое обработчика
возврат ""
;
В методе обработчика напишите следующий код:
метод ВыборИмени(Контекст: МаршрутизацияСообщений.КонтекстВызова,
Сообщение: МаршрутизацияСообщений.Сообщение): Строка
возврат "Price_list_%{ДатаВремя.Сейчас().Представление("гггг_ММ_дд_ЧЧ_мм_сс")}.zip"
;
Данный обработчик будет возвращать имя файла, состоящее из строки Price_list и времени его публикации на FTP-сервере.
Таким образом, для каждого сообщения, которое попадет в узел НаFtp, будет формироваться файл с названием, включающим в себя текущую дату и время с точностью до миллисекунд. Если вдруг случится так, что два сообщения придут в одну и ту же миллисекунду в один и тот же каталог, то предыдущее сообщение будет удалено, а на его место будет записано новое. Такая механика реализуется благодаря тому, что ранее в свойстве ДействиеНадСуществующимФайлом вы установили опцию Перезаписывать.
Публикация и открытие приложения
Чтобы опубликовать и открыть приложение, выполните следующие действия:
-
Нажмите Ctrl+F5. Сервер запросит имя пользователя и пароль. Для аутентификации используйте учетную запись администратора и пароль, который вы создали при установке сервера.
-
После успешной авторизации вы увидите приложение, а в нем — список существующих процессов интеграции. В примере это будет единственный процесс интеграции МаршрутизацияСообщений:
