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

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

46083 41475 руб.

04.08.2015    153766    272    258    

315

SALE! 10%

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

22320 руб.

12.06.2017    129858    667    289    

368

SALE! 10%

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

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

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

43889 39500 руб.

25.02.2015    165770    366    232    

354

SALE! 10%

Перенос данных из ERP 2 (ЕРП) / КА 2 в ЗУП 3 [КД 2]

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

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

43889 39500 руб.

03.12.2020    31787    64    54    

66

[ED2] Обмен УПП 1.3, КА 1.1, УТ 10.3 с EnterpriseData (универсальный формат обмена), обработка

Обмен между базами 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, почту.

12600 руб.

18.02.2016    178157    539    507    

497

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

25000 руб.

15.12.2021    17063    101    36    

53

SALE! 10%

Перенос данных из БП 3.0 в УНФ 3.0 / УНФ 1.6

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

Обработка позволяет начать вести учет в программе "1С:Управление нашей фирмой" редакции 3.0 или 1.6, то есть перенести в нее из существующей базы "1С:Бухгалтерия предприятия, ред. 3.0" начальные остатки на выбранную дату, документы за период времени и также всю необходимую справочную информацию. По вашему запросу мы можем бесплатно добавить в правила переноса дополнительные виды объектов (например, новые виды документов). Обработка по переходу на новую программу 1С включает в себя правила конвертации в формате XML, обработку для выгрузки и загрузки данных, а также инструкцию по работе. В стоимость переноса включена техподдержка в течение месяца с момента покупки, а также получение обновлений переноса в течение 4 месяцев.

43889 39500 руб.

10.07.2018    64411    33    112    

40

Конструктор ботов Телеграм, редакция 2

Мессенджеры и боты Платформа 1С v8.3 Платные (руб)

Развитие популярного решения для интеграции мессенджера Telegram с нашей любимой 1С.

15000 руб.

18.06.2021    52005    244    241    

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