Перейти к основному содержимому

Создание проекта в среде разработки

Создание нового проекта

совет

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

На этом этапе вы создадите в среде разработки «1С:Шины» приложение и добавите в него процесс интеграции.

  1. Создайте новое приложение с СУБД типа Postgres и откройте его в режиме разработки.
  2. Добавьте новый элемент проекта — процесс интеграции. Назовите его МаршрутизацияСообщений и установите для его свойства СправочникУчастников значение ИнформационныеСистемы.

«1С:Шина» создаст в проекте новый процесс интеграции и откроет редактор для создания его схемы.

Описание схемы процесса интеграции

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

Вы можете создать ее самостоятельно или воспользоваться готовым примером из YAML-файла ниже и перейти к следующему разделу.

Пример YAML-файла процесса интеграции
ВидЭлемента: ПроцессИнтеграции
ОбластьВидимости: ВПодсистеме
Ид: 41c3efc8-c191-43c0-9ae5-0b82c5183636
Имя: МаршрутизацияСообщений
СправочникУчастников: e1c::ОбменСМаршрутизацией::Основной::ИнформационныеСистемы
Схема:
ГруппыУчастников:
-
Ид: 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
ЗадержкаПереподключения:
ИспользоватьИмяФайлаБезПути: Ложь
КодировкаИменФайлов: 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. Добавьте на схему группу участников. Для этого в редакторе компонента МаршрутизацияСообщений в палитре узлов выберите ГруппаУчастников и кликните в верхней части схемы, чтобы разместить там группу. Кликните по узлу два раза и задайте имя — ИБ:

    Добавление узла «ГруппаУчастников»

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

    Добавление узла «Канал1СИсточник»

  3. Аналогичным образом добавьте на схему узлы:

    • МаршрутизаторПоСодержимому — задайте имя ВыборСпособаДоставки;
    • Транслятор — задайте имя Xml2Json;
    • Транслятор — задайте имя Xml2Zip;
    • Http — задайте имя ВHttp;
    • FtpНазначение — задайте имя НаFtp;
    • ГруппаУчастников — задайте имя Партнеры.

    Расположите узлы на схеме следующим образом:

    Добавление узлов на схему

    Следующим шагом следует обозначить на схеме маршруты и связи.

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

    Добавление связей

  5. Затем с помощью элемента Маршрут соедините:

    • Узел ИзБазы с узлом ВыборСпособаДоставки;
    • Узел ВыборСпособаДоставки с узлом Xml2Json;
    • Узел ВыборСпособаДоставки с узлом Xml2Zip;
    • Узел Xml2Json с узлом ВHttp;
    • Узел Xml2Zip с узлом НаFtp.

    Добавление маршрутов

Создание перечисления для выбора способа доставки

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

  1. Добавьте элемент проекта Перечисление. Задайте имя СпособДоставки.

  2. Добавьте в перечисление два элемента: HTTP и FTP:

    ВидЭлемента: Перечисление
    Ид: 73520a6b-a8ca-4cdc-b3b4-0bbf8604f8c6
    Имя: СпособДоставки
    ОбластьВидимости: ВПодсистеме
    Элементы:
    -
    Ид: a1b02dcd-8b92-4e5e-b040-0620a405322d
    Имя: HTTP
    -
    Ид: 44a05b0f-f4ea-445e-b234-01524fc7d57a
    Имя: FTP

Добавление реквизитов в справочник информационных систем

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

  1. Добавьте новый реквизит справочника ИнформационныеСистемы с именем Url и типом Строка.

  2. Аналогичным образом добавьте реквизиты Каталог типа Строка и СпособДоставки типа СпособДоставки|Неопределено:

    Реквизиты справочника информационных систем

Создание параметров процесса интеграции

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

Для того чтобы иметь возможность задавать в панели управления имя пользователя, пароль и хост FTP-сервера, создайте три параметра процесса интеграции:

  • ИмяПользователяFtp,
  • ПарольFtp,
  • ХостFtp.

Параметры процесса интеграции

Задание свойств узлов схемы

Следующим шагом следует задать свойства для узлов.

ВыборСпособаДоставки

Для узла ВыборСпособаДоставки следует задать обработчик события ВыборПолучателей:

  1. В панели свойств нажмите на плюс в поле ВыборПолучателей:

    Добавление обработчика для узла «ВыборСпособаДоставки»

  2. Откроется модуль процесса интеграции. «1С:Шина» автоматически создаст нужную сигнатуру метода и назначит его в качестве обработчика. Для метода автоматически генерируется название по схеме ИмяЭлемента + ТипОбработчика, но при необходимости можно ввести название обработчика вручную:

    Автоматически сгенерированный обработчик
    метод ВыборСпособаДоставкиВыборПолучателей(Контекст: КонтекстВызоваИнтеграции, 
    Сообщение: МаршрутизацияСообщений.Сообщение): Коллекция<УзелСхемыИнтеграции>

    // TODO Вставить содержимое обработчика
    возврат []
    ;

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

  3. В методе обработчика напишите следующий код:

    метод ВыборПолучателей(Контекст: КонтекстВызоваИнтеграции,
    Сообщение: МаршрутизацияСообщений.Сообщение): Коллекция<УзелСхемыИнтеграции>

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

