Обмен данными между базами 1С посредством передачи сообщений

12.07.22

Интеграция - Обмен между базами 1C

Разбор примера демо-реализации группового чата с использованием стороннего сервиса. Цель, - знакомство с некоторыми функциями платформы DESP. Вопросы эффективности и безопасности не затрагиваются. Исполняемый код серверной части платформы не представлен в данной публикации, но выполняется в "облаке", в демо-режиме.

Скачать файлы

Наименование Файл Версия Размер
dt-файл Демо-база - групповой чат
.dt 338,17Kb
0
.dt 1.0 338,17Kb Скачать

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

Реализован групповой "чат", имеющий минимальный функционал:

- просмотр последних сообщений и имена их авторов;

- отправку новых сообщений;

Для демонстрации результатов можно запустить несколько экземпляров ИБ одновременно, наблюдая передачу данных между ними.

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

Реализация

Демонстрационная база содержит основную конфигурацию, собственно где и реализована общая форма "чат", в которой описана вся его специфичная логика, взаимодействуя с библиотечными функции платформы DESP, для отправки и получения сообщений.

Платформа DESP состоит из ядра сервиса (brake), написано на Go. Реализует такие механизмы как:

- Получение, хранение, отдачу сообщений посредством вызова RPC-методов ядра платформы (JSON-RPC 2.0);

- Вызов удаленных процедур (RPC), реализованных на JavaScript, расположенных на сервере;

- Вызов удаленных процедур (RPC), реализованных в "подключенных" к DESP базах 1С (на языке 1С, при этом публиковать http- или web-сервисы не требуется);

- Доступ к хранилищу ключ-значение;

- Контроль доступа к RPC и очередям сообщений, посредством ключа авторизации;

- Параметризация "длинны" очереди сообщений (по двум характеристикам: максимальный размер в байтах и максимальная длительность хранения сообщения, задается на стороне конфигурации сервера desp);

- Регистрация измененных объектов в очереди для дальнейшей сериализации и отправки в одну из очередей, правила "конвертации" описываются программным кодом ("алгоритмом", программный код 1С);

- Чтение очереди и десериализация объектов по правилам ("алгоритмам", программный код 1С);

- Минимальный мониторинг состояния очередей, рабочих потоков 1С исполнения PRC-методов;

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

Та часть подсистемы DESP, которая реализуется на стороне базы 1С представлена:

  1. "Библиотечным" расширением "DESP" (минимальная требуемая версия платформы 1С - 8.3.17, не предполагает изменений при реализации бизнес-задач), содержит процедуры/функции для простого использования основных возможностей платформы;
  2. Дополнительным расширением "DESP_config", содержащим:
    1. Параметры подключения к серверу brake (ядро платформы DESP): адрес, порт, ключ авторизации;
    2. Программный код и конфигурацию реализованных методов RPC в базе 1С;
    3. Программный код для интерпретации сообщений чтения сообщений.
Чат

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

 

 

Логика взаимодействия:

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

&НаКлиенте
Перем idКрайнегоСообщения;

&НаКлиенте
Процедура ПриОткрытии(Отказ)
    ГСЧ = Новый ГенераторСлучайныхЧисел();
    МоеИмя = "Аноним_"+ГСЧ.СлучайноеЧисло(1,999);
    ОбновитьIdПервогоСообщенияДляЧтения();
    ПрочитатьНовыеСообщения();
    ПодключитьОбработчикОжидания("ПрочитатьНовыеСообщения", 1, Ложь);
КонецПроцедуры

Код процедуры получения номера сообщения, с которого нужно будет начать отображение на форму:

&НаКлиенте
Процедура ОбновитьIdПервогоСообщенияДляЧтения()
	idКрайнегоСообщения = 0;
	П = Новый Структура();
	П.Вставить("topic", "chat");
	П.Вставить("limit", 1);
	Результат = desp_УдаленныйВызовПроцедур.ВызватьМетод("brake_pull_messages", П);
	Если Результат<>Неопределено Тогда
		Для Каждого ЭлементРезультата Из Результат Цикл
			idКрайнегоСообщения = ЭлементРезультата.id;
		КонецЦикла;
	КонецЕсли;
	idКрайнегоСообщения = Макс(1, idКрайнегоСообщения-10);
КонецПроцедуры

Далее, код процедуры вычитывания и отображения новых сообщений, за один раз не более 50 штук:

