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

Содержание:

Внешние информационные системы могут подключаться к 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С:Управление производственным предприятием»
ОАО «Издательство «Просвещение»

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

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

Бухгалтерский учет:
- Завершение периода;
- Регламентированная отчетнос...

АО "Нижегородский водоканал"
АО "Нижегородский водоканал"

Отрасль:
Профессиональные услуги

Внедренное типовое решение:
1С:Зарплата и управление персоналом 8. КОРП

-Кадровый учет
-Расчет зарплаты
-Регламентированная отчетность
-Подбор ...

ООО "АСТАРМЕДИКА КЛИНИКА МИКРОХИРУРГИИ ГЛАЗА"
ООО "АСТАРМЕДИКА КЛИНИКА МИКРОХИРУРГИИ ГЛАЗА"

Отрасль:
Деятельность больничных организаций

Внедренное типовое решение:
БИТ:Управление медицинским центром 8

- Управление отношениями с клиентами (CRM)
- Делопроизводство
- Ведение но...

Внедрение ПП "1С:Управление небольшой фирмой 8 ПРОФ" в ООО «Шокостайл»
ООО «Шокостайл»

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

Внедренное типовое решение:
1С:Управление небольшой фирмой 8 ПРОФ

Управление продажами, логистикой и транспортом (SFM, WMS, TMS):
- Планирование п...

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

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

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

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

Внедрение ПП "1С:Бухгалтерия 8 ПРОФ" в ООО «Союз Три» (Кондитерский дом Renardi)
ООО «Союз Три»

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

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

Бухгалтерский учет
- Банк и касса
- Расчеты с контрагентами
Налоговый ...

ООО «ЛИГА-ТРАНС»
ООО «ЛИГА-ТРАНС»

Отрасль:
Профессиональные услуги, бытовое обслуживание

Внедренное типовое решение:
«1С:ERP Управление предприятием 2.1».

- Сделано ТЗ по автоматизации учета МСФО: - Разработана карта бюджета доходо...

ХИТЕК-ГРУП
ХИТЕК-ГРУП

Отрасль:
Продажа парикмахерского инструмента и аксессуаров

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

Документооборот (ECM)
• Делопроизводство
Управление бизнес-процессами и И...

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

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

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

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

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

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

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

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

ФГУП «Почта России»
ФГУП «Почта России»

Отрасль:
Почта, доставка

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

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

ООО «ПраксисКом»
ООО «ПраксисКом»

Отрасль:
Аутсорсинг бухгалтерских услуг

Внедренное типовое решение:
1С:Управление небольшой фирмой 8 ПРОФ

- Взаиморасчеты с поставщиками
- Учет прихода ТМЦ
- Взаиморасчеты с поку...

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

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

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

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