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

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

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

совет

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

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

  • Откройте панель управления.

  • Нажмите Приложения+ Новое приложение:

  • Убедитесь, что выбраны варианты Из проекта и Новый проект:

  • Укажите поставщика, представление, имя и версию проекта. «1С:Шина» заполнит остальные поля и включит режим разработки для создаваемого приложения:

  • Выберите тип СУБД и нажмите Создать:

  • Новое приложение появится в списке со статусом Создается. Через некоторое время статус приложения изменится на Работает:

Добавление элемента проекта вида «Процесс Интеграции»

На данном этапе вы откроете приложение в среде разработки и добавите в него элемент проекта — «Процесс Интеграции».

  • Чтобы открыть проект в среде разработки, нажмите Разработать... в конце строки:

  • «1С:Шина» откроет новую вкладку браузера для среды разработки и запросит пароль. Введите пароль администратора, который вы создали при установке сервера, и нажмите Войти:

  • «1С:Шина» подготовит рабочую область, построит проект и откроет его в среде разработки:

  • Добавьте новый элемент проекта — процесс интеграции. Для этого в представлении НАВИГАТОР ПРОЕКТА нажмите правой кнопкой мыши Основной, затем в контекстном меню выберите НовыйЭлемент проекта:

  • Выберите вид добавляемого элемента проекта — Процесс Интеграции:

  • Задайте имя элемента — МаршрутизацияСообщений — и нажмите Ввод:

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

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

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

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

Затем сообщения будут поступать в узел вида МаршрутизаторПоСодержимому «ВыборСпособаДоставки». Данный узел предназначен для того, чтобы определять, в какие узлы из тех, что идут непосредственно за ним, должны попасть сообщения. Для этого у узла есть событие ОбработчикОпределенияПолучателей, в котором вы пропишете специальный метод. Внутри данного метода вы будете находить нужного получателя в справочнике InformationSystems и, в зависимости от значения реквизита получателя «СпособДоставки», направлять сообщение в один из следующих узлов.

На следующем этапе сообщение попадет в один из узлов вида Транслятор: «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

Создание расширения справочника «InformationSystems»

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

  • Кликните правой кнопкой мыши на процесс интеграции в навигаторе проекта, выберите НовыйСправочник информационные системы:

  • В проекте будет создано расширение справочника InformationSystems:

  • Чтобы добавить новый реквизит, правой кнопкой мыши клините на справочник InformationSystems, выберите НовыйРеквизит:

  • Задайте имя — «URL», и нажмите Ввод:

  • Во вкладке Реквизиты отобразится новый реквизит:

  • В свойствах реквизита задайте тип — Строка:

  • Аналогичным образом добавьте реквизиты «Каталог» и «СпособДоставки». Задайте реквизиту «Каталог» тип Строка, а реквизиту «СпособДоставки» — тип СпособДоставки | Неопределено:

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

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

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

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

Для этого:

  • Во вкладке процесса интеграции «МаршрутизацияСообщений» правой кнопкой мыши кликните на Параметры, выберите НовыйПараметр:

  • Задайте параметру имя ИмяПользователяFtp и нажмите Ввод:

  • Аналогичным образом создайте оставшиеся два параметра: ПарольFtp и ХостFtp. Созданные параметры отобразятся во вкладке Параметры:

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

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

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

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

  • Нажмите на лупу в поле ВыборПолучателей:

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

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

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

// Предполагается, что каждое сообщение обязательно содержит код одного получателя.
// Сообщения без указанного получателя будут отправлены в канал недоставленных сообщений.
выбор Сообщение.Получатели.ЕдинственныйИлиУмолчание()?.СпособДоставки
когда 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(Контекст: КонтекстВызоваИнтеграции, 
    Сообщение: МаршрутизацияСообщений.Сообщение): СообщениеИнтеграции
    исп СтароеТело = Сообщение.ПолучитьТелоКакПоток()
    пер Читатель = новый ЧтениеXml(СтароеТело)
    исп Поток = новый ВременныйПотокЗаписи()
    пер Писатель = новый ЗаписьJson(Поток)
    ОбщиеМетоды.Xml2Json(Читатель, Писатель) // Метод Xml2Json будет задан в общем модуле «ОбщиеМетоды»
    исп НовоеТело = Поток.ОткрытьПотокЧтения()
    возврат Сообщение.УстановитьТелоИзПотока(НовоеТело)
    ;

Метод Xml2Json() удобно задать в общем модуле. Далее вы создадите общий модуль и пропишете в нем соответствующий метод:

  • Кликните правой кнопкой мыши на подсистему Основной, затем выберите НовыйЭлемент проектаОбщий модуль:

  • Задайте имя — ОбщиеМетоды и нажмите Ввод:

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

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

Xml2Zip

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

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

  • «1С:Шина» автоматически создаст нужную сигнатуру метода:

  • Напишите следующий код:

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

ВHttp

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

примечание

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

У каждого партнера есть свой собственный адрес HTTP-сервиса. Этот адрес будет находиться в реквизите URL справочника InformationSystems. Таким образом, для того чтобы этот адрес автоматически использовался в качестве Uri узла «ВHttp», для заполнения свойства Uri следует использовать соответствующий реквизит.

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

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

НаFtp

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

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

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

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

  • Параметр ИмяПользователяFtp в свойстве ИмяПользователя;
  • Параметр ПарольFtp в свойстве Пароль;
  • Параметр ХостFtp в свойстве Хост;
  • Свойство участника Каталог в свойстве Каталог.

Следующим шагом задайте свойство ДействиеНадСуществующимФайлом. Кликните на символ выпадающего списка и выберите опцию Перезаписывать:

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

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

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

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

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

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

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