Чтобы задать обработчик события Преобразование:

  1. Выберите узел Xml2Json.

  2. В панели свойств в поле Преобразование впишите название метода — ПреобразованиеJson. Затем нажмите на плюс:

    Добавление обработчика для узла «ПреобразованиеJson»

  3. Откроется модуль процесса интеграции. «1С:Шина» автоматически создаст нужную сигнатуру метода:

    метод ПреобразованиеJson(Контекст: КонтекстВызоваИнтеграции, 
    Сообщение: МаршрутизацияСообщений.Сообщение): СообщениеИнтеграции

    // TODO Вставить содержимое обработчика, формирующего новое сообщение интеграции с преобразованным телом.
    возврат Сообщение
    ;
  4. Напишите следующий код:

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

    Метод Xml2Json() удобно задать в общем модуле.

  5. В навигаторе проекта добавьте элемент проекта Общий модуль с именем ОбщиеМетоды (подробнее):

    Общий модуль

  6. Напишите в модуле следующий код:

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

Xml2Zip

Прежде чем разместить сообщение на FTP-сервере в узле НаFtp необходимо преобразовать тело сообщения в ZIP-формат. Чтобы выполнить такое преобразование, используйте узел вида Транслятор Xml2Zip. Трансформация сообщения будет происходить в обработчике Преобразование.

  1. В поле Преобразование впишите название метода — ПреобразованиеZip. Затем нажмите на плюс:

    Добавление обработчика для узла «ПреобразованиеZip»

  2. Откроется модуль процесса интеграции. «1С:Шина» автоматически создаст нужную сигнатуру метода:

    метод ПреобразованиеZip(Контекст: КонтекстВызоваИнтеграции, 
    Сообщение: МаршрутизацияСообщений.Сообщение): СообщениеИнтеграции

    // TODO Вставить содержимое обработчика, формирующего новое сообщение интеграции с преобразованным телом.
    возврат Сообщение
    ;
  3. Напишите следующий код:

    метод ПреобразованиеZip(Контекст: КонтекстВызоваИнтеграции, 
    Сообщение: МаршрутизацияСообщений.Сообщение): СообщениеИнтеграции
    исп Поток = новый ВременныйПотокЗаписи()
    пер ЗаписьZip = новый ЗаписьZip(Поток)
    ЗаписьZip.Добавить(Сообщение.ПолучитьТелоКакПоток(), "Сообщение")
    ЗаписьZip.Записать()
    исп НовоеТело = Поток.ОткрытьПотокЧтения()
    возврат Сообщение.УстановитьТелоИзПотока(НовоеТело)
    ;

ВHttp

Когда сообщение попадает в узел ВHttp, оно отправляется POST-запросом на HTTP-сервис партнера. Для данного узла следует задать следующие свойства: Url и Метод.

примечание

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

У каждого партнера есть свой собственный адрес HTTP-сервиса. Этот адрес будет находиться в реквизите Url справочника ИнформационныеСистемы. Таким образом, для того чтобы этот адрес автоматически использовался в качестве Url узла ВHttp, для заполнения свойства Url следует использовать соответствующий реквизит.

В свойствах узла ВHttp, в поле Url кликните на символ fx. В выпадающем меню выберите свойство участника Url:

Выбор свойства участника для узла «ВHttp»

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

Выбор метода для узла «ВHttp»

НаFtp

Для узла НаFtp следует задать следующие свойства:

  • ИмяПользователя,
  • Пароль,
  • Хост,
  • Каталог,
  • ДействиеНадСуществующимФайлом,
  • ВыборИмени.

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

Задайте свойства узла следующим образом. Укажите:

  • опцию Перезаписывать в свойстве ДействиеНадСуществующимФайлом;
  • параметр ИмяПользователяFtp в свойстве ИмяПользователя;
  • параметр ПарольFtp в свойстве Пароль;
  • параметр ХостFtp в свойстве Хост;
  • свойство участника Каталог в свойстве Каталог.

Задание свойств узла «НаFtp» 1

Задание свойств узла «НаFtp» 2

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

В поле ВыборИмени впишите название метода — ВыборИмени. Затем нажмите на плюс:

Задание обработчика для выбора имени

Откроется модуль процесса интеграции. «1С:Шина» автоматически создаст нужную сигнатуру метода:

метод ВыборИмени(Контекст: МаршрутизацияСообщений.КонтекстВызова, 
Сообщение: МаршрутизацияСообщений.Сообщение): Строка

// TODO Вставить содержимое обработчика
возврат ""
;

В методе обработчика напишите следующий код:

метод ВыборИмени(Контекст: МаршрутизацияСообщений.КонтекстВызова, 
Сообщение: МаршрутизацияСообщений.Сообщение): Строка
возврат "Price_list_%{ДатаВремя.Сейчас().Представление("гггг_ММ_дд_ЧЧ_мм_сс")}.zip"
;

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

Таким образом, для каждого сообщения, которое попадет в узел НаFtp, будет формироваться файл с названием, включающим в себя текущую дату и время с точностью до миллисекунд. Если вдруг случится так, что два сообщения придут в одну и ту же миллисекунду в один и тот же каталог, то предыдущее сообщение будет удалено, а на его место будет записано новое. Такая механика реализуется благодаря тому, что ранее в свойстве ДействиеНадСуществующимФайлом вы установили опцию Перезаписывать.

Публикация и открытие приложения

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

  1. Нажмите Ctrl+F5. Сервер запросит имя пользователя и пароль. Для аутентификации используйте учетную запись администратора и пароль, который вы создали при установке сервера.

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

    Открытое приложение