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

12.07.22

Интеграция - Перенос данных 1C

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
dt-файл Демо-база - групповой чат
.dt 338,17Kb ver:1.0
0
0 Скачать (1 SM) Купить за 1 850 руб.

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

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

Перенос документов, начальных остатков и справочной информации из УПП 1.3 в ERP 2 | из УПП 1.3 в УТ 11 | из УПП в КА 2 | Правила конвертации (КД 2) | Более 360 предприятий выполнили переход с использованием этого продукта! | Сэкономьте время - используйте готовое решение для перехода! | Позволяет перенести из УПП 1.3 в ERP / УТ 11 / КА 2 всю возможную информацию | В переносе есть фильтр по организации и множество других опциональных параметров выгрузки | Есть несколько алгоритмов выгрузки остатков на выбор

55778 50200 руб.

04.08.2015    167247    339    278    

376

SALE! 15%

Перенос данных 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. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

26280 руб.

12.06.2017    142229    802    297    

423

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

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

35000 руб.

15.12.2021    24354    172    51    

131

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

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

35000 руб.

23.07.2020    51941    229    72    

187

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

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

12000 руб.

25.09.2016    81021    315    250    

268

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

Регулярный обмен, выгрузка, перенос из КА 1.1, УПП 1.3, УТ 10.3 для обмена с любыми конфигурациями, поддерживающими обмен в формате EnterpriseData (КД3) - БП 3.0, ERP, КА 2, УТ 11, Розница 2, УНФ 1.6 и другими. Правила для старых и доработанных конфигураций не требуют синхронного обновления и совместимы с новыми и будущими конфигурациями. Обмен по расписанию, через папку, FTP, почту.

15300 руб.

18.02.2016    187194    591    512    

529

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

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 10 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

60000 руб.

05.10.2022    10941    13    8    

15

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

Интеграция мессенджера WhatsApp и 1С: УНФ, УТ, КА, ERP - отправка и получение сообщений, картинок, файлов и видео прямо в 1С. Расширение работает с сервисом GreenApi.

15600 руб.

23.06.2023    9933    62    13    

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