21.12.2023 Андрей Прыкин 6984
Реализация кода отправки и получения сообщени...

Содержание:

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


Далее рассматривается пример настройки обмена данными между приложением на платформе Node.js и 1С: Шиной. Подключение к очереди 1С: Шины и отправка в неё сообщений будет осуществляться программно на языке JavaScript.    


1.     Проект в 1С: Шина

 

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

1.   Переходим на панель управления сервера;

2.   Кликаем «Приложения» и «Новое приложение», как показано ниже:



Новое приложение


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



Проверяем заполнение


4.   Задаём имя проекта — ОбменAMQP и нажимаем «Tab». Система сама заполнит остальные поля и включит режим разработки для создаваемого приложения, как на скриншоте ниже:



Задаём имя проекта


5.   Выбираем тип СУБД и кликаем по «Создать»:



Выбираем тип СУБД


6.   Новое приложение появится в списке и поменяет статус на «Работает»:



Статус «Работает»    


2.     Элемент «Процесс Интеграции» и схема процесса интеграции в конфигурации системы 1С: Шина

 

Теперь нужно открыть приложение в среде разработки и добавить в него элемент проекта — процесс интеграции, для этого:

1.   Кликаем «Разработать...» в конце строки:



Разработать


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



Войти


3.   Появится рабочая область и откроется проект:



Рабочая область


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



Элемент проекта


5.   Выбираем вид добавляемого элемента проекта:



Выбираем вид добавляемого элемента проекта


6.   Задаём имя создаваемого элемента — «ОбменТиповой» — и нажимаем «Ввод»:



Задаём имя создаваемого элемента


7.   Система создаст в проекте новую интеграцию и откроет редактор:



Новая интеграция 


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



Схема интеграции


Эта схема включает в себя одну группу участников: «Приложения». В эту группу позже, после публикации проекта, будет добавлена одна информационная система, написанная на языке JavaScript.


Для участника из группы, связанной с узлом вида «Канал1СНазначение» и «Канал1СИсточник», в 1С: Шина создаются две индивидуальные очереди: для отправки и получения. Приложение подключается к очередям по протоколу AMQP. После того как сообщение отправлено приложением, оно попадает в узел «Канал1СНазначение», где, дойдя до узла «ФайлНазначение», записывается в файл.


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

1.  Добавляем на схему группу участников. Для этого выбираем «ГруппаУчастников» и кликаем в верхней части схемы, чтобы разместить там группу:



ГруппаУчастников


2.   Выделяем группу и в представлении «СВОЙСТВА» задаём её имя:



СВОЙСТВА


3.   Добавляем на схему узел «Канал1СИсточник» и задаём имя:



Канал1СИсточник


4.   Добавляем на схему узел «ФайлНазначение»:



ФайлНазначение


5.   Аналогично добавляем на схему узлы «Канал1СНазначение» и «ФайлИсточник» и задаём первому имя:



«Канал1СНазначение» и «ФайлИсточник»


6.   Связываем группу участников «Приложение» с узлами «ИзПриложения» и «ВПриложение» элементом «Связь»:



Связь


7. Следующим шагом соединяем маршрутом узел «ИзПриложения» с узлом «ФайлНазначение», а также «ФайлИсточник» с узлом «ВПриложение»:



Соединяем маршрутом узел 


8.   Для узла «ФайлИсточник» зададим свойства: Каталог и Имя файла:



Узел «ФайлИсточник» 


9.   Для узла «ФайлНазначение» зададим также свойства: Каталог и Имя файла:



Узел «ФайлНазначение» 


10.  В поле «Существующий файл» кликаем на выпадающий список и выбираем «Дописывать»:



Дописывать


11.  После того как проект готов, его следует опубликовать на сервере таким образом:



Проект готов



Публикуем на сервер


12.  Открываем готовое приложение:



Открываем готовое приложение


13.  Для аутентификации выбираем и вводим учётку администратора:



Вводим учётку администратора


14.  Появится приложение, которое содержит перечень процессов интеграции:



Перечень процессов интеграции    


3.     Настройки приложения и панели управления 1С

 

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

1.   Открываем приложение;

2.   Кликаем «Инфосистемы» и «Добавить систему»:



Добавить систему


3.   Задаём код системы — «П1» и наименование — «Приложение», кликаем «Добавить»:



Задаём код системы


4.   В справочнике: Информационные системы появится созданный участник:



Созданный участник


5.   Теперь нужно получить ключ, для этого, нажимаем на информационную систему, а затем на «Выдать ключ API»:



Выдать ключ API


6.   Копируем и сохраняем «Идентификатор ключа» и «Секрет клиента»:



«Идентификатор ключа» и «Секрет клиента»


7.   Переходим на вкладку «Процессы» и кликаем на «Основной::ОбменТиповой»:



Основной::ОбменТиповой


8.   На схеме выбираем группу «Приложения», а затем «Состав группы»:



Состав группы


9.   Появится  список  информационных  систем,  входящих  в  группу  «Приложения».  Сейчас  в  группе нет ни одной информационной системы. Ставим «галочку» у информационной системы «Приложение» и нажмите «Добавить в группу»:



Добавить в группу



Состав группы Приложения


10.  Закрываем окно «Состав группы Приложения».    


4.     Подключение к 1С: Шина по протоколу AMQP и проверка работы

 

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

let application = НАЗВАНИЕ_ПРИЛОЖЕНИЯ;

let id_key = ИДЕНТИФИКАТОР_КЛЮЧА;

let client_secret = СЕКРЕТ_КЛИЕНТА;

let hostname = ИМЯ_ХОСТА;

let port = ПОРТ; // Впишите имя порта

let protocol = ПРОТОКОЛ; // Впишите протокол


Замечание: Название приложения можно найти в URL-адресе самого приложения так:



Найти Название приложения


Теперь нужно аутентифицировать информационную систему и получить токен, после чего с полученным токеном обратиться к серверу 1С: Шины и подключиться к очереди, в которую приложение будет отправлять сообщения, для этого, напишем следующее:

// Отправка запроса к серверу на получение токена

let request = require('request');

let cookie_jar = request.jar();

let requestic = request.defaults({ jar: cookie_jar });

const base64data = Buffer.from("${id_key}:${client_secret}', 'utf8').toString("base64');

requestic.post({

url: ${protocol}://${hostname}:${port}/auth/oidc/token",

headers: {

"Content-Type": "application/x-www-form-urlencoded", "Authorization": "Basic " + base64data

},

body: 'grant_type=client_credentials', json: false

}, authenticationHandler);

 

// Обработка результатов аутентификации, получение имени очереди для подключения function authenticationHandler(_err, _httpResponse, body) {

const jbody = JSON.parse(body);

const id_token = jbody.id_token;

 

request1c.get({

url: `${protocol}://${hostname}:${port}/applications/${application}/sys/esb/runtime/channels`,

headers: {

'Authorization': 'Bearer' + id_token

},

body: '',

json: false,

},

function (_err, httpResponse, body) {

const parsed_body = JSON.parse(body)

const sender = parsed_body.items[0].destination

const receiver = parsed_body.items[1].destination

 

connectQueue(id_token, sender, receiver)

}

}

}


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

// Подключение к очереди

function connectQueue(id_token, senderDestination, receiverDestination) {

const amqpuri = require('amqpuri');

// формирование URI для подключения к очереди

const uri = amqpuri.format({

hostname: hostname,

port: 6698,

vhost: "/applications/${application)",

username: id_token,

password: id_token,

frameMax: 1000000,

channelMax: 7000,

heartbeat: 600e,

locale: 'en_EN'

});

let AMQPClient = require('amqple').client;

const activeMQPolicy = require("amqple").Policy;

let queueclient = new AMQPClient(activeMQPolicy.ActiveMQ); // Uses PolicyBase default policy

 

// Данную строку следует раскомментировать, если возникнут ошибки, связанные со spread

// Promise = require('bluebird')

// Переменная-счетчик

 

let count=0;

 

// Создание соединения с очередями сообщений

 

queueClient.connect(uri, { 'saslMechanism': 'PLAIN' }).then(function () {

return Promise.all([

queueClient.createReceiver(receiverDestination),

queueClient.createSender (senderDestination)

]);

})

 

// Обработка полученных сообщений

.spread(function (receiver, sender) {

receiver.on('message', function (message) {

console.log('Message received: ', message.body.toString('utf8'));

});

receiver.on('errorReceived', function (err) {

console.log('errorReceived:', err);

});

receiver.on('error', function (error) {

console.log('Error: ', error);

});

 

// Отправка сообщений с интервалом в 10 секунд

setInterval(() => {

count++

let request = {

body: new Buffer.from(`Сooбшение номер: ${сount} \n`),

header: { durable: true }

};

sender.send(request);

}, 10000);

}

)

 

.error(function (err) {

console.log("Error: ", err);

});

}


Чтобы запустить скрипт, предварительно необходимо установить программную платформу «Node.js».


Запускаем процесс интеграции, для этого переходим на страницу приложения и на карточке процесса интеграции нажимаем на иконку запуска, как показано в примере далее:



Запускаем процесс интеграции


Теперь мы можем отправить сообщение в 1С: Шину. Скачиваем архив с проектом и извлекаем его.


Открываем файл «application.js», чтобы его открыть, можно задействовать текстовый редактор, либо интегрированную среду разработки.    Вписываем значения переменных, как показано на примере кода:

let application = 'APPLICATION_NAME'; // Bпишите имя приложения

let id_key = 'ID_KEY'; // Впишите идентификатор ключа

let client_secret = 'CLIENT_SECRET'; // впишите секрет клиента

let hostname = 'HOST_NAME'; // впишите имя Xоста

let port = 'PORT'; // впишите имя порта

let protocol = 'PROTOCOL'; // впишите протокол

 

Сохраняем.


После этого, открываем командную строку и переходим в папку, в которой содержатся файлы «package.json» и «application.js»:

cd amqp


Затем установим все необходимые библиотеки, которые будут использоваться для запуска скрипта «application.js». Чтобы их установить, выполняем в командной строке:

npm install

И запускаем скрипт:

node application.js


Открываем приложение 1С: Шина, счётчик сообщений увеличился, как показано в примере:



Счетчик сообщений


Кликаем на карточку процесса интеграции и переходим во вкладку «Каналы». Два сообщения, которые были отправлены из скрипта в канал «ИзПриложения», были доставлены к получателю:



Каналы


Чтобы это проверить, открываем файл «СообщенияИзШины.txt», там будет:

Сообщение номер: 1

Сообщение номер: 2


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



Сообщение попало в канал «ВПриложение»


Обращаемся к командной строке, в которой запущен скрипт, кликаем «Ввод», видим полученное сообщение:

PS C:\Users\amqp\ node applicastion.js

Message received : Сообщение, отправленное в приложение


Специалист компании ООО "Кодерлайн"

Андрей Прыкин

 

Наши проекты

ООО «Лаборатория успеха»
ООО «Лаборатория успеха»

Отрасль:
Общественное и плановое питание, гостиничный бизнес, туризм

Внедренное типовое решение:
1С:Управление холдингом 8

Бухгалтерский учет;
Расчет зарплаты и кадровый учет;...

Фармацевтическое предприятие «Оболенское»
АО «Фармацевтическое предприятие «Оболенское»

Отрасль:
Фармацевтическая промышленность

Внедренное типовое решение:
1С:Управление производственным предприятием

- Адаптации блоков/подсистем планирования продаж, закупок и казначейства. ...

Внедрение ПП "1С:Корпоративный инструментальный пакет 8" в ООО «Торговый Дом Факел»
ООО «Торговый Дом Факел»

Отрасль:
Производство

Внедренное типовое решение:
1С:Предприятие 8. ERP Управление предприятием 2

Различная отраслевая специфика:
- Переработка давальческого сырья
- Уче...

СТС-Медиа
СТС-Медиа

Отрасль:
Медиаиндустрия

Внедренное типовое решение:
1С:Управление холдингом

- Бухгалтерский учет;
- Налоговый учет;
- МСФО (GAAP/управленческий учет);
- ...

ПЭК
ПЭК

Отрасль:
Грузоперевозки

Внедренное типовое решение:
1С:Зарплата и управление персоналом

- Перевод зарплатных баз с версии ЗУП 2.5 на версию ЗУП 3.1.
- Сопровождение в п...

Внедрение 1С:Управление торговлей
ООО «Амперсенд»

Отрасль:
Оптовая торговля

Внедренное типовое решение:
1С:Управление торговлей

- Оформление заказов поставщикам;
- Управление отношениями с поставщиками;...

ЗАО «Многопрофильная формирующая авиагруппа» (ЗАО МФГ)
ЗАО «Многопрофильная формирующая авиагруппа» (ЗАО МФГ)

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

Внедренное типовое решение:
1С:Бухгалтерия ПРОФ

- Финансы, управленческий учет, мониторинг показателей
- Бухгалтерский уче...

Автоматизация интеграции с информсистемами клиентов на базе «1С:Предприятие 8. WMS Логистика. Управление складом»
ОАО «Фрейт Линк»

Отрасль:
Логистика и грузоперевозки

Внедренное типовое решение:
«1С:Предприятие 8. WMS Логистика. Управление складом»

– Управление складскими запасами;
– Оформление заказов покупателей;
– ...

ОАО «Фаберлик»
ОАО «Фаберлик»

Отрасль:

Внедренное типовое решение:
1С:ERP. Управление производственным предприятием 2

- Регламентированный учет;
- Кадровый учет;...

Внедрение системы финансового учета БИТ:Финанс
ООО «Алькор и Ко» (Л’Этуаль)

Отрасль:
Торговля

Внедренное типовое решение:
БИТ.Финанс

- Финансовый учет;
- Поддержка проекта внедрения МСФО;
- Регламентные рабо...

Автоматизация складских операций на базе «1С:Предприятие 8. WMS Логистика. Управление складом»
ОАО «Фрейт Линк»

Отрасль:
Логистика и грузоперевозки

Внедренное типовое решение:
1С:Управление холдингом

Реализовали разработку уникального модуля «Интернет-магазины» на базе прог...

ФГОУ ВПО «Горский государственный аграрный университет»
ФГОУ ВПО «Горский государственный аграрный университет»

Отрасль:
Образование

Внедренное типовое решение:
1С:Колледж ПРОФ

- Управление персоналом и кадровый учет (HRM):
Кадровый учет
Управление об...

Наши соц. сети

Telegram-канал «Koderline 1С» Группа в Вконтакте «Кодерлайн КОРП» Rutube

Остались вопросы - обратитесь к нам!

Впишите свои Имя и Телефон, чтобы мы ответили на все интересующие Вас вопросы.
ФИО*
E-mail*
Телефон*
Сообщение