&НаКлиенте
Процедура ПрочитатьНовыеСообщения()
	Перем НоваяСтрокаТаблицы;
	П = Новый Структура();
	П.Вставить("topic", "chat");
	П.Вставить("off", idКрайнегоСообщения);
	П.Вставить("limit", 50);
	Результат = desp_УдаленныйВызовПроцедур.ВызватьМетод("brake_pull_messages", П);
	Если Результат<>Неопределено Тогда
		Для Каждого ЭлементРезультата Из Результат Цикл
			Попытка
				ЧтениеJSON = Новый ЧтениеJSON();
				ЧтениеJSON.УстановитьСтроку(ЭлементРезультата.payload);
				РезультатВыполнения = ПрочитатьJSON(ЧтениеJSON);
				Если Переписка.Количество()>50 Тогда
					Переписка.Удалить(0);
				КонецЕсли;
				НоваяСтрокаТаблицы = Переписка.Добавить();
				НоваяСтрокаТаблицы.Автор = РезультатВыполнения.user;
				НоваяСтрокаТаблицы.Сообщение = РезультатВыполнения.message;
				НоваяСтрокаТаблицы.МоеСообщение = Истина;
			Исключение
			КонецПопытки;
			idКрайнегоСообщения = ЭлементРезультата.id + 1;
		КонецЦикла;
		Элементы.Переписка.ТекущаяСтрока = Переписка.Индекс(НоваяСтрокаТаблицы);
	КонецЕсли;
КонецПроцедуры

И в заключении, код процедуры отправки новых сообщений:

&НаКлиенте
Процедура КомандаОтправить(Команда)
	СтруктураСДанными = Новый Структура();
	СтруктураСДанными.Вставить("user", МоеИмя);
	СтруктураСДанными.Вставить("message", Сообщение);
	ЗаписьJSON = Новый ЗаписьJSON();
	ЗаписьJSON.УстановитьСтроку();
	ЗаписатьJSON(ЗаписьJSON, СтруктураСДанными);
	Сообщения = Новый Массив();
	Сообщения.Добавить(ЗаписьJSON.Закрыть());
	П = Новый Структура();
	П.Вставить("topic", "chat");
	П.Вставить("messages", Сообщения);
	desp_УдаленныйВызовПроцедур.ВызватьМетод("brake_push_messages", П);	
	Сообщение = "";
КонецПроцедуры

В данном примере взаимодействие с сервисом происходит исключительно синхронно, поэтому, такие моменты, как медленное соединение с "сервисом" и/или большой объем сообщений могут "замораживать" интерфейс, а его сетевая недоступность останавливает интерфейс Предприятия и сообщает об ошибке...

(Скорей всего хорошим решением для получения и отправки сообщений чата было бы не прямое (рилтайм) взаимодействие с методами сервера - brake, но взаимодействие с ними со стороны сервера 1C, в фоновых заданиях, и DESP это предусматривает! Однако, в данной статье рассмотрен не будет).

Как видите, технически всё достаточно просто. Из "необычного" в коде нужно обратить внимание на вызовы функции вида "desp_УдаленныйВызовПроцедур.ВызватьМетод()", - это обертка для обращения к сервису, где первый параметр, это имя вызываемого метода, второй, - именованные параметры, передаваемые для вызываемого метода. Т.е. все обращения к сервису осуществляются исключительно через эту функцию, и соответственно по стандарту (JSON-RPC 2.0), что дает возможность использовать сервис из кода других ЯП, скриптов.

 

Ответы на некоторые вопросы:

- Зачем оно мне, если у нас есть работающий "1С:Сервер взаимодействия" / Kafka / RabbitMQ?

- Тогда незачем.

 

- Сообщения сжимаются/шифруются?

- Передача и получение сообщений происходит по https. Сообщение на дисках сервера brake "лежат" в незашифрованном виде.

 

- Что такое DESP, а что такое brake?

- DESP - комплексное решение, состоящие из ядра (brake) + расширений для платформы 1С. brake - сервис, написанный на Go, реализующий функции, требующие максимальной производительности, потребляя минимальное количество ресурсов, там же располагаются данные очередей, JS-скрипты, конфигурационный файл сервиса.

 

- На что больше похож DESP в части работы с очередями?

- Идеология работы с очередями была подсмотрена у Kafka.

 

- Данные реплицируются с целью повышения доступности и/или увеличения производительности?

- Не реализовано на данный момент.

 

- Будет работать только через "Облако"?

- Для реальных проектов предполагается развертывание сервера в локальной сети.

 

- Можно ли программно создавать новые очереди?

- Нет, очереди задаются в конфигурационном файле сервиса, вместе с параметрами ротации (удаления устаревших данных), правами доступа и т.д.

 

- Нужно ли публиковать базу в web, чтобы она могла взаимодействовать с платформой?

- Нет, это не требуется. Всё взаимодействие происходит через запросы к платформе, никаких webhook не предусмотрено и не планируется.

очередь сообщений JSON-RPC RPC обмен данными

См. также

SALE! 10%

Перенос данных из УПП 1.3 в ERP 2 / УТ 11 / КА 2

Обмен между базами 1C Платформа 1С v8.3 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Обработка позволяет перенести из УПП в ERP / 1С:УТ 11 / КА 2 всю возможную информацию. Переносятся документы, а также начальные остатки и справочная информация.

50722 45650 руб.

04.08.2015    158596    303    266    

344

[ED3] Обмен для ERP 2.5, КА 2.5, УТ 11.5 БП 3.0, Розница, УНФ и других с EnterpriseData (универсальный формат обмена), правила обмена

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Правила в универсальном формате обмена для ERP 2.5, КА 2.5, УТ 11.5, БП 3.0, Розница, УНФ, для последних версий конфигураций. Ссылки на другие конфигурации в описании публикации. Правила совместимы со всеми другими версиями конфигураций новыми и старыми, поддерживающими обмен в формате EnterpriseData. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

25080 руб.

12.06.2017    133788    715    291    

385

SALE! 10%

Перенос данных из ERP 2 / КА 2 / УТ 11 в БП 3.0

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос позволяет настроить собственный обмен данными между указанными программами, альтернативный предлагаемому фирмой 1С. Перенос данных осуществляется из 1С:ERP 2 / 1С:КА 2 / 1С:УТ 11 в 1С:БП 3.0. Правила обмена оперативно обновляются при выходе новых релизов программы 1С, так что вы всегда будете иметь самую актуальную версию обработки.

38500 34650 руб.

15.04.2019    67946    175    136    

107

SALE! 10%

Перенос данных из ERP 2 / КА 2 в ЗУП 3

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Управленческий учет Платные (руб)

Обработка позволяет не только перенести все документы, справочную информацию и начальные остатки из ERP 2 или КА 2 в ЗУП 3, но и организовать регулярный перенос данных между программами 1С:ERP 2 / КА 2 и 1С:ЗУП 3. Вы можете выбрать период отбора данных и установить фильтр по организациям, чтобы выгружать только необходимую информацию. Более того, перенос оперативно обновляется при выходе новых релизов программы 1С, так что вы всегда будете иметь самую актуальную версию обработки.

48278 43450 руб.

03.12.2020    33865    79    57    

77

Перенос данных из УПП 1.3 в БП 3.0. Переносятся документы (обороты за период), справочная информация и остатки

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.223.x) и БП 3.0 (3.0.149.x). Правила подходят для версии ПРОФ и КОРП.

28000 руб.

15.12.2021    19851    130    38    

88

SALE! 10%

Перенос данных из БП 3.0 в УТ 11 / КА 2 / ERP 2

Обмен между базами 1C Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Переносятся документы за выбранный период, нормативно-справочная информация и остатки по счетам бухгалтерского учета из программы "1С:БП 3.0" в "1С:УТ 11" или "1С:КА. 2" или "1С:ERP Управление предприятием, ред. 2".

50722 45650 руб.

31.10.2014    230529    122    326    

294

Перенос данных из Камин 3.0, 4.0, 5.0 в ЗУП 3.х

Обмен между базами 1C Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет НДФЛ ФОМС, ЕФС Платные (руб)

Обработки для быстрого перехода с конфигураций «КАМИН:Расчет заработной платы 3.0», «КАМИН:Зарплата для бизнеса 4.0» и «КАМИН:Зарплата 5.0» на конфигурацию «Зарплата и управление персоналом» версии 3.1.

12000 руб.

25.09.2016    77072    274    247    

240

Перенос данных из УТ 10.3 в УТ 11.5. Переносятся документы (обороты за период), справочная информация и остатки

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 10 1С:Управление торговлей 11 Россия Управленческий учет Платные (руб)

Перенос данных из 1С:Управление торговлей 10.3 в 1С:Управление торговлей 11.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УТ 10.3 (10.3.87.x) и УТ 11.5 (11.5.16.x).

28000 руб.

23.07.2020    45592    193    64    

151
Оставьте свое сообщение