Обмен данными между базами 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С:Управление производственным предприятием Россия Платные (руб)

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

50722 45650 руб.

04.08.2015    155921    289    263    

331

SALE! 10%

Перенос данных из УПП 1.3 / КА 1.1 в БП 3.0

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

Предлагаем перенос данных из УПП 1.3 в БП 3.0 (или из КА 1.1 в БП 3.0). Переносятся документы, начальные остатки и вся справочная информация. Есть фильтр по организации и множество других параметров выгрузки. Поддерживается несколько сценариев работы: как первичный полный перенос, так и перенос только новых документов. Перенос данных возможен в 1С: Бухгалтерию 3.0 версии ПРОФ, КОРП или базовую. Переход с "1С: Управление производственным предприятием 1.3" / "1С:Комплексная автоматизация 1.1" на "1С:Бухгалтерия предприятия 3.0" с помощью наших правил конвертации будет максимально комфортным! Обработка входит в ТОП продаж Инфостарта!

43889 39500 руб.

25.02.2015    166986    282    236    

367

SALE! 15%

[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    131754    687    290    

379

SALE! 10%

Перенос данных из УПП 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.215.x) и БП 3.0 (3.0.144.x). Правила подходят для версии ПРОФ и КОРП.

28000 25200 руб.

15.12.2021    18252    114    36    

69

SALE! 10%

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

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

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

48278 43450 руб.

03.12.2020    32716    68    56    

70

SALE! 10%

Перенос данных из УТ 10.3 в УТ 11 / КА 2 / ERP 2 (ЕРП 2)

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

Предлагаем вам качественное и проверенное временем решение для перехода с УТ 10.3 на УТ 11 / КА 2 / ERP 2. Перенос данных находится в продаже с 2015 года, постоянно развивается, им воспользовались уже более 240 компаний. Можно перенести начальные остатки, нормативно-справочную информацию и все возможные документы. При выгрузке можно установить отбор по периоду, организациям и складам. При выходе новых релизов конфигураций 1C оперативно выпускаем обновление переноса данных.

50722 45650 руб.

24.04.2015    188254    264    235    

267

SALE! 10%

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

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

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

38500 34650 руб.

15.04.2019    66156    164    131    

97

SALE! 10%

Перенос данных из УТ 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.85.x) и УТ 11.5 (11.5.15.x).

28000 25200 руб.

23.07.2020    43345    188    63    